From cd9c39f225769337af9cd153b4b65b55b9e23252 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 13 Nov 2025 11:22:02 +0100 Subject: [PATCH 01/75] New Crowdin updates (#2989) * New translations properties_backgroundandborder.md (Spanish) * New translations privileges.md (Spanish) * New translations $filter.md (Spanish) * New translations configuration.md (Spanish) * New translations vp-export-document.md (Spanish) * New translations vp-import-document.md (Spanish) * New translations qodly-studio.md (Spanish) * New translations webserver.md (Spanish) * New translations client-server.md (Spanish) * New translations web.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations labels.md (Spanish) * New translations select-log-file.md (Spanish) * New translations wa-get-context.md (Spanish) * New translations openaichatapi.md (Spanish) * New translations openaichatcompletionsapi.md (Spanish) * New translations openaichatcompletionsmessagesapi.md (Spanish) * New translations openaierror.md (Spanish) * New translations openaiimage.md (Spanish) * New translations openaimessage.md (Spanish) * New translations openaiparameters.md (Spanish) * New translations openairesult.md (Spanish) * New translations call-chain.md (Spanish) * New translations command-name.md (Spanish) * New translations listbox-get-property.md (Spanish) * New translations listbox-set-property.md (Spanish) * New translations orda-events.md (Spanish) * New translations field-properties.md (Spanish) * New translations openaiembeddingsapi.md (Spanish) * New translations collectionclass.md (Spanish) * New translations cryptokeyclass.md (Spanish) * New translations imaptransporterclass.md (Spanish) * New translations cli.md (Spanish) * New translations labels.md (Spanish) * New translations field-properties.md (Spanish) * New translations overview.md (Spanish) * New translations formeditor.md (Spanish) * New translations properties_markers.md (Spanish) * New translations button_overview.md (Spanish) * New translations listbox_overview.md (Spanish) * New translations properties_backgroundandborder.md (Spanish) * New translations properties_object.md (Spanish) * New translations entities.md (Spanish) * New translations vp-export-document.md (Spanish) * New translations vp-find.md (Spanish) * New translations vp-import-document.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations http-request-handler.md (Spanish) * New translations qodly-studio.md (Spanish) * New translations wp-export-document.md (Spanish) * New translations wp-export-variable.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations openaichatcompletionsapi.md (Spanish) * New translations openaichatcompletionsmessagesapi.md (Spanish) * New translations openaiembeddingsapi.md (Spanish) * New translations openaierror.md (Spanish) * New translations openaiimage.md (Spanish) * New translations openaimessage.md (Spanish) * New translations openaiparameters.md (Spanish) * New translations openairesult.md (Spanish) * New translations compatible-openai.md (Spanish) * New translations call-chain.md (Spanish) * New translations command-name.md (Spanish) * New translations form.md (Spanish) * New translations listbox-get-property.md (Spanish) * New translations listbox-set-property.md (Spanish) * New translations new-log-file.md (Spanish) * New translations select-log-file.md (Spanish) * New translations wa-get-context.md (Spanish) * New translations http-rules.md (Spanish) * New translations collectionclass.md (Spanish) * New translations cryptokeyclass.md (Spanish) * New translations entityclass.md (Spanish) * New translations imaptransporterclass.md (Spanish) * New translations sessionclass.md (Spanish) * New translations webserverclass.md (Spanish) * New translations cli.md (Spanish) * New translations debuglogfiles.md (Spanish) * New translations clientserver.md (Spanish) * New translations labels.md (Spanish) * New translations field-properties.md (Spanish) * New translations overview.md (Spanish) * New translations formeditor.md (Spanish) * New translations properties_markers.md (Spanish) * New translations button_overview.md (Spanish) * New translations listbox_overview.md (Spanish) * New translations properties_backgroundandborder.md (Spanish) * New translations properties_object.md (Spanish) * New translations call-chain.md (Spanish) * New translations command-name.md (Spanish) * New translations form.md (Spanish) * New translations listbox-get-property.md (Spanish) * New translations listbox-set-property.md (Spanish) * New translations new-log-file.md (Spanish) * New translations select-log-file.md (Spanish) * New translations wa-get-context.md (Spanish) * New translations client-server.md (Spanish) * New translations web.md (Spanish) * New translations updates.md (Spanish) * New translations entities.md (Spanish) * New translations orda-events.md (Spanish) * New translations privileges.md (Spanish) * New translations $filter.md (Spanish) * New translations vp-export-document.md (Spanish) * New translations vp-find.md (Spanish) * New translations vp-import-document.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations getting-started.md (Spanish) * New translations http-rules.md (Spanish) * New translations qodly-studio.md (Spanish) * New translations webserver.md (Spanish) * New translations wp-export-document.md (Spanish) * New translations wp-export-variable.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations openaichatapi.md (Spanish) * New translations openaichatcompletionsapi.md (Spanish) * New translations openaichatcompletionsmessagesapi.md (Spanish) * New translations openaiembeddingsapi.md (Spanish) * New translations openaierror.md (Spanish) * New translations openaiimage.md (Spanish) * New translations openaimessage.md (Spanish) * New translations openaiparameters.md (Spanish) * New translations openairesult.md (Spanish) * New translations compatible-openai.md (Spanish) * New translations updates.md (Japanese) * New translations systemworkerclass.md (Japanese) * New translations privileges.md (Japanese) * New translations configuration.md (Japanese) * New translations systemworkerclass.md (Japanese) * New translations privileges.md (Japanese) * New translations systemworkerclass.md (Japanese) * New translations updates.md (Japanese) * New translations privileges.md (Japanese) * New translations updates.md (Portuguese, Brazilian) * New translations privileges.md (Portuguese, Brazilian) * New translations configuration.md (Portuguese, Brazilian) * New translations updates.md (Portuguese, Brazilian) * New translations privileges.md (Portuguese, Brazilian) * New translations collectionclass.md (Spanish) * New translations collectionclass.md (Spanish) * New translations entityclass.md (Spanish) * New translations sessionclass.md (Spanish) * New translations webserverclass.md (Spanish) * New translations clientserver.md (Spanish) * New translations formeditor.md (Spanish) * New translations properties_display.md (Spanish) * New translations privileges.md (Spanish) * New translations compiler.md (Spanish) * New translations vp-export-document.md (Spanish) * New translations getting-started.md (Spanish) * New translations authentication.md (Spanish) * New translations preemptiveweb.md (Spanish) * New translations sessions.md (Spanish) * New translations write-class-method.md (Spanish) * New translations client-server.md (Spanish) * New translations $singleton.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations select-log-file.md (Spanish) * New translations new-log-file.md (Spanish) * New translations openai.md (Spanish) * New translations openaichatcompletionslistparameters.md (Spanish) * New translations openaimessage.md (Spanish) * New translations openaimoderation.md (Spanish) * New translations openaimoderationresult.md (Spanish) * New translations openairesult.md (Spanish) * New translations compatible-openai.md (Spanish) * New translations call-chain.md (Spanish) * New translations command-name.md (Spanish) * New translations listbox-set-property.md (Spanish) * New translations orda-events.md (Spanish) * New translations create-deployment-license.md (Spanish) * New translations field-properties.md (Spanish) * New translations cryptokeyclass.md (Spanish) * New translations entityclass.md (Spanish) * New translations debuglogfiles.md (Spanish) * New translations field-properties.md (Spanish) * New translations overview.md (Spanish) * New translations formeditor.md (Spanish) * New translations properties_display.md (Spanish) * New translations orda-events.md (Spanish) * New translations compiler.md (Spanish) * New translations $singleton.md (Spanish) * New translations vp-copy-to-object.md (Spanish) * New translations vp-export-document.md (Spanish) * New translations vp-import-document.md (Spanish) * New translations vp-move-cells.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations authentication.md (Spanish) * New translations sessions.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations wp-reset-attributes.md (Spanish) * New translations openai.md (Spanish) * New translations openaichatcompletionslistparameters.md (Spanish) * New translations openaimoderation.md (Spanish) * New translations openaimoderationresult.md (Spanish) * New translations openairesult.md (Spanish) * New translations write-class-method.md (Spanish) * New translations call-chain.md (Spanish) * New translations command-name.md (Spanish) * New translations create-deployment-license.md (Spanish) * New translations listbox-set-property.md (Spanish) * New translations new-log-file.md (Spanish) * New translations select-log-file.md (Spanish) * New translations trim.md (Spanish) * New translations string.md (Spanish) * New translations http-rules.md (Spanish) * New translations cryptokeyclass.md (Spanish) * New translations entityclass.md (Spanish) * New translations sessionclass.md (Spanish) * New translations webserverclass.md (Spanish) * New translations debuglogfiles.md (Spanish) * New translations field-properties.md (Spanish) * New translations formeditor.md (Spanish) * New translations properties_display.md (Spanish) * New translations write-class-method.md (Spanish) * New translations call-chain.md (Spanish) * New translations command-name.md (Spanish) * New translations create-deployment-license.md (Spanish) * New translations listbox-set-property.md (Spanish) * New translations new-log-file.md (Spanish) * New translations select-log-file.md (Spanish) * New translations string.md (Spanish) * New translations trim.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations orda-events.md (Spanish) * New translations privileges.md (Spanish) * New translations compiler.md (Spanish) * New translations $singleton.md (Spanish) * New translations vp-copy-to-object.md (Spanish) * New translations vp-export-document.md (Spanish) * New translations vp-move-cells.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations getting-started.md (Spanish) * New translations authentication.md (Spanish) * New translations http-rules.md (Spanish) * New translations preemptiveweb.md (Spanish) * New translations sessions.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations wp-reset-attributes.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations openai.md (Spanish) * New translations openaichatcompletionslistparameters.md (Spanish) * New translations openaimessage.md (Spanish) * New translations openaimoderation.md (Spanish) * New translations openaimoderationresult.md (Spanish) * New translations openairesult.md (Spanish) --- .../current/API/CollectionClass.md | 2 +- .../current/API/EntityClass.md | 46 +-- .../current/API/SessionClass.md | 4 +- .../current/API/WebServerClass.md | 4 +- .../current/Desktop/clientServer.md | 2 +- .../current/Desktop/labels.md | 44 +-- .../current/Develop/field-properties.md | 4 +- .../current/Extensions/overview.md | 24 +- .../current/FormEditor/formEditor.md | 4 +- .../current/FormObjects/listbox_overview.md | 2 +- .../properties_BackgroundAndBorder.md | 2 +- .../current/FormObjects/properties_Display.md | 2 +- .../current/FormObjects/webArea_overview.md | 2 +- .../current/ORDA/orda-events.md | 42 +- .../current/ORDA/privileges.md | 352 ++++++++--------- .../current/Project/compiler.md | 2 +- .../current/REST/$filter.md | 4 +- .../current/REST/$singleton.md | 2 +- .../current/REST/configuration.md | 6 +- .../ViewPro/commands/vp-export-document.md | 8 +- .../ViewPro/commands/vp-import-document.md | 2 +- .../current/ViewPro/getting-started.md | 4 +- .../current/WebServer/authentication.md | 2 +- .../current/WebServer/http-rules.md | 4 +- .../current/WebServer/preemptiveWeb.md | 2 +- .../current/WebServer/qodly-studio.md | 2 +- .../current/WebServer/sessions.md | 4 +- .../current/WebServer/webServer.md | 2 +- .../WritePro/commands/wp-import-document.md | 22 +- .../current/WritePro/managing-formulas.md | 4 +- .../current/aikit/Classes/OpenAI.md | 4 +- .../current/aikit/Classes/OpenAIChatAPI.md | 8 +- .../aikit/Classes/OpenAIChatCompletionsAPI.md | 4 +- .../OpenAIChatCompletionsListParameters.md | 2 +- .../OpenAIChatCompletionsMessagesAPI.md | 10 +- .../aikit/Classes/OpenAIEmbeddingsAPI.md | 16 +- .../current/aikit/Classes/OpenAIError.md | 2 +- .../current/aikit/Classes/OpenAIImage.md | 16 +- .../current/aikit/Classes/OpenAIMessage.md | 18 +- .../current/aikit/Classes/OpenAIModeration.md | 2 +- .../aikit/Classes/OpenAIModerationResult.md | 2 +- .../current/aikit/Classes/OpenAIParameters.md | 10 +- .../current/aikit/Classes/OpenAIResult.md | 6 +- .../current/aikit/compatible-openai.md | 2 +- .../current/code-editor/write-class-method.md | 2 +- .../current/commands/call-chain.md | 6 +- .../current/commands/command-name.md | 8 +- .../commands/create-deployment-license.md | 2 +- .../current/commands/listbox-get-property.md | 2 +- .../current/commands/listbox-set-property.md | 4 +- .../current/commands/new-log-file.md | 4 +- .../current/commands/select-log-file.md | 6 +- .../current/commands/string.md | 2 +- .../current/commands/trim.md | 2 +- .../current/commands/wa-get-context.md | 2 +- .../current/settings/client-server.md | 4 +- .../current/settings/web.md | 2 +- .../version-19/API/CollectionClass.md | 2 +- .../version-20-R10/API/CollectionClass.md | 2 +- .../version-20-R10/API/CryptoKeyClass.md | 12 +- .../version-20-R10/API/EntityClass.md | 6 +- .../API/IMAPTransporterClass.md | 20 +- .../version-20-R10/Admin/cli.md | 38 +- .../version-20-R10/Debugging/debugLogFiles.md | 2 +- .../version-20-R10/Desktop/labels.md | 42 +- .../Develop/field-properties.md | 4 +- .../version-20-R10/Extensions/overview.md | 4 +- .../version-20-R10/FormEditor/formEditor.md | 10 +- .../FormEditor/properties_Markers.md | 6 +- .../FormObjects/button_overview.md | 2 +- .../FormObjects/listbox_overview.md | 4 +- .../properties_BackgroundAndBorder.md | 2 +- .../FormObjects/properties_Display.md | 2 +- .../FormObjects/properties_Object.md | 6 +- .../version-20-R10/ORDA/entities.md | 2 +- .../version-20-R10/ORDA/orda-events.md | 4 +- .../version-20-R10/Project/compiler.md | 2 +- .../version-20-R10/REST/$singleton.md | 2 +- .../ViewPro/commands/vp-copy-to-object.md | 8 +- .../ViewPro/commands/vp-export-document.md | 8 +- .../ViewPro/commands/vp-find.md | 2 +- .../ViewPro/commands/vp-import-document.md | 54 +-- .../ViewPro/commands/vp-move-cells.md | 8 +- .../commands/vp-set-workbook-options.md | 10 +- .../WebServer/authentication.md | 2 +- .../WebServer/http-request-handler.md | 2 +- .../version-20-R10/WebServer/qodly-studio.md | 2 +- .../version-20-R10/WebServer/sessions.md | 4 +- .../WritePro/commands/wp-export-document.md | 4 +- .../WritePro/commands/wp-export-variable.md | 4 +- .../WritePro/commands/wp-import-document.md | 22 +- .../WritePro/commands/wp-reset-attributes.md | 2 +- .../version-20-R10/aikit/Classes/OpenAI.md | 4 +- .../aikit/Classes/OpenAIChatCompletionsAPI.md | 4 +- .../OpenAIChatCompletionsListParameters.md | 2 +- .../OpenAIChatCompletionsMessagesAPI.md | 10 +- .../aikit/Classes/OpenAIEmbeddingsAPI.md | 16 +- .../aikit/Classes/OpenAIError.md | 2 +- .../aikit/Classes/OpenAIImage.md | 16 +- .../aikit/Classes/OpenAIMessage.md | 2 +- .../aikit/Classes/OpenAIModeration.md | 2 +- .../aikit/Classes/OpenAIModerationResult.md | 2 +- .../aikit/Classes/OpenAIParameters.md | 12 +- .../aikit/Classes/OpenAIResult.md | 6 +- .../version-20-R10/aikit/compatible-openai.md | 2 +- .../code-editor/write-class-method.md | 2 +- .../version-20-R10/commands/call-chain.md | 6 +- .../version-20-R10/commands/command-name.md | 8 +- .../commands/create-deployment-license.md | 2 +- .../version-20-R10/commands/form.md | 2 +- .../commands/listbox-get-property.md | 2 +- .../commands/listbox-set-property.md | 4 +- .../version-20-R10/commands/new-log-file.md | 4 +- .../commands/select-log-file.md | 6 +- .../version-20-R10/commands/wa-get-context.md | 2 +- .../version-20/API/CollectionClass.md | 2 +- .../version-20/Notes/updates.md | 10 +- .../version-20/settings/web.md | 50 +-- .../version-21/API/CollectionClass.md | 2 +- .../version-21/API/CryptoKeyClass.md | 12 +- .../version-21/API/EntityClass.md | 48 +-- .../version-21/API/IMAPTransporterClass.md | 20 +- .../version-21/API/SessionClass.md | 4 +- .../version-21/API/WebServerClass.md | 4 +- .../version-21/Admin/cli.md | 38 +- .../version-21/Debugging/debugLogFiles.md | 2 +- .../version-21/Desktop/clientServer.md | 2 +- .../version-21/Desktop/labels.md | 44 +-- .../version-21/Develop/field-properties.md | 4 +- .../version-21/Extensions/overview.md | 24 +- .../version-21/FormEditor/formEditor.md | 10 +- .../FormEditor/properties_Markers.md | 6 +- .../version-21/FormObjects/button_overview.md | 2 +- .../FormObjects/listbox_overview.md | 4 +- .../properties_BackgroundAndBorder.md | 2 +- .../FormObjects/properties_Display.md | 2 +- .../FormObjects/properties_Object.md | 6 +- .../FormObjects/webArea_overview.md | 2 +- .../version-21/Notes/updates.md | 1 + .../version-21/ORDA/entities.md | 2 +- .../version-21/ORDA/orda-events.md | 42 +- .../version-21/ORDA/privileges.md | 352 ++++++++--------- .../version-21/Project/compiler.md | 2 +- .../version-21/REST/$filter.md | 14 +- .../version-21/REST/$singleton.md | 2 +- .../ViewPro/commands/vp-copy-to-object.md | 8 +- .../ViewPro/commands/vp-export-document.md | 8 +- .../version-21/ViewPro/commands/vp-find.md | 2 +- .../ViewPro/commands/vp-import-document.md | 54 +-- .../ViewPro/commands/vp-move-cells.md | 8 +- .../commands/vp-set-workbook-options.md | 10 +- .../version-21/ViewPro/getting-started.md | 4 +- .../version-21/WebServer/authentication.md | 2 +- .../version-21/WebServer/http-rules.md | 4 +- .../version-21/WebServer/preemptiveWeb.md | 2 +- .../version-21/WebServer/qodly-studio.md | 2 +- .../version-21/WebServer/sessions.md | 4 +- .../version-21/WebServer/webServer.md | 2 +- .../WritePro/commands/wp-export-document.md | 4 +- .../WritePro/commands/wp-export-variable.md | 4 +- .../WritePro/commands/wp-import-document.md | 22 +- .../WritePro/commands/wp-reset-attributes.md | 2 +- .../version-21/WritePro/managing-formulas.md | 4 +- .../version-21/aikit/Classes/OpenAI.md | 4 +- .../version-21/aikit/Classes/OpenAIChatAPI.md | 8 +- .../aikit/Classes/OpenAIChatCompletionsAPI.md | 4 +- .../OpenAIChatCompletionsListParameters.md | 2 +- .../OpenAIChatCompletionsMessagesAPI.md | 10 +- .../aikit/Classes/OpenAIEmbeddingsAPI.md | 16 +- .../version-21/aikit/Classes/OpenAIError.md | 2 +- .../version-21/aikit/Classes/OpenAIImage.md | 16 +- .../version-21/aikit/Classes/OpenAIMessage.md | 20 +- .../aikit/Classes/OpenAIModeration.md | 2 +- .../aikit/Classes/OpenAIModerationResult.md | 2 +- .../aikit/Classes/OpenAIParameters.md | 10 +- .../version-21/aikit/Classes/OpenAIResult.md | 6 +- .../version-21/aikit/compatible-openai.md | 2 +- .../code-editor/write-class-method.md | 2 +- .../version-21/commands/call-chain.md | 6 +- .../version-21/commands/command-name.md | 8 +- .../commands/create-deployment-license.md | 2 +- .../version-21/commands/form.md | 2 +- .../commands/listbox-get-property.md | 2 +- .../commands/listbox-set-property.md | 4 +- .../version-21/commands/new-log-file.md | 4 +- .../version-21/commands/select-log-file.md | 6 +- .../version-21/commands/string.md | 2 +- .../version-21/commands/trim.md | 2 +- .../version-21/commands/wa-get-context.md | 2 +- .../version-21/settings/client-server.md | 4 +- .../version-21/settings/web.md | 2 +- .../current/ORDA/privileges.md | 364 ++++++++---------- .../current/REST/configuration.md | 6 +- .../version-20/Notes/updates.md | 8 + .../version-21/Notes/updates.md | 1 + .../version-21/ORDA/privileges.md | 364 ++++++++---------- .../current/API/SystemWorkerClass.md | 2 +- .../current/ORDA/privileges.md | 364 ++++++++---------- .../current/REST/configuration.md | 4 +- .../version-20-R10/API/SystemWorkerClass.md | 2 +- .../version-20-R10/ORDA/privileges.md | 4 +- .../version-20/Notes/updates.md | 8 + .../version-21/API/SystemWorkerClass.md | 2 +- .../version-21/Notes/updates.md | 1 + .../version-21/ORDA/privileges.md | 364 ++++++++---------- .../current/ORDA/privileges.md | 352 ++++++++--------- .../current/REST/configuration.md | 4 +- .../version-20/Notes/updates.md | 8 + .../version-21/Notes/updates.md | 1 + .../version-21/ORDA/privileges.md | 352 ++++++++--------- 210 files changed, 2027 insertions(+), 2375 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md index 52e214a97ff15e..07743af4897bf7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -3169,7 +3169,7 @@ La función `.sort()` ordena los elemento > Esta función modifica la colección original. Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. -You can also pass one of the following constants in the *ascOrDesc* parameter: +También puede pasar una de las siguientes constantes en el parámetro *ascOrDesc*: ``` |Constant| Type|Value|Comment| diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/EntityClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/EntityClass.md index e3b227f3ed96b9..0e843360644b5d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/EntityClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/EntityClass.md @@ -393,15 +393,15 @@ El objeto devuelto por `.drop()` contiene las siguientes propiedades: (\*) Los siguientes valores pueden ser devueltos en las propiedades *status* y *statusText* del objeto *Result* en caso de error: -| Constante | Valor | Comentario | -| ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). When using entity.drop(), this error can be returned when dk force drop if stamp changed option is used. When using entity.lock(), this error can be returned when dk reload if stamp changed option is used.
  • **Associated statusText**: "Entity does not exist anymore" | -| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista.
    **statusText asociado**: "Already locked" | -| `dk status validation failed` | 7 | Non fatal error sent by the developer for a [validate event](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | -| `dk status serious error` | 4 | Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc.
    **statusText asociado**: "Other error" | -| `dk status serious validation error` | 8 | Fatal error sent by the developer for a [validate event](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | -| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used
  • **Associated statusText**: "Stamp has changed"
  • | -| `dk status wrong permission` | 1 | Los privilegios actuales no permiten suprimir la entidad. **Associated statusText**: "Permission Error" | +| Constante | Valor | Comentario | +| ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza entity.drop(), este error puede ser devuelto cuando se utiliza la opción dk force drop if stamp changed. When using entity.lock(), this error can be returned when dk reload if stamp changed option is used.
  • **Associated statusText**: "Entity does not exist anymore" | +| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista.
    **statusText asociado**: "Already locked" | +| `dk status validation failed` | 7 | Error no crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | +| `dk status serious error` | 4 | Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc.
    **statusText asociado**: "Other error" | +| `dk status serious validation error` | 8 | Error crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | +| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used
  • **Associated statusText**: "Stamp has changed"
  • | +| `dk status wrong permission` | 1 | Los privilegios actuales no permiten suprimir la entidad. **Associated statusText**: "Permission Error" | #### Ejemplo 1 @@ -1182,10 +1182,10 @@ El objeto devuelto por `.reload( )` contiene las siguientes propiedades: (\*) Los siguientes valores pueden ser devueltos en las propiedades *status* y *statusText* del objeto *Result* en caso de error: -| Constante | Valor | Comentario | -| ----------------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). When using `.drop()`, this error can be returned when `dk force drop if stamp changed` option is used. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | -| `dk status serious error` | 4 | Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc.
    ***statusText asociado***: "Other error" | +| Constante | Valor | Comentario | +| ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza `.drop()`, este error puede devolverse cuando se utiliza la opción `dk force drop if stamp changed`. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | +| `dk status serious error` | 4 | Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc.
    ***statusText asociado***: "Other error" | #### Ejemplo @@ -1277,16 +1277,16 @@ El objeto devuelto por `.save()` contiene las siguientes propiedades: Los siguientes valores pueden ser devueltos en las propiedades `status`y `statusText` del objeto Result en caso de error: -| Constante | Valor | Comentario | -| ----------------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status automerge failed` | 6 | (Only if the `dk auto merge` option is used) The automatic merge option failed when saving the entity. **statusText asociado**: "Fallo de la fusión automática" | -| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). When using `.drop()`, this error can be returned when `dk force drop if stamp changed` option is used. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | -| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista. **statusText asociado**: "Already locked" | -| `dk status validation failed` | 7 | Non fatal error sent by the developer for a [validate event](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | -| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc. **Associated statusText**: "Other error" | -| `dk status serious validation error` | 8 | Fatal error sent by the developer for a [validate event](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | -| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | -| `dk status wrong permission` | 1 | Los privilegios actuales no permiten guardar la entidad. **Associated statusText**: "Permission Error" | +| Constante | Valor | Comentario | +| ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `dk status automerge failed` | 6 | (Solo si se utiliza la opción `dk auto merge`) La opción de fusión automática falló al guardar la entidad. **statusText asociado**: "Fallo de la fusión automática" | +| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza `.drop()`, este error puede devolverse cuando se utiliza la opción `dk force drop if stamp changed`. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | +| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista. **statusText asociado**: "Already locked" | +| `dk status validation failed` | 7 | Error no crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | +| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc. **Associated statusText**: "Other error" | +| `dk status serious validation error` | 8 | Error crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | +| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | +| `dk status wrong permission` | 1 | Los privilegios actuales no permiten guardar la entidad. **Associated statusText**: "Permission Error" | #### Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/SessionClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/SessionClass.md index 79acc673f1076b..62d92bb7204c90 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/SessionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/SessionClass.md @@ -390,7 +390,7 @@ Esta función devuelve True para el *privilegio* si se llama desde una función Regarding remote client sessions, the function only concerns the code executed in the context of a [web request sent through a Web area](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). -With stored procedure sessions and standalone sessions, this function always returns True, whatever the *privilege*. +Con las sesiones de procedimiento almacenadas y las sesiones independientes, esta función siempre devuelve True, sea cual sea el *privilegio*. #### Ejemplo @@ -753,7 +753,7 @@ Function callback($request : 4D.IncomingMessage) : 4D.OutgoingMessage :::note -This function does nothing and always returns **False** with stored procedure sessions and standalone sessions. +Esta función no hace nada y siempre devuelve **False** con sesiones de procedimientos almacenadas y las sesiones independientes. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md index 6fed6a0c01983c..9b27f3d5414da9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md @@ -187,7 +187,7 @@ El nombre de la página de i *Propiedad de sólo lectura* -A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Request handler](../WebServer/http-request-handler.md) page. +A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. Para más información, consulte la página [HTTP Request handler](../WebServer/http-request-handler.md). @@ -495,7 +495,7 @@ La ruta de la carpeta raíz del s *Propiedad de sólo lectura* -A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Rules](../WebServer/http-rules.md) page. +A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. Para obtener más información, consulte la página [Reglas HTTP](../WebServer/http-rules.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Desktop/clientServer.md b/i18n/es/docusaurus-plugin-content-docs/current/Desktop/clientServer.md index 3f471cae307fa5..fa5d056395d3c4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Desktop/clientServer.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Desktop/clientServer.md @@ -126,7 +126,7 @@ Para gestionar esta configuración, necesita utilizar sesiones cliente remotas. Note that [privileges](../ORDA/privileges.md) should be set in the session before executing a web request from a Web area, so that the user automatically gets their privileges for web access (see example). Keep in mind that privileges only apply to requests coming from the web, not to the 4D code executed in a standard remote session. -Shared sessions are handled through [OTP tokens](../WebServer/sessions.md#session-token-otp). After you created an OTP token on the server for the user session, you add the token (through the `$4DSID` parameter value) to web requests sent from web areas containing Qodly pages so that the user session on the server is identified and shared. On the web server side, if a web request contains an *OTP id* in the $4DSID parameter, the session corresponding to this OTP token is used. +Las sesiones compartidas se gestionan a través de [tokens OTP](../WebServer/sessions.md#session-token-otp). After you created an OTP token on the server for the user session, you add the token (through the `$4DSID` parameter value) to web requests sent from web areas containing Qodly pages so that the user session on the server is identified and shared. On the web server side, if a web request contains an *OTP id* in the $4DSID parameter, the session corresponding to this OTP token is used. :::tip Entrada de blog relacionada diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Desktop/labels.md b/i18n/es/docusaurus-plugin-content-docs/current/Desktop/labels.md index e1a5817b9f5bc7..aa663b94431609 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Desktop/labels.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Desktop/labels.md @@ -127,22 +127,22 @@ El lado derecho de la barra de herramientas contiene comandos utilizados para mo ## Página Diseño -The Layout page contains controls for printing labels based on the requirements of your current print settings. +Esta página contiene los controles para imprimir etiquetas en función de los requisitos de sus parámetros de impresión actuales. ![](../assets/en/Desktop/label-layout.png) -- **Labels Order**: Specifies whether labels should be printed in the direction of the rows or the columns. -- **Rows** and **Columns**: Set the number of labels to be printed by "row" and by "column" on each sheet. These settings determine the label size when the "Automatic resizing" option is enabled. -- **Labels per record**: Sets the number of copies to print for each label (copies are printed consecutively). -- **Print Setup...**: Sets the format of the page on which the sheet of labels will be printed. When you click this button, the setup dialog box for the printer selected in your system appears. By default, the sheet of labels is generated based on an A4 page in portrait mode. - **Note:** The sheet created by the editor is based on the logical page of the printer, i.e. the physical page (for instance, an A4 page) less the margins that cannot be used on each side of the sheet. The physical margins of the page are shown by blue lines in the preview area. -- **Unit**: Changes the units in which you specify your label and label page measurements. Puede utilizar puntos, milímetros, centímetros o pulgadas. -- **Automatic resizing**: Means that 4D automatically calculates the size of the labels (i.e. the Width and Height parameters) according to the values set in all the other parameters. When this option is checked, the label size is adjusted each time you modify a page parameter. Los parámetros Ancho y Alto ya no pueden ajustarse manualmente. -- **Ancho** y **Alto**: define la altura y el ancho de cada etiqueta manualmente. They cannot be edited when the **Automatic resizing** option is checked. -- **Márgenes** (Superior, Derecho, Izquierdo, Inferior): define los márgenes de su hoja. Estos márgenes son simbolizados por líneas azules en el área de vista previa. Clicking on **Use printer margins** replicates, in the preview area, the margin information provided by the selected printer (these values can be modified). -- **Gaps**: Set the amount of vertical and/or horizontal space between label rows and columns. -- **Method**: Lets you trigger a specific method that will be run at print time. For example, you can execute a method that posts the date and time that each label was printed. This feature is also useful when you print labels using a dedicated table form, in which case you can fill variables from a method. - To be eligible for label processing, a project method must comply with the following settings: +- **Orden de etiquetas**: indica si las etiquetas deben imprimirse en la dirección de las líneas o de las columnas. +- **Líneas** y **Columnas**: defina el número de etiquetas a imprimir por "línea" y "columna" en cada hoja. Estos parámetros determinan las dimensiones de las etiquetas cuando la opción "Dimensiones automáticas" está activada. +- **Etiquetas por registro**: define el número de copias a imprimir para cada etiqueta (las copias se imprimen consecutivamente). +- **Formato de impresión...**: formato de la página en la que se imprimirá la hoja de etiquetas. Cuando hace clic en este botón, aparece el cuadro de diálogo de configuración de la impresora seleccionada en su sistema. Por defecto, la hoja de etiquetas se genera basándose en una página A4 en modo retrato. + **Nota:** la hoja creada por el editor se basa en la página lógica de la impresora, es decir, la página física (por ejemplo, una hoja A4) menos los márgenes que no se pueden utilizar a cada lado de la hoja. Los márgenes de la página física se representan por las líneas azules en el área de vista previa. +- **Unidad**: modifica las unidades en las que especifica las medidas de la etiqueta y de la página de etiqueta. Puede utilizar puntos, milímetros, centímetros o pulgadas. +- **Dimensiones automáticas**: indica que 4D calcula automáticamente el tamaño de las etiquetas (es decir, los parámetros Ancho y Alto) según los valores definidos en todos los demás parámetros. Cuando esta opción está marcada, el tamaño de las etiquetas se recalcula cada vez que se modifica un parámetro en la página. Los parámetros Ancho y Alto ya no pueden ajustarse manualmente. +- **Ancho** y **Alto**: define la altura y el ancho de cada etiqueta manualmente. No se pueden editar cuando la opción **Dimensionamiento automático** está marcada. +- **Márgenes** (Superior, Derecho, Izquierdo, Inferior): define los márgenes de su hoja. Estos márgenes son simbolizados por líneas azules en el área de vista previa. Al hacer clic en **Aplicar los márgenes de la impresora** con el fin de replicar, en el área de vista previa, la información de margen proporcionada por la impresora seleccionada (estos valores pueden ser modificados). +- **Intervalos**: defina el espacio vertical y/o horizontal entre las líneas y columnas de las etiquetas. +- **Método**: permite activar un método específico que se ejecutará al momento de la impresión. Por ejemplo, puede ejecutar un método que publique la fecha y la hora en que se imprimió cada etiqueta. Esta funcionalidad también es útil cuando se imprimen etiquetas usando un formulario tabla dedicado, en cuyo caso se pueden llenar variables a partir de un método. + Para ser elegible para el procesamiento de etiquetas, un método proyecto debe cumplir con las siguientes condiciones: - debe ser "permitido" para la base de datos (los métodos permitidos dependen de los [parámetros del proyecto](../settings/security.md#options) y el comando [`SET ALLOWED METHODS`](../commands/set-allowed-methods.md), de lo contrario no se mostrará en el menú **Aplicación**. - debe tener la opción [Compartido por componentes y base de datos local](../Project/code-overview.md#shared-by-components-and-host-database). Ver también [este ejemplo](#printing-labels-using-forms-and-methods-example) a continuación. @@ -150,20 +150,20 @@ The Layout page contains controls for printing labels based on the requirements :::note Para necesidades avanzadas, puede restringir la lista de métodos disponibles utilizando un [archivo json específico](#controlling-available-forms-and-methods). -The **For each: Record or Label** options are used to specify whether to run the method once per label or once per record. This control has meaning only if you are printing more than one copy of each label and you are also executing a method at print time. +Las opciones **Para cada: Registro o Etiqueta** permiten especificar si ejecutar el método una vez por etiqueta o una vez por registro. Este control sólo tiene sentido si está imprimiendo más de una copia de cada etiqueta y también está ejecutando un método al momento de la impresión. ::: -- **Layout preview**: Provides a reduced view of how an entire page of labels will look, based on the dimensions you enter in the Label editor. The page preview also reflects the paper size selected in the Print Setup dialog box. También puede utilizar esta zona para designar la primera etiqueta de la página que se va a imprimir (esta opción sólo afecta a la primera hoja en caso de impresión multipágina). This can be useful, for example, when you want to print on a sheet of adhesive labels, part of which has already been used. También puede seleccionar la primera etiqueta en la página a imprimir haciendo clic en ella: +- **Vista previa del diseño**: permite visualizar en tiempo real las modificaciones que ingrese en el editor de etiquetas. La vista previa de la página también refleja el tamaño de papel seleccionado en el cuadro de diálogo Configuración de la impresión. También puede utilizar esta área para designar la primera etiqueta de la página a imprimir (esta opción solo afecta a la primera hoja en el caso de la impresión multipágina). Esto puede ser útil, por ejemplo, cuando se desea imprimir en una hoja de etiquetas adhesivas, parte de las cuales ya se ha utilizado. También puede seleccionar la primera etiqueta en la página a imprimir haciendo clic en ella: ![](../assets/en/Desktop/label-start.png) ## Impresión de etiquetas mediante formularios y métodos (ejemplo) -You can use dedicated table forms and project methods to print labels with calculated variables. This simple example shows how to configure the different elements. +Puede utilizar formularios de tabla dedicados y métodos proyecto para imprimir etiquetas con variables calculadas. Este ejemplo explica como configurar los diferentes elementos. 1. En un formulario tabla dedicado, añada su(s) campo(s) de etiqueta y su(s) variable(s). - Here, in a table form named "label", we added the *myVar* variable: + Aquí, en una tabla llamada "etiqueta", sumamos la variable *myVar*: ![](../assets/en/Desktop/label-example1.png) 2. Crea un método proyecto llamado `setMyVar` con el siguiente código: @@ -174,7 +174,7 @@ You can use dedicated table forms and project methods to print labels with calcu 3. Defina el método proyecto como ["Compartido por los componentes y la base de datos local"](../Project/code-overview.md#shared-by-components-and-host-database). -4. Before displaying the Label editor, make sure the project method is allowed by executing this code: +4. Antes de mostrar el editor de etiquetas, asegúrese de que el método proyecto está autorizado ejecutando este código: ```4d ARRAY TEXT($methods;1) @@ -182,18 +182,18 @@ You can use dedicated table forms and project methods to print labels with calcu SET ALLOWED METHODS($methods) ``` -5. Open the Label editor and use your form: +5. Abre el editor de etiquetas y use su formulario: ![](../assets/en/Desktop/label-example2.png) -6. In the Layout page, select the method: +6. En la página Diseño, seleccione el método: ![](../assets/en/Desktop/label-example3.png) Luego puede imprimir sus etiquetas: ![](../assets/en/Desktop/label-example4.png) -## Control de los formularios y métodos disponibles +## Definición de los formularios y métodos disponibles -The Label editor includes an advanced feature allowing you to restrict which project forms and methods (within "allowed" methods) can be selected in the dialog box: +El editor de etiquetas incluye una función avanzada que le permite limitar los formularios y los métodos proyecto (dentro de los métodos "permitidos") pueden seleccionarse en el cuadro de diálogo: - en el menú **Formulario a utilizar** de la página "Etiqueta" y/o - en el menú **Aplicar (método)** de la página "Diseño". diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md b/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md index e58d6470b5e614..26c51c0f4661d3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md @@ -17,7 +17,7 @@ Puede introducir cualquier nombre de clase válido en esta propiedad, incluyendo - Clases 4D integradas (por ejemplo, `4D.File`, `4D.Folder`) - [Exposed](../Extensions/develop-components.md#sharing-of-classes) component-defined classes (e.g. `cs.MyComponent.MyClass`) -If you enter an invalid class name, a warning is triggered and the input is rejected. +Si introduce un nombre de clase inválido, se activa una advertencia y se rechaza la entrada. :::note @@ -25,7 +25,7 @@ If you enter an invalid class name, a warning is triggered and the input is reje ::: -In your code, when assigning a value to a class-typed object field, 4D verifies that it belongs to the declared class. Si no es así o si el objeto no tiene clase, se produce un error. El acceso a atributos desconocidos también provocará errores de sintaxis. +En su código, al asignar un valor a un campo de tipo clase de objeto, 4D verifica que pertenece a la clase declarada. Si no es así o si el objeto no tiene clase, se produce un error. El acceso a atributos desconocidos también provocará errores de sintaxis. To retrieve the associated class name at runtime, use the [`classID`](../API/DataClassClass.md#attributename) property, for example `ds.MyTable.MyField.classID`. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Extensions/overview.md b/i18n/es/docusaurus-plugin-content-docs/current/Extensions/overview.md index 681ada54c0c77e..615fc7ae5c281d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Extensions/overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Extensions/overview.md @@ -16,21 +16,21 @@ La [arquitectura del proyecto] 4D (../Project/architecture.md) es abierta y pued ## Componentes desarrollados por 4D -4D proposes various components to the 4D community, covering many development needs. All 4D components can be found on the [**4D github repository**](https://github.com/4d). +4D proposes various components to the 4D community, covering many development needs. Todos los componentes 4D se pueden encontrar en el [**repositorio github de 4D**](https://github.com/4d). A subset of these components is listed by default in the [Dependency Manager](../Project/components.md), including: -| Componente | Repositorio Github | Descripción | Principales funcionalidades | -| -------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| 4D AIKit | https://github.com/4d/4D-AIKit | Conjunto de clases a conectar con las APIs OpenAI de terceros | `OpenAIChat`, `OpenAIImage`... | -| 4D NetKit | https://github.com/4d/4D-NetKit | Conjunto de herramientas de servicios web para conectarse a APIs de terceros | `OAuth2Provider` class, `New OAuth2 provider`, `OAuth2ProviderObject.getToken()` | -| 4D Progress | https://github.com/4d/4D-Progress | Abrir una o varias barras de progreso en la misma ventana | `Progress New`, `Progress SET ON STOP METHOD`, `Progress SET PROGRESS`, ... | -| 4D QPDF | https://github.com/4d/4D-QPDF | Extraer archivos adjuntos de archivos PDF/A-3 | `PDF Get attachments` | -| 4D SVG | https://github.com/4d/4D-SVG | Crear y manipular objetos gráficos svg comunes | `SVGTool_Display_viewer`, métodos múltiples `SVG_` | -| 4D ViewPro | https://github.com/4d/4d-view-pro | Funciones de hoja de cálculo en sus formularios | Ver la [documentación 4D View Pro](ViewPro/getting-started.md) | -| 4D Widgets | https://github.com/4d/4D-Widgets | Gestione los widgets DatePicker, TimePicker, SearchPicker 4D | `DatePicker calendar`, `DateEntry area`, `TimeEntry`, `SearchPicker SET HELP TEXT`, ... | -| Interfaz 4D WritePro | https://github.com/4d/4D-WritePro-Interface | Manage 4D Write Pro palettes and [table wizard](../WritePro/writeprointerface.md) | `WP PictureSettings`, `WP ShowTabPages`, `WP SwitchToolbar`, `WP UpdateWidget` | -| Build4D | https://github.com/4d-depot/Build4D | Compilar, construir y firmar proyectos | CI/CD | +| Componente | Repositorio Github | Descripción | Principales funcionalidades | +| -------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- | +| 4D AIKit | https://github.com/4d/4D-AIKit | Conjunto de clases a conectar con las APIs OpenAI de terceros | `OpenAIChat`, `OpenAIImage`... | +| 4D NetKit | https://github.com/4d/4D-NetKit | Conjunto de herramientas de servicios web para conectarse a APIs de terceros | `OAuth2Provider` class, `New OAuth2 provider`, `OAuth2ProviderObject.getToken()` | +| 4D Progress | https://github.com/4d/4D-Progress | Abrir una o varias barras de progreso en la misma ventana | `Progress New`, `Progress SET ON STOP METHOD`, `Progress SET PROGRESS`, ... | +| 4D QPDF | https://github.com/4d/4D-QPDF | Extraer archivos adjuntos de archivos PDF/A-3 | `PDF Get attachments` | +| 4D SVG | https://github.com/4d/4D-SVG | Crear y manipular objetos gráficos svg comunes | `SVGTool_Display_viewer`, métodos múltiples `SVG_` | +| 4D ViewPro | https://github.com/4d/4d-view-pro | Funciones de hoja de cálculo en sus formularios | Ver la [documentación 4D View Pro](ViewPro/getting-started.md) | +| 4D Widgets | https://github.com/4d/4D-Widgets | Gestione los widgets DatePicker, TimePicker, SearchPicker 4D | `DatePicker calendar`, `DateEntry area`, `TimeEntry`, `SearchPicker SET HELP TEXT`, ... | +| Interfaz 4D WritePro | https://github.com/4d/4D-WritePro-Interface | Gestión de paletas y del [asistente de tablas](../WritePro/writeprointerface.md) en 4D Write Pro | `WP PictureSettings`, `WP ShowTabPages`, `WP SwitchToolbar`, `WP UpdateWidget` | +| Build4D | https://github.com/4d-depot/Build4D | Compilar, construir y firmar proyectos | CI/CD | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/formEditor.md b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/formEditor.md index 67472967bbab23..97382d62de2ca5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/formEditor.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/formEditor.md @@ -148,7 +148,7 @@ Para seleccionar un objeto utilizando la barra de herramientas: 1. Haz clic en la herramienta Flecha en la barra de herramientas.
    ![](../assets/en/FormEditor/selection.png) -
    When you move the pointer into the form area, it becomes a standard arrow-shaped pointer. +
    Cuando mueve el puntero en el área del formulario, se convierte en un puntero estándar con forma de flecha. 2. Haga clic en el objeto que desea seleccionar. Las asas de redimensionamiento identifican el objeto seleccionado.
    ![](../assets/en/FormEditor/selectResize.png) @@ -352,7 +352,7 @@ Cuando se superponen varios objetos, se puede utilizar el atajo **Ctrl+Mayús+cl :::note -In binary databases, use **Ctrl+Click / Command+Click** to perform the same action. +En bases de datos binarias, utilice **Ctrl+Clic / Comando+Clic** para efectuar la misma acción. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md index 452875652a7f60..c0eb2ead1f7645 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md @@ -812,7 +812,7 @@ If the user selects a break row, [`LISTBOX GET CELL POSITION`](../commands/listb ![](../assets/en/FormObjects/hierarch11.png) -... [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) returns (2;4). To select a break row by programming, you will need to use the [`LISTBOX SELECT BREAK`](../commands/listbox-select-break) command. +... [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devuelve (2;4). To select a break row by programming, you will need to use the [`LISTBOX SELECT BREAK`](../commands/listbox-select-break) command. Las líneas de rotura no se tienen en cuenta en los arrays internos utilizados para gestionar el aspecto gráfico de los list box (estilos y colores). No obstante, es posible modificar estas características para las líneas de ruptura mediante los comandos de gestión gráfica de los objetos. Basta con ejecutar los comandos adecuados en los arrays que constituyen la jerarquía. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_BackgroundAndBorder.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_BackgroundAndBorder.md index 065a522fb7c54f..152f5cb885112e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_BackgroundAndBorder.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_BackgroundAndBorder.md @@ -186,7 +186,7 @@ Designa el grosor de una línea. --- -## Row Background Color Array {#row-background-color-array} +## Array colores de fondo {#row-background-color-array} `List boxes de tipo array` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Display.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Display.md index 70acd1ce6ab087..64fc8e1bd49d2a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Display.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Display.md @@ -104,7 +104,7 @@ Se pueden crear formatos de fecha personalizados utilizando varios patrones desc :::note blankIfNull -- By default, a [null date](../Concepts/dt_date.md#date-literals) is displayed with zeros, e.g. 00/00/00. Con la opción "blankIfNull", una fecha null se muestra como un área vacía. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. +- Por defecto, una [fecha nula](../Concepts/dt_date.md#date-literals) se muestra con ceros, por ejemplo, 00/00/00. Con la opción "blankIfNull", una fecha null se muestra como un área vacía. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. - Las [columnas list box](listbox_overview.md#list-box-columns) y los [pies List box](listbox_overview.md#list-box-footers) de tipo fecha utilizan siempre el comportamiento "blank if null" (no se puede desactivar). ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md index 2605754775fea7..9563e559ec2d24 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md @@ -11,7 +11,7 @@ Varias [acciones estándar](#standard-actions) dedicadas, numerosos [comandos de :::info Mostrar páginas Qodly -In 4D client/server applications, Web areas can be used to display Qodly pages and [share the remote user session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). This feature allows you to design web-based interfaces for your client/server desktop applications. +In 4D client/server applications, Web areas can be used to display Qodly pages and [share the remote user session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). Esta funcionalidad le permite diseñar interfaces web para sus aplicaciones de escritorio cliente/servidor. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index afa0adc08d196e..e0a193b6847649 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -327,11 +327,11 @@ Function event validateSave ($event : Object) Este evento se activa cada vez que una entidad está a punto de ser guardada. - si define la función a nivel de entidad (primera sintaxis), se llama para cualquier atributo de la entidad. -- si definió la función en el nivel de atributo (segunda sintaxis), sólo se llama para este atributo. This function is **not** executed if the attribute has not been touched in the entity. +- si definió la función en el nivel de atributo (segunda sintaxis), sólo se llama para este atributo. Esta función **no** se ejecuta si el atributo no ha sido tocado en la entidad. La función recibe un [objeto *event*](#event-parameter) como parámetro. -This event is triggered by the following functions: +Este evento es activado por las siguientes funciones: - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) @@ -348,7 +348,7 @@ No se recomienda actualizar la entidad dentro de esta función (utilizando `This #### Ejemplo -In this example, it is not allowed to save a product with a margin lower than 50%. In case of an invalid price attribute, you return an error object and thus, stop the save action. +En este ejemplo, no se permite guardar un producto con un margen inferior al 50%. In case of an invalid price attribute, you return an error object and thus, stop the save action. ```4d // ProductsEntity class @@ -374,22 +374,22 @@ return $result ```4d Function event saving($event : Object) Function event saving ($event : Object) -// code +// código ``` Este evento se activa cada vez que se guarda una entidad. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. The function is executed even if no attribute has been touched in the entity (e.g. in case of sending data to an external app each time a save is done). -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. The function is **not** executed if the attribute has not been touched in the entity. +- Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. The function is executed even if no attribute has been touched in the entity (e.g. in case of sending data to an external app each time a save is done). +- If you defined the function at the attribute level (second syntax), it is called only for this attribute. La función **no** se ejecuta si el atributo no ha sido tocado en la entidad. La función recibe un [objeto *event*](#event-parameter) como parámetro. -This event is triggered by the following functions: +Este evento es activado por las siguientes funciones: - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) -Este evento se activa **mientras** la entidad se guarda. If a [`validateSave()`](#function-event-validatesave) event function was defined, the `saving()` event function is called if no error was triggered by `validateSave()`. For example, you can use this event to create a document on a Google Drive account. +Este evento se activa **mientras** la entidad se guarda. If a [`validateSave()`](#function-event-validatesave) event function was defined, the `saving()` event function is called if no error was triggered by `validateSave()`. Por ejemplo, puede utilizar este evento para crear un documento en una cuenta de Google Drive. :::note @@ -397,13 +397,13 @@ The business logic should raise errors which can't be detected during the `valid ::: -During the save action, 4D engine errors can be raised (index, stamp has changed, not enough space on disk). +Durante la acción de guardar, se pueden producir errores en el motor 4D (índice, sello ha cambiado, no hay suficiente espacio en el disco). To stop the action, the code of the function must return an [error object](#error-object). #### Ejemplo -When a file is saved on disk, catch errors related to disk space for example. +Cuando se guarda un archivo en el disco, por ejemplo, se capturan errores relacionados con el espacio de disco. ```4d // ProductsEntity class @@ -443,14 +443,14 @@ Función evento afterSave($event : Object) // código ``` -This event is triggered just after an entity is saved in the data file, when at least one attribute was modified. It is not executed if no attribute has been touched in the entity. +This event is triggered just after an entity is saved in the data file, when at least one attribute was modified. No se ejecuta si no se ha tocado ningún atributo en la entidad. -This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. For example, it can be used to send a confirmation email after data have been saved. Or, in case of error while saving data, it can make a rollback to restore a consistent state of data. +This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. Por ejemplo, se puede utilizar para enviar un correo electrónico de confirmación después de guardar los datos. O, en caso de error al guardar los datos, puede hacer una cancelación para restaurar un estado consistente de los datos. La función recibe un [objeto *event*](#event-parameter) como parámetro. - To avoid infinite loops, calling a [`save()`](../API/EntityClass.md#save) on the current entity (through `This`) in this function is **not allowed**. Se producirá un error. -- Throwing an [error object](#error-object) is **not supported** by this function. +- Arrojar un [objeto error](#error-object) **no es soportado** por esta función. #### Ejemplo @@ -483,9 +483,9 @@ Function event validateDrop ($event : Object) // código ``` -This event is triggered each time an entity is about to be dropped. +Este evento se activa cada vez que una entidad está a punto de ser soltada. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. +- Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. - If you defined the function at the attribute level (second syntax), it is called only for this attribute. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -532,7 +532,7 @@ Function event dropping ($event : Object) Este evento se activa cada vez que se elimina una entidad. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. +- Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. - If you defined the function at the attribute level (second syntax), it is called only for this attribute. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -555,7 +555,7 @@ To stop the action, the code of the function must return an [error object](#erro #### Ejemplo -Here is an example of `dropping` event at entity level: +Estes es un ejemplo del evento `dropping` a nivel de entidad: ```4d // ProductsEntity class @@ -589,18 +589,18 @@ Function event afterDrop($event : Object) // código ``` -This event is triggered just after an entity is dropped. +Este evento se activa justo después de que una entidad es soltada. -This event is useful after dropping data to propagate the drop action outside the application or to execute administration tasks. For example, it can be used to send a cancellation email after data have been dropped. Or, in case of error while dropping data, it can log an information for the administrator to check data consistency. +This event is useful after dropping data to propagate the drop action outside the application or to execute administration tasks. Por ejemplo, se puede utilizar para enviar un correo electrónico de cancelación después de soltar los datos. Or, in case of error while dropping data, it can log an information for the administrator to check data consistency. La función recibe un [objeto *event*](#event-parameter) como parámetro. - To avoid infinite loops, calling a [`drop()`](../API/EntityClass.md#drop) on the current entity (through `This`) in this function is **not allowed**. Se producirá un error. -- Throwing an [error object](#error-object) is **not supported** by this function. +- Arrojar un [objeto error](#error-object) **no es soportado** por esta función. :::note -The dropped entity is referenced by `This` and still exists in memory. +La entidad eliminada es referenciada por `This` y aún existe en memoria. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md index 5bb31631d97539..72cf097a8cd4f4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -27,27 +27,21 @@ Si un usuario intenta ejecutar una acción y no tiene los derechos de acceso ade Puede asignar acciones de permiso específicas a los siguientes recursos en su proyecto: -- el almacén de datos -- una clase de datos -- un atributo (incluidos los calculados y los alias) -- una función de clase de modelo de datos -- una función [singleton](../REST/$singleton.md) +- the [datastore](../ORDA/dsMapping.md#datastore) +- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) +- functions of the [data model classes](../ORDA/ordaClasses.md) +- [singleton](../REST/$singleton.md) functions Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma en que se acceda), 4D verifica que la sesión tenga los permisos apropiados y rechaza el acceso si no está autorizado. -Una acción de permiso definida en un nivel determinado se hereda por defecto en los niveles inferiores, pero se pueden establecer varios permisos: - -- Una acción de permiso definida a nivel de almacén de datos se asigna automáticamente a todas las clases de datos. La acción de permiso *execute* definida en el nivel del datastore se aplica a todas las funciones del proyecto, incluyendo todas las funciones [singleton](../REST/$singleton.md). -- Una acción de permiso definida a nivel de clase de datos anula la configuración del almacén de datos (si existe). Por defecto, todos los atributos de la clase de datos heredan de los permisos de la clase de datos. -- A diferencia de los permisos de clase de datos, una acción de permiso definida a nivel de atributo no anula los permisos de clase de datos padre, sino que se añade a ellos. Por ejemplo, si asignó el privilegio "general" a una clase de datos y el privilegio "detail" a un atributo de la clase de datos, tanto el privilegio "general" como el privilegio "detail" deben definirse en la sesión para acceder al atributo. - -:::info +## Permissions -Los permisos controlan el acceso a los objetos o funciones del almacén de datos. Si desea filtrar los datos leídos según algún criterio, puede considerar [restringir las selecciones de entidades](entities.md#restricting-entity-selections) que puede ser más apropiado en este caso. +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). -::: +When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). -## Acciones de autorización +### Acciones de autorización Las acciones disponibles están relacionadas con el recurso de destino. @@ -73,6 +67,65 @@ Las acciones disponibles están relacionadas con el recurso de destino. Los parámetros de permisos requieren ser consistentes, en particular los permisos **update** y **drop** también necesitan el permiso **read** (pero **create** no lo necesita). +### Permisos heredados + +Una acción de permiso definida en un nivel determinado se hereda por defecto en los niveles inferiores, pero se pueden establecer varios permisos: + +- Una acción de permiso definida a nivel de almacén de datos se asigna automáticamente a todas las clases de datos. La acción de permiso *execute* definida en el nivel del datastore se aplica a todas las funciones del proyecto, incluyendo todas las funciones [singleton](../REST/$singleton.md). +- Una acción de permiso definida a nivel de clase de datos anula la configuración del almacén de datos (si existe). Por defecto, todos los atributos de la clase de datos heredan de los permisos de la clase de datos. +- A diferencia de los permisos de clase de datos, una acción de permiso definida a nivel de atributo no anula los permisos de clase de datos padre, sino que se añade a ellos. Por ejemplo, si asignó el privilegio "general" a una clase de datos y el privilegio "detail" a un atributo de la clase de datos, tanto el privilegio "general" como el privilegio "detail" deben definirse en la sesión para acceder al atributo. + +:::info + +Los permisos controlan el acceso a los objetos o funciones del almacén de datos. Si desea filtrar los datos leídos según algún criterio, puede considerar [restringir las selecciones de entidades](entities.md#restricting-entity-selections) que puede ser más apropiado en este caso. + +::: + +### Asignación de permisos a las funciones de la clase ORDA + +Al configurar los permisos, las funciones de clase ORDA se declaran en el elemento `applyTo` usando la siguiente sintaxis: + +```json +. +``` + +Por ejemplo, si desea aplicar un permiso a la siguiente función: + +```4d +// cs.CityEntity class +Class extends Entity + Function getPopulation() : Integer + ... +``` + +... tiene que escribir: + +```json +"applyTo":"City.getPopulation" +``` + +Significa que no puede utilizar los mismos nombres de función en las distintas clases ORDA (entidad, selección de entidad, dataclass) si desea que se les asignen privilegios. En este caso, debe utilizar nombres de función distintos. Por ejemplo, si has creado una función "drop" en ambas clases `cs.CityEntity` y `cs.CitySelection`, necesita darles nombres diferentes como `dropEntity()` y `dropSelection()`. A continuación, puede escribir en el archivo "roles.json": + +```json + "permissions": { + "allowed": [ + { + "applyTo": "City.dropEntity", + "type": "method", + "promote": [ + "name" + ] + }, + { + "applyTo": "City.dropSelection", + "type": "method", + "promote": [ + "name" + ] + } + ] +``` + ## Privilegios y roles Un \*\*privilegio \*\* es la capacidad técnica de ejecutar \*\*acciones \*\* en \*\*recursos \*\*, mientras que un **rol** es un privilegio publicado para ser utilizado por un administrador. Básicamente, un rol reúne varios privilegios para definir un perfil de usuario empresarial. Por ejemplo, "manageInvoices" podría ser un privilegio mientras que "secretary" podría ser un rol (que incluye "manageInvoices" y otros privilegios). @@ -111,70 +164,7 @@ exposed Function authenticate($identifier : Text; $password : Text)->$result : T ## archivo `roles.json` -El archivo `roles.json` describe todos los parámetros de seguridad del proyecto. - -### Archivo por defecto - -Al crear un proyecto, se crea un archivo `roles.json` por defecto en la siguiente ubicación: `/Project/Sources/` (ver la sección [Architecture](../Project/architecture.md#sources)). - -El archivo por defecto tiene el siguiente contenido: - -```json title="/Project/Sources/roles.json" - -{ - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - - "roles": [], - - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": ["all"], - "create": ["all"], - "update": ["all"], - "drop": ["all"], - "execute": ["all"], - "promote": ["all"] - } - ] - }, - - "forceLogin": true - -} - -``` - -For a highest level of security, the "all" privilege is assigned to all permissions in the datastore, thus data access on the whole `ds` object is disabled by default. The principle is as follows: assigning a permission is like putting a lock on a door. Only sessions with privilege having the corresponding key (i.e., a permission) will be able to open the lock. -Se recomienda no modificar ni utilizar este privilegio de bloqueo, sino agregar permisos específicos a cada recurso que desee poner a disposición desde solicitudes web o REST ([ver ejemplo a continuación](#example-of-privilege-configuration)). - -:::caution - -Cuando no se definen parámetros específicos en el archivo `roles.json`, los accesos no son limitados. Esta configuración le permite desarrollar la aplicación sin tener que preocuparse por los accesos, pero no se recomienda en entornos de producción. - -::: - -:::note Compatibilidad - -En versiones anteriores, el archivo `roles.json` no fue creado por defecto. A partir de 4D 20 R6, al abrir un proyecto existente que no contiene un archivo `roles.json` o los parámetros `"forceLogin": true`, el botón **Activar la autenticación REST mediante la función ds.authentify()** está disponible en la página [**Funcionalidades web** de la caja de diálogo Parámetros](../settings/web.md#access). Este botón actualiza automáticamente su configuración de seguridad (es posible que tenga que modificar su código, [ver esta publicación del blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). -::: - -:::note Qodly Studio - -En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](../WebServer/qodly-studio.md#force-login) en el panel de Privilegios. - -::: - -### Sintaxis - -La sintaxis del archivo `roles.json` es la siguiente: +El archivo `roles.json` describe todos los parámetros de seguridad web del proyecto. La sintaxis del archivo `roles.json` es la siguiente: | Nombre de propiedad | | | Tipo | Obligatorio | Descripción | | ------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | --------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------ | @@ -194,60 +184,87 @@ La sintaxis del archivo `roles.json` es la siguiente: | | | \[].drop | Colección de cadenas | | Lista de privilegios | | | | \[].execute | Colección de cadenas | | Lista de privilegios | | | | \[].promote | Colección de cadenas | | Lista de privilegios | -| forceLogin | | | Boolean | | True para habilitar el [modo "forceLogin"](../REST/authUsers.md#force-login-mode) | +| restrictedByDefault | | | Boolean | | Si es true, se niega el acceso a recursos sin permisos explícitos | +| forceLogin | | | Boolean | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | :::caution Recordatorio - El nombre de privilegio "WebAdmin" está reservado a la aplicación. No se recomienda utilizar este nombre para los privilegios personalizados. -- los nombres de `privileges` y `roles` son insensibles a mayúsculas y minúsculas. +- `privileges` and `roles` names are case-insensitive. ::: -#### Asignación de permisos a las funciones de la clase ORDA +### Default File Location and Content -Al configurar los permisos, las funciones de clase ORDA se declaran en el elemento `applyTo` usando la siguiente sintaxis: +When a new project is created, a default `roles.json` file is generated at: -```json -. ``` - -Por ejemplo, si desea aplicar un permiso a la siguiente función: - -```4d -// cs.CityEntity class -Class extends Entity - Function getPopulation() : Integer - ... +/Project/Sources/ ``` -... tiene que escribir: +Ver la sección [Arquitectura](../Project/architecture.md#sources). -```json -"applyTo":"City.getPopulation" -``` +Contenido predeterminado: -Significa que no puede utilizar los mismos nombres de función en las distintas clases ORDA (entidad, selección de entidad, dataclass) si desea que se les asignen privilegios. En este caso, debe utilizar nombres de función distintos. Por ejemplo, si has creado una función "drop" en ambas clases `cs.CityEntity` y `cs.CitySelection`, necesita darles nombres diferentes como `dropEntity()` y `dropSelection()`. A continuación, puede escribir en el archivo "roles.json": +```json title="/Project/Sources/roles.json" -```json - "permissions": { - "allowed": [ - { - "applyTo": "City.dropEntity", - "type": "method", - "promote": [ - "name" - ] - }, - { - "applyTo": "City.dropSelection", - "type": "method", - "promote": [ - "name" - ] - } +{ + "privileges": [ + ], + "roles": [ + ], + "permissions": { + "allowed": [ + { + "applyTo": "ds", + "type": "datastore", + "read": [], + "create": [], + "update": [], + "drop": [], + "execute": [], + "promote": [] + } ] + }, + "restrictedByDefault": false, + "forceLogin": false +} ``` +:::note Compatibilidad + +En versiones anteriores, el archivo `roles.json` no fue creado por defecto. A partir de 4D 20 R6, al abrir un proyecto existente que no contiene un archivo `roles.json` o los parámetros `"forceLogin": true`, el botón **Activar la autenticación REST mediante la función ds.authentify()** está disponible en la página [**Funcionalidades web** de la caja de diálogo Parámetros](../settings/web.md#access). Este botón actualiza automáticamente su configuración de seguridad (es posible que tenga que modificar su código, [ver esta publicación del blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). + +::: + +:::note Qodly Studio + +In Qodly Studio for 4D, the login mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Roles and Privileges panel. + +::: + +## Restriction Modes + +The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): + +- **Unrestricted mode** (`restrictedByDefault`: **false**): Resources without defined permissions are accessible to all requests. Este modo es adecuado para entornos de desarrollo donde el acceso se puede restringir gradualmente. +- **Restricted mode** (`restrictedByDefault`: **true**): Resources without defined permissions are blocked by default. Este modo se recomienda para entornos de producción donde el acceso debe ser otorgado explícitamente. + +:::note Compatibilidad + +- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Tenga en cuenta que esta configuración está hecha a medida para un inicio rápido y un desarrollo fluido. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. + +::: + +### Configuración recomendada + +Depending on your environment, the recommended settings are: + +- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. + ### Archivo `Roles_Errors.json` El archivo `roles.json` es analizado por 4D al inicio. Debe reiniciar la aplicación si desea que se tengan en cuenta las modificaciones en este archivo. @@ -267,93 +284,28 @@ End if ## Ejemplo de configuración de privilegios -The good practice is to keep all data access locked by default thanks to the "all" privilege and to configure the `roles.json` file to only open controlled parts to authorized sessions. For example, to allow some accesses to "guest" sessions: - ```json title="/Project/Sources/roles.json" { - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - "roles": [], - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": [ - "all" - ], - "create": [ - "all" - ], - "update": [ - "all" - ], - "drop": [ - "all" - ], - "execute": [ - "all" - ], - "promote": [ - "all" - ] - }, - { - "applyTo": "ds.loginAs", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.hasPrivilege", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.clearPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.isGuest", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.getPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.setAllPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "mySingletonClass.createID", - "type": "singletonMethod", - "execute": [ - "guest" - ] - } - ] - }, - "forceLogin": true + "forceLogin": true, + "restrictedByDefault": true, + "permissions": { + "allowed": [ + { + "applyTo": "People", + "type": "dataclass", + "read": [ + "viewPeople" + ] + } + ] + }, + "privileges": [ + { + "privilege": "viewPeople", + "includes": [] + } + ], + "roles": [] } ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Project/compiler.md b/i18n/es/docusaurus-plugin-content-docs/current/Project/compiler.md index 1158b612ee42c7..77cb73581775e8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Project/compiler.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Project/compiler.md @@ -148,7 +148,7 @@ El modo de escritura directa es opcional sólo en proyectos convertidos. Se util Select **All variables are typed (Direct typing)** option in the **Compilation Path** menu to enable the direct typing mode. Cuando se selecciona esta opción, las demás opciones de compatibilidad pierden su utilidad y dejan de mostrarse. -Se recomienda utilizar esta opción, ya que proporciona flexibilidad y eficiencia. The direct typing concept assumes that all elements are directly declared where they are defined in your code. Solo tiene que asegurarse de que todas sus variables son declaradas utilizando la [sintaxis 'var'](../Concepts/variables.md#declaring-variables) y que sus parámetros de método y función son declarados [en sus prototipos](../Concepts/parameters.md) (la función [Verificar sintaxis](#check-syntax) puede ayudarle a detectar declaraciones faltantes o no válidas). +Se recomienda utilizar esta opción, ya que proporciona flexibilidad y eficiencia. El concepto de escritura directa asume que todos los elementos se declaran directamente donde están definidos en su código. Solo tiene que asegurarse de que todas sus variables son declaradas utilizando la [sintaxis 'var'](../Concepts/variables.md#declaring-variables) y que sus parámetros de método y función son declarados [en sus prototipos](../Concepts/parameters.md) (la función [Verificar sintaxis](#check-syntax) puede ayudarle a detectar declaraciones faltantes o no válidas). ## Advertencias diff --git a/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md b/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md index fb80d3d89867e4..c23fb41145c825 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md @@ -96,7 +96,7 @@ El parámetro *vectorComparison* es una colección de los siguientes elementos: | [].metric | Text | Opcional. [Cálculo vectorial](../API/VectorClass.md#understanding-the-different-vector-computations) a utilizar para la consulta. Supported values:
  • "cosine" (default if omitted): calculates the cosine similarity between vectors.
  • "dot": calculates the dot similarity of vectors.
  • "euclidean": calculates the Euclidean distance between vectors. | | [].threshold | Real | Opcional (por defecto: 0,5). Un valor umbral utilizado para filtrar las comparaciones de vectores en función de su puntuación de similitud coseno, punto o euclídea según la "métrica" seleccionada. Es altamente recomendable elegir una similitud que se adapte mejor a su caso de uso específico para obtener resultados óptimos. | -Only a subset of **comparator** symbols are supported with vector comparisons. Tenga en cuenta que comparan los resultados con el valor umbral: +Solo un subconjunto de símbolos **comparadores** son soportados con comparaciones vectoriales. Tenga en cuenta que comparan los resultados con el valor umbral: | Comparador | Símbolo(s) | Comentario | | ----------------- | ----------------------------- | --------------------------- | @@ -126,7 +126,7 @@ En este ejemplo, buscamos en la clase de datos Person todas las personas cuya pr GET /rest/Person/?filter="anotherobj.mynum > 50" ``` -In this example, we do a vector search with basic values: +En este ejemplo, hacemos una búsqueda vectorial con valores de base: ``` GET /rest/Person/?filter="VectorAtt>=:1"&$params='[{vector:[1,2,3],threshold:1}]' diff --git a/i18n/es/docusaurus-plugin-content-docs/current/REST/$singleton.md b/i18n/es/docusaurus-plugin-content-docs/current/REST/$singleton.md index dd6441c98e068f..f2526bf683cf39 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/REST/$singleton.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/REST/$singleton.md @@ -5,7 +5,7 @@ title: $singleton Puede llamar directamente a [funciones de sus singletons compartidos](../Concepts/classes.md#singleton-classes) a través de REST. -Singleton functions are called in POST or GET requests with the `$singleton` command and without `()`. Por ejemplo, si ha definido una función `buildVehicle()` en la clase compartida singleton `VehicleFactory`, podría llamarla utilizando la siguiente petición: +Las funciones Singleton se llaman en peticiones POST o GET con el comando `$singleton` y sin `()`. Por ejemplo, si ha definido una función `buildVehicle()` en la clase compartida singleton `VehicleFactory`, podría llamarla utilizando la siguiente petición: ```json /rest/$singleton/VehicleFactory/buildVehicle diff --git a/i18n/es/docusaurus-plugin-content-docs/current/REST/configuration.md b/i18n/es/docusaurus-plugin-content-docs/current/REST/configuration.md index a27d1bfcff6814..64fe5f6e667aec 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/REST/configuration.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/REST/configuration.md @@ -70,9 +70,9 @@ Para eliminar la exposición REST de un campo: 1. Visualice el inspector de campo en el editor de estructuras y seleccione el campo a modificar. -2. Desmarque la opción **Exponer como recurso REST** para el campo. - ![alt-text](../assets/en/REST/field.png) - Repita esta operación para cada campo cuya exposición deba modificarse. +2. Uncheck the **Expose as REST resource** for the field.
    + ![alt-text](../assets/en/REST/field.png)
    + Repeat this for each field whose exposure needs to be modified. > Para que un campo sea accesible a través de REST, la tabla padre también debe serlo. Si la tabla padre no está expuesta, ninguno de sus campos lo estará, independientemente de su estado. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-export-document.md b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-export-document.md index 8dfcf9c5401f37..94eefcc2eb31d0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-export-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-export-document.md @@ -77,11 +77,11 @@ El parámetro opcional *paramObj* le permite definir múltiples propiedades para | | includeStyles | boolean | Si se incluye el estilo al exportar, por defecto true. | | | includeFormulas | boolean | Si se incluye la fórmula al exportar, por defecto true. | | | saveAsView | boolean | Si aplicar la cadena de formato al valor de exportación al exportar, por defecto false. | -| | rowHeadersAsFrozenColumns | boolean | Whether to treat the row headers as frozen columns when exporting, default false. | +| | rowHeadersAsFrozenColumns | boolean | Si tratar los encabezados de línea como columnas congeladas al exportar, por defecto false. | | | columnHeadersAsFrozenRows | boolean | Si tratar los encabezados de columna como líneas congeladas al exportar, por defecto false. | | | includeAutoMergedCells | boolean | Si se incluyen las celdas combinadas automáticamente al exportar, false por defecto. | -| | includeCalcModelCache | boolean | Si desea incluir los datos adicionales de cálculo. Can be faster when open the file with those data, default false. | -| | includeUnusedNames | boolean | Whether to include the unused custom name when exporting, default true. | +| | includeCalcModelCache | boolean | Si desea incluir los datos adicionales de cálculo. Puede ser más rápido al abrir el archivo con esos datos, false por defecto. | +| | includeUnusedNames | boolean | Si se incluye el nombre personalizado no utilizado al exportar, true por defecto. | | | includeEmptyRegionCells | boolean | Si se incluyen celdas vacías (celdas sin datos o solo con estilo) fuera del rango de datos utilizado, por defecto true. | | | contraseña | text | Contraseña a definir para abrir el libro de trabajo. | | `\` | | any | Toda propiedad personalizada que estará disponible a través del parámetro $3 en el método de retrollamada. | @@ -90,7 +90,7 @@ El parámetro opcional *paramObj* le permite definir múltiples propiedades para - Al exportar un documento 4D View Pro a un archivo con formato Microsoft Excel, pueden perderse algunos parámetros. Por ejemplo, los métodos y fórmulas 4D no son soportados por Excel. Puede verificar otras configuraciones con [esta lista de SpreadJS](https://developer.mescius.com/spreadjs/docs/excelimpexp/excelexport). - La exportación en este formato se ejecuta de forma asíncrona, utilice la propiedad `formula` del *paramObj* para el código a ejecutar después de la exportación. -- Se recomienda utilizar el objeto *excelOptions* al exportar en formato ".xlsx". Make sure to not mix this object with legacy first level properties (*password*, *includeBindingSource*...) para evitar problemas potientales. +- Se recomienda utilizar el objeto *excelOptions* al exportar en formato ".xlsx". Asegúrese de no mezclar este objeto con propiedades heredadas de primer nivel (*password*, *includeBindingSource*...) para evitar problemas potientales. **Notas sobre el formato PDF**: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md index 045a2e27cb83c5..2634788b5efb66 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md @@ -63,7 +63,7 @@ El parámetro opcional *paramObj* permite definir las propiedades del documento | | includeStyles | boolean | Si se incluye el estilo al importar, por defecto true. | | | includeFormulas | boolean | Si se incluye la fórmula al importar, por defecto true. | | | frozenColumnsAsRowHeaders | boolean | Bien sea tratar las columnas congeladas como encabezados de línea al importar, por defecto false. | -| | frozenRowsAsColumnHeaders | boolean | Whether to treat the frozen rows as column headers when importing, default false. | +| | frozenRowsAsColumnHeaders | boolean | Bien sea tratar las líneas congeladas como encabezados de columna al importar, por defecto false. | | | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | | | dynamicReferences | boolean | Si calcular funciones con referencia dinámica, por defecto true. | | | calcOnDemand | boolean | Whether to calculate formulas only when they are demanded, default false. | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md index 8577eb589df53b..97732b237a5018 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md @@ -13,9 +13,9 @@ La integración de áreas de 4D View Pro en sus formularios le permite importar ## Instalación y activación -4D View Pro debe estar instalado en sus proyectos. The 4D View Pro component is available from the [**4D-ViewPro github repository**](https://github.com/4d/4D-ViewPro). +4D View Pro debe estar instalado en sus proyectos. El componente 4D View Pro está disponible en el [\*\*repositorio github 4D-ViewPro \*\*](https://github.com/4d/4D-ViewPro). -The easiest way to install 4D View Pro in an opened project is to use the Dependency Manager: +La forma más fácil de instalar 4D View Pro en un proyecto abierto es utilizar el Administrador de dependencias: 1. Abra la ventana [Dependency Manager](../Project/components.md). 2. Haga clic en el botón **+** para añadir un componente. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/authentication.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/authentication.md index ee0943ee56293f..509461ed5e00bf 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/authentication.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/authentication.md @@ -119,7 +119,7 @@ Debe declarar estos parámetros de la siguiente manera: :::note -Todos los parámetros del método base `On Web Authentication` no están necesariamente rellenados. The information received by the database method depends on the selected [authentication mode](#authentication-modes). +Todos los parámetros del método base `On Web Authentication` no están necesariamente rellenados. La información recibida por el método base depende del [modo de autenticación](#authentication-modes) seleccionado. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md index 16c9f337b0de37..bc8018c82e60ac 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md @@ -58,7 +58,7 @@ Se soportan las siguientes palabras clave de acción: | `removeHeaders` | Texto o colección de textos | Encabezado(s) para eliminar de las respuestas HTTP. Si un encabezado a eliminar no existe en el encabezado de respuesta, se ignora. | | `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. | | `setHeaders` | Object | Name (text) and value (text) of header(s) to modify in the HTTP responses. Si un encabezado a modificar no existe en el encabezado de respuesta, se añade. | -| `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. When the access to a resource is denied, the web server returns a 403 status by default | +| `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. Cuando el acceso a un recurso es denegado, el servidor web devuelve un estado 403 por defecto | | `redirect` | Text | Redirigir URL. Cuando se activa una redirección, el servidor web devuelve un estado 302 por defecto | | `status` | Number | Estado HTTP | @@ -74,7 +74,7 @@ Algunos encabezados no pudieron ser añadidos, modificados o eliminados: | Vary | Sí | No | No | | Set-Cookie | Sí | Añadir cookie | No | -Unauthorized changes on these headers do not generate errors, however modifications will be ignored. +Los cambios no autorizados en estos encabezados no generan errores, sin embargo las modificaciones serán ignoradas. ### Reglas actuales diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/preemptiveWeb.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/preemptiveWeb.md index 6a5929785ac538..c270d197d2e68a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/preemptiveWeb.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/preemptiveWeb.md @@ -27,7 +27,7 @@ La siguiente tabla indica si el modo apropiativo se utiliza o está disponible, - Servidor web: maneja las [plantillas web](templates.md), [4DACTION y los métodos base](httpRequests.md) - Servidor de servicios web: gestiona las peticiones SOAP - ***web setting*** means that the preemptive mode depends on the [**scalable sessions**](sessions.md#enabling-web-sessions) status: - - if scalable sessions are enabled, the preemptive mode is automatically used for web and web service processes. + - si las sesiones escalables están activadas, el modo apropiativo se utiliza automáticamente para los procesos web y servicios web. - si las sesiones escalables no están activadas: - for web processes, the [**Use preemptive processes**](webServerConfig.md#use-preemptive-processes) option is taken into account. - for web service processes (server or client), preemptive mode is supported at method level. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md index 70390ec805a88e..66280d9e0e24f6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md @@ -80,7 +80,7 @@ La autenticación en el servidor web WebAdmin se realiza utilizando una llave de De acuerdo con la gestión de proyectos 4D, sólo se admiten los siguientes usos: - el desarrollo con Qodly Studio debe realizarse a través de **4D** (monousuario). -- deployment of 4D applications powered with Qodly pages must be done using **4D Server**. +- el despliegue de aplicaciones 4D alimentadas por páginas Qodly debe hacerse utilizando **4D Server**. :::warning diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md index 8602f8f2fab3ec..daeaf088d5b5d0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -211,7 +211,7 @@ End if El servidor web 4D le permite generar, compartir y utilizar tokens de sesión OTP (One-Time Passcode). Los tokens de sesión OTP se utilizan para asegurar comunicaciones con aplicaciones de terceros o sitios web. For information on OTP, please refer to the [One-time password page](https://en.wikipedia.org/wiki/One-time_password) on Wikipedia. -In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. The callback link includes the OTP token, so that the session which triggered the callback is loaded along with its data and privileges. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. +In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. :::tips Entradas de blog relacionadas @@ -251,7 +251,7 @@ Una url [`4DACCIÓN`](./httpRequests.md#4daction) también puede ser usada en el #### Utilizar un parámetro personalizado -The OTP token can also be provided as a custom parameter that you need to process specifically to restore the session. Debe utilizar esta solución si: +El token OTP también se puede suministrar como un parámetro personalizado que necesita procesar específicamente para restaurar la sesión. Debe utilizar esta solución si: - la aplicación de terceros no permite insertar parámetros como un `$4DSID` directamente en la Uri de redirección, y proporciona una API dedicada (la implementación depende de la aplicación de terceros), - o, quiere llamar a una función ORDA a través de REST para procesar la retrollamada, en cuyo caso es necesario pasar el OTP con la [sintaxis de parámetro REST](../REST/ClassFunctions.md#parameters) (por ejemplo, `?$params='["XXX123"]'`). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/webServer.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/webServer.md index 1a85350e7e6a34..3563c5462c2ac4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/webServer.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/webServer.md @@ -8,7 +8,7 @@ title: Servidor Web :::warning Funcionalidad obsoleta -Using the web server on a remote 4D is **deprecated** as of 4D 21. Ya no se recomienda utilizar esta funcionalidad. +El uso del servidor web en un 4D remoto es **obsoleto** a partir de 4D 21. Ya no se recomienda utilizar esta funcionalidad. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md index 57405625d969f7..625a6d5df492ed 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md @@ -51,20 +51,20 @@ Por defecto, las expresiones HTML insertadas en documentos heredados de 4D Write Puede pasar un objeto para definir cómo se gestionan los siguientes atributos durante la operación de importación: -| **Atributo** | **Tipo** | **Description** | -| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | -| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Anchored images are imported, but any text wrapping around the image is ignored. **ignore** \- Las imágenes ancladas no son importadas. | -| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Continuous, even, or odd sections are converted to standard sections. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Note**: Section breaks of any type but continuous are converted to section breaks with page break. Continuous section breaks are imported as continuous section breaks. | -| fields | Text | Sólo para documentos MS Word (.docx). Specifies how .docx fields that can't be converted to 4D Write Pro formulas are handled. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - The last computed value for the .docx field (if available) is imported. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | -| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Available values:

    **collapse** \- Paragraph formatting is modified to mimic automatically collapsed borders. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | -| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Specifies the preferred typeface to use when different typefaces are defined for a single font property in OOXML. Available values:

    **latin** (default) - Latin script **bidi** \- Bidrectional script. Suitable if document is mainly bidirectional left-to-right (LTR) or right-to-left (RTL) text (e.g., Arabic or Hebrew). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | -| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | -| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | +| **Atributo** | **Tipo** | **Description** | +| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | +| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | +| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | +| fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | +| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | +| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Specifies the preferred typeface to use when different typefaces are defined for a single font property in OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | +| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | +| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | **Notas de compatibilidad** -- *Character style sheets in legacy 4D Write documents use a proprietary mechanism, which is not supported by 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Legacy character style sheets are not imported and are no longer referenced in the document.* +- *Character style sheets in legacy 4D Write documents use a proprietary mechanism, which is not supported by 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Las hojas de estilo de caracteres antiguos no son importadas y ya no están referenciadas en el documento.* - *Support for importing in .docx format is only certified for Microsoft Word 2010 and newer. Versiones antiguas, especialmente Microsoft Word 2007, pueden no importar correctamente.* ## Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md index a0c8eaf8464807..9b3b514f1617ea 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md @@ -93,7 +93,7 @@ Por ejemplo, para insertar el número de página en el pie de página: ## Table formula context object -When used in a formula within the table, the **This** keyword gives access to different data according to the context: +Cuando se utiliza en una fórmula dentro de la tabla, la palabra clave **This** da acceso a diferentes datos según el contexto: | **Contexto** | **Expression** | **Tipo** | **Devuelve** | | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -104,7 +104,7 @@ When used in a formula within the table, the **This** keyword gives access to di | | [This](../commands/this.md).tableData | Collection o Entity selection (por lo general) | table.dataSource evaluada | | In each data row when a table datasource returns a collection or an entity selection | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | | | [This](../commands/this.md).itemIndex | Number | Índice del elemento actual en la colección o selección de entidades, a partir de 0 | -| In any row (except header rows) when a table datasource returns a collection or an entity selection | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    This expression returns the same type of value as the **This.tableData** expression. | +| In any row (except header rows) when a table datasource returns a collection or an entity selection | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    Esta expresión devuelve el mismo tipo de valor que la expresión **This.tableData**. | | In a break row | [This](../commands/this.md).breakItems | Collection o entity selection | Items of the collection or entity selection displayed in the rows between:
    • the current break row and the previous break row of the same level (or the start of the table) if the break row(s) are displayed after the data row.
    • the current break and the next break row of the same level (or the end of the table) if the break row(s) are displayed before the data row.
    | En cualquier otro contexto, estas expresiones devolverán *undefined*. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md index 798bbbc6c8e8f8..96e57899400ed5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md @@ -5,7 +5,7 @@ title: OpenAI # OpenAI -La clase `OpenAI` proporciona un cliente para acceder a varios recursos de la API OpenAI. It includes properties for managing API configurations and methods for performing HTTP requests to the OpenAI endpoints. +La clase `OpenAI` proporciona un cliente para acceder a varios recursos de la API OpenAI. Incluye propiedades de gestión de las configuraciones API y de los métodos para efectuar las peticiones HTTP a los puntos de terminación de OpenAI. ## Propiedades de configuración @@ -58,7 +58,7 @@ $client.baseURL:="https://server.ai" ## Recursos API -The API provides access to multiple resources that allow seamless interaction with OpenAI's services. Each resource is encapsulated within a dedicated API class, offering a structured and intuitive way to interact with different functionalities. +La API ofrece acceso a múltiples recursos que permiten una interacción perfecta con los servicios de OpenAI. Each resource is encapsulated within a dedicated API class, offering a structured and intuitive way to interact with different functionalities. | Nombre de la propiedad | Tipo | Descripción | | ---------------------- | ----------------------------------------------- | ------------------------------------------------ | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatAPI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatAPI.md index 8b794fda25d429..acf7c8b80ee550 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatAPI.md @@ -9,10 +9,10 @@ The `OpenAIChatAPI` class provides an interface to interact with OpenAI's chat b ## Propiedades -| Propiedad | Tipo | Descripción | -| ------------- | ------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `completions` | [OpenAIChatCompletionsAPI](OpenAIChatCompletionsAPI.md) | Una instancia que maneja las solicitudes de finalización del chat. | -| `vision` | [OpenAIVision](OpenAIVision.md) | A helper instance that handles vision-related requests. | +| Propiedad | Tipo | Descripción | +| ------------- | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `completions` | [OpenAIChatCompletionsAPI](OpenAIChatCompletionsAPI.md) | Una instancia que maneja las solicitudes de finalización del chat. | +| `vision` | [OpenAIVision](OpenAIVision.md) | Una instancia de ayuda que gestiona las peticiones relacionadas con la visión. | ## Function diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsAPI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsAPI.md index f5d15116434873..4ce850b3b4ecd9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsAPI.md @@ -5,7 +5,7 @@ title: OpenAIChatCompletionsAPI # OpenAIChatCompletionsAPI -La clase `OpenAIChatCompletionsAPI` está diseñada para gestionar las finalizaciones de chat con la API OpenAI. It provides methods to create, retrieve, update, delete, and list chat completions. +La clase `OpenAIChatCompletionsAPI` está diseñada para gestionar las finalizaciones de chat con la API OpenAI. Ofrece métodos para crear, recuperar, actualizar, eliminar y listar respuestas de chat. https://platform.openai.com/docs/api-reference/chat @@ -21,7 +21,7 @@ https://platform.openai.com/docs/api-reference/chat | *parámetros* | [OpenAIChatCompletionsParameters](OpenAIChatCompletionsParameters.md) | Los parámetros para la solicitud de finalización del chat. | | Resultado | Object | El resultado de la solicitud de finalización del chat. | -Creates a model response for the given chat conversation. +Crea un modelo de respuesta para la conversación dada. https://platform.openai.com/docs/api-reference/chat/create diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsListParameters.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsListParameters.md index 93b8c3e4bee066..7f1a363b63e090 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsListParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsListParameters.md @@ -5,7 +5,7 @@ title: OpenAIChatCompletionsListParameters # OpenAIChatCompletionsListParameters -This class is used to define parameters for retrieving a list of chat completions from the OpenAI API. Permite personalizar la paginación, ordenar y filtrar los mensajes de chat. +Esta clase se utiliza para definir los parámetros de recuperación de una lista de terminaciones de chat de la API OpenAI. Permite personalizar la paginación, ordenar y filtrar los mensajes de chat. ## Hereda diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md index 2502d80c2c15ea..c9624656bfe290 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md @@ -13,11 +13,11 @@ The `OpenAIChatCompletionsMessagesAPI` class is designed to interact with the Op **list**(*completionID* : Text; *parameters* : OpenAIChatCompletionsMessagesParameters) : Variant -| Parámetros | Tipo | Descripción | -| -------------- | ----------------------------------------- | -------------------------------------------------------------------------------- | -| *completionID* | Text | The ID of the chat completion to retrieve messages for. | -| *parámetros* | `OpenAIChatCompletionsMessagesParameters` | Parámetros para filtrar y personalizar la respuesta. | -| Resultado | Variant | Los mensajes recuperados asociados con la finalización del chat. | +| Parámetros | Tipo | Descripción | +| -------------- | ----------------------------------------- | ------------------------------------------------------------------------------------- | +| *completionID* | Text | El ID de la finalización de chat para la cual recuperar los mensajes. | +| *parámetros* | `OpenAIChatCompletionsMessagesParameters` | Parámetros para filtrar y personalizar la respuesta. | +| Resultado | Variant | Los mensajes recuperados asociados con la finalización del chat. | La función `list()` recupera los mensajes asociados a un ID de finalización de chat específico. Lanza un error si `completionID` está vacío. If the *parameters* argument is not an instance of `OpenAIChatCompletionsMessagesParameters`, it will create a new instance using the provided parameters. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIEmbeddingsAPI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIEmbeddingsAPI.md index dabbcc1cee4797..7d99ad8f1204a6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIEmbeddingsAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIEmbeddingsAPI.md @@ -15,14 +15,14 @@ https://platform.openai.com/docs/api-reference/embeddings **create**(*input* : Text; *model*: Text; *parameters* : OpenAIEmbeddingsParameters) : OpenAIEmbeddingsResult -Creates an embeddings for the provided input, model and parameters. - -| Argumento | Tipo | Descripción | -| ------------ | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| *entrada* | Texto o colección de texto | La entrada a vectorizar. | -| *model* | Text | The [model to use](https://platform.openai.com/docs/guides/embeddings#embedding-models) | -| *parámetros* | [OpenAIEmbeddingsParameters](OpenAIEmbeddingsParameters.md) | Los parámetros para personalizar la petición de representaciones vectoriales. | -| Resultado | [OpenAIEmbeddingsResult](OpenAIEmbeddingsResult.md) | Las integraciones. | +Crea una representación vectorial para la entrada, el modelo y los parámetros ofrecidos. + +| Argumento | Tipo | Descripción | +| ------------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| *entrada* | Texto o colección de texto | La entrada a vectorizar. | +| *model* | Text | El [modelo a utilizar] (https://platform.openai.com/docs/guides/embeddings#embedding-models) | +| *parámetros* | [OpenAIEmbeddingsParameters](OpenAIEmbeddingsParameters.md) | Los parámetros para personalizar la petición de representaciones vectoriales. | +| Resultado | [OpenAIEmbeddingsResult](OpenAIEmbeddingsResult.md) | Las integraciones. | #### Ejemplos de uso diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md index a1b407b5774618..50c983790a5e75 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md @@ -41,7 +41,7 @@ La clase `OpenAIError` está diseñada para manejar errores devueltos por la API | ---------------------------- | ------- | ------------------------------------------------------------------------------------------------- | | `isBadRequestError` | Boolean | Indica si se trata de un error 400 Bad Request. | | `isAuthenticationError` | Boolean | Indica si se trata de un error de autenticación 401. | -| `isPermissionDeniedError` | Boolean | Indicates ∏if the error is a 403 Permission Denied error. | +| `isPermissionDeniedError` | Boolean | Indica si el error es un error 403 Permiso denegado. | | `isNotFoundError` | Boolean | Indica si el error es un error 404 Not Found. | | `isUnprocessableEntityError` | Boolean | Indica si el error es un error de entidad no procesable (422). | | `isRateLimitError` | Boolean | Indica si el error es un error de límite de velocidad 429. | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIImage.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIImage.md index 04c86973e749d1..2917ecf2bf83db 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIImage.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIImage.md @@ -11,11 +11,11 @@ https://platform.openai.com/docs/api-reference/images/object ## Propiedades -| Propiedad | Tipo | Descripción | -| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------- | -| `url` | Text | La URL de la imagen generada, si `response_format` es `url` (por defecto). | -| `b64_json` | Text | The base64-encoded JSON of the generated image, if `response_format` is `b64_json`. | -| `revised_prompt` | Variant | The prompt that was used to generate the image, if there was any revision to the prompt. | +| Propiedad | Tipo | Descripción | +| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------- | +| `url` | Text | La URL de la imagen generada, si `response_format` es `url` (por defecto). | +| `b64_json` | Text | El JSON codificado en base64 de la imagen generada, si `response_format` es `b64_json`. | +| `revised_prompt` | Variant | La instrucción que se utilizó para generar la imagen, si hubo alguna revisión de la instrucción. | ## Funciones @@ -23,9 +23,9 @@ https://platform.openai.com/docs/api-reference/images/object **asBlob**() : 4D.Blob -| Parámetros | Tipo | Descripción | -| ---------- | ----------------------- | ------------------------------------------------------------------------------------------------------ | -| Resultado | 4D.Blob | Converts the generated image to a blob format based on its URL or base64-encoded JSON. | +| Parámetros | Tipo | Descripción | +| ---------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------ | +| Resultado | 4D.Blob | Convierte la imagen generada a un formato blob basado en su URL o en un JSON codificado en base64. | #### Ejemplo de Uso diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index fe0fd70f8dbc2e..217e62d372ad77 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -9,13 +9,13 @@ The `OpenAIMessage` class represents a structured message containing a role, con ## Propiedades -| Propiedad | Tipo | Descripción | -| -------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `rol` | Text | The role of the message (e.g., "user", "assistant", "system", "tool"). | -| `contenido` | Variant | El contenido del mensaje, que puede ser un texto o una colección de objetos. | -| `user` | Text | An optional property representing the user associated with the message. | -| `tool_calls` | Collection | A collection of tool calls requested by the assistant. Cada llamada a una herramienta contiene un objeto `id`, `type` y `function`. | -| `tool_call_id` | Text | El ID de la llamada a la herramienta a la que responde este mensaje (se utiliza cuando `role` es "tool"). | +| Propiedad | Tipo | Descripción | +| -------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `rol` | Text | El rol del mensaje (por ejemplo, "user", "assistant", "system", "tool"). | +| `contenido` | Variant | El contenido del mensaje, que puede ser un texto o una colección de objetos. | +| `user` | Text | Una propiedad opcional que representa al usuario asociado al mensaje. | +| `tool_calls` | Collection | Una colección de llamadas de herramientas solicitadas por el asistente. Cada llamada a una herramienta contiene un objeto `id`, `type` y `function`. | +| `tool_call_id` | Text | El ID de la llamada a la herramienta a la que responde este mensaje (se utiliza cuando `role` es "tool"). | ## Propiedades calculadas @@ -76,7 +76,7 @@ Cuando reciba un mensaje de llamada de herramienta, debe: 1. **Extraer la información relativa a la función:** - `function.name`: The name of the function to call (must match a function defined in your [OpenAITool](OpenAITool.md) - you can select code to execute according to this name) - - `function.arguments`: A JSON string containing the function parameters that must be parsed with `JSON Parse` + - `function.arguments`: una cadena JSON que contiene los parámetros de la función que deben analizarse con `JSON Parse` - `id`: el identificador único para esta llamada específica a la herramienta 2. **Execute the function:** @@ -103,7 +103,7 @@ var $toolResponse:=cs.AIKit.OpenAIMessage.new({ \ // Add it to the conversation and continue ``` -**Important:** The `tool_call_id` in your response must exactly match the `id` from the original tool call. This allows the AI model to correctly associate your response with the specific function call that was made. +**Important:** The `tool_call_id` in your response must exactly match the `id` from the original tool call. Esto permite que el modelo de IA asocie correctamente su respuesta con la llamada de función específica que se realizó. ## Ver también diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIModeration.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIModeration.md index 3c92f30cc3c7c7..1b7928f32cb10a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIModeration.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIModeration.md @@ -5,7 +5,7 @@ title: OpenAIModeration # OpenAIModeration -La clase `OpenAIModeration` está diseñada para manejar los resultados de moderación de la API OpenAI. It contains properties for storing the moderation ID, model used, and the results of the moderation. +La clase `OpenAIModeration` está diseñada para manejar los resultados de moderación de la API OpenAI. Contiene propiedades para almacenar el ID de moderación, el modelo utilizado y los resultados de la moderación. https://platform.openai.com/docs/api-reference/moderations/object diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIModerationResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIModerationResult.md index b486c693fb10f3..6ae6717533fd23 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIModerationResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIModerationResult.md @@ -5,7 +5,7 @@ title: OpenAIModerationResult # OpenAIModerationResult -The `OpenAIModerationResult` provides functionality to handle moderation results from the OpenAI API. +`OpenAIModerationResult` ofrece funcionalidades para manejar los resultados de moderación de la API OpenAI. ## Hereda diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIParameters.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIParameters.md index 9f01e306d19db4..9b33b972486a0f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIParameters.md @@ -19,14 +19,14 @@ Utilice esta propiedad de retrollamada para recibir el resultado independienteme Use these callback properties for more granular control over success and error handling: -| Propiedad | Tipo | Descripción | -| ------------ | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `onResponse` | 4D.Function | A function to be called asynchronously when the request finishes **successfully**. Asegúrese de que el proceso actual no termina. | -| `onError` | 4D.Function | A function to be called asynchronously when the request finishes **with errors**. Asegúrese de que el proceso actual no termina. | +| Propiedad | Tipo | Descripción | +| ------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `onResponse` | 4D.Function | Una función a llamar de forma asíncrona cuando la petición finalice **con éxito**. Asegúrese de que el proceso actual no termina. | +| `onError` | 4D.Function | Una función que se llamará de forma asíncrona cuando la petición finalice **con errores**. Asegúrese de que el proceso actual no termina. | > The callback function will receive the same result object type (one of [OpenAIResult](./OpenAIResult.md) child classes) that would be returned by the function in synchronous code. -See [documentation about asynchronous code for examples](../asynchronous-call.md) +Ver la [documentación sobre código asíncrono para ejemplos](../asynchronous-call.md) ### Propiedades de la red diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIResult.md index a56ffcdcd8d803..ef3e9ad3508ea9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIResult.md @@ -21,13 +21,13 @@ The `OpenAIResult` class is designed to handle the response from HTTP requests a | `errors` | Collection | Devuelve una colección de errores. Estos podrían ser errores de red o errores devueltos por OpenAI. | | `terminated` | Boolean | Un booleano que indica si la petición HTTP fue terminada. | | `headers` | Object | Devuelve los encabezados de respuesta como un objeto. | -| `rateLimit` | Object | Returns rate limit information from the response headers. | +| `rateLimit` | Object | Devuelve la información relativa al límite de tasa de los encabezados de la respuesta. | | `utilización` | Object | Devuelve la información de uso del cuerpo de la respuesta, si existe. | ### rateLimit -The `rateLimit` property returns an object containing rate limit information from the response headers. -This information includes the limits, remaining requests, and reset times for both requests and tokens. +La propiedad `rateLimit` devuelve un objeto que contiene información sobre el límite de velocidad de los encabezados de respuesta. +Esta información incluye los límites, las peticiones restantes y los tiempos de reinicialización tanto para peticiones como para tokens. For more details on rate limits and the specific headers used, refer to [the OpenAI Rate Limits Documentation](https://platform.openai.com/docs/guides/rate-limits#rate-limits-in-headers). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/compatible-openai.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/compatible-openai.md index 5b5e136edec480..ca4d836251504a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/compatible-openai.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/compatible-openai.md @@ -5,7 +5,7 @@ title: Proveedores # Proveedores -Many AI providers propose an OpenAI-like API, so you can use this project to connect to them. +Muchos proveedores de IA proponen una API similar a la de OpenAI, así que puede utilizar este proyecto para conectarse a ellos. Para ello sólo tiene que definir la `baseURL` a la del proveedor y utilizar su clave api si es necesario. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/code-editor/write-class-method.md b/i18n/es/docusaurus-plugin-content-docs/current/code-editor/write-class-method.md index 1fe91c02d0a301..15db7ba0a2435f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/code-editor/write-class-method.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/code-editor/write-class-method.md @@ -803,7 +803,7 @@ La etiqueta `` permite generar y utilizar macrocomandos que ejecutan mé El código de un método llamado se ejecuta en un nuevo proceso. Este proceso se cierra una vez se ejecuta el método. -> Note: The structure process remains frozen until the called method execution is completed. Debe asegurarse de que la ejecución es rápida y de que no hay riesgo de que bloquee la aplicación. If this occurs, use the **Ctrl+F8** (Windows) or **Command+F8** (macOS) command to "kill" the process. +> Note: The structure process remains frozen until the called method execution is completed. Debe asegurarse de que la ejecución es rápida y de que no hay riesgo de que bloquee la aplicación. Si esto ocurre, utilice el comando **Ctrl+F8** (Windows) o **Comando+F8** (macOS) para "matar" el proceso. ### Llamando macros diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md index 71416c9f2cbcc3..fdbd960b6e8acd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md @@ -25,14 +25,14 @@ displayed_sidebar: docs ## Descripción -The **Call chain** command returns a collection of objects describing each step of the method call chain within the current process. Ofrece la misma información que la ventana Depurador. It has the added benefit of being able to be executed from any 4D environment, including compiled mode. +The **Call chain** command returns a collection of objects describing each step of the method call chain within the current process. Ofrece la misma información que la ventana Depurador. Tiene la ventaja adicional de poder ser ejecutado desde cualquier entorno 4D, incluyendo el modo compilado. The command facilitates debugging by enabling the identification of the method or formula called, the component that called it, and the line number where the call was made. Cada objeto de la colección devuelta contiene las siguientes propiedades: | **Propiedad** | **Tipo** | **Description** | **Ejemplo** | | ------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | | database | Text | Name of the database calling the method (to distinguish host methods and component methods) | "database":"contactInfo" | -| formula | Text (si lo hay) | Contents of the current line of code at the current level of the call chain (raw text). Corresponde al contenido de la línea referenciada por la propiedad `line` en el archivo fuente indicado por el método. Si el código fuente no está disponible, la propiedad `formula` se omite (Undefined). | "var $stack:=Call chain" | +| formula | Text (si lo hay) | Contenido de la línea actual de código en el nivel actual de la cadena de llamadas (texto bruto). Corresponde al contenido de la línea referenciada por la propiedad `line` en el archivo fuente indicado por el método. Si el código fuente no está disponible, la propiedad `formula` se omite (Undefined). | "var $stack:=Call chain" | | línea | Integer | Número de línea de llamada al método | "line":6 | | name | Text | Nombre del método llamado | "name":"On Load" | | type | Text | Type of the method:
  • "projectMethod"
  • "formObjectMethod"
  • "formmethod"
  • "databaseMethod"
  • "triggerMethod"
  • "executeOnServer" (when calling a project method with the *Execute on Server attribute*)
  • "executeFormula" (when executing a formula via [PROCESS 4D TAGS](../commands-legacy/process-4d-tags.md) or the evaluation of a formula in a 4D Write Pro document)
  • "classFunction"
  • "formMethod"
  • | "type":"formMethod" | @@ -45,7 +45,7 @@ Para que este comando pueda operar en modo compilado, la [verificación de rango ## Ejemplo -The following code returns a collection of objects containing information about the method call chain: +El siguiente código devuelve una colección de objetos que contienen información acerca de la cadena de llamadas de métodos: ```4d var $currentCallChain : Collection diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md index 015524764df850..67339d42612c4b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md @@ -36,7 +36,7 @@ Hay dos parámetros opcionales: - *info*: propiedades del comando. The returned value is a *bit field*, where the following bits are meaningful: - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Only thread-safe commands can be used in [preemptive processes](../Develop/preemptive.md). - - Second bit (bit 1): set to 1 if the command is **deprecated**, and 0 if it is not. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). + - Segundo bit (bit 1): se define en 1 si el comando es **obsoleto**, y en 0 si no lo es. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). *theme*: nombre del tema del lenguaje 4D para el comando. @@ -80,9 +80,9 @@ En un formulario, quiere una lista desplegable con los comandos básicos de info  End case ``` -In the English version of 4D, the drop-down list will read: Sum, Average, Min, and Max. In the French version\*, the drop-down list will read: Somme, Moyenne, Min, and Max. +En la versión inglesa de 4D, la lista desplegable leerá: Sum, Average, Min y Max. In the French version\*, the drop-down list will read: Somme, Moyenne, Min, and Max. -\*with a 4D application configured to use the French programming language (see compatibility note) +\*con una aplicación 4D configurada para usar el lenguaje de programación en francés (ver nota de compatibilidad) ## Ejemplo 3 @@ -110,7 +110,7 @@ Luego, para el comando "SAVE RECORD" (53) por ejemplo, puede escribir: ## Ejemplo 4 -You want to return a collection of all deprecated commands in your version of 4D. +Quiere devolver una colección de todos los comandos obsoletos en su versión de 4D. ```4d var $info; $Lon_id : Integer diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/create-deployment-license.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/create-deployment-license.md index 57ffea72a3cfe9..a943e2ddaadfc1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/create-deployment-license.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/create-deployment-license.md @@ -112,7 +112,7 @@ Designar una licencia de uso: ## Ver también -[Blog post - Build an application with 4D commands](https://blog.4d.com/build-an-application-with-4d-commands) +[Post de blog - Crear una aplicación con los comandos 4D](https://blog.4d.com/build-an-application-with-4d-commands) ## Propiedades diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-get-property.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-get-property.md index 1950ec74b81673..e0fe65323178a0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-get-property.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-get-property.md @@ -85,7 +85,7 @@ Dado un list box "MyListbox", si ejecuta la siguiente instrucción: $Value:=LISTBOX Get property(*; "MyListbox";lk selection mode) // el valor devuelto indica el modo de selección ``` -In this case, the result returned indicates whether multiple rows can be selected. +En este caso, el resultado devuelto indica si varios registros pueden ser seleccionados. ## Ejemplo 2 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-set-property.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-set-property.md index bad06c1b5092c0..d6641157210542 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-set-property.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-set-property.md @@ -25,7 +25,7 @@ Si pasa el parámetro opcional *\**, indica que el parámetro *object* es un nom **Note:** If the list box or list box column specified using the *object* and *\** parameters does not exist, the command does nothing and no error is triggered. -In the *property* and *value* parameters, you indicate, respectively, the property to set and its new value. Puede utilizar las siguientes constantes encontradas en el tema “*List Box*: +En los parámetros *property* y *value*, usted indica, respectivamente, la propiedad a definir y su nuevo valor. Puede utilizar las siguientes constantes encontradas en el tema “*List Box*: | Constante | Valor | Comentario | | ------------------------------ | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -69,7 +69,7 @@ In the *property* and *value* parameters, you indicate, respectively, the proper ## Ejemplo 1 -You want to make all columns of the "MyListbox" list box resizable: +Quiere que todas las columnas del list box "MyListbox" sean redimensionables: ```4d LISTBOX SET PROPERTY(*;"MyListbox";lk column resizable;lk yes) //Todas las columnas del list box "MyListbox" se establecen como redimensionables diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/new-log-file.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/new-log-file.md index dc7638f769dbd6..a3a706e3623201 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/new-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/new-log-file.md @@ -20,12 +20,12 @@ displayed_sidebar: docs The **New log file** command closes the current log file, renames it and creates a new one with the same name in the same location as the previous one. This command is meant to be used for setting up a backup system using a logical mirror (see the section *Setting up a logical mirror* in the [4D Server Reference Manual](https://doc/4d.com)). -The command returns the full pathname (access path + name) of the log file being closed (called the “segment”). Este archivo se almacena en la misma ubicación que el archivo de registro actual (especificado en la [página de configuración](../Backup/settings.md#configuration) en el tema de copia de seguridad de la configuración). The command does not carry out any processing (compression, segmentation) on the saved file. No aparece ninguna +El comando devuelve el nombre completo de la ruta (ruta de acceso + nombre) del archivo de registro que se está cerrando (llamado “segment”). Este archivo se almacena en la misma ubicación que el archivo de registro actual (especificado en la [página de configuración](../Backup/settings.md#configuration) en el tema de copia de seguridad de la configuración). El comando no realiza ningún procesamiento (compresión, segmentación) en el archivo guardado. No aparece ninguna caja de diálogo. The file is renamed with the current backup numbers of the database and of the log file, as shown in the following example: DatabaseName\[BackupNum-LogBackupNum\].journal. Por ejemplo: -- If the MyDatabase.4DD database has been saved 4 times, the last backup file will be named MyDatabase\[0004\].4BK. The name of the first “segment” of the log file will therefore be MyDatabase\[0004-0001\].journal. +- If the MyDatabase.4DD database has been saved 4 times, the last backup file will be named MyDatabase\[0004\].4BK. El nombre del primer “segment” del archivo de registro será, por lo tanto, MyDatabase\[0004-0001\].journal. - If the MyDatabase.4DD database has been saved 3 times and the log file has been saved 5 times since, the name of the 6th backup of the log file will be MyDatabase\[0003-0006\].journal. :::warning diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/select-log-file.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/select-log-file.md index 4645679308f3d1..05b28a5eb1d550 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/select-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/select-log-file.md @@ -17,11 +17,11 @@ displayed_sidebar: docs ## Descripción -The **SELECT LOG FILE** command creates, or closes the log file according to the value you pass in parameter. +El comando **SELECT LOG FILE** crea o cierra el archivo de historial de acuerdo al valor que pase en el parámetro. -In *logFile*, pass the name or the full pathname of the log file to be created. If you only pass a name, the file will be created in the "Logs" folder of the database located next to the database structure file. +En *logFile*, pase el nombre o la ruta completa del archivo de registro a ser creado. If you only pass a name, the file will be created in the "Logs" folder of the database located next to the database structure file. -If you pass an empty string in *logFile*, **SELECT LOG FILE** presents an Save File dialog box, allowing the user to choose the name and location of the log file to be created. Si el archivo se crea correctamente, la variable OK toma el valor 1. Otherwise, if the user clicks Cancel or if the log file could not be created, OK is set to 0. +If you pass an empty string in *logFile*, **SELECT LOG FILE** presents an Save File dialog box, allowing the user to choose the name and location of the log file to be created. Si el archivo se crea correctamente, la variable OK toma el valor 1. De lo contrario, si el usuario hace clic en Cancelar o si el archivo de registro no pudo ser creado, OK toma el valor 0. **Note:** The new log file is not generated immediately after execution of the command, but after the next backup (the parameter is kept in the data file and will be taken into account even if the database is closed in the meantime) or a call to the [New log file](new-log-file.md) command. Puede llamar al comando [BACKUP](../commands-legacy/backup.md) para activar la creación del archivo de registro. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/string.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/string.md index 18740b9b6c98e9..cd80fd800c2ca9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/string.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/string.md @@ -31,7 +31,7 @@ displayed_sidebar: docs El comando **String** devuelve en forma de cadena alfanumérica la expresión numérica, fecha, hora, cadena o booleana que se pasa en *expression*. -If you do not pass any other parameter, the string is returned with the appropriate default format. Si pasa *format*, puede forzar que la cadena resultante tenga un formato específico. +Si no pasa ningún otro parámetro, la cadena se devuelve con el formato apropiado por defecto. Si pasa *format*, puede forzar que la cadena resultante tenga un formato específico. El parámetro opcional *addTime* añade una hora a una fecha en un formato combinado. Sólo puede utilizarse cuando el parámetro *expression* es una fecha (ver abajo). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/trim.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/trim.md index 5cb9ac27fad57e..44a293403f43d9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/trim.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/trim.md @@ -31,7 +31,7 @@ To return a new string with whitespace trimmed from just one end, use [`Trim sta En el parámetro *aString*, puede pasar cualquier expresión de tipo texto. Será dejado sin tocar por el comando. -El comando devuelve la versión recortada de la cadena *aString*. If there is no whitespace at any end of *aString*, the returned string is identical as the one passed in parameter. +El comando devuelve la versión recortada de la cadena *aString*. Si no hay espacios en blanco en ningún extremo de *aString*, la cadena devuelta es idéntica a la pasada como parámetro. :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/wa-get-context.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/wa-get-context.md index 98329331b077f7..366311d7124bd5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/wa-get-context.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/wa-get-context.md @@ -18,7 +18,7 @@ displayed_sidebar: docs ### Descripción -El comando `WA Get context` recupera el objeto de contexto definido para `$4d` en el área Web designada por los parámetros \* y *object* utilizando [`WA SET CONTEXT`](./wa-set-context.md). If `WA SET CONTEXT` was not called for the web area the command returns `null`. +El comando `WA Get context` recupera el objeto de contexto definido para `$4d` en el área Web designada por los parámetros \* y *object* utilizando [`WA SET CONTEXT`](./wa-set-context.md). Si `WA SET CONTEXT` no fue llamado para el área web, el comando devuelve `null`. :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/current/settings/client-server.md b/i18n/es/docusaurus-plugin-content-docs/current/settings/client-server.md index b03e5465634991..a2115ea9a211c6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/settings/client-server.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/settings/client-server.md @@ -92,7 +92,7 @@ En caso de modificación, deberá reiniciar la aplicación para que se tenga en :::note -This option is not available when the [QUIC](#network-layer) network layer is selected. +Esta opción no está disponible cuando se selecciona la capa de red [QUIC](#network-layer). ::: @@ -110,7 +110,7 @@ Cuando esta opción está marcada, todas las máquinas remotas 4D que se conecta :::note -This option is not available when the [QUIC](#network-layer) network layer option is selected. +Esta opción no está disponible cuando se selecciona la opción capa de red [QUIC](#network-layer). ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/settings/web.md b/i18n/es/docusaurus-plugin-content-docs/current/settings/web.md index 052d2beaf51c2c..d827ba37fa6121 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/settings/web.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/settings/web.md @@ -124,7 +124,7 @@ Define el sistema de autenticación que desea aplicar a su servidor web. Se prop - Contraseñas con protocolo BASIC - Contraseñas con protocolo DIGEST -Se recomienda utilizar la autenticación **personalizada**. See [**Authentication**](../WebServer/authentication.md) section. +Se recomienda utilizar la autenticación **personalizada**. Ver la sección[**autenticación**](../WebServer/authentication.md). #### Generic Web User diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md index 06e3a6417575d3..b15f5e0bde777c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md @@ -2519,7 +2519,7 @@ Con el siguiente método *NumberGreaterThan0*: La función `.orderBy()` ordena los elementos de la colección original y también devuelve la colección ordenada. > Esta función modifica la colección original. -Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. You can also pass one of the following constants in the *ascOrDesc* parameter: +Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. También puede pasar una de las siguientes constantes en el parámetro *ascOrDesc*: |Constant| Type|Value|Comment| |---|---|---|---| diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index de25918e361018..b19fb72882385a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -3169,7 +3169,7 @@ La función `.sort()` ordena los elemento > Esta función modifica la colección original. Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. -You can also pass one of the following constants in the *ascOrDesc* parameter: +También puede pasar una de las siguientes constantes en el parámetro *ascOrDesc*: ``` |Constant| Type|Value|Comment| diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CryptoKeyClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CryptoKeyClass.md index 165d71999ad19e..0dcbda2559aa1c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CryptoKeyClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CryptoKeyClass.md @@ -54,12 +54,12 @@ La función `4D.CryptoKey.new()` crea un #### *settings* -| Propiedad | Tipo | Descripción | -| --------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [type](#type) | text | Defines the type of the key to create:
  • "RSA": generates a RSA key pair, using [.size](#size) as size.
  • "ECDSA": generates an Elliptic Curve Digital Signature Algorithm key pair, using [.curve](#curve) as curve. Tenga en cuenta que las llaves ECDSA no pueden utilizarse para el cifrado, sino solo para la firma.
  • "PEM": loads a key pair definition in PEM format, using [.pem](#pem).
  • | -| [curve](#curve) | text | Nombre de la curva ECDSA | -| [pem](#pem) | text | Definición PEM de una llave de cifrado a cargar | -| [size](#size) | integer | Tamaño de la llave RSA en bits | +| Propiedad | Tipo | Descripción | +| --------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type) | text | Define el tipo de llave a crear:
  • "RSA": genera un par de llaves RSA, utilizando [.size](#size) como tamaño.
  • "ECDSA": genera un par de llaves Elliptic Curve Digital Signature Algorithm, utilizando [.curve](#curve) como curva. Tenga en cuenta que las llaves ECDSA no pueden utilizarse para el cifrado, sino solo para la firma.
  • "PEM": carga una definición de par de llaves en formato PEM, utilizando [.pem](#pem).
  • | +| [curve](#curve) | text | Nombre de la curva ECDSA | +| [pem](#pem) | text | Definición PEM de una llave de cifrado a cargar | +| [size](#size) | integer | Tamaño de la llave RSA en bits | #### *CryptoKey* diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/EntityClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/EntityClass.md index 36b6aaf3f75cb6..91d6bb80d4d4f3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/EntityClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/EntityClass.md @@ -397,7 +397,7 @@ El objeto devuelto por `.drop()` contiene las siguientes propiedades: | `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza entity.drop( ), este error puede ser devuelto cuando se utiliza la opción dk force drop if stamp changed. Cuando se utiliza entity.lock(), se puede devolver este error cuando la opción dk reload if stamp changed es utilizada
  • **statusText asociado**: "Entity does not exist anymore" | | `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista.
    **statusText asociado**: "Already locked" | | `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
    **statusText asociado**\*: "Other error" | -| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save( )`: error only if the `dk auto merge` option is not used
  • with `.drop( )`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used
  • **Associated statusText**: "Stamp has changed"
  • | +| `dk status stamp has changed` | 2 | El valor del marcador interno (stamp) de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • with `.save( )`: error only if the `dk auto merge` option is not used
  • with `.drop( )`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used
  • **Associated statusText**: "Stamp has changed"
  • | | `dk status wrong permission` | 1 | Los privilegios actuales no permiten suprimir la entidad. **Associated statusText**: "Permission Error" | #### Ejemplo 1 @@ -1017,7 +1017,7 @@ El objeto devuelto por `.lock()` contiene las siguientes propiedades: | `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza `.drop( )`, este error puede devolverse cuando se utiliza la opción `dk force drop if stamp changed`. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | | `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista. **statusText asociado**: "Already locked" | | `dk status serious error` | 4 | Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc.
    **statusText asociado**: "Other error" | -| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save( )`: error only if the `dk auto merge` option is not used
  • with `.drop( )`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | +| `dk status stamp has changed` | 2 | El valor del sello interno de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • with `.save( )`: error only if the `dk auto merge` option is not used
  • with `.drop( )`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | #### Ejemplo 1 @@ -1279,7 +1279,7 @@ Los siguientes valores pueden ser devueltos en las propiedades `status`y `status | `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | | `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista. **statusText asociado**: "Already locked" | | `dk status serious error` | 4 | Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc.
    **statusText asociado**: "Other error" | -| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save( )`: error only if the `dk auto merge` option is not used
  • with `.drop( )`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | +| `dk status stamp has changed` | 2 | El valor del marcador interno (stamp) de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • with `.save( )`: error only if the `dk auto merge` option is not used
  • with `.drop( )`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | | `dk status wrong permission` | 1 | Los privilegios actuales no permiten guardar la entidad. **Associated statusText**: "Permission Error" | #### Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/IMAPTransporterClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/IMAPTransporterClass.md index 05be142672c1db..00fb9eee94ee8e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/IMAPTransporterClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/IMAPTransporterClass.md @@ -791,16 +791,16 @@ En el parámetro opcional `parameters`, pase un objeto que contenga valores para Cada objeto de la colección devuelta contiene las siguientes propiedades: -| Propiedad | Tipo | Descripción | -| ------------------------------------------------------------------------------------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| \[].name | Text | Nombre del buzón. Devuelto si withBoxProperties=true o withBoxInfo=true | -| \[].selectable | Boolean | Indica si los derechos de acceso permiten o no seleccionar el buzón de correo:
    • true - el buzón puede ser seleccionado
    • false - el buzón de correo no puede ser seleccionado
    Devuelto si withBoxProperties=true | -| \[].inferior | Boolean | Indica si los derechos de acceso permiten o no crear una jerarquía inferior en el buzón:
    • true - se puede crear un nivel inferior
    • false - no se puede crear un nivel inferior
    Se devuelve si withBoxProperties=true | -| \[].interesting | Boolean | Indica si el buzón ha sido marcado como "interesante" por el servidor:
    • true - El buzón ha sido marcado como "interesante" por el servidor. Por ejemplo, puede contener mensajes nuevos.
    • false - The mailbox has not been marked "interesting" by the server.
    Se devuelve si withBoxProperties=true | -| [].mailCount | Number | Número de mensajes en el buzón. Devuelto si withBoxInfo=true | -| [].mailRecent | Number | Número de mensajes marcados como "recent" (indicando nuevos mensajes). Devuelto si withBoxInfo=true | -| [].mailUnseen | Number | Número de mensajes marcados como "unseen". Devuelto si withBoxInfo=true | -| [].id | Text | Identificador único del buzón. Devuelto si withBoxInfo=true | +| Propiedad | Tipo | Descripción | +| ------------------------------------------------------------------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| \[].name | Text | Nombre del buzón. Devuelto si withBoxProperties=true o withBoxInfo=true | +| \[].selectable | Boolean | Indica si los derechos de acceso permiten o no seleccionar el buzón de correo:
    • true - el buzón puede ser seleccionado
    • false - el buzón de correo no puede ser seleccionado
    Devuelto si withBoxProperties=true | +| \[].inferior | Boolean | Indica si los derechos de acceso permiten o no crear una jerarquía inferior en el buzón:
    • true - se puede crear un nivel inferior
    • false - no se puede crear un nivel inferior
    Se devuelve si withBoxProperties=true | +| \[].interesting | Boolean | Indica si el buzón ha sido marcado como "interesante" por el servidor:
    • true - El buzón ha sido marcado como "interesante" por el servidor. Por ejemplo, puede contener mensajes nuevos.
    • false - El buzón no ha sido marcado como "interesante" por el servidor.
    Se devuelve si withBoxProperties=true | +| [].mailCount | Number | Número de mensajes en el buzón. Devuelto si withBoxInfo=true | +| [].mailRecent | Number | Número de mensajes marcados como "recent" (indicando nuevos mensajes). Devuelto si withBoxInfo=true | +| [].mailUnseen | Number | Número de mensajes marcados como "unseen". Devuelto si withBoxInfo=true | +| [].id | Text | Identificador único del buzón. Devuelto si withBoxInfo=true | Si la cuenta no contiene buzones, se devuelve una colección vacía. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Admin/cli.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Admin/cli.md index 629c6c21a7223c..cc30a3dc01b1af 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Admin/cli.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Admin/cli.md @@ -44,25 +44,25 @@ Sintaxis: [--utility] [--skip-onstartup] [--startup-method ] ``` -| Argumento | Valor | Descripción | -| :-------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `applicationPath` | Ruta de 4D, 4D Server, aplicación fusionada o tool4d | Lanza la aplicación.
    If not headless: identical to double-clicking the application; when called without structure file argument, the application is executed and the 'select database' dialog box appears. | -| `--version` | | Muestra la versión de la aplicación y sale | -| `--help` | | Muestra el mensaje de ayuda y sale. Argumentos alternativos: -?, -h | -| `--project` | projectPath | packagePath | 4dlinkPath | Archivo de proyecto a abrir con el archivo de datos actual. No aparece ninguna caja de diálogo. | -| `--data` | dataPath | Archivo de datos a abrir con el archivo de proyecto designado. Si no se especifica, se utiliza el último archivo de datos abierto. | -| `--opening-mode` | interpreted | compiled | Base de datos de peticiones a abrir en modo interpretado o compilado. No se lanza ningún error si el modo solicitado no está disponible. | -| `--create-data` | | Crea automáticamente un nuevo archivo de datos si no se encuentra un archivo de datos válido. No aparece ninguna caja de diálogo. 4D utiliza el nombre del archivo pasado en el argumento "--data" si lo hay (genera un error si ya existe un archivo con el mismo nombre). | -| `--user-param` | Cadena usuario personalizada | Una cadena que estará disponible en la aplicación a través del comando [`Get database parameter`](../commands-legacy/get-database-parameter.md) (la cadena no debe comenzar por un carácter "-", que está reservado). | -| `--headless` | | Lanza 4D, 4D Server o la aplicación fusionada sin interfaz (modo headless). En este modo:
  • El modo Diseño no está disponible, la base de datos se inicia en modo Aplicación
  • No se muestra la barra de herramientas, la barra de menú, la ventana MDI ni la pantalla de presentación
  • No se muestra ningún icono en el dock o la barra de tareas
  • La base de datos abierta no se registra en el menú "Bases de datos recientes"
  • Se inicia automáticamente el registro de diagnóstico (ver [SET DATABASE PARAMETER](../commands-legacy/set-database-parameter.md), selector 79)
  • Se intercepta cada llamada a una caja de diálogo y se suministra una respuesta automática (por ejemplo, OK para el comando [ALERT](../commands-legacy/alert.md), Abort para un diálogo de error...). All intercepted commands(\*) are logged in the diagnostic log.

  • For maintenance needs, you can send any text to standard output streams using the [LOG EVENT](../commands-legacy/log-event.md) command. Tenga en cuenta que las aplicaciones 4D sin interfaz sólo pueden cerrarse mediante una llamada a [QUIT 4D](../commands-legacy/quit-4d.md) o utilizando el administrador de tareas del sistema operativo. | -| `--dataless` | | Lanza 4D, 4D Server, la aplicación fusionada o tool4d en modo sin datos. El modo sin datos es útil cuando 4D ejecuta tareas sin necesidad de datos (compilación de proyectos, por ejemplo). In this mode:
  • No file containing data is opened, even if specified in the command line or the `.4DLink` file, or when using the `CREATE DATA FILE` and `OPEN DATA FILE` commands.
  • Los comandos que manipulan datos arrojarán un error. Por ejemplo, `CREATE RECORD` lanza "no hay tabla a la que aplicar el comando".

  • **Nota**:
  • si se pasa en la línea de comando, el modo dataless se aplica a todas las bases de datos abiertas en 4D, mientras no se cierre la aplicación.
  • Si se pasa utilizando el archivo `.4DLink`, el modo dataless sólo se aplica a la base de datos especificada en el archivo `.4DLink`. Para más información sobre los archivos `.4DLink`, ver [Atajos para abrir proyectos](../GettingStarted/creating.md#project-opening-shortcuts).
  • | -| `--webadmin-settings-file` | Ruta del archivo | Ruta del archivo `.4DSettings` personalizado para el [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | -| `--webadmin-access-key` | Text | Llave de acceso para el [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | -| `--webadmin-auto-start` | Boolean | Estado del lanzamiento automático del [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | -| `--webadmin-store-settings` | | Almacena la llave de acceso y los parámetros de inicio automático en el archivo de parámetros actualmente utilizado (es decir, el archivo [`WebAdmin.4DSettings`](webAdmin.md#webadmin-settings) por defecto o un archivo personalizado designado con el parámetro `--webadmin-settings-path`). Utilice el argumento `--webadmin-store-settings` para guardar esta configuración si es necesario. No disponible con [tool4d](#tool4d). | -| `--utility` | | Sólo disponible con 4D Server. Sólo disponible con 4D Server. | -| `--skip-onstartup` | | Lanza el proyecto sin ejecutar ningún método "automático", incluyendo los métodos base `On Startup` y `On Exit` | -| `--startup-method` | Nombre del método proyecto (cadena) | Método de proyecto a ejecutar inmediatamente después del método base `On Startup` (si no se omite con `--skip-onstartup`). | +| Argumento | Valor | Descripción | +| :-------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `applicationPath` | Ruta de 4D, 4D Server, aplicación fusionada o tool4d | Lanza la aplicación.
    If not headless: identical to double-clicking the application; when called without structure file argument, the application is executed and the 'select database' dialog box appears. | +| `--version` | | Muestra la versión de la aplicación y sale | +| `--help` | | Muestra el mensaje de ayuda y sale. Argumentos alternativos: -?, -h | +| `--project` | projectPath | packagePath | 4dlinkPath | Archivo de proyecto a abrir con el archivo de datos actual. No aparece ninguna caja de diálogo. | +| `--data` | dataPath | Archivo de datos a abrir con el archivo de proyecto designado. Si no se especifica, se utiliza el último archivo de datos abierto. | +| `--opening-mode` | interpreted | compiled | Base de datos de peticiones a abrir en modo interpretado o compilado. No se lanza ningún error si el modo solicitado no está disponible. | +| `--create-data` | | Crea automáticamente un nuevo archivo de datos si no se encuentra un archivo de datos válido. No aparece ninguna caja de diálogo. 4D utiliza el nombre del archivo pasado en el argumento "--data" si lo hay (genera un error si ya existe un archivo con el mismo nombre). | +| `--user-param` | Cadena usuario personalizada | Una cadena que estará disponible en la aplicación a través del comando [`Get database parameter`](../commands-legacy/get-database-parameter.md) (la cadena no debe comenzar por un carácter "-", que está reservado). | +| `--headless` | | Lanza 4D, 4D Server o la aplicación fusionada sin interfaz (modo headless). En este modo:
  • El modo Diseño no está disponible, la base de datos se inicia en modo Aplicación
  • No se muestra la barra de herramientas, la barra de menú, la ventana MDI ni la pantalla de presentación
  • No se muestra ningún icono en el dock o la barra de tareas
  • La base de datos abierta no se registra en el menú "Bases de datos recientes"
  • Se inicia automáticamente el registro de diagnóstico (ver [SET DATABASE PARAMETER](../commands-legacy/set-database-parameter.md), selector 79)
  • Se intercepta cada llamada a una caja de diálogo y se suministra una respuesta automática (por ejemplo, OK para el comando [ALERT](../commands-legacy/alert.md), Abort para un diálogo de error...). Todos los comandos interceptados(\*) se registran en el registro de diagnóstico.

  • For maintenance needs, you can send any text to standard output streams using the [LOG EVENT](../commands-legacy/log-event.md) command. Tenga en cuenta que las aplicaciones 4D sin interfaz sólo pueden cerrarse mediante una llamada a [QUIT 4D](../commands-legacy/quit-4d.md) o utilizando el administrador de tareas del sistema operativo. | +| `--dataless` | | Lanza 4D, 4D Server, la aplicación fusionada o tool4d en modo sin datos. El modo sin datos es útil cuando 4D ejecuta tareas sin necesidad de datos (compilación de proyectos, por ejemplo). In this mode:
  • No file containing data is opened, even if specified in the command line or the `.4DLink` file, or when using the `CREATE DATA FILE` and `OPEN DATA FILE` commands.
  • Los comandos que manipulan datos arrojarán un error. Por ejemplo, `CREATE RECORD` lanza "no hay tabla a la que aplicar el comando".

  • **Nota**:
  • si se pasa en la línea de comando, el modo dataless se aplica a todas las bases de datos abiertas en 4D, mientras no se cierre la aplicación.
  • Si se pasa utilizando el archivo `.4DLink`, el modo dataless sólo se aplica a la base de datos especificada en el archivo `.4DLink`. Para más información sobre los archivos `.4DLink`, ver [Atajos para abrir proyectos](../GettingStarted/creating.md#project-opening-shortcuts).
  • | +| `--webadmin-settings-file` | Ruta del archivo | Ruta del archivo `.4DSettings` personalizado para el [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | +| `--webadmin-access-key` | Text | Llave de acceso para el [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | +| `--webadmin-auto-start` | Boolean | Estado del lanzamiento automático del [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | +| `--webadmin-store-settings` | | Almacena la llave de acceso y los parámetros de inicio automático en el archivo de parámetros actualmente utilizado (es decir, el archivo [`WebAdmin.4DSettings`](webAdmin.md#webadmin-settings) por defecto o un archivo personalizado designado con el parámetro `--webadmin-settings-path`). Utilice el argumento `--webadmin-store-settings` para guardar esta configuración si es necesario. No disponible con [tool4d](#tool4d). | +| `--utility` | | Sólo disponible con 4D Server. Sólo disponible con 4D Server. | +| `--skip-onstartup` | | Lanza el proyecto sin ejecutar ningún método "automático", incluyendo los métodos base `On Startup` y `On Exit` | +| `--startup-method` | Nombre del método proyecto (cadena) | Método de proyecto a ejecutar inmediatamente después del método base `On Startup` (si no se omite con `--skip-onstartup`). | (\*) Algunos diálogos se muestran antes de abrir la base de datos, por lo que es imposible escribir en el [archivo de registro de diagnóstico](Debugging/debugLogFiles.md#4ddiagnosticlogtxt) (alerta de licencia, diálogo de conversión, selección de bases de datos, selección de archivos de datos). En este caso, se lanza un mensaje de error tanto en el flujo stderr como en el registro de eventos sistema, diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md index d6b32a4f015be7..6d1c175bec05b2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md @@ -73,7 +73,7 @@ Para cada petición, se registran los siguientes campos: | server\_duration | exec\_duration | Depende del lugar donde se genere el registro:
  • _server\*duration* cuando se genera en el cliente --Time tomado en microsegundos para que el servidor procese la solicitud y devuelva una respuesta. B a F en la imagen de abajo, O
  • _exec\*duration* cuando se genera en el servidor --Tiempo empleado en microsegundos para que el servidor procese la petición. B a E en la imagen de abajo.
  • | | write\_duration | Tiempo tomado en microsegundos para enviar la:
  • Petición (cuando se ejecuta en el cliente). A a B en la imagen inferior.
  • Respuesta (cuando se ejecuta en el servidor). E a F en la imagen de abajo.
  • | | task_kind | Apropiativo o cooperativo (respectivamente "p" o "c") | -| rtt | Tiempo estimado en microsegundos para que el cliente envíe la solicitud y el servidor la acuse de recibo. A a D y E a H en la imagen inferior.
  • Only measured when using the ServerNet network layer, returns 0 when used with the legacy network layer.
  • For Windows versions prior to Windows 10 or Windows Server 2016, the call will return 0.
  • | +| rtt | Tiempo estimado en microsegundos para que el cliente envíe la solicitud y el servidor la acuse de recibo. A a D y E a H en la imagen inferior.
  • Sólo se mide cuando se utiliza la capa de red ServerNet, devuelve 0 cuando se utiliza con la capa de red heredada.
  • Para las versiones de Windows anteriores a Windows 10 o Windows Server 2016, la llamada devolverá 0.
  • | | extra | Información adicional relacionada con el contexto, por ejemplo el nombre de la clase de datos y/o el nombre del atributo en caso de petición ORDA | Flujo de solicitudes: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Desktop/labels.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Desktop/labels.md index 6f88b8f6be305b..ebbb7212ad3b94 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Desktop/labels.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Desktop/labels.md @@ -127,22 +127,22 @@ El lado derecho de la barra de herramientas contiene comandos utilizados para mo ## Página Diseño -The Layout page contains controls for printing labels based on the requirements of your current print settings. +Esta página contiene los controles para imprimir etiquetas en función de los requisitos de sus parámetros de impresión actuales. ![](../assets/en/Desktop/label-layout.png) -- **Labels Order**: Specifies whether labels should be printed in the direction of the rows or the columns. -- **Rows** and **Columns**: Set the number of labels to be printed by "row" and by "column" on each sheet. These settings determine the label size when the "Automatic resizing" option is enabled. -- **Labels per record**: Sets the number of copies to print for each label (copies are printed consecutively). -- **Print Setup...**: Sets the format of the page on which the sheet of labels will be printed. When you click this button, the setup dialog box for the printer selected in your system appears. By default, the sheet of labels is generated based on an A4 page in portrait mode. - **Note:** The sheet created by the editor is based on the logical page of the printer, i.e. the physical page (for instance, an A4 page) less the margins that cannot be used on each side of the sheet. The physical margins of the page are shown by blue lines in the preview area. -- **Unit**: Changes the units in which you specify your label and label page measurements. Puede utilizar puntos, milímetros, centímetros o pulgadas. -- **Automatic resizing**: Means that 4D automatically calculates the size of the labels (i.e. the Width and Height parameters) according to the values set in all the other parameters. When this option is checked, the label size is adjusted each time you modify a page parameter. Los parámetros Ancho y Alto ya no pueden ajustarse manualmente. -- **Ancho** y **Alto**: define la altura y el ancho de cada etiqueta manualmente. They cannot be edited when the **Automatic resizing** option is checked. -- **Márgenes** (Superior, Derecho, Izquierdo, Inferior): define los márgenes de su hoja. Estos márgenes son simbolizados por líneas azules en el área de vista previa. Clicking on **Use printer margins** replicates, in the preview area, the margin information provided by the selected printer (these values can be modified). -- **Gaps**: Set the amount of vertical and/or horizontal space between label rows and columns. -- **Method**: Lets you trigger a specific method that will be run at print time. For example, you can execute a method that posts the date and time that each label was printed. This feature is also useful when you print labels using a dedicated table form, in which case you can fill variables from a method. - To be eligible for label processing, a project method must comply with the following settings: +- **Orden de etiquetas**: indica si las etiquetas deben imprimirse en la dirección de las líneas o de las columnas. +- **Líneas** y **Columnas**: defina el número de etiquetas a imprimir por "línea" y "columna" en cada hoja. Estos parámetros determinan las dimensiones de las etiquetas cuando la opción "Dimensiones automáticas" está activada. +- **Etiquetas por registro**: define el número de copias a imprimir para cada etiqueta (las copias se imprimen consecutivamente). +- **Formato de impresión...**: formato de la página en la que se imprimirá la hoja de etiquetas. Cuando hace clic en este botón, aparece el cuadro de diálogo de configuración de la impresora seleccionada en su sistema. Por defecto, la hoja de etiquetas se genera basándose en una página A4 en modo retrato. + **Nota:** la hoja creada por el editor se basa en la página lógica de la impresora, es decir, la página física (por ejemplo, una hoja A4) menos los márgenes que no se pueden utilizar a cada lado de la hoja. Los márgenes de la página física se representan por las líneas azules en el área de vista previa. +- **Unidad**: modifica las unidades en las que especifica las medidas de la etiqueta y de la página de etiqueta. Puede utilizar puntos, milímetros, centímetros o pulgadas. +- **Dimensiones automáticas**: indica que 4D calcula automáticamente el tamaño de las etiquetas (es decir, los parámetros Ancho y Alto) según los valores definidos en todos los demás parámetros. Cuando esta opción está marcada, el tamaño de las etiquetas se recalcula cada vez que se modifica un parámetro en la página. Los parámetros Ancho y Alto ya no pueden ajustarse manualmente. +- **Ancho** y **Alto**: define la altura y el ancho de cada etiqueta manualmente. No se pueden editar cuando la opción **Dimensionamiento automático** está marcada. +- **Márgenes** (Superior, Derecho, Izquierdo, Inferior): define los márgenes de su hoja. Estos márgenes son simbolizados por líneas azules en el área de vista previa. Al hacer clic en **Aplicar los márgenes de la impresora** con el fin de replicar, en el área de vista previa, la información de margen proporcionada por la impresora seleccionada (estos valores pueden ser modificados). +- **Intervalos**: defina el espacio vertical y/o horizontal entre las líneas y columnas de las etiquetas. +- **Método**: permite activar un método específico que se ejecutará al momento de la impresión. Por ejemplo, puede ejecutar un método que publique la fecha y la hora en que se imprimió cada etiqueta. Esta funcionalidad también es útil cuando se imprimen etiquetas usando un formulario tabla dedicado, en cuyo caso se pueden llenar variables a partir de un método. + Para ser elegible para el procesamiento de etiquetas, un método proyecto debe cumplir con las siguientes condiciones: - debe ser "permitido" para la base de datos (los métodos permitidos dependen de los [parámetros del proyecto](../settings/security.md#options) y el comando [`SET ALLOWED METHODS`](../commands/set-allowed-methods.md), de lo contrario no se mostrará en el menú **Aplicación**. - debe tener la opción [Compartido por componentes y base de datos local](../Project/code-overview.md#shared-by-components-and-host-database). Ver también [este ejemplo](#printing-labels-using-forms-and-methods-example) a continuación. @@ -150,20 +150,20 @@ The Layout page contains controls for printing labels based on the requirements :::note Para necesidades avanzadas, puede restringir la lista de métodos disponibles utilizando un [archivo json específico](#controlling-available-forms-and-methods). -The **For each: Record or Label** options are used to specify whether to run the method once per label or once per record. This control has meaning only if you are printing more than one copy of each label and you are also executing a method at print time. +Las opciones **Para cada: Registro o Etiqueta** permiten especificar si ejecutar el método una vez por etiqueta o una vez por registro. Este control sólo tiene sentido si está imprimiendo más de una copia de cada etiqueta y también está ejecutando un método al momento de la impresión. ::: -- **Layout preview**: Provides a reduced view of how an entire page of labels will look, based on the dimensions you enter in the Label editor. The page preview also reflects the paper size selected in the Print Setup dialog box. También puede utilizar esta zona para designar la primera etiqueta de la página que se va a imprimir (esta opción sólo afecta a la primera hoja en caso de impresión multipágina). This can be useful, for example, when you want to print on a sheet of adhesive labels, part of which has already been used. También puede seleccionar la primera etiqueta en la página a imprimir haciendo clic en ella: +- **Vista previa del diseño**: permite visualizar en tiempo real las modificaciones que ingrese en el editor de etiquetas. La vista previa de la página también refleja el tamaño de papel seleccionado en el cuadro de diálogo Configuración de la impresión. También puede utilizar esta área para designar la primera etiqueta de la página a imprimir (esta opción solo afecta a la primera hoja en el caso de la impresión multipágina). Esto puede ser útil, por ejemplo, cuando se desea imprimir en una hoja de etiquetas adhesivas, parte de las cuales ya se ha utilizado. También puede seleccionar la primera etiqueta en la página a imprimir haciendo clic en ella: ![](../assets/en/Desktop/label-start.png) ## Impresión de etiquetas mediante formularios y métodos (ejemplo) -You can use dedicated table forms and project methods to print labels with calculated variables. This simple example shows how to configure the different elements. +Puede utilizar formularios de tabla dedicados y métodos proyecto para imprimir etiquetas con variables calculadas. Este ejemplo explica como configurar los diferentes elementos. 1. En un formulario tabla dedicado, añada su(s) campo(s) de etiqueta y su(s) variable(s). - Here, in a table form named "label", we added the *myVar* variable: + Aquí, en una tabla llamada "etiqueta", sumamos la variable *myVar*: ![](../assets/en/Desktop/label-example1.png) 2. Crea un método proyecto llamado `setMyVar` con el siguiente código: @@ -174,7 +174,7 @@ You can use dedicated table forms and project methods to print labels with calcu 3. Defina el método proyecto como ["Compartido por los componentes y la base de datos local"](../Project/code-overview.md#shared-by-components-and-host-database). -4. Before displaying the Label editor, make sure the project method is allowed by executing this code: +4. Antes de mostrar el editor de etiquetas, asegúrese de que el método proyecto está autorizado ejecutando este código: ```4d ARRAY TEXT($methods;1) @@ -182,7 +182,7 @@ You can use dedicated table forms and project methods to print labels with calcu SET ALLOWED METHODS($methods) ``` -5. Open the Label editor and use your form: +5. Abre el editor de etiquetas y use su formulario: ![](../assets/en/Desktop/label-example2.png) 6. En la página Diseño, seleccione el método: @@ -191,9 +191,9 @@ You can use dedicated table forms and project methods to print labels with calcu Luego puede imprimir sus etiquetas: ![](../assets/en/Desktop/label-example4.png) -## Control de los formularios y métodos disponibles +## Definición de los formularios y métodos disponibles -The Label editor includes an advanced feature allowing you to restrict which project forms and methods (within "allowed" methods) can be selected in the dialog box: +El editor de etiquetas incluye una función avanzada que le permite limitar los formularios y los métodos proyecto (dentro de los métodos "permitidos") pueden seleccionarse en el cuadro de diálogo: - en el menú **Formulario a utilizar** de la página "Etiqueta" y/o - en el menú **Aplicar (método)** de la página "Diseño". diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md index e58d6470b5e614..26c51c0f4661d3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md @@ -17,7 +17,7 @@ Puede introducir cualquier nombre de clase válido en esta propiedad, incluyendo - Clases 4D integradas (por ejemplo, `4D.File`, `4D.Folder`) - [Exposed](../Extensions/develop-components.md#sharing-of-classes) component-defined classes (e.g. `cs.MyComponent.MyClass`) -If you enter an invalid class name, a warning is triggered and the input is rejected. +Si introduce un nombre de clase inválido, se activa una advertencia y se rechaza la entrada. :::note @@ -25,7 +25,7 @@ If you enter an invalid class name, a warning is triggered and the input is reje ::: -In your code, when assigning a value to a class-typed object field, 4D verifies that it belongs to the declared class. Si no es así o si el objeto no tiene clase, se produce un error. El acceso a atributos desconocidos también provocará errores de sintaxis. +En su código, al asignar un valor a un campo de tipo clase de objeto, 4D verifica que pertenece a la clase declarada. Si no es así o si el objeto no tiene clase, se produce un error. El acceso a atributos desconocidos también provocará errores de sintaxis. To retrieve the associated class name at runtime, use the [`classID`](../API/DataClassClass.md#attributename) property, for example `ds.MyTable.MyField.classID`. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Extensions/overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Extensions/overview.md index 4610ce00bef790..a4154b589f1f30 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Extensions/overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Extensions/overview.md @@ -3,11 +3,11 @@ id: overview title: Extendiendo aplicaciones 4D --- -The 4D architecture is open and can be extended in different ways. Si necesita una funcionalidad que no está disponible de forma nativa en 4D, siempre puede integrarla en su aplicación de diversas maneras, por ejemplo: +La arquitectura 4D está abierta y puede ampliarse de diferentes maneras. Si necesita una funcionalidad que no está disponible de forma nativa en 4D, siempre puede integrarla en su aplicación de diversas maneras, por ejemplo: - Los [**workers del sistema**](../API/SystemWorkerClass.md) permiten al código 4D llamar a cualquier proceso externo (un comando shell, PHP, cualquier script, etc.) y supervisar su ejecución. - Los [**comandos SQL**](../commands/theme/SQL) permiten conectar y utilizar diversas fuentes de datos SQL. - El [**cliente HTTP integrado**](../API/HTTPRequestClass.md) puede solicitar cualquier servidor HTTP y procesar datos. - Las [**Áreas Web**](../FormObjects/webArea_overview.md) pueden dar acceso a páginas web o a diversos contenidos HTML dentro de sus formularios. -- [**Componentes**](Concepts/components.md). Los componentes están hechos de código 4D. 4D includes by default [a set of built-in 4D components](../Project/components.md#preinstalled-4d-components). También puedes [desarrollar sus propios componentes 4D](develop-components.md), o utilizar componentes de terceros. Muchos desarrolladores de la comunidad 4D han compartido componentes 4D (navegue por Github para tener una lista de componentes 4D públicos reunidos con el tema [`4d-component`](https://github.com/topics/4d-component)). +- [**Componentes**](Concepts/components.md). Los componentes están hechos de código 4D. 4D incluye por defecto [un conjunto de componentes 4D integrados](../Project/components.md#preinstalled-4d-components). También puedes [desarrollar sus propios componentes 4D](develop-components.md), o utilizar componentes de terceros. Muchos desarrolladores de la comunidad 4D han compartido componentes 4D (navegue por Github para tener una lista de componentes 4D públicos reunidos con el tema [`4d-component`](https://github.com/topics/4d-component)). - [**Plug-ins**](../Concepts/plug-ins.md). Los plug-ins pueden construirse utilizando cualquier lenguaje. Los plugins hacen cosas que 4D no hace de forma nativa (por ejemplo, una tecnología de plataforma específica), o que serían muy difíciles de escribir sólo con 4D. Como se describe en [esta página](develop-plug-ins.md), puede desarrollar sus propios plug-ins. Muchas funcionalidades están cubiertas por los plug-ins 4D existentes. Navegue por Github para tener una lista de plugins 4D públicos reunidos con el tema [`4d-plugin`](https://github.com/topics/4d-plugin). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/formEditor.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/formEditor.md index 4aea53b4daeb2e..55169d4e3065a5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/formEditor.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/formEditor.md @@ -148,7 +148,7 @@ Para seleccionar un objeto utilizando la barra de herramientas: 1. Haga clic en la herramienta Flecha de la barra de herramientas.
    ![](../assets/en/FormEditor/selection.png) -
    When you move the pointer into the form area, it becomes a standard arrow-shaped pointer. +
    Cuando mueve el puntero en el área del formulario, se convierte en un puntero estándar con forma de flecha. 2. Haga clic en el objeto que desea seleccionar. Las manillas de redimensionamiento identifican el objeto seleccionado.
    ![](../assets/en/FormEditor/selectResize.png) @@ -247,7 +247,7 @@ Para agrupar los objetos: Para desagrupar un grupo de objetos: 1. Seleccione el grupo de objetos que desea desagrupar. -2. Seleccione **Ungroup** en el menú **Object**.
    OR
    Click the **Ungroup** button (variant of the **Group** button) in the toolbar of the Form editor.
    Si **Desagrupar** está atenuado, significa que el objeto seleccionado ya está separado en su forma más simple. 4D marca los bordes de los objetos individuales con marcas. +2. Seleccione **Ungroup** en el menú **Object**.
    OR
    Haga clic en el botón **Ungroup** (variante del botón **Group**) en la barra de herramientas del editor de formularios.
    Si **Desagrupar** está atenuado, significa que el objeto seleccionado ya está separado en su forma más simple. 4D marca los bordes de los objetos individuales con marcas. ### Alinear objetos @@ -325,7 +325,7 @@ Para distribuir objetos utilizando la caja de diálogo Alinear y Distribuir: 3. En las áreas Alineación izquierda/derecha y/o Alineación superior/inferior, haga clic en el icono de distribución estándar: ![](../assets/en/FormEditor/horizontalDistribution.png)
    (Icono de distribución horizontal estándar)
    El área de ejemplo muestra los resultados de su selección. -4. To perform a distribution that uses the standard scheme, click **Preview** or *Apply*.
    In this case 4D will perform a standard distribution, so that the objects are set out with an equal amount of space between them.
    OR:
    To execute a specific distribution, select the **Distribute** option (for example if you want to distribute the objects based on the distance to their right side). Esta opción actúa como un interruptor. Si la casilla de selección Distribuir está seleccionada, los iconos situados debajo de ella realizan una función diferente:
    +4. Para efectuar una repartición estándar que utilice el esquema estándar, haga clic en **Previsualización** o *Aplicar*.
    In this case 4D will perform a standard distribution, so that the objects are set out with an equal amount of space between them.
    OR:
    To execute a specific distribution, select the **Distribute** option (for example if you want to distribute the objects based on the distance to their right side). Esta opción actúa como un interruptor. Si la casilla de selección Distribuir está seleccionada, los iconos situados debajo de ella realizan una función diferente:
    - Horizontalmente, los iconos corresponden a las siguientes distribuciones: uniformemente con respecto a los lados izquierdos, centros (hor.) y los lados derechos de los objetos seleccionados. - Verticalmente, los iconos corresponden a las siguientes distribuciones: uniformemente con respecto a los bordes superiores, centros (vert.) y los bordes inferiores de los objetos seleccionados. @@ -352,7 +352,7 @@ Cuando se superponen varios objetos, se puede utilizar el atajo **Ctrl+Mayús+cl :::note -In binary databases, use **Ctrl+Click / Command+Click** to perform the same action. +En bases de datos binarias, utilice **Ctrl+Clic / Comando+Clic** para efectuar la misma acción. ::: @@ -390,7 +390,7 @@ Para ver o cambiar el orden de entrada: El puntero se convierte en un puntero de orden de entrada y 4D dibuja una línea en el formulario mostrando el orden en que selecciona los objetos durante la entrada de datos. Ver y cambiar el orden de entrada de datos son las únicas acciones que puede realizar hasta que haga clic en cualquier herramienta de la paleta Herramientas. -2. To change the data entry order, position the pointer on an object in the form and, while holding down the mouse button, drag the pointer to the object you want next in the data entry order.
    ![](../assets/en/FormEditor/entryOrder3.png)
    4D will adjust the entry order accordingly. +2. To change the data entry order, position the pointer on an object in the form and, while holding down the mouse button, drag the pointer to the object you want next in the data entry order.
    ![](../assets/en/FormEditor/entryOrder3.png)
    4D ajustará el orden de entrada en consecuencia. 3. Repita el paso 2 tantas veces como sea necesario para establecer el orden de entrada de datos que desee. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/properties_Markers.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/properties_Markers.md index cecc6b6b4e022d..b80b59a9bca1cc 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/properties_Markers.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/properties_Markers.md @@ -21,9 +21,9 @@ Puede hacer que las áreas Ruptura sean más pequeñas o más grandes. Puede uti #### Gramática JSON -| Nombre | Tipos de datos | Valores posibles | -| ----------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| markerBreak | integer | integer collection | Break marker position or collection of break marker positions in pixels.
    Valor mínimo: 0 | +| Nombre | Tipos de datos | Valores posibles | +| ----------- | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| markerBreak | integer | integer collection | Posición del marcador de ruptura o colección de posiciones del marcador de ruptura en píxeles.
    Valor mínimo: 0 | --- diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/button_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/button_overview.md index bc28dd10b260a0..f47035dbbd758a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/button_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/button_overview.md @@ -328,7 +328,7 @@ Todos los botones comparten el mismo conjunto de propiedades básicas: [Negrita](properties_Text.md#bold) - [Estilo de línea de borde](properties_BackgroundAndBorder.md#border-line-style) - [Fondo](properties_CoordinatesAndSizing.md#bottom) - [Estilo de botón](properties_TextAndPicture.md#button-style) - [Clase](properties_Object.md#css-class) - [Soltable](properties_Action.md#droppable) - [Enfocable](properties_Entry.md#focusable) - [Fuente](properties_Text.md#font) - [Color de fuente](properties_Text.md#font-color) - [Tamaño de fuente](properties_Text.md#font-size) - [Altura](properties_CoordinatesAndSizing.md#height) - [Consejo de ayuda](properties_Help.md#help-tip) - [Alineación horizontal](properties_Text.md#horizontal-alignment) - [Tamaño horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Cursiva](properties_Text.md#italic) - [Título de abrazos de imagen](properties_TextAndPicture.md#image-hugs-title)(1) - [Izquierda](properties_CoordinatesAndSizing.md#left) - [No renderizado](properties_Display.md#not-rendered) - [Número de estados](properties_TextAndPicture.md#number-of-states)(1) - [Nombre del objeto](properties_Object.md#object-name) - [Nombre de la ruta de la imagen](properties_TextAndPicture.md#picture-pathname)(1) - [Derecha](properties_CoordinatesAndSizing.md#right) - [Acceso directo](properties_Entry.md#shortcut) - [Acción estándar](properties_Action.md#standard-action) - [Título](properties_Object.md#title) - [Posición del título/imagen](properties_TextAndPicture.md#titlepicture-position)(1) - [Superior](properties_CoordinatesAndSizing.md#top) - [Tipo](properties_Object.md#tipo) - [Subrayado](properties_Text.md#underline) - [Variable o expresión](properties_Object.md#variable-or-expression) - [Tamaño vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilidad](properties_Display.md#visibility) - [Ancho](properties_CoordinatesAndSizing.md#width) - [Con menú emergente](properties_TextAndPicture.md#with-pop-up-menu)(2) > (1) No soportado por el estilo [Ayuda](#help).
    -> (2) Not supported by the [Help](#help), [Flat](#flat) and [Regular](#regular) styles. +> (2) No soportado por los estilos [Help](#help), [Flat](#flat) y [Regular](#regular). Existen propiedades específicas adicionales, dependiendo del [estilo-de-botón](#button-styles): diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md index 978af992f51d90..3f61236a812366 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md @@ -523,7 +523,7 @@ El soporte de ordenación estándar depende del tipo de list box: | Tipo de list box | Soporte de ordenación estándar | Comentarios | | ------------------------------ | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Colección de objetos | Sí |
    • "This.a" or "This.a.b" columns are sortable.
    • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
    | +| Colección de objetos | Sí |
    • Las columnas "This.a" o "This.a.b" son ordenables.
    • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
    | | Colección de valores escalares | No | Utilice la ordenación personalizada con la función [`orderBy()`](../API/CollectionClass.md#orderby) | | Entity selection | Sí |
  • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
  • Supported: sorts on object attribute properties (e.g. "This.data.city" when "data" is an object attribute)
  • Supported: sorts on related attributes (e.g. "This.company.name")
  • Not supported: sorts on object attribute properties through related attributes (e.g. "This.company.data.city"). Para ello, debe utilizar la ordenación personalizada con la función [`orderByFormula()`](../API/EntitySelectionClass.md#orderbyformula) (ver el siguiente ejemplo)
  • | | Selección actual | Sí | Sólo se pueden ordenar las expresiones simples (por ejemplo, `[Table_1]Campo_2`) | @@ -812,7 +812,7 @@ If the user selects a break row, [`LISTBOX GET CELL POSITION`](../commands/listb ![](../assets/en/FormObjects/hierarch11.png) -... [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) returns (2;4). To select a break row by programming, you will need to use the [`LISTBOX SELECT BREAK`](../commands/listbox-select-break) command. +... [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devuelve (2;4). To select a break row by programming, you will need to use the [`LISTBOX SELECT BREAK`](../commands/listbox-select-break) command. Las líneas de rotura no se tienen en cuenta en los arrays internos utilizados para gestionar el aspecto gráfico de los list box (estilos y colores). No obstante, es posible modificar estas características para las líneas de ruptura mediante los comandos de gestión gráfica de los objetos. Basta con ejecutar los comandos adecuados en los arrays que constituyen la jerarquía. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_BackgroundAndBorder.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_BackgroundAndBorder.md index 84e2079f5e71ac..0eb71aceb033b9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_BackgroundAndBorder.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_BackgroundAndBorder.md @@ -186,7 +186,7 @@ Designa el grosor de una línea. --- -## Row Background Color Array {#row-background-color-array} +## Array colores de fondo {#row-background-color-array} `List boxes de tipo array` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Display.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Display.md index 3a07c0739f87c1..d61bf5a88a19b5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Display.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Display.md @@ -100,7 +100,7 @@ Se pueden crear formatos de fecha personalizados utilizando varios patrones desc :::note blankIfNull -- By default, a [null date](../Concepts/dt_date.md#date-literals) is displayed with zeros, e.g. 00/00/00. Con la opción "blankIfNull", una fecha null se muestra como un área vacía. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. +- Por defecto, una [fecha nula](../Concepts/dt_date.md#date-literals) se muestra con ceros, por ejemplo, 00/00/00. Con la opción "blankIfNull", una fecha null se muestra como un área vacía. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. - Las [columnas list box](listbox_overview.md#list-box-columns) y los [pies List box](listbox_overview.md#list-box-footers) de tipo fecha utilizan siempre el comportamiento "blank if null" (no se puede desactivar). ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Object.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Object.md index ebf3f923c3ff42..385ba4bf48a567 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Object.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Object.md @@ -86,9 +86,9 @@ Las variables o expresiones se pueden introducir o no y pueden recibir datos de #### Gramática JSON -| Nombre | Tipos de datos | Valores posibles | -| ---------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| dataSource | cadena o array de cadenas |
  • Variable, nombre de campo o cualquier expresión 4D.
  • Empty string for [dynamic variables](#dynamic-variables).
  • String array (collection of array names) for a [hierarchical listbox](listbox_overview.md#hierarchical-list-boxes) column]
  • | +| Nombre | Tipos de datos | Valores posibles | +| ---------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| dataSource | cadena o array de cadenas |
  • Variable, nombre de campo o cualquier expresión 4D.
  • Cadena vacía para las [variables dinámicas](#dynamic-variables).
  • String array (collection of array names) for a [hierarchical listbox](listbox_overview.md#hierarchical-list-boxes) column]
  • | ### Expresiones diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md index 1d3ac2bbf5320c..ceb0d989f2296a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md @@ -566,7 +566,7 @@ El siguiente diagrama ilustra el bloqueo optimista: 1. Dos procesos cargan la misma entidad.

    ![](../assets/en/ORDA/optimisticLock1.png) -2. El primer proceso modifica la entidad y valida el cambio. Se llama al método `entity.save( )`. El motor 4D compara automáticamente el valor del marcador interno de la entidad modificada con el de la entidad almacenada en los datos. Since they match, the entity is saved and its stamp value is incremented.

    ![](../assets/en/ORDA/optimisticLock2.png) +2. El primer proceso modifica la entidad y valida el cambio. Se llama al método `entity.save( )`. El motor 4D compara automáticamente el valor del marcador interno de la entidad modificada con el de la entidad almacenada en los datos. Como corresponden, la entidad se guarda y el valor de su marcador se incrementa.

    ![](../assets/en/ORDA/optimisticLock2.png) 3. El segundo proceso también modifica la entidad cargada y valida sus cambios. Se llama al método `entity.save( )`. Since the stamp value of the modified entity does not match the one of the entity stored in the data, the save is not performed and an error is returned.

    ![](../assets/en/ORDA/optimisticLock3.png) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md index ed3bd7aa40db92..ada6076fe08286 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md @@ -25,7 +25,7 @@ Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la ba ### Nivel del evento -A entity event function is always defined in the [Entity class](../ORDA/ordaClasses.md#entity-class). +Una función de evento de entidad se define siempre en la [clase Entity](../ORDA/ordaClasses.md#entity-class). Un evento puede definirse al nivel de la **entidad** y/o a nivel del **atributo** (incluye los [**atributos calculados**](../ORDA/ordaClasses.md#computed-attributes)). En el primer caso, se activará para cualquier atributo de la entidad; en el otro caso, sólo se activará para el atributo objetivo. @@ -101,7 +101,7 @@ Este evento se activa tan pronto como el motor de 4D Server / 4D detecta una mod La función recibe un [objeto *event*](#event-parameter) como parámetro. -If this event [throws](../commands-legacy/throw.md) an error, it will not stop the undergoing action. +Si este evento [genera un error](../commands-legacy/throw.md), no detendrá la acción en curso. :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/compiler.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/compiler.md index 1158b612ee42c7..77cb73581775e8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/compiler.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/compiler.md @@ -148,7 +148,7 @@ El modo de escritura directa es opcional sólo en proyectos convertidos. Se util Select **All variables are typed (Direct typing)** option in the **Compilation Path** menu to enable the direct typing mode. Cuando se selecciona esta opción, las demás opciones de compatibilidad pierden su utilidad y dejan de mostrarse. -Se recomienda utilizar esta opción, ya que proporciona flexibilidad y eficiencia. The direct typing concept assumes that all elements are directly declared where they are defined in your code. Solo tiene que asegurarse de que todas sus variables son declaradas utilizando la [sintaxis 'var'](../Concepts/variables.md#declaring-variables) y que sus parámetros de método y función son declarados [en sus prototipos](../Concepts/parameters.md) (la función [Verificar sintaxis](#check-syntax) puede ayudarle a detectar declaraciones faltantes o no válidas). +Se recomienda utilizar esta opción, ya que proporciona flexibilidad y eficiencia. El concepto de escritura directa asume que todos los elementos se declaran directamente donde están definidos en su código. Solo tiene que asegurarse de que todas sus variables son declaradas utilizando la [sintaxis 'var'](../Concepts/variables.md#declaring-variables) y que sus parámetros de método y función son declarados [en sus prototipos](../Concepts/parameters.md) (la función [Verificar sintaxis](#check-syntax) puede ayudarle a detectar declaraciones faltantes o no válidas). ## Advertencias diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/REST/$singleton.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/REST/$singleton.md index dd6441c98e068f..f2526bf683cf39 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/REST/$singleton.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/REST/$singleton.md @@ -5,7 +5,7 @@ title: $singleton Puede llamar directamente a [funciones de sus singletons compartidos](../Concepts/classes.md#singleton-classes) a través de REST. -Singleton functions are called in POST or GET requests with the `$singleton` command and without `()`. Por ejemplo, si ha definido una función `buildVehicle()` en la clase compartida singleton `VehicleFactory`, podría llamarla utilizando la siguiente petición: +Las funciones Singleton se llaman en peticiones POST o GET con el comando `$singleton` y sin `()`. Por ejemplo, si ha definido una función `buildVehicle()` en la clase compartida singleton `VehicleFactory`, podría llamarla utilizando la siguiente petición: ```json /rest/$singleton/VehicleFactory/buildVehicle diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-copy-to-object.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-copy-to-object.md index b8680a5547e280..704a4b63bc00d1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-copy-to-object.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-copy-to-object.md @@ -31,10 +31,10 @@ En *rangeObj*, pase el rango de celdas con los valores, formato y fórmulas a co Puede pasar un parámetro opcional *options* con las siguientes propiedades: -| Propiedad | Tipo | Descripción | -| ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| copy | Boolean | *True* (por defecto) para mantener los valores, el formato y las fórmulas copiados después de la ejecución del comando. *False* para eliminarlos. | -| copyOptions | Integer | Especifica lo que se copia o mueve. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Copies all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Copia solo el formato.
    `vk clipboard options formulas`Copies only the formulas.
    `vk clipboard options formulas and formatting`Copies the formulas and formatting.
    `vk clipboard options values`Copia solo los valores.
    `vk clipboard options value and formatting`Copies the values and formatting.

    | +| Propiedad | Tipo | Descripción | +| ----------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| copy | Boolean | *True* (por defecto) para mantener los valores, el formato y las fórmulas copiados después de la ejecución del comando. *False* para eliminarlos. | +| copyOptions | Integer | Especifica lo que se copia o mueve. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Copies all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Copia solo el formato.
    `vk clipboard options formulas`Copies only the formulas.
    `vk clipboard options formulas and formatting`Copia las fórmulas y formato.
    `vk clipboard options values`Copia solo los valores.
    `vk clipboard options value and formatting`Copia los valores y el formato.

    | Se tienen en cuenta las opciones de pegado definidas en las [opciones del libro de trabajo](vp-set-workbook-options.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-export-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-export-document.md index 8dfcf9c5401f37..94eefcc2eb31d0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-export-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-export-document.md @@ -77,11 +77,11 @@ El parámetro opcional *paramObj* le permite definir múltiples propiedades para | | includeStyles | boolean | Si se incluye el estilo al exportar, por defecto true. | | | includeFormulas | boolean | Si se incluye la fórmula al exportar, por defecto true. | | | saveAsView | boolean | Si aplicar la cadena de formato al valor de exportación al exportar, por defecto false. | -| | rowHeadersAsFrozenColumns | boolean | Whether to treat the row headers as frozen columns when exporting, default false. | +| | rowHeadersAsFrozenColumns | boolean | Si tratar los encabezados de línea como columnas congeladas al exportar, por defecto false. | | | columnHeadersAsFrozenRows | boolean | Si tratar los encabezados de columna como líneas congeladas al exportar, por defecto false. | | | includeAutoMergedCells | boolean | Si se incluyen las celdas combinadas automáticamente al exportar, false por defecto. | -| | includeCalcModelCache | boolean | Si desea incluir los datos adicionales de cálculo. Can be faster when open the file with those data, default false. | -| | includeUnusedNames | boolean | Whether to include the unused custom name when exporting, default true. | +| | includeCalcModelCache | boolean | Si desea incluir los datos adicionales de cálculo. Puede ser más rápido al abrir el archivo con esos datos, false por defecto. | +| | includeUnusedNames | boolean | Si se incluye el nombre personalizado no utilizado al exportar, true por defecto. | | | includeEmptyRegionCells | boolean | Si se incluyen celdas vacías (celdas sin datos o solo con estilo) fuera del rango de datos utilizado, por defecto true. | | | contraseña | text | Contraseña a definir para abrir el libro de trabajo. | | `\` | | any | Toda propiedad personalizada que estará disponible a través del parámetro $3 en el método de retrollamada. | @@ -90,7 +90,7 @@ El parámetro opcional *paramObj* le permite definir múltiples propiedades para - Al exportar un documento 4D View Pro a un archivo con formato Microsoft Excel, pueden perderse algunos parámetros. Por ejemplo, los métodos y fórmulas 4D no son soportados por Excel. Puede verificar otras configuraciones con [esta lista de SpreadJS](https://developer.mescius.com/spreadjs/docs/excelimpexp/excelexport). - La exportación en este formato se ejecuta de forma asíncrona, utilice la propiedad `formula` del *paramObj* para el código a ejecutar después de la exportación. -- Se recomienda utilizar el objeto *excelOptions* al exportar en formato ".xlsx". Make sure to not mix this object with legacy first level properties (*password*, *includeBindingSource*...) para evitar problemas potientales. +- Se recomienda utilizar el objeto *excelOptions* al exportar en formato ".xlsx". Asegúrese de no mezclar este objeto con propiedades heredadas de primer nivel (*password*, *includeBindingSource*...) para evitar problemas potientales. **Notas sobre el formato PDF**: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-find.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-find.md index 4ccd334c12e81f..cdf07a14ec6e8f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-find.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-find.md @@ -33,7 +33,7 @@ Puede pasar el parámetro opcional *searchCondition* para especificar el funcion | afterRow | Integer | El número de la línea justo antes de la línea inicial de la búsqueda. Si *rangeObj* es un rango combinado, el número de línea indicado debe ser del primer rango. Valor por defecto: -1 (inicio de *rangeObj*) | | all | Boolean |
  • True - Se devuelven todas las celdas en *rangeObj* correspondientes a *searchValue*
  • False - (valor por defecto) Sólo se devuelve la primera celda de *rangeObj* correspondiente a *searchValue*
  • | | flags | Integer |
    `vk find flag exact match`El contenido completo de la celda debe coincidir completamente con el valor de búsqueda
    `vk find flag ignore case`Las mayúsculas y minúsculas se consideran iguales. Ej: "a" es lo mismo que "A".
    `vk find flag none`no search flags are considered (default)
    `vk find flag use wild cards`Wildcard characters (\*,?) puede utilizarse en la cadena de búsqueda. Los caracteres comodín se pueden utilizar en cualquier comparación de cadenas para coincidir con cualquier número de caracteres:
  • \* para cero o varios caracteres (por ejemplo, al buscar "bl*" se puede encontrar "bl", "black" o "blob")
  • ? para un solo carácter (por ejemplo, la búsqueda de "h?t" puede encontrar "hot", o "hit"
  • Estos indicadores pueden combinarse. Por ejemplo: $search.flags:=vk find flag use wild cards+vk find flag ignore case | -| order | Integer |
    `vk find order by columns`La búsqueda se realiza por columnas. Each row of a column is searched before the search continues to the next column.
    `vk find order by rows`The search is performed by rows. Se busca en cada columna de una linea antes de continuar con la siguiente linea (por defecto)
    | +| order | Integer |
    `vk find order by columns`La búsqueda se realiza por columnas. Se busca en cada línea de una columna antes de continuar con la siguiente.
    `vk find order by rows`La búsqueda es realizada por líneas. Se busca en cada columna de una linea antes de continuar con la siguiente linea (por defecto)
    | | target | Integer |
    `vk find target formula`La búsqueda se realiza en la fórmula de la celda
    `vk find target tag`La búsqueda se realiza en la etiqueta de la celda
    `vk find target text`La búsqueda se realiza en el texto de la celda (predeterminado)

    Estas banderas pueden combinarse. Por ejemplo:$search.target:=vk find target formula+vk find target text

    | En el parámetro opcional *replaceValue*, puede pasar un texto para que ocupe el lugar de toda instancia del texto en el *searchValue* encontrado en *rangeObj*. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-document.md index 061561650ed55b..9cf06809fc9a03 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-document.md @@ -43,33 +43,33 @@ Se devuelve un error si el parámetro `filePath` no es válido, o si el archivo El parámetro opcional *paramObj* permite definir las propiedades del documento importado: -| Parámetros | | Tipo | Descripción | -| ------------ | ------------------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| formula | | 4D.Function | Un método de retollamada que se lanzará cuando la importación haya terminado. Debe utilizar una fórmula devuelta por el comando [`Formula`](../../commands/formula.md). Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | -| contraseña | | text | Sólo Microsoft Excel (opcional) - La contraseña utilizada para proteger un documento MS Excel. | -| csvOptions | | object | opciones de importación csv | -| | range | object | Rango de celdas que contiene la primera celda donde se escribirán los datos. Si el rango especificado no es un rango de celdas, sólo se utiliza la primera celda del rango. | -| | rowDelimiter | text | Delimitador de línea. Si no está presente, el delimitador es determinado automáticamente por 4D. | -| | columnDelimiter | text | Delimitador de columna. Por defecto: "," | -| sjsOptions | | object | opciones para la importación de sjs | -| | calcOnDemand | boolean | Si se calculan las fórmulas sólo cuando se solicitan, por defecto es false. | -| | dynamicReferences | boolean | Si calcular funciones con referencias dinámicas, por defecto es true. | -| | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | -| | includeFormulas | boolean | Si se incluyen las fórmulas al cargar, por defecto es true. | -| | includeStyles | boolean | Si se incluyen los estilos al cargar, por defecto es true. | -| | includeUnusedStyles | boolean | Si se incluyen los estilos de nombre no utilizados al convertir excel xml a json, por defecto es true. | -| | openMode | integer |
  • 0 (normal): modo abierto normal, sin perezoso (lazy) e incremental. When opening file, UI and UI event could be refreshed and responsive at specific time points.
  • 1 (lazy): modo de apertura lazy. Al abrir el archivo, sólo se cargará directamente la hoja activa. Las demás hojas sólo se cargarán cuando se vayan a utilizar.
  • 2 (incremental): modo abierto incremental. Al abrir un archivo, la interfaz de usuario y el evento de interfaz de usuario podrían actualizarse y responder directamente.
  • | -| excelOptions | | object | Sólo Excel (opcional) - Opciones para exportar Excel | -| | includeStyles | boolean | Si se incluye el estilo al importar, por defecto true. | -| | includeFormulas | boolean | Si se incluye la fórmula al importar, por defecto true. | -| | frozenColumnsAsRowHeaders | boolean | Bien sea tratar las columnas congeladas como encabezados de línea al importar, por defecto false. | -| | frozenRowsAsColumnHeaders | boolean | Whether to treat the frozen rows as column headers when importing, default false. | -| | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | -| | dynamicReferences | boolean | Si calcular funciones con referencia dinámica, por defecto true. | -| | calcOnDemand | boolean | Si se calculan las fórmulas solo cuando se solicitan, por defecto false. | -| | includeUnusedStyles | boolean | Si incluir el estilo de nombre no utilizado al convertir excel xml al json, default true. | -| | contraseña | text | La contraseña para abrir el workbook. | -| | openMode | text | The open mode of normal, lazy and incremental. Por defecto es normal. | +| Parámetros | | Tipo | Descripción | +| ------------ | ------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| formula | | 4D.Function | Un método de retollamada que se lanzará cuando la importación haya terminado. Debe utilizar una fórmula devuelta por el comando [`Formula`](../../commands/formula.md). Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | +| contraseña | | text | Sólo Microsoft Excel (opcional) - La contraseña utilizada para proteger un documento MS Excel. | +| csvOptions | | object | opciones de importación csv | +| | range | object | Rango de celdas que contiene la primera celda donde se escribirán los datos. Si el rango especificado no es un rango de celdas, sólo se utiliza la primera celda del rango. | +| | rowDelimiter | text | Delimitador de línea. Si no está presente, el delimitador es determinado automáticamente por 4D. | +| | columnDelimiter | text | Delimitador de columna. Por defecto: "," | +| sjsOptions | | object | opciones para la importación de sjs | +| | calcOnDemand | boolean | Si se calculan las fórmulas sólo cuando se solicitan, por defecto es false. | +| | dynamicReferences | boolean | Si calcular funciones con referencias dinámicas, por defecto es true. | +| | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | +| | includeFormulas | boolean | Si se incluyen las fórmulas al cargar, por defecto es true. | +| | includeStyles | boolean | Si se incluyen los estilos al cargar, por defecto es true. | +| | includeUnusedStyles | boolean | Si se incluyen los estilos de nombre no utilizados al convertir excel xml a json, por defecto es true. | +| | openMode | integer |
  • 0 (normal): modo abierto normal, sin perezoso (lazy) e incremental. Al abrir un archivo, la interfaz de usuario y el evento de interfaz de usuario podrían actualizarse y responder en momentos específicos.
  • 1 (lazy): modo de apertura lazy. Al abrir el archivo, sólo se cargará directamente la hoja activa. Las demás hojas sólo se cargarán cuando se vayan a utilizar.
  • 2 (incremental): modo abierto incremental. Al abrir un archivo, la interfaz de usuario y el evento de interfaz de usuario podrían actualizarse y responder directamente.
  • | +| excelOptions | | object | Sólo Excel (opcional) - Opciones para exportar Excel | +| | includeStyles | boolean | Si se incluye el estilo al importar, por defecto true. | +| | includeFormulas | boolean | Si se incluye la fórmula al importar, por defecto true. | +| | frozenColumnsAsRowHeaders | boolean | Bien sea tratar las columnas congeladas como encabezados de línea al importar, por defecto false. | +| | frozenRowsAsColumnHeaders | boolean | Bien sea tratar las líneas congeladas como encabezados de columna al importar, por defecto false. | +| | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | +| | dynamicReferences | boolean | Si calcular funciones con referencia dinámica, por defecto true. | +| | calcOnDemand | boolean | Si se calculan las fórmulas solo cuando se solicitan, por defecto false. | +| | includeUnusedStyles | boolean | Si incluir el estilo de nombre no utilizado al convertir excel xml al json, default true. | +| | contraseña | text | La contraseña para abrir el workbook. | +| | openMode | text | The open mode of normal, lazy and incremental. Por defecto es normal. | :::note Notas diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-move-cells.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-move-cells.md index 5e7750583d5ac0..f924914b108639 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-move-cells.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-move-cells.md @@ -35,10 +35,10 @@ En *targetRange*, pase el rango de celdas donde se copiarán o moverán los valo El parámetro *options* tiene varias propiedades: -| Propiedad | Tipo | Descripción | -| ------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| copy | Boolean | Determina si los valores, el formato y las fórmulas de las celdas de *originRange* se eliminan después de ejecutar el comando:
    • *False* (por defecto) para eliminarlos
    • *True* para mantenerlos
    | -| pasteOptions | Integer | Especifica lo que se pega. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Pastes all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Pega solo el formato.
    `vk clipboard options formulas`Pega sólo las fórmulas.
    `vk clipboard options formulas and formatting`Pastes the formulas and formatting.
    `vk clipboard options values`Pega solo los valores.
    `vk clipboard options value and formatting`Pastes the values and formatting.

    | +| Propiedad | Tipo | Descripción | +| ------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| copy | Boolean | Determina si los valores, el formato y las fórmulas de las celdas de *originRange* se eliminan después de ejecutar el comando:
    • *False* (por defecto) para eliminarlos
    • *True* para mantenerlos
    | +| pasteOptions | Integer | Especifica lo que se pega. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Pastes all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Pega solo el formato.
    `vk clipboard options formulas`Pega sólo las fórmulas.
    `vk clipboard options formulas and formatting`Pega las fórmulas y el formato.
    `vk clipboard options values`Pega solo los valores.
    `vk clipboard options value and formatting`Pega los valores y el formato.

    | Se tienen en cuenta las opciones de pegado definidas en las [opciones del libro de trabajo](vp-set-workbook-options.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md index bdc02342a44e14..d059be21bf1f19 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md @@ -48,14 +48,14 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | autoFitType | number | El contenido se formatea para que se ajuste en las celdas, o en las celdas y los encabezados. Valores disponibles:
    ConstanteValorDescripción
    vk auto fit type cell 0 El contenido se ajusta automáticamente a las celdas
    vk auto fit type cell with header 1 El contenido se ajusta automáticamente a las celdas y encabezados
    | | backColor | string | Una cadena de color utilizada para representar el color de fondo del área, como "red", "#FFFF00", "rgb(255,0,0)", "Acento 5". El color de fondo inicial se oculta cuando se define una backgroundImage. | | backgroundImage | string / picture / file | Imagen de fondo para el área. | -| backgroundImageLayout | number | Cómo se muestra la imagen de fondo. Available values:
    ConstantValueDescription
    vk image layout center 1 In the center of the area.
    vk image layout none 3 In the upper left corner of the area with its original size.
    vk image layout stretch 0 Fills the area.
    vk image layout zoom 2 Displayed with its original aspect ratio.
    | +| backgroundImageLayout | number | Cómo se muestra la imagen de fondo. Available values:
    ConstantValueDescription
    vk image layout center 1 In the center of the area.
    vk image layout none 3 In the upper left corner of the area with its original size.
    vk image layout stretch 0 Llena el área.
    vk image layout zoom 2 Mostrado con su relación de aspecto original.
    | | calcOnDemand | boolean | Las fórmulas se calculan sólo cuando se piden. | | columnResizeMode | number | Redimensiona modo para columnas. Valores disponibles:
    ConstanteValorDescripción
    vk resize mode normal 0 Utiliza el modo de redimensionamiento normal (es decir, las columnas restantes se ven afectadas)
    vk resize mode split 1 Utiliza el modo dividido (es decir, las columnas restantes no se ven afectadas)
    | | copyPasteHeaderOptions | number | Encabezados para incluir cuando se copian o pegan datos. Available values:
    ConstantValueDescription
    vk copy paste header options all headers3 Includes selected headers when data is copied; overwrites selected headers when data is pasted.
    vk copy paste header options column headers 2 Includes selected column headers when data is copied; overwrites selected column headers when data is pasted.
    vk copy paste header options no headers0 Column and row headers are not included when data is copied; does not overwrite selected column or row headers when data is pasted.
    vk copy paste header options row headers1 Includes selected row headers when data is copied; overwrites selected row headers when data is pasted.
    | | customList | collection | La lista para que los usuarios personalicen el relleno de arrastre, dar prioridad a que coincida con esta lista en cada relleno. Cada elemento de colección es una colección de cadenas. Vet en [SpreadJS docs](https://developer.mescius.com/spreadjs/docs/features/cells/AutoFillData/AutoFillLists). | | cutCopyIndicatorBorderColor | string | Color del borde del indicador que aparece cuando el usuario corta o copia la selección. | | cutCopyIndicatorVisible | boolean | Muestra un indicador al copiar o cortar el elemento seleccionado. | -| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Fills cells only with formatting.
    vk auto fill type fill series 1 Fills cells with series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | +| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Fills cells with series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | | enableAccessibility | boolean | El soporte de accesibilidad está activado en la hoja de cálculo. | | enableFormulaTextbox | boolean | Se activa la caja de texto de la fórmula. | | grayAreaBackColor | string | Una cadena color utilizada para representar el color de fondo del área gris, como "red", "#FFFF00", "rgb(255,0,0)", "Accent 5", etc. | @@ -69,7 +69,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | referenceStyle | number | Estilo para referencias de celdas y rangos en fórmulas de celdas. Available values:
    ConstantValueDescription
    vk reference style A1 0 Use A1 style.
    vk reference style R1C1 1 Use R1C1 style
    | | resizeZeroIndicator | number | Política de dibujo cuando las líneas o columnas se redimensionan a 0. Available values:
    ConstantValueDescription
    vk resize zero indicator default 0 Uses the current drawing policy when the row or column is resized to zero.
    vk resize zero indicator enhanced 1 Draws two short lines when the row or column is resized to zero.
    | | rowResizeMode | number | La forma en que se redimensionan las líneas. Los valores disponibles son los mismos qe columnResizeMode | -| scrollbarAppearance | number | Apariencia de la barra de desplazamiento. Available values:
    ConstantValueDescription
    vk scrollbar appearance mobile1 Mobile scrollbar appearance.
    vk scrollbar appearance skin (default)0 Excel-like classic scrollbar appearance.
    | +| scrollbarAppearance | number | Apariencia de la barra de desplazamiento. Available values:
    ConstantValueDescription
    vk scrollbar appearance mobile1 Mobile scrollbar appearance.
    vk scrollbar appearance skin (por defecto)0 Apariencia clásica de la barra de desplazamiento similar a Excel.
    | | scrollbarMaxAlign | boolean | La barra de desplazamiento se alinea con la última línea y columna de la hoja activa. | | scrollbarShowMax | boolean | Las barras de desplazamiento mostradas se basan en el número total de columnas y líneas de la hoja. | | scrollByPixel | boolean | Activar desplazamiento de precisión por píxel. | @@ -79,8 +79,8 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | showDragFillSmartTag | boolean | Mostrar el diálogo de arrastrar y rellenar. | | showDragFillTip | boolean | Mostrar la punta de arrastrar y soltar. | | showHorizontalScrollbar | boolean | Mostrar la barra de desplazamiento horizontal. | -| showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Only the horizontal resize tip is displayed.
    vk show resize tip none 0 No resize tip is displayed.
    vk show resize tip row 2 Only the vertical resize tip is displayed.
    | -| showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Only the horizontal scroll tip is displayed.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Only the vertical scroll tip is displayed.
    | +| showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Solo se muestra la punta de redimensionamiento horizontal.
    vk show resize tip none 0 No resize tip is displayed.
    vk show resize tip row 2 Only the vertical resize tip is displayed.
    | +| showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Only the horizontal scroll tip is displayed.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Solo se muestra la punta de desplazamiento vertical.
    | | showVerticalScrollbar | boolean | Mostrar la barra de desplazamiento vertical. | | tabEditable | boolean | La pestaña de la hoja se puede editar. | | tabNavigationVisible | boolean | Mostrar la navegación por pestañas. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/authentication.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/authentication.md index 526b9eeb780278..8d182eca3eca37 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/authentication.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/authentication.md @@ -115,7 +115,7 @@ Debe declarar estos parámetros de la siguiente manera: :::note -Todos los parámetros del método base `On Web Authentication` no están necesariamente rellenados. The information received by the database method depends on the selected [authentication mode](#authentication-modes). +Todos los parámetros del método base `On Web Authentication` no están necesariamente rellenados. La información recibida por el método base depende del [modo de autenticación](#authentication-modes) seleccionado. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/http-request-handler.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/http-request-handler.md index 8ac073255275ca..1b8df02e565772 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/http-request-handler.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/http-request-handler.md @@ -32,7 +32,7 @@ Se soportan gestores de solicitudes HTTP personalizados: Define sus manejadores de petición HTTP personalizados en un archivo de configuración llamado **HTTPHandlers.json** almacenado en la carpeta [`Project/Sources`](../Project/architecture.md#sources). -This file contains all listened URL patterns, the handled verbs, and the code to be called. Los administradores se proporcionan en forma de colección en formato JSON. +Este archivo contiene todos los patrones de URL a interceptar, los verbos manipulados y el código a llamar. Los administradores se proporcionan en forma de colección en formato JSON. Al momento de la ejecución, se ejecuta el primer patrón que coincida con la URL, los demás se ignoran. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md index 615a144ad69146..105b658372a4fe 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md @@ -80,7 +80,7 @@ La autenticación en el servidor web WebAdmin se realiza utilizando una llave de De acuerdo con la gestión de proyectos 4D, sólo se admiten los siguientes usos: - el desarrollo con Qodly Studio debe realizarse a través de **4D** (monousuario). -- deployment of 4D applications powered with Qodly pages must be done using **4D Server**. +- el despliegue de aplicaciones 4D alimentadas por páginas Qodly debe hacerse utilizando **4D Server**. :::warning diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index 0f33399d743853..241f091dac5e5e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -211,7 +211,7 @@ End if El servidor web 4D le permite generar, compartir y utilizar tokens de sesión OTP (One-Time Passcode). Los tokens de sesión OTP se utilizan para asegurar comunicaciones con aplicaciones de terceros o sitios web. For information on OTP, please refer to the [One-time password page](https://en.wikipedia.org/wiki/One-time_password) on Wikipedia. -In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. The callback link includes the OTP token, so that the session which triggered the callback is loaded along with its data and privileges. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. +In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. ### Generalidades @@ -245,7 +245,7 @@ Una url [`4DACCIÓN`](./httpRequests.md#4daction) también puede ser usada en el #### Utilizar un parámetro personalizado -The OTP token can also be provided as a custom parameter that you need to process specifically to restore the session. Debe utilizar esta solución si: +El token OTP también se puede suministrar como un parámetro personalizado que necesita procesar específicamente para restaurar la sesión. Debe utilizar esta solución si: - la aplicación de terceros no permite insertar parámetros como un `$4DSID` directamente en la Uri de redirección, y proporciona una API dedicada (la implementación depende de la aplicación de terceros), - o, quiere llamar a una función ORDA a través de REST para procesar la retrollamada, en cuyo caso es necesario pasar el OTP con la [sintaxis de parámetro REST](../REST/ClassFunctions.md#parameters) (por ejemplo, `?$params='["XXX123"]'`). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-document.md index 542f6849b9f2d5..fe2e0e06cbf62c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-document.md @@ -55,10 +55,10 @@ Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* c | Constante | Valor | Comentario | | ------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | -| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Note: If the folder already exists, it is emptied before the file is exported. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | +| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | | wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](#wk-factur-x-object)). | | wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | -| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Useful if you want to use fonts that are not available by default on Windows or macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | +| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | | wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | | wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | | wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). If a picture contains more than one format, the format for screen rendering is used.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md index 0975d8aeb5e67b..606d4bcc42bcd7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md @@ -55,10 +55,10 @@ Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* c | Constante | Valor | Comentario | | ------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | -| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Note: If the folder already exists, it is emptied before the file is exported. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | +| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | | wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](./wp-export-document.md#wk-factur-x-object)). | | wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](./wp-export-document.md#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | -| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Useful if you want to use fonts that are not available by default on Windows or macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | +| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | | wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | | wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | | wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). If a picture contains more than one format, the format for screen rendering is used.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md index 57405625d969f7..625a6d5df492ed 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md @@ -51,20 +51,20 @@ Por defecto, las expresiones HTML insertadas en documentos heredados de 4D Write Puede pasar un objeto para definir cómo se gestionan los siguientes atributos durante la operación de importación: -| **Atributo** | **Tipo** | **Description** | -| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | -| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Anchored images are imported, but any text wrapping around the image is ignored. **ignore** \- Las imágenes ancladas no son importadas. | -| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Continuous, even, or odd sections are converted to standard sections. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Note**: Section breaks of any type but continuous are converted to section breaks with page break. Continuous section breaks are imported as continuous section breaks. | -| fields | Text | Sólo para documentos MS Word (.docx). Specifies how .docx fields that can't be converted to 4D Write Pro formulas are handled. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - The last computed value for the .docx field (if available) is imported. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | -| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Available values:

    **collapse** \- Paragraph formatting is modified to mimic automatically collapsed borders. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | -| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Specifies the preferred typeface to use when different typefaces are defined for a single font property in OOXML. Available values:

    **latin** (default) - Latin script **bidi** \- Bidrectional script. Suitable if document is mainly bidirectional left-to-right (LTR) or right-to-left (RTL) text (e.g., Arabic or Hebrew). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | -| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | -| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | +| **Atributo** | **Tipo** | **Description** | +| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | +| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | +| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | +| fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | +| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | +| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Specifies the preferred typeface to use when different typefaces are defined for a single font property in OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | +| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | +| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | **Notas de compatibilidad** -- *Character style sheets in legacy 4D Write documents use a proprietary mechanism, which is not supported by 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Legacy character style sheets are not imported and are no longer referenced in the document.* +- *Character style sheets in legacy 4D Write documents use a proprietary mechanism, which is not supported by 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Las hojas de estilo de caracteres antiguos no son importadas y ya no están referenciadas en el documento.* - *Support for importing in .docx format is only certified for Microsoft Word 2010 and newer. Versiones antiguas, especialmente Microsoft Word 2007, pueden no importar correctamente.* ## Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-reset-attributes.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-reset-attributes.md index e3c95cabba2413..da3a00bcb36f12 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-reset-attributes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-reset-attributes.md @@ -19,7 +19,7 @@ displayed_sidebar: docs ## Descripción -El comando **WP RESET ATTRIBUTES** le permite restablecer el valor de uno o más atributos en el rango, elemento o documento pasado como parámetro. This command can remove any kind of 4D Write Pro internal attribute: character, paragraph, document, table, or image. Puede pasar el nombre del atributo a restablecer en *attribName* o puede pasar una colección de atributos en *attribColl* para restablecer varios atributos a la vez. +El comando **WP RESET ATTRIBUTES** le permite restablecer el valor de uno o más atributos en el rango, elemento o documento pasado como parámetro. Este comando puede eliminar cualquier tipo de atributo interno de 4D Write Pro: carácter, párrafo, documento, tabla o imagen. Puede pasar el nombre del atributo a restablecer en *attribName* o puede pasar una colección de atributos en *attribColl* para restablecer varios atributos a la vez. > En el caso de una sección o subsección, el objeto *sectionOrSubsection* puede pasarse solo y todos los atributos se restablecen a la vez. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md index 21dc2ecf7aa074..1271a5aaaa8e21 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md @@ -5,7 +5,7 @@ title: OpenAI # OpenAI -La clase `OpenAI` proporciona un cliente para acceder a varios recursos de la API OpenAI. It includes properties for managing API configurations and methods for performing HTTP requests to the OpenAI endpoints. +La clase `OpenAI` proporciona un cliente para acceder a varios recursos de la API OpenAI. Incluye propiedades de gestión de las configuraciones API y de los métodos para efectuar las peticiones HTTP a los puntos de terminación de OpenAI. ## Propiedades de configuración @@ -58,7 +58,7 @@ $client.baseURL:="https://server.ai" ## Recursos API -The API provides access to multiple resources that allow seamless interaction with OpenAI's services. Each resource is encapsulated within a dedicated API class, offering a structured and intuitive way to interact with different functionalities. +La API ofrece acceso a múltiples recursos que permiten una interacción perfecta con los servicios de OpenAI. Each resource is encapsulated within a dedicated API class, offering a structured and intuitive way to interact with different functionalities. | Nombre de la propiedad | Tipo | Descripción | | ---------------------- | ----------------------------------------------- | ------------------------------------------------ | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsAPI.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsAPI.md index 679642b16e70bf..2bae9229729d29 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsAPI.md @@ -5,7 +5,7 @@ title: OpenAIChatCompletionsAPI # OpenAIChatCompletionsAPI -La clase `OpenAIChatCompletionsAPI` está diseñada para gestionar las finalizaciones de chat con la API OpenAI. It provides methods to create, retrieve, update, delete, and list chat completions. +La clase `OpenAIChatCompletionsAPI` está diseñada para gestionar las finalizaciones de chat con la API OpenAI. Ofrece métodos para crear, recuperar, actualizar, eliminar y listar respuestas de chat. https://platform.openai.com/docs/api-reference/chat @@ -21,7 +21,7 @@ https://platform.openai.com/docs/api-reference/chat | *parámetros* | [OpenAIChatCompletionsParameters](OpenAIChatCompletionsParameters.md) | Los parámetros para la solicitud de finalización del chat. | | Resultado | Object | El resultado de la solicitud de finalización del chat. | -Creates a model response for the given chat conversation. +Crea un modelo de respuesta para la conversación dada. https://platform.openai.com/docs/api-reference/chat/create diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsListParameters.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsListParameters.md index 93b8c3e4bee066..7f1a363b63e090 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsListParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsListParameters.md @@ -5,7 +5,7 @@ title: OpenAIChatCompletionsListParameters # OpenAIChatCompletionsListParameters -This class is used to define parameters for retrieving a list of chat completions from the OpenAI API. Permite personalizar la paginación, ordenar y filtrar los mensajes de chat. +Esta clase se utiliza para definir los parámetros de recuperación de una lista de terminaciones de chat de la API OpenAI. Permite personalizar la paginación, ordenar y filtrar los mensajes de chat. ## Hereda diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md index 2502d80c2c15ea..c9624656bfe290 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md @@ -13,11 +13,11 @@ The `OpenAIChatCompletionsMessagesAPI` class is designed to interact with the Op **list**(*completionID* : Text; *parameters* : OpenAIChatCompletionsMessagesParameters) : Variant -| Parámetros | Tipo | Descripción | -| -------------- | ----------------------------------------- | -------------------------------------------------------------------------------- | -| *completionID* | Text | The ID of the chat completion to retrieve messages for. | -| *parámetros* | `OpenAIChatCompletionsMessagesParameters` | Parámetros para filtrar y personalizar la respuesta. | -| Resultado | Variant | Los mensajes recuperados asociados con la finalización del chat. | +| Parámetros | Tipo | Descripción | +| -------------- | ----------------------------------------- | ------------------------------------------------------------------------------------- | +| *completionID* | Text | El ID de la finalización de chat para la cual recuperar los mensajes. | +| *parámetros* | `OpenAIChatCompletionsMessagesParameters` | Parámetros para filtrar y personalizar la respuesta. | +| Resultado | Variant | Los mensajes recuperados asociados con la finalización del chat. | La función `list()` recupera los mensajes asociados a un ID de finalización de chat específico. Lanza un error si `completionID` está vacío. If the *parameters* argument is not an instance of `OpenAIChatCompletionsMessagesParameters`, it will create a new instance using the provided parameters. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIEmbeddingsAPI.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIEmbeddingsAPI.md index dabbcc1cee4797..7d99ad8f1204a6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIEmbeddingsAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIEmbeddingsAPI.md @@ -15,14 +15,14 @@ https://platform.openai.com/docs/api-reference/embeddings **create**(*input* : Text; *model*: Text; *parameters* : OpenAIEmbeddingsParameters) : OpenAIEmbeddingsResult -Creates an embeddings for the provided input, model and parameters. - -| Argumento | Tipo | Descripción | -| ------------ | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| *entrada* | Texto o colección de texto | La entrada a vectorizar. | -| *model* | Text | The [model to use](https://platform.openai.com/docs/guides/embeddings#embedding-models) | -| *parámetros* | [OpenAIEmbeddingsParameters](OpenAIEmbeddingsParameters.md) | Los parámetros para personalizar la petición de representaciones vectoriales. | -| Resultado | [OpenAIEmbeddingsResult](OpenAIEmbeddingsResult.md) | Las integraciones. | +Crea una representación vectorial para la entrada, el modelo y los parámetros ofrecidos. + +| Argumento | Tipo | Descripción | +| ------------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| *entrada* | Texto o colección de texto | La entrada a vectorizar. | +| *model* | Text | El [modelo a utilizar] (https://platform.openai.com/docs/guides/embeddings#embedding-models) | +| *parámetros* | [OpenAIEmbeddingsParameters](OpenAIEmbeddingsParameters.md) | Los parámetros para personalizar la petición de representaciones vectoriales. | +| Resultado | [OpenAIEmbeddingsResult](OpenAIEmbeddingsResult.md) | Las integraciones. | #### Ejemplos de uso diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md index a1b407b5774618..50c983790a5e75 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md @@ -41,7 +41,7 @@ La clase `OpenAIError` está diseñada para manejar errores devueltos por la API | ---------------------------- | ------- | ------------------------------------------------------------------------------------------------- | | `isBadRequestError` | Boolean | Indica si se trata de un error 400 Bad Request. | | `isAuthenticationError` | Boolean | Indica si se trata de un error de autenticación 401. | -| `isPermissionDeniedError` | Boolean | Indicates ∏if the error is a 403 Permission Denied error. | +| `isPermissionDeniedError` | Boolean | Indica si el error es un error 403 Permiso denegado. | | `isNotFoundError` | Boolean | Indica si el error es un error 404 Not Found. | | `isUnprocessableEntityError` | Boolean | Indica si el error es un error de entidad no procesable (422). | | `isRateLimitError` | Boolean | Indica si el error es un error de límite de velocidad 429. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIImage.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIImage.md index 04c86973e749d1..2917ecf2bf83db 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIImage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIImage.md @@ -11,11 +11,11 @@ https://platform.openai.com/docs/api-reference/images/object ## Propiedades -| Propiedad | Tipo | Descripción | -| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------- | -| `url` | Text | La URL de la imagen generada, si `response_format` es `url` (por defecto). | -| `b64_json` | Text | The base64-encoded JSON of the generated image, if `response_format` is `b64_json`. | -| `revised_prompt` | Variant | The prompt that was used to generate the image, if there was any revision to the prompt. | +| Propiedad | Tipo | Descripción | +| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------- | +| `url` | Text | La URL de la imagen generada, si `response_format` es `url` (por defecto). | +| `b64_json` | Text | El JSON codificado en base64 de la imagen generada, si `response_format` es `b64_json`. | +| `revised_prompt` | Variant | La instrucción que se utilizó para generar la imagen, si hubo alguna revisión de la instrucción. | ## Funciones @@ -23,9 +23,9 @@ https://platform.openai.com/docs/api-reference/images/object **asBlob**() : 4D.Blob -| Parámetros | Tipo | Descripción | -| ---------- | ----------------------- | ------------------------------------------------------------------------------------------------------ | -| Resultado | 4D.Blob | Converts the generated image to a blob format based on its URL or base64-encoded JSON. | +| Parámetros | Tipo | Descripción | +| ---------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------ | +| Resultado | 4D.Blob | Convierte la imagen generada a un formato blob basado en su URL o en un JSON codificado en base64. | #### Ejemplo de Uso diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md index 7f872456010175..25479618986396 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md @@ -13,7 +13,7 @@ The `OpenAIMessage` class represents a structured message containing a role, con | ----------- | ------- | -------------------------------------------------------------------------------------------- | | `rol` | Text | El rol del mensaje (por ejemplo, "user", "assistant"). | | `contenido` | Variant | El contenido del mensaje, que puede ser un texto o una colección de objetos. | -| `user` | Text | An optional property representing the user associated with the message. | +| `user` | Text | Una propiedad opcional que representa al usuario asociado al mensaje. | ## Propiedades calculadas diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIModeration.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIModeration.md index 3c92f30cc3c7c7..1b7928f32cb10a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIModeration.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIModeration.md @@ -5,7 +5,7 @@ title: OpenAIModeration # OpenAIModeration -La clase `OpenAIModeration` está diseñada para manejar los resultados de moderación de la API OpenAI. It contains properties for storing the moderation ID, model used, and the results of the moderation. +La clase `OpenAIModeration` está diseñada para manejar los resultados de moderación de la API OpenAI. Contiene propiedades para almacenar el ID de moderación, el modelo utilizado y los resultados de la moderación. https://platform.openai.com/docs/api-reference/moderations/object diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIModerationResult.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIModerationResult.md index b486c693fb10f3..6ae6717533fd23 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIModerationResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIModerationResult.md @@ -5,7 +5,7 @@ title: OpenAIModerationResult # OpenAIModerationResult -The `OpenAIModerationResult` provides functionality to handle moderation results from the OpenAI API. +`OpenAIModerationResult` ofrece funcionalidades para manejar los resultados de moderación de la API OpenAI. ## Hereda diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIParameters.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIParameters.md index 30a0ee07ce9043..54c9d61d806d8a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIParameters.md @@ -11,12 +11,12 @@ The `OpenAIParameters` class is designed to handle execution and request paramet ### Propiedades de la programación asíncrona -| Propiedad | Tipo | Descripción | -| ------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `formula` u `onTerminate` | Function | Una función que se llamará de forma asíncrona cuando termine. Asegúrese de que el proceso actual no termina. | -| `onResponse` | Function | A function to be called asynchronously when the request finishes successfully. Asegúrese de que el proceso actual no termina. | -| `onError` | Function | A function to be called asynchronously when the request finishes with errors. Asegúrese de que el proceso actual no termina. | -| `throw` | Boolean | Si es true, lanza un error si se produce uno. Sólo si no se ha definido ninguna retrollamada de fórmula. | +| Propiedad | Tipo | Descripción | +| ------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `formula` u `onTerminate` | Function | Una función que se llamará de forma asíncrona cuando termine. Asegúrese de que el proceso actual no termina. | +| `onResponse` | Function | Una función a llamar de forma asíncrona cuando la petición finalice con éxito. Asegúrese de que el proceso actual no termina. | +| `onError` | Function | Una función que se llamará de forma asíncrona cuando la petición finalice con errores. Asegúrese de que el proceso actual no termina. | +| `throw` | Boolean | Si es true, lanza un error si se produce uno. Sólo si no se ha definido ninguna retrollamada de fórmula. | Ver la [documentación sobre código asíncrono](../asynchronous-call.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIResult.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIResult.md index a56ffcdcd8d803..ef3e9ad3508ea9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIResult.md @@ -21,13 +21,13 @@ The `OpenAIResult` class is designed to handle the response from HTTP requests a | `errors` | Collection | Devuelve una colección de errores. Estos podrían ser errores de red o errores devueltos por OpenAI. | | `terminated` | Boolean | Un booleano que indica si la petición HTTP fue terminada. | | `headers` | Object | Devuelve los encabezados de respuesta como un objeto. | -| `rateLimit` | Object | Returns rate limit information from the response headers. | +| `rateLimit` | Object | Devuelve la información relativa al límite de tasa de los encabezados de la respuesta. | | `utilización` | Object | Devuelve la información de uso del cuerpo de la respuesta, si existe. | ### rateLimit -The `rateLimit` property returns an object containing rate limit information from the response headers. -This information includes the limits, remaining requests, and reset times for both requests and tokens. +La propiedad `rateLimit` devuelve un objeto que contiene información sobre el límite de velocidad de los encabezados de respuesta. +Esta información incluye los límites, las peticiones restantes y los tiempos de reinicialización tanto para peticiones como para tokens. For more details on rate limits and the specific headers used, refer to [the OpenAI Rate Limits Documentation](https://platform.openai.com/docs/guides/rate-limits#rate-limits-in-headers). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/compatible-openai.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/compatible-openai.md index 5b5e136edec480..ca4d836251504a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/compatible-openai.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/compatible-openai.md @@ -5,7 +5,7 @@ title: Proveedores # Proveedores -Many AI providers propose an OpenAI-like API, so you can use this project to connect to them. +Muchos proveedores de IA proponen una API similar a la de OpenAI, así que puede utilizar este proyecto para conectarse a ellos. Para ello sólo tiene que definir la `baseURL` a la del proveedor y utilizar su clave api si es necesario. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/code-editor/write-class-method.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/code-editor/write-class-method.md index 002a2f09517834..f047f57dab287d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/code-editor/write-class-method.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/code-editor/write-class-method.md @@ -803,7 +803,7 @@ La etiqueta `` permite generar y utilizar macrocomandos que ejecutan mé El código de un método llamado se ejecuta en un nuevo proceso. Este proceso se cierra una vez se ejecuta el método. -> Note: The structure process remains frozen until the called method execution is completed. Debe asegurarse de que la ejecución es rápida y de que no hay riesgo de que bloquee la aplicación. If this occurs, use the **Ctrl+F8** (Windows) or **Command+F8** (macOS) command to "kill" the process. +> Note: The structure process remains frozen until the called method execution is completed. Debe asegurarse de que la ejecución es rápida y de que no hay riesgo de que bloquee la aplicación. Si esto ocurre, utilice el comando **Ctrl+F8** (Windows) o **Comando+F8** (macOS) para "matar" el proceso. ### Llamando macros diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md index 71416c9f2cbcc3..fdbd960b6e8acd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md @@ -25,14 +25,14 @@ displayed_sidebar: docs ## Descripción -The **Call chain** command returns a collection of objects describing each step of the method call chain within the current process. Ofrece la misma información que la ventana Depurador. It has the added benefit of being able to be executed from any 4D environment, including compiled mode. +The **Call chain** command returns a collection of objects describing each step of the method call chain within the current process. Ofrece la misma información que la ventana Depurador. Tiene la ventaja adicional de poder ser ejecutado desde cualquier entorno 4D, incluyendo el modo compilado. The command facilitates debugging by enabling the identification of the method or formula called, the component that called it, and the line number where the call was made. Cada objeto de la colección devuelta contiene las siguientes propiedades: | **Propiedad** | **Tipo** | **Description** | **Ejemplo** | | ------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | | database | Text | Name of the database calling the method (to distinguish host methods and component methods) | "database":"contactInfo" | -| formula | Text (si lo hay) | Contents of the current line of code at the current level of the call chain (raw text). Corresponde al contenido de la línea referenciada por la propiedad `line` en el archivo fuente indicado por el método. Si el código fuente no está disponible, la propiedad `formula` se omite (Undefined). | "var $stack:=Call chain" | +| formula | Text (si lo hay) | Contenido de la línea actual de código en el nivel actual de la cadena de llamadas (texto bruto). Corresponde al contenido de la línea referenciada por la propiedad `line` en el archivo fuente indicado por el método. Si el código fuente no está disponible, la propiedad `formula` se omite (Undefined). | "var $stack:=Call chain" | | línea | Integer | Número de línea de llamada al método | "line":6 | | name | Text | Nombre del método llamado | "name":"On Load" | | type | Text | Type of the method:
  • "projectMethod"
  • "formObjectMethod"
  • "formmethod"
  • "databaseMethod"
  • "triggerMethod"
  • "executeOnServer" (when calling a project method with the *Execute on Server attribute*)
  • "executeFormula" (when executing a formula via [PROCESS 4D TAGS](../commands-legacy/process-4d-tags.md) or the evaluation of a formula in a 4D Write Pro document)
  • "classFunction"
  • "formMethod"
  • | "type":"formMethod" | @@ -45,7 +45,7 @@ Para que este comando pueda operar en modo compilado, la [verificación de rango ## Ejemplo -The following code returns a collection of objects containing information about the method call chain: +El siguiente código devuelve una colección de objetos que contienen información acerca de la cadena de llamadas de métodos: ```4d var $currentCallChain : Collection diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md index f48fc456753f3c..188b150d0f8a71 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md @@ -36,7 +36,7 @@ Hay dos parámetros opcionales: - *info*: propiedades del comando. The returned value is a *bit field*, where the following bits are meaningful: - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Only thread-safe commands can be used in [preemptive processes](../Develop/preemptive.md). - - Second bit (bit 1): set to 1 if the command is **deprecated**, and 0 if it is not. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). + - Segundo bit (bit 1): se define en 1 si el comando es **obsoleto**, y en 0 si no lo es. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). *theme*: nombre del tema del lenguaje 4D para el comando. @@ -80,9 +80,9 @@ En un formulario, quiere una lista desplegable con los comandos básicos de info  End case ``` -In the English version of 4D, the drop-down list will read: Sum, Average, Min, and Max. In the French version\*, the drop-down list will read: Somme, Moyenne, Min, and Max. +En la versión inglesa de 4D, la lista desplegable leerá: Sum, Average, Min y Max. En la versión francésa \*, la lista desplegable dirá: Somme, Moyenne, Min, y Max. -\*with a 4D application configured to use the French programming language (see compatibility note) +\*con una aplicación 4D configurada para usar el lenguaje de programación en francés (ver nota de compatibilidad) ## Ejemplo 3 @@ -110,7 +110,7 @@ Luego, para el comando "SAVE RECORD" (53) por ejemplo, puede escribir: ## Ejemplo 4 -You want to return a collection of all deprecated commands in your version of 4D. +Quiere devolver una colección de todos los comandos obsoletos en su versión de 4D. ```4d var $info; $Lon_id : Integer diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/create-deployment-license.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/create-deployment-license.md index 57ffea72a3cfe9..a943e2ddaadfc1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/create-deployment-license.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/create-deployment-license.md @@ -112,7 +112,7 @@ Designar una licencia de uso: ## Ver también -[Blog post - Build an application with 4D commands](https://blog.4d.com/build-an-application-with-4d-commands) +[Post de blog - Crear una aplicación con los comandos 4D](https://blog.4d.com/build-an-application-with-4d-commands) ## Propiedades diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/form.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/form.md index 355633c3e4ffb9..79fa8e19d3a3a9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/form.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/form.md @@ -24,7 +24,7 @@ displayed_sidebar: docs ## Descripción -El comando **Form** devuelve el objeto asociado al formulario actual (instanciado a partir del parámetro *formData* o de la clase de usuario asignada en el editor de formularios). 4D automatically associates an object to the current form in the following cases: +El comando **Form** devuelve el objeto asociado al formulario actual (instanciado a partir del parámetro *formData* o de la clase de usuario asignada en el editor de formularios). 4D asocia automáticamente un objeto al formulario actual en los siguientes casos: - el formulario actual ha sido cargado por uno de los comandos [`DIALOG`](dialog.md), [`Print form`](print-form.md), o [`FORM LOAD`](form-load.md), - el formulario actual es un subformulario, diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-get-property.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-get-property.md index 1950ec74b81673..e0fe65323178a0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-get-property.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-get-property.md @@ -85,7 +85,7 @@ Dado un list box "MyListbox", si ejecuta la siguiente instrucción: $Value:=LISTBOX Get property(*; "MyListbox";lk selection mode) // el valor devuelto indica el modo de selección ``` -In this case, the result returned indicates whether multiple rows can be selected. +En este caso, el resultado devuelto indica si varios registros pueden ser seleccionados. ## Ejemplo 2 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-set-property.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-set-property.md index bad06c1b5092c0..d6641157210542 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-set-property.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-set-property.md @@ -25,7 +25,7 @@ Si pasa el parámetro opcional *\**, indica que el parámetro *object* es un nom **Note:** If the list box or list box column specified using the *object* and *\** parameters does not exist, the command does nothing and no error is triggered. -In the *property* and *value* parameters, you indicate, respectively, the property to set and its new value. Puede utilizar las siguientes constantes encontradas en el tema “*List Box*: +En los parámetros *property* y *value*, usted indica, respectivamente, la propiedad a definir y su nuevo valor. Puede utilizar las siguientes constantes encontradas en el tema “*List Box*: | Constante | Valor | Comentario | | ------------------------------ | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -69,7 +69,7 @@ In the *property* and *value* parameters, you indicate, respectively, the proper ## Ejemplo 1 -You want to make all columns of the "MyListbox" list box resizable: +Quiere que todas las columnas del list box "MyListbox" sean redimensionables: ```4d LISTBOX SET PROPERTY(*;"MyListbox";lk column resizable;lk yes) //Todas las columnas del list box "MyListbox" se establecen como redimensionables diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/new-log-file.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/new-log-file.md index dc7638f769dbd6..a3a706e3623201 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/new-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/new-log-file.md @@ -20,12 +20,12 @@ displayed_sidebar: docs The **New log file** command closes the current log file, renames it and creates a new one with the same name in the same location as the previous one. This command is meant to be used for setting up a backup system using a logical mirror (see the section *Setting up a logical mirror* in the [4D Server Reference Manual](https://doc/4d.com)). -The command returns the full pathname (access path + name) of the log file being closed (called the “segment”). Este archivo se almacena en la misma ubicación que el archivo de registro actual (especificado en la [página de configuración](../Backup/settings.md#configuration) en el tema de copia de seguridad de la configuración). The command does not carry out any processing (compression, segmentation) on the saved file. No aparece ninguna +El comando devuelve el nombre completo de la ruta (ruta de acceso + nombre) del archivo de registro que se está cerrando (llamado “segment”). Este archivo se almacena en la misma ubicación que el archivo de registro actual (especificado en la [página de configuración](../Backup/settings.md#configuration) en el tema de copia de seguridad de la configuración). El comando no realiza ningún procesamiento (compresión, segmentación) en el archivo guardado. No aparece ninguna caja de diálogo. The file is renamed with the current backup numbers of the database and of the log file, as shown in the following example: DatabaseName\[BackupNum-LogBackupNum\].journal. Por ejemplo: -- If the MyDatabase.4DD database has been saved 4 times, the last backup file will be named MyDatabase\[0004\].4BK. The name of the first “segment” of the log file will therefore be MyDatabase\[0004-0001\].journal. +- If the MyDatabase.4DD database has been saved 4 times, the last backup file will be named MyDatabase\[0004\].4BK. El nombre del primer “segment” del archivo de registro será, por lo tanto, MyDatabase\[0004-0001\].journal. - If the MyDatabase.4DD database has been saved 3 times and the log file has been saved 5 times since, the name of the 6th backup of the log file will be MyDatabase\[0003-0006\].journal. :::warning diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/select-log-file.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/select-log-file.md index 4645679308f3d1..05b28a5eb1d550 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/select-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/select-log-file.md @@ -17,11 +17,11 @@ displayed_sidebar: docs ## Descripción -The **SELECT LOG FILE** command creates, or closes the log file according to the value you pass in parameter. +El comando **SELECT LOG FILE** crea o cierra el archivo de historial de acuerdo al valor que pase en el parámetro. -In *logFile*, pass the name or the full pathname of the log file to be created. If you only pass a name, the file will be created in the "Logs" folder of the database located next to the database structure file. +En *logFile*, pase el nombre o la ruta completa del archivo de registro a ser creado. If you only pass a name, the file will be created in the "Logs" folder of the database located next to the database structure file. -If you pass an empty string in *logFile*, **SELECT LOG FILE** presents an Save File dialog box, allowing the user to choose the name and location of the log file to be created. Si el archivo se crea correctamente, la variable OK toma el valor 1. Otherwise, if the user clicks Cancel or if the log file could not be created, OK is set to 0. +If you pass an empty string in *logFile*, **SELECT LOG FILE** presents an Save File dialog box, allowing the user to choose the name and location of the log file to be created. Si el archivo se crea correctamente, la variable OK toma el valor 1. De lo contrario, si el usuario hace clic en Cancelar o si el archivo de registro no pudo ser creado, OK toma el valor 0. **Note:** The new log file is not generated immediately after execution of the command, but after the next backup (the parameter is kept in the data file and will be taken into account even if the database is closed in the meantime) or a call to the [New log file](new-log-file.md) command. Puede llamar al comando [BACKUP](../commands-legacy/backup.md) para activar la creación del archivo de registro. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/wa-get-context.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/wa-get-context.md index 98329331b077f7..366311d7124bd5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/wa-get-context.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/wa-get-context.md @@ -18,7 +18,7 @@ displayed_sidebar: docs ### Descripción -El comando `WA Get context` recupera el objeto de contexto definido para `$4d` en el área Web designada por los parámetros \* y *object* utilizando [`WA SET CONTEXT`](./wa-set-context.md). If `WA SET CONTEXT` was not called for the web area the command returns `null`. +El comando `WA Get context` recupera el objeto de contexto definido para `$4d` en el área Web designada por los parámetros \* y *object* utilizando [`WA SET CONTEXT`](./wa-set-context.md). Si `WA SET CONTEXT` no fue llamado para el área web, el comando devuelve `null`. :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md index 589ce2c5986e0a..7539499b2ac346 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md @@ -3268,7 +3268,7 @@ Quiere saber si al menos un valor de la colección es >0. La función `.orderBy()` ordena los elementos de la colección original y también devuelve la colección ordenada . > Esta función modifica la colección original. -Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. You can also pass one of the following constants in the *ascOrDesc* parameter: +Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. También puede pasar una de las siguientes constantes en el parámetro *ascOrDesc*: |Constant| Type|Value|Comment| |---|---|---|---| diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md index b3728efa113318..f1bbda81ce6386 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -11,6 +11,14 @@ Lea las [**novedades de 4D 20**](https://blog.4d.com/en-whats-new-in-4d-v20/), l ::: +## 4D 20.8 LTS + +#### Lo más destacado + +- [**Lista de bugs corregidos**](https://bugs.4d.com/fixes?version=20.8): lista de todos los bugs corregidos en 4D 20.8 LTS. + + + ## 4D 20.7 LTS #### Lo más destacado @@ -25,7 +33,7 @@ Por razones internas, la versión de los clientes remotos que se conectan a 4D S #### Cambios de comportamiento -- As of 4D **20.7 HF2**, the [`Time`](https://doc.4d.com/4dv20/help/command/en/page179.html) command returns a negative time expression when the *timeValue* parameter is negative. For instance, `Time("-01:02:03")` will now return -01:02:03. En versiones anteriores, se ignoraba el signo negativo. +- As of 4D **20.7 HF2**, the [`Time`](https://doc.4d.com/4dv20/help/command/en/page179.html) command returns a negative time expression when the *timeValue* parameter is negative. Por ejemplo, `Time("-01:02:03")` ahora devolverá -01:02:03. En versiones anteriores, se ignoraba el signo negativo. ## 4D 20.6 LTS diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/settings/web.md b/i18n/es/docusaurus-plugin-content-docs/version-20/settings/web.md index 87ae538ddee0c1..5cc43e25d1efc9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/settings/web.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/settings/web.md @@ -170,7 +170,7 @@ El menú de formato de registro ofrece las siguientes opciones: Each field is separated by a space and each line ends by the CR/LF sequence (character 13, character 10). - host: dirección IP del cliente (por ejemplo: "192.100.100.10) - rfc931: información no generada por 4D, siempre es - (un signo menos) - - usuario: nombre del usuario como está autenticado, o - (un signo menos). If the user name contains spaces, they will be replaced by \_ (an underscore). + - usuario: nombre del usuario como está autenticado, o - (un signo menos). Si el nombre de usuario contiene espacios, se remplazan por \_ (un guión bajo). - DD: día, MMM: una abreviatura de 3 letras para el nombre del mes (Jan, Feb,...), YYYY: año, HH: hora, MM: minutos, SS: segundos > La fecha y hora son locales al servidor. @@ -197,30 +197,30 @@ El menú de formato de registro ofrece las siguientes opciones: La siguiente tabla enumera los campos disponibles para cada formato (en orden alfabético) y describe su contenido: -| Campo | ELF | WLF | Valor | -| -------------- | --- | --- | --------------------------------------------------------------------------- | -| BYTES_RECEIVED | | X | Número de bytes recibidos por el servidor | -| BYTES_SENT | X | X | Número de bytes enviados por el servidor al cliente | -| C_DNS | X | X | Dirección IP del DNS (ELF: campo idéntico al campo C_IP) | -| C_IP | X | X | Dirección IP del cliente (por ejemplo 192.100.100.10) | -| CONNECTION_ID | | X | Número de identificación de la conexión | -| CS(COOKIE) | X | X | Información sobre las cookies contenidas en la petición HTTP | -| CS(HOST) | X | X | Campo Host de la petición HTTP | -| CS(REFERER) | X | X | URL de la página que apunta al documento solicitado | -| CS(USER_AGENT) | X | X | Información sobre el software y el sistema operativo del cliente | -| CS_SIP | X | X | Dirección IP del servidor | -| CS_URI | X | X | URI sobre el que se realiza la petición | -| CS_URI_QUERY | X | X | Parámetros de consulta de la petición | -| CS_URI_STEM | X | X | Parte de la solicitud sin los parámetros de la consulta | -| DATE | X | X | DD: día, MMM: abreviación de 3 letras para el mes (Jan, Feb,...), YYYY: año | -| METHOD | X | X | Método HTTP utilizado para la solicitud enviada al servidor | -| PATH_ARGS | | X | Parámetros de la CGI: cadena situada después del caracter "$" | -| STATUS | X | X | Respuesta ofrecida por el servidor | -| TIME | X | X | HH: hora, MM: minutos, SS: segundos | -| TRANSFER_TIME | X | X | Tiempo solicitado por el servidor para generar la respuesta | -| USER | X | X | Nombre de usuario si está autenticado; en caso contrario, - (signo menos). | -| | | | If the user name contains spaces, they are replaced by \_ (underlines) | -| URL | | X | URL solicitado por el cliente | +| Campo | ELF | WLF | Valor | +| -------------- | --- | --- | -------------------------------------------------------------------------------- | +| BYTES_RECEIVED | | X | Número de bytes recibidos por el servidor | +| BYTES_SENT | X | X | Número de bytes enviados por el servidor al cliente | +| C_DNS | X | X | Dirección IP del DNS (ELF: campo idéntico al campo C_IP) | +| C_IP | X | X | Dirección IP del cliente (por ejemplo 192.100.100.10) | +| CONNECTION_ID | | X | Número de identificación de la conexión | +| CS(COOKIE) | X | X | Información sobre las cookies contenidas en la petición HTTP | +| CS(HOST) | X | X | Campo Host de la petición HTTP | +| CS(REFERER) | X | X | URL de la página que apunta al documento solicitado | +| CS(USER_AGENT) | X | X | Información sobre el software y el sistema operativo del cliente | +| CS_SIP | X | X | Dirección IP del servidor | +| CS_URI | X | X | URI sobre el que se realiza la petición | +| CS_URI_QUERY | X | X | Parámetros de consulta de la petición | +| CS_URI_STEM | X | X | Parte de la solicitud sin los parámetros de la consulta | +| DATE | X | X | DD: día, MMM: abreviación de 3 letras para el mes (Jan, Feb,...), YYYY: año | +| METHOD | X | X | Método HTTP utilizado para la solicitud enviada al servidor | +| PATH_ARGS | | X | Parámetros de la CGI: cadena situada después del caracter "$" | +| STATUS | X | X | Respuesta ofrecida por el servidor | +| TIME | X | X | HH: hora, MM: minutos, SS: segundos | +| TRANSFER_TIME | X | X | Tiempo solicitado por el servidor para generar la respuesta | +| USER | X | X | Nombre de usuario si está autenticado; en caso contrario, - (signo menos). | +| | | | Si el nombre de usuario contiene espacios, son reemplazados por \_ (subrayado) | +| URL | | X | URL solicitado por el cliente | > Las fechas y horas se indican en GMT. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index de25918e361018..b19fb72882385a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -3169,7 +3169,7 @@ La función `.sort()` ordena los elemento > Esta función modifica la colección original. Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. -You can also pass one of the following constants in the *ascOrDesc* parameter: +También puede pasar una de las siguientes constantes en el parámetro *ascOrDesc*: ``` |Constant| Type|Value|Comment| diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CryptoKeyClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CryptoKeyClass.md index 165d71999ad19e..0dcbda2559aa1c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CryptoKeyClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CryptoKeyClass.md @@ -54,12 +54,12 @@ La función `4D.CryptoKey.new()` crea un #### *settings* -| Propiedad | Tipo | Descripción | -| --------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [type](#type) | text | Defines the type of the key to create:
  • "RSA": generates a RSA key pair, using [.size](#size) as size.
  • "ECDSA": generates an Elliptic Curve Digital Signature Algorithm key pair, using [.curve](#curve) as curve. Tenga en cuenta que las llaves ECDSA no pueden utilizarse para el cifrado, sino solo para la firma.
  • "PEM": loads a key pair definition in PEM format, using [.pem](#pem).
  • | -| [curve](#curve) | text | Nombre de la curva ECDSA | -| [pem](#pem) | text | Definición PEM de una llave de cifrado a cargar | -| [size](#size) | integer | Tamaño de la llave RSA en bits | +| Propiedad | Tipo | Descripción | +| --------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [type](#type) | text | Define el tipo de llave a crear:
  • "RSA": genera un par de llaves RSA, utilizando [.size](#size) como tamaño.
  • "ECDSA": genera un par de llaves Elliptic Curve Digital Signature Algorithm, utilizando [.curve](#curve) como curva. Tenga en cuenta que las llaves ECDSA no pueden utilizarse para el cifrado, sino solo para la firma.
  • "PEM": carga una definición de par de llaves en formato PEM, utilizando [.pem](#pem).
  • | +| [curve](#curve) | text | Nombre de la curva ECDSA | +| [pem](#pem) | text | Definición PEM de una llave de cifrado a cargar | +| [size](#size) | integer | Tamaño de la llave RSA en bits | #### *CryptoKey* diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/EntityClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/EntityClass.md index 27a8ce893baa25..43a8a2bc90666a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/EntityClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/EntityClass.md @@ -393,15 +393,15 @@ El objeto devuelto por `.drop()` contiene las siguientes propiedades: (\*) Los siguientes valores pueden ser devueltos en las propiedades *status* y *statusText* del objeto *Result* en caso de error: -| Constante | Valor | Comentario | -| ----------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). When using entity.drop(), this error can be returned when dk force drop if stamp changed option is used. When using entity.lock(), this error can be returned when dk reload if stamp changed option is used.
  • **statusText asociado**: "La entidad ya no existe" | -| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista.
    **statusText asociado**: "Already locked" | -| `dk status validation failed` | 7 | Non fatal error sent by the developer for a [validate event](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | -| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
    **statusText asociado**\*: "Other error" | -| `dk status serious validation error` | 8 | Fatal error sent by the developer for a [validate event](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | -| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used
  • **Associated statusText**: "Stamp has changed"
  • | -| `dk status wrong permission` | 1 | Los privilegios actuales no permiten suprimir la entidad. **Associated statusText**: "Permission Error" | +| Constante | Valor | Comentario | +| ----------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza entity.drop(), este error puede ser devuelto cuando se utiliza la opción dk force drop if stamp changed. When using entity.lock(), this error can be returned when dk reload if stamp changed option is used.
  • **statusText asociado**: "La entidad ya no existe" | +| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista.
    **statusText asociado**: "Already locked" | +| `dk status validation failed` | 7 | Error no crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | +| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
    **statusText asociado**\*: "Other error" | +| `dk status serious validation error` | 8 | Error crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | +| `dk status stamp has changed` | 2 | El valor del marcador interno (stamp) de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used
  • **Associated statusText**: "Stamp has changed"
  • | +| `dk status wrong permission` | 1 | Los privilegios actuales no permiten suprimir la entidad. **Associated statusText**: "Permission Error" | #### Ejemplo 1 @@ -1020,7 +1020,7 @@ El objeto devuelto por `.lock()` contiene las siguientes propiedades: | `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza `.drop()`, este error puede devolverse cuando se utiliza la opción dk force drop if stamp changed. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | | `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista. **statusText asociado**: "Already locked" | | `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
    **statusText asociado**\*: "Other error" | -| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | +| `dk status stamp has changed` | 2 | El valor del marcador interno (stamp) de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | #### Ejemplo 1 @@ -1182,10 +1182,10 @@ El objeto devuelto por `.reload( )` contiene las siguientes propiedades: (\*) Los siguientes valores pueden ser devueltos en las propiedades *status* y *statusText* del objeto *Result* en caso de error: -| Constante | Valor | Comentario | -| ----------------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). When using `.drop()`, this error can be returned when `dk force drop if stamp changed` option is used. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | -| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
    ***statusText asociado***: "Other error" | +| Constante | Valor | Comentario | +| ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza `.drop()`, este error puede devolverse cuando se utiliza la opción `dk force drop if stamp changed`. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | +| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
    ***statusText asociado***: "Other error" | #### Ejemplo @@ -1277,16 +1277,16 @@ El objeto devuelto por `.save()` contiene las siguientes propiedades: Los siguientes valores pueden ser devueltos en las propiedades `status`y `statusText` del objeto Result en caso de error: -| Constante | Valor | Comentario | -| ----------------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status automerge failed` | 6 | (Only if the `dk auto merge` option is used) The automatic merge option failed when saving the entity. **statusText asociado**: "Fallo de la fusión automática" | -| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). When using `.drop()`, this error can be returned when `dk force drop if stamp changed` option is used. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | -| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista. **statusText asociado**: "Already locked" | -| `dk status validation failed` | 7 | Non fatal error sent by the developer for a [validate event](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | -| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc. **Associated statusText**: "Other error" | -| `dk status serious validation error` | 8 | Fatal error sent by the developer for a [validate event](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | -| `dk status stamp has changed` | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | -| `dk status wrong permission` | 1 | Los privilegios actuales no permiten guardar la entidad. **Associated statusText**: "Permission Error" | +| Constante | Valor | Comentario | +| ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `dk status automerge failed` | 6 | (Solo si se utiliza la opción `dk auto merge`) La opción de fusión automática falló al guardar la entidad. **statusText asociado**: "Fallo de la fusión automática" | +| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza `.drop()`, este error puede devolverse cuando se utiliza la opción `dk force drop if stamp changed`. Cuando se utiliza `.lock()`, este error puede ser devuelto cuando se utiliza la opción `dk reload if stamp changed`

  • **statusText asociado**: "Entity does not exist anymore" | +| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista. **statusText asociado**: "Already locked" | +| `dk status validation failed` | 7 | Error no crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | +| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc. **Associated statusText**: "Other error" | +| `dk status serious validation error` | 8 | Error crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | +| `dk status stamp has changed` | 2 | El valor del marcador interno (stamp) de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used

  • **Associated statusText**: "Stamp has changed" | +| `dk status wrong permission` | 1 | Los privilegios actuales no permiten guardar la entidad. **Associated statusText**: "Permission Error" | #### Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/IMAPTransporterClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/IMAPTransporterClass.md index 05be142672c1db..00fb9eee94ee8e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/IMAPTransporterClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/IMAPTransporterClass.md @@ -791,16 +791,16 @@ En el parámetro opcional `parameters`, pase un objeto que contenga valores para Cada objeto de la colección devuelta contiene las siguientes propiedades: -| Propiedad | Tipo | Descripción | -| ------------------------------------------------------------------------------------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| \[].name | Text | Nombre del buzón. Devuelto si withBoxProperties=true o withBoxInfo=true | -| \[].selectable | Boolean | Indica si los derechos de acceso permiten o no seleccionar el buzón de correo:
    • true - el buzón puede ser seleccionado
    • false - el buzón de correo no puede ser seleccionado
    Devuelto si withBoxProperties=true | -| \[].inferior | Boolean | Indica si los derechos de acceso permiten o no crear una jerarquía inferior en el buzón:
    • true - se puede crear un nivel inferior
    • false - no se puede crear un nivel inferior
    Se devuelve si withBoxProperties=true | -| \[].interesting | Boolean | Indica si el buzón ha sido marcado como "interesante" por el servidor:
    • true - El buzón ha sido marcado como "interesante" por el servidor. Por ejemplo, puede contener mensajes nuevos.
    • false - The mailbox has not been marked "interesting" by the server.
    Se devuelve si withBoxProperties=true | -| [].mailCount | Number | Número de mensajes en el buzón. Devuelto si withBoxInfo=true | -| [].mailRecent | Number | Número de mensajes marcados como "recent" (indicando nuevos mensajes). Devuelto si withBoxInfo=true | -| [].mailUnseen | Number | Número de mensajes marcados como "unseen". Devuelto si withBoxInfo=true | -| [].id | Text | Identificador único del buzón. Devuelto si withBoxInfo=true | +| Propiedad | Tipo | Descripción | +| ------------------------------------------------------------------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| \[].name | Text | Nombre del buzón. Devuelto si withBoxProperties=true o withBoxInfo=true | +| \[].selectable | Boolean | Indica si los derechos de acceso permiten o no seleccionar el buzón de correo:
    • true - el buzón puede ser seleccionado
    • false - el buzón de correo no puede ser seleccionado
    Devuelto si withBoxProperties=true | +| \[].inferior | Boolean | Indica si los derechos de acceso permiten o no crear una jerarquía inferior en el buzón:
    • true - se puede crear un nivel inferior
    • false - no se puede crear un nivel inferior
    Se devuelve si withBoxProperties=true | +| \[].interesting | Boolean | Indica si el buzón ha sido marcado como "interesante" por el servidor:
    • true - El buzón ha sido marcado como "interesante" por el servidor. Por ejemplo, puede contener mensajes nuevos.
    • false - El buzón no ha sido marcado como "interesante" por el servidor.
    Se devuelve si withBoxProperties=true | +| [].mailCount | Number | Número de mensajes en el buzón. Devuelto si withBoxInfo=true | +| [].mailRecent | Number | Número de mensajes marcados como "recent" (indicando nuevos mensajes). Devuelto si withBoxInfo=true | +| [].mailUnseen | Number | Número de mensajes marcados como "unseen". Devuelto si withBoxInfo=true | +| [].id | Text | Identificador único del buzón. Devuelto si withBoxInfo=true | Si la cuenta no contiene buzones, se devuelve una colección vacía. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/SessionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/SessionClass.md index fa0c67c6f7c7b1..53e8a1a9ceea1b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/SessionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/SessionClass.md @@ -390,7 +390,7 @@ Esta función devuelve True para el *privilegio* si se llama desde una función Regarding remote client sessions, the function only concerns the code executed in the context of a [web request sent through a Web area](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). -With stored procedure sessions and standalone sessions, this function always returns True, whatever the *privilege*. +Con las sesiones de procedimiento almacenadas y las sesiones independientes, esta función siempre devuelve True, sea cual sea el *privilegio*. #### Ejemplo @@ -754,7 +754,7 @@ Function callback($request : 4D.IncomingMessage) : 4D.OutgoingMessage :::note -This function does nothing and always returns **False** with stored procedure sessions and standalone sessions. +Esta función no hace nada y siempre devuelve **False** con sesiones de procedimientos almacenadas y las sesiones independientes. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebServerClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebServerClass.md index 6fed6a0c01983c..9b27f3d5414da9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebServerClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebServerClass.md @@ -187,7 +187,7 @@ El nombre de la página de i *Propiedad de sólo lectura* -A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Request handler](../WebServer/http-request-handler.md) page. +A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. Para más información, consulte la página [HTTP Request handler](../WebServer/http-request-handler.md). @@ -495,7 +495,7 @@ La ruta de la carpeta raíz del s *Propiedad de sólo lectura* -A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Rules](../WebServer/http-rules.md) page. +A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. Para obtener más información, consulte la página [Reglas HTTP](../WebServer/http-rules.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Admin/cli.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Admin/cli.md index 629c6c21a7223c..cc30a3dc01b1af 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Admin/cli.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Admin/cli.md @@ -44,25 +44,25 @@ Sintaxis: [--utility] [--skip-onstartup] [--startup-method ] ``` -| Argumento | Valor | Descripción | -| :-------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `applicationPath` | Ruta de 4D, 4D Server, aplicación fusionada o tool4d | Lanza la aplicación.
    If not headless: identical to double-clicking the application; when called without structure file argument, the application is executed and the 'select database' dialog box appears. | -| `--version` | | Muestra la versión de la aplicación y sale | -| `--help` | | Muestra el mensaje de ayuda y sale. Argumentos alternativos: -?, -h | -| `--project` | projectPath | packagePath | 4dlinkPath | Archivo de proyecto a abrir con el archivo de datos actual. No aparece ninguna caja de diálogo. | -| `--data` | dataPath | Archivo de datos a abrir con el archivo de proyecto designado. Si no se especifica, se utiliza el último archivo de datos abierto. | -| `--opening-mode` | interpreted | compiled | Base de datos de peticiones a abrir en modo interpretado o compilado. No se lanza ningún error si el modo solicitado no está disponible. | -| `--create-data` | | Crea automáticamente un nuevo archivo de datos si no se encuentra un archivo de datos válido. No aparece ninguna caja de diálogo. 4D utiliza el nombre del archivo pasado en el argumento "--data" si lo hay (genera un error si ya existe un archivo con el mismo nombre). | -| `--user-param` | Cadena usuario personalizada | Una cadena que estará disponible en la aplicación a través del comando [`Get database parameter`](../commands-legacy/get-database-parameter.md) (la cadena no debe comenzar por un carácter "-", que está reservado). | -| `--headless` | | Lanza 4D, 4D Server o la aplicación fusionada sin interfaz (modo headless). En este modo:
  • El modo Diseño no está disponible, la base de datos se inicia en modo Aplicación
  • No se muestra la barra de herramientas, la barra de menú, la ventana MDI ni la pantalla de presentación
  • No se muestra ningún icono en el dock o la barra de tareas
  • La base de datos abierta no se registra en el menú "Bases de datos recientes"
  • Se inicia automáticamente el registro de diagnóstico (ver [SET DATABASE PARAMETER](../commands-legacy/set-database-parameter.md), selector 79)
  • Se intercepta cada llamada a una caja de diálogo y se suministra una respuesta automática (por ejemplo, OK para el comando [ALERT](../commands-legacy/alert.md), Abort para un diálogo de error...). All intercepted commands(\*) are logged in the diagnostic log.

  • For maintenance needs, you can send any text to standard output streams using the [LOG EVENT](../commands-legacy/log-event.md) command. Tenga en cuenta que las aplicaciones 4D sin interfaz sólo pueden cerrarse mediante una llamada a [QUIT 4D](../commands-legacy/quit-4d.md) o utilizando el administrador de tareas del sistema operativo. | -| `--dataless` | | Lanza 4D, 4D Server, la aplicación fusionada o tool4d en modo sin datos. El modo sin datos es útil cuando 4D ejecuta tareas sin necesidad de datos (compilación de proyectos, por ejemplo). In this mode:
  • No file containing data is opened, even if specified in the command line or the `.4DLink` file, or when using the `CREATE DATA FILE` and `OPEN DATA FILE` commands.
  • Los comandos que manipulan datos arrojarán un error. Por ejemplo, `CREATE RECORD` lanza "no hay tabla a la que aplicar el comando".

  • **Nota**:
  • si se pasa en la línea de comando, el modo dataless se aplica a todas las bases de datos abiertas en 4D, mientras no se cierre la aplicación.
  • Si se pasa utilizando el archivo `.4DLink`, el modo dataless sólo se aplica a la base de datos especificada en el archivo `.4DLink`. Para más información sobre los archivos `.4DLink`, ver [Atajos para abrir proyectos](../GettingStarted/creating.md#project-opening-shortcuts).
  • | -| `--webadmin-settings-file` | Ruta del archivo | Ruta del archivo `.4DSettings` personalizado para el [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | -| `--webadmin-access-key` | Text | Llave de acceso para el [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | -| `--webadmin-auto-start` | Boolean | Estado del lanzamiento automático del [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | -| `--webadmin-store-settings` | | Almacena la llave de acceso y los parámetros de inicio automático en el archivo de parámetros actualmente utilizado (es decir, el archivo [`WebAdmin.4DSettings`](webAdmin.md#webadmin-settings) por defecto o un archivo personalizado designado con el parámetro `--webadmin-settings-path`). Utilice el argumento `--webadmin-store-settings` para guardar esta configuración si es necesario. No disponible con [tool4d](#tool4d). | -| `--utility` | | Sólo disponible con 4D Server. Sólo disponible con 4D Server. | -| `--skip-onstartup` | | Lanza el proyecto sin ejecutar ningún método "automático", incluyendo los métodos base `On Startup` y `On Exit` | -| `--startup-method` | Nombre del método proyecto (cadena) | Método de proyecto a ejecutar inmediatamente después del método base `On Startup` (si no se omite con `--skip-onstartup`). | +| Argumento | Valor | Descripción | +| :-------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `applicationPath` | Ruta de 4D, 4D Server, aplicación fusionada o tool4d | Lanza la aplicación.
    If not headless: identical to double-clicking the application; when called without structure file argument, the application is executed and the 'select database' dialog box appears. | +| `--version` | | Muestra la versión de la aplicación y sale | +| `--help` | | Muestra el mensaje de ayuda y sale. Argumentos alternativos: -?, -h | +| `--project` | projectPath | packagePath | 4dlinkPath | Archivo de proyecto a abrir con el archivo de datos actual. No aparece ninguna caja de diálogo. | +| `--data` | dataPath | Archivo de datos a abrir con el archivo de proyecto designado. Si no se especifica, se utiliza el último archivo de datos abierto. | +| `--opening-mode` | interpreted | compiled | Base de datos de peticiones a abrir en modo interpretado o compilado. No se lanza ningún error si el modo solicitado no está disponible. | +| `--create-data` | | Crea automáticamente un nuevo archivo de datos si no se encuentra un archivo de datos válido. No aparece ninguna caja de diálogo. 4D utiliza el nombre del archivo pasado en el argumento "--data" si lo hay (genera un error si ya existe un archivo con el mismo nombre). | +| `--user-param` | Cadena usuario personalizada | Una cadena que estará disponible en la aplicación a través del comando [`Get database parameter`](../commands-legacy/get-database-parameter.md) (la cadena no debe comenzar por un carácter "-", que está reservado). | +| `--headless` | | Lanza 4D, 4D Server o la aplicación fusionada sin interfaz (modo headless). En este modo:
  • El modo Diseño no está disponible, la base de datos se inicia en modo Aplicación
  • No se muestra la barra de herramientas, la barra de menú, la ventana MDI ni la pantalla de presentación
  • No se muestra ningún icono en el dock o la barra de tareas
  • La base de datos abierta no se registra en el menú "Bases de datos recientes"
  • Se inicia automáticamente el registro de diagnóstico (ver [SET DATABASE PARAMETER](../commands-legacy/set-database-parameter.md), selector 79)
  • Se intercepta cada llamada a una caja de diálogo y se suministra una respuesta automática (por ejemplo, OK para el comando [ALERT](../commands-legacy/alert.md), Abort para un diálogo de error...). Todos los comandos interceptados(\*) se registran en el registro de diagnóstico.

  • For maintenance needs, you can send any text to standard output streams using the [LOG EVENT](../commands-legacy/log-event.md) command. Tenga en cuenta que las aplicaciones 4D sin interfaz sólo pueden cerrarse mediante una llamada a [QUIT 4D](../commands-legacy/quit-4d.md) o utilizando el administrador de tareas del sistema operativo. | +| `--dataless` | | Lanza 4D, 4D Server, la aplicación fusionada o tool4d en modo sin datos. El modo sin datos es útil cuando 4D ejecuta tareas sin necesidad de datos (compilación de proyectos, por ejemplo). In this mode:
  • No file containing data is opened, even if specified in the command line or the `.4DLink` file, or when using the `CREATE DATA FILE` and `OPEN DATA FILE` commands.
  • Los comandos que manipulan datos arrojarán un error. Por ejemplo, `CREATE RECORD` lanza "no hay tabla a la que aplicar el comando".

  • **Nota**:
  • si se pasa en la línea de comando, el modo dataless se aplica a todas las bases de datos abiertas en 4D, mientras no se cierre la aplicación.
  • Si se pasa utilizando el archivo `.4DLink`, el modo dataless sólo se aplica a la base de datos especificada en el archivo `.4DLink`. Para más información sobre los archivos `.4DLink`, ver [Atajos para abrir proyectos](../GettingStarted/creating.md#project-opening-shortcuts).
  • | +| `--webadmin-settings-file` | Ruta del archivo | Ruta del archivo `.4DSettings` personalizado para el [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | +| `--webadmin-access-key` | Text | Llave de acceso para el [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | +| `--webadmin-auto-start` | Boolean | Estado del lanzamiento automático del [servidor web WebAdmin](webAdmin.md). No disponible con [tool4d](#tool4d). | +| `--webadmin-store-settings` | | Almacena la llave de acceso y los parámetros de inicio automático en el archivo de parámetros actualmente utilizado (es decir, el archivo [`WebAdmin.4DSettings`](webAdmin.md#webadmin-settings) por defecto o un archivo personalizado designado con el parámetro `--webadmin-settings-path`). Utilice el argumento `--webadmin-store-settings` para guardar esta configuración si es necesario. No disponible con [tool4d](#tool4d). | +| `--utility` | | Sólo disponible con 4D Server. Sólo disponible con 4D Server. | +| `--skip-onstartup` | | Lanza el proyecto sin ejecutar ningún método "automático", incluyendo los métodos base `On Startup` y `On Exit` | +| `--startup-method` | Nombre del método proyecto (cadena) | Método de proyecto a ejecutar inmediatamente después del método base `On Startup` (si no se omite con `--skip-onstartup`). | (\*) Algunos diálogos se muestran antes de abrir la base de datos, por lo que es imposible escribir en el [archivo de registro de diagnóstico](Debugging/debugLogFiles.md#4ddiagnosticlogtxt) (alerta de licencia, diálogo de conversión, selección de bases de datos, selección de archivos de datos). En este caso, se lanza un mensaje de error tanto en el flujo stderr como en el registro de eventos sistema, diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Debugging/debugLogFiles.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Debugging/debugLogFiles.md index d6b32a4f015be7..6d1c175bec05b2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Debugging/debugLogFiles.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Debugging/debugLogFiles.md @@ -73,7 +73,7 @@ Para cada petición, se registran los siguientes campos: | server\_duration | exec\_duration | Depende del lugar donde se genere el registro:
  • _server\*duration* cuando se genera en el cliente --Time tomado en microsegundos para que el servidor procese la solicitud y devuelva una respuesta. B a F en la imagen de abajo, O
  • _exec\*duration* cuando se genera en el servidor --Tiempo empleado en microsegundos para que el servidor procese la petición. B a E en la imagen de abajo.
  • | | write\_duration | Tiempo tomado en microsegundos para enviar la:
  • Petición (cuando se ejecuta en el cliente). A a B en la imagen inferior.
  • Respuesta (cuando se ejecuta en el servidor). E a F en la imagen de abajo.
  • | | task_kind | Apropiativo o cooperativo (respectivamente "p" o "c") | -| rtt | Tiempo estimado en microsegundos para que el cliente envíe la solicitud y el servidor la acuse de recibo. A a D y E a H en la imagen inferior.
  • Only measured when using the ServerNet network layer, returns 0 when used with the legacy network layer.
  • For Windows versions prior to Windows 10 or Windows Server 2016, the call will return 0.
  • | +| rtt | Tiempo estimado en microsegundos para que el cliente envíe la solicitud y el servidor la acuse de recibo. A a D y E a H en la imagen inferior.
  • Sólo se mide cuando se utiliza la capa de red ServerNet, devuelve 0 cuando se utiliza con la capa de red heredada.
  • Para las versiones de Windows anteriores a Windows 10 o Windows Server 2016, la llamada devolverá 0.
  • | | extra | Información adicional relacionada con el contexto, por ejemplo el nombre de la clase de datos y/o el nombre del atributo en caso de petición ORDA | Flujo de solicitudes: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md index 3f471cae307fa5..fa5d056395d3c4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md @@ -126,7 +126,7 @@ Para gestionar esta configuración, necesita utilizar sesiones cliente remotas. Note that [privileges](../ORDA/privileges.md) should be set in the session before executing a web request from a Web area, so that the user automatically gets their privileges for web access (see example). Keep in mind that privileges only apply to requests coming from the web, not to the 4D code executed in a standard remote session. -Shared sessions are handled through [OTP tokens](../WebServer/sessions.md#session-token-otp). After you created an OTP token on the server for the user session, you add the token (through the `$4DSID` parameter value) to web requests sent from web areas containing Qodly pages so that the user session on the server is identified and shared. On the web server side, if a web request contains an *OTP id* in the $4DSID parameter, the session corresponding to this OTP token is used. +Las sesiones compartidas se gestionan a través de [tokens OTP](../WebServer/sessions.md#session-token-otp). After you created an OTP token on the server for the user session, you add the token (through the `$4DSID` parameter value) to web requests sent from web areas containing Qodly pages so that the user session on the server is identified and shared. On the web server side, if a web request contains an *OTP id* in the $4DSID parameter, the session corresponding to this OTP token is used. :::tip Entrada de blog relacionada diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/labels.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/labels.md index e1a5817b9f5bc7..aa663b94431609 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/labels.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/labels.md @@ -127,22 +127,22 @@ El lado derecho de la barra de herramientas contiene comandos utilizados para mo ## Página Diseño -The Layout page contains controls for printing labels based on the requirements of your current print settings. +Esta página contiene los controles para imprimir etiquetas en función de los requisitos de sus parámetros de impresión actuales. ![](../assets/en/Desktop/label-layout.png) -- **Labels Order**: Specifies whether labels should be printed in the direction of the rows or the columns. -- **Rows** and **Columns**: Set the number of labels to be printed by "row" and by "column" on each sheet. These settings determine the label size when the "Automatic resizing" option is enabled. -- **Labels per record**: Sets the number of copies to print for each label (copies are printed consecutively). -- **Print Setup...**: Sets the format of the page on which the sheet of labels will be printed. When you click this button, the setup dialog box for the printer selected in your system appears. By default, the sheet of labels is generated based on an A4 page in portrait mode. - **Note:** The sheet created by the editor is based on the logical page of the printer, i.e. the physical page (for instance, an A4 page) less the margins that cannot be used on each side of the sheet. The physical margins of the page are shown by blue lines in the preview area. -- **Unit**: Changes the units in which you specify your label and label page measurements. Puede utilizar puntos, milímetros, centímetros o pulgadas. -- **Automatic resizing**: Means that 4D automatically calculates the size of the labels (i.e. the Width and Height parameters) according to the values set in all the other parameters. When this option is checked, the label size is adjusted each time you modify a page parameter. Los parámetros Ancho y Alto ya no pueden ajustarse manualmente. -- **Ancho** y **Alto**: define la altura y el ancho de cada etiqueta manualmente. They cannot be edited when the **Automatic resizing** option is checked. -- **Márgenes** (Superior, Derecho, Izquierdo, Inferior): define los márgenes de su hoja. Estos márgenes son simbolizados por líneas azules en el área de vista previa. Clicking on **Use printer margins** replicates, in the preview area, the margin information provided by the selected printer (these values can be modified). -- **Gaps**: Set the amount of vertical and/or horizontal space between label rows and columns. -- **Method**: Lets you trigger a specific method that will be run at print time. For example, you can execute a method that posts the date and time that each label was printed. This feature is also useful when you print labels using a dedicated table form, in which case you can fill variables from a method. - To be eligible for label processing, a project method must comply with the following settings: +- **Orden de etiquetas**: indica si las etiquetas deben imprimirse en la dirección de las líneas o de las columnas. +- **Líneas** y **Columnas**: defina el número de etiquetas a imprimir por "línea" y "columna" en cada hoja. Estos parámetros determinan las dimensiones de las etiquetas cuando la opción "Dimensiones automáticas" está activada. +- **Etiquetas por registro**: define el número de copias a imprimir para cada etiqueta (las copias se imprimen consecutivamente). +- **Formato de impresión...**: formato de la página en la que se imprimirá la hoja de etiquetas. Cuando hace clic en este botón, aparece el cuadro de diálogo de configuración de la impresora seleccionada en su sistema. Por defecto, la hoja de etiquetas se genera basándose en una página A4 en modo retrato. + **Nota:** la hoja creada por el editor se basa en la página lógica de la impresora, es decir, la página física (por ejemplo, una hoja A4) menos los márgenes que no se pueden utilizar a cada lado de la hoja. Los márgenes de la página física se representan por las líneas azules en el área de vista previa. +- **Unidad**: modifica las unidades en las que especifica las medidas de la etiqueta y de la página de etiqueta. Puede utilizar puntos, milímetros, centímetros o pulgadas. +- **Dimensiones automáticas**: indica que 4D calcula automáticamente el tamaño de las etiquetas (es decir, los parámetros Ancho y Alto) según los valores definidos en todos los demás parámetros. Cuando esta opción está marcada, el tamaño de las etiquetas se recalcula cada vez que se modifica un parámetro en la página. Los parámetros Ancho y Alto ya no pueden ajustarse manualmente. +- **Ancho** y **Alto**: define la altura y el ancho de cada etiqueta manualmente. No se pueden editar cuando la opción **Dimensionamiento automático** está marcada. +- **Márgenes** (Superior, Derecho, Izquierdo, Inferior): define los márgenes de su hoja. Estos márgenes son simbolizados por líneas azules en el área de vista previa. Al hacer clic en **Aplicar los márgenes de la impresora** con el fin de replicar, en el área de vista previa, la información de margen proporcionada por la impresora seleccionada (estos valores pueden ser modificados). +- **Intervalos**: defina el espacio vertical y/o horizontal entre las líneas y columnas de las etiquetas. +- **Método**: permite activar un método específico que se ejecutará al momento de la impresión. Por ejemplo, puede ejecutar un método que publique la fecha y la hora en que se imprimió cada etiqueta. Esta funcionalidad también es útil cuando se imprimen etiquetas usando un formulario tabla dedicado, en cuyo caso se pueden llenar variables a partir de un método. + Para ser elegible para el procesamiento de etiquetas, un método proyecto debe cumplir con las siguientes condiciones: - debe ser "permitido" para la base de datos (los métodos permitidos dependen de los [parámetros del proyecto](../settings/security.md#options) y el comando [`SET ALLOWED METHODS`](../commands/set-allowed-methods.md), de lo contrario no se mostrará en el menú **Aplicación**. - debe tener la opción [Compartido por componentes y base de datos local](../Project/code-overview.md#shared-by-components-and-host-database). Ver también [este ejemplo](#printing-labels-using-forms-and-methods-example) a continuación. @@ -150,20 +150,20 @@ The Layout page contains controls for printing labels based on the requirements :::note Para necesidades avanzadas, puede restringir la lista de métodos disponibles utilizando un [archivo json específico](#controlling-available-forms-and-methods). -The **For each: Record or Label** options are used to specify whether to run the method once per label or once per record. This control has meaning only if you are printing more than one copy of each label and you are also executing a method at print time. +Las opciones **Para cada: Registro o Etiqueta** permiten especificar si ejecutar el método una vez por etiqueta o una vez por registro. Este control sólo tiene sentido si está imprimiendo más de una copia de cada etiqueta y también está ejecutando un método al momento de la impresión. ::: -- **Layout preview**: Provides a reduced view of how an entire page of labels will look, based on the dimensions you enter in the Label editor. The page preview also reflects the paper size selected in the Print Setup dialog box. También puede utilizar esta zona para designar la primera etiqueta de la página que se va a imprimir (esta opción sólo afecta a la primera hoja en caso de impresión multipágina). This can be useful, for example, when you want to print on a sheet of adhesive labels, part of which has already been used. También puede seleccionar la primera etiqueta en la página a imprimir haciendo clic en ella: +- **Vista previa del diseño**: permite visualizar en tiempo real las modificaciones que ingrese en el editor de etiquetas. La vista previa de la página también refleja el tamaño de papel seleccionado en el cuadro de diálogo Configuración de la impresión. También puede utilizar esta área para designar la primera etiqueta de la página a imprimir (esta opción solo afecta a la primera hoja en el caso de la impresión multipágina). Esto puede ser útil, por ejemplo, cuando se desea imprimir en una hoja de etiquetas adhesivas, parte de las cuales ya se ha utilizado. También puede seleccionar la primera etiqueta en la página a imprimir haciendo clic en ella: ![](../assets/en/Desktop/label-start.png) ## Impresión de etiquetas mediante formularios y métodos (ejemplo) -You can use dedicated table forms and project methods to print labels with calculated variables. This simple example shows how to configure the different elements. +Puede utilizar formularios de tabla dedicados y métodos proyecto para imprimir etiquetas con variables calculadas. Este ejemplo explica como configurar los diferentes elementos. 1. En un formulario tabla dedicado, añada su(s) campo(s) de etiqueta y su(s) variable(s). - Here, in a table form named "label", we added the *myVar* variable: + Aquí, en una tabla llamada "etiqueta", sumamos la variable *myVar*: ![](../assets/en/Desktop/label-example1.png) 2. Crea un método proyecto llamado `setMyVar` con el siguiente código: @@ -174,7 +174,7 @@ You can use dedicated table forms and project methods to print labels with calcu 3. Defina el método proyecto como ["Compartido por los componentes y la base de datos local"](../Project/code-overview.md#shared-by-components-and-host-database). -4. Before displaying the Label editor, make sure the project method is allowed by executing this code: +4. Antes de mostrar el editor de etiquetas, asegúrese de que el método proyecto está autorizado ejecutando este código: ```4d ARRAY TEXT($methods;1) @@ -182,18 +182,18 @@ You can use dedicated table forms and project methods to print labels with calcu SET ALLOWED METHODS($methods) ``` -5. Open the Label editor and use your form: +5. Abre el editor de etiquetas y use su formulario: ![](../assets/en/Desktop/label-example2.png) -6. In the Layout page, select the method: +6. En la página Diseño, seleccione el método: ![](../assets/en/Desktop/label-example3.png) Luego puede imprimir sus etiquetas: ![](../assets/en/Desktop/label-example4.png) -## Control de los formularios y métodos disponibles +## Definición de los formularios y métodos disponibles -The Label editor includes an advanced feature allowing you to restrict which project forms and methods (within "allowed" methods) can be selected in the dialog box: +El editor de etiquetas incluye una función avanzada que le permite limitar los formularios y los métodos proyecto (dentro de los métodos "permitidos") pueden seleccionarse en el cuadro de diálogo: - en el menú **Formulario a utilizar** de la página "Etiqueta" y/o - en el menú **Aplicar (método)** de la página "Diseño". diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md index e58d6470b5e614..26c51c0f4661d3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md @@ -17,7 +17,7 @@ Puede introducir cualquier nombre de clase válido en esta propiedad, incluyendo - Clases 4D integradas (por ejemplo, `4D.File`, `4D.Folder`) - [Exposed](../Extensions/develop-components.md#sharing-of-classes) component-defined classes (e.g. `cs.MyComponent.MyClass`) -If you enter an invalid class name, a warning is triggered and the input is rejected. +Si introduce un nombre de clase inválido, se activa una advertencia y se rechaza la entrada. :::note @@ -25,7 +25,7 @@ If you enter an invalid class name, a warning is triggered and the input is reje ::: -In your code, when assigning a value to a class-typed object field, 4D verifies that it belongs to the declared class. Si no es así o si el objeto no tiene clase, se produce un error. El acceso a atributos desconocidos también provocará errores de sintaxis. +En su código, al asignar un valor a un campo de tipo clase de objeto, 4D verifica que pertenece a la clase declarada. Si no es así o si el objeto no tiene clase, se produce un error. El acceso a atributos desconocidos también provocará errores de sintaxis. To retrieve the associated class name at runtime, use the [`classID`](../API/DataClassClass.md#attributename) property, for example `ds.MyTable.MyField.classID`. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Extensions/overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Extensions/overview.md index 681ada54c0c77e..b54c7ae0c57a3b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Extensions/overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Extensions/overview.md @@ -16,21 +16,21 @@ La [arquitectura del proyecto] 4D (../Project/architecture.md) es abierta y pued ## Componentes desarrollados por 4D -4D proposes various components to the 4D community, covering many development needs. All 4D components can be found on the [**4D github repository**](https://github.com/4d). +4D propone varios componentes a la comunidad 4D, cubriendo muchas necesidades de desarrollo. Todos los componentes 4D se pueden encontrar en el [**repositorio github de 4D**](https://github.com/4d). A subset of these components is listed by default in the [Dependency Manager](../Project/components.md), including: -| Componente | Repositorio Github | Descripción | Principales funcionalidades | -| -------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| 4D AIKit | https://github.com/4d/4D-AIKit | Conjunto de clases a conectar con las APIs OpenAI de terceros | `OpenAIChat`, `OpenAIImage`... | -| 4D NetKit | https://github.com/4d/4D-NetKit | Conjunto de herramientas de servicios web para conectarse a APIs de terceros | `OAuth2Provider` class, `New OAuth2 provider`, `OAuth2ProviderObject.getToken()` | -| 4D Progress | https://github.com/4d/4D-Progress | Abrir una o varias barras de progreso en la misma ventana | `Progress New`, `Progress SET ON STOP METHOD`, `Progress SET PROGRESS`, ... | -| 4D QPDF | https://github.com/4d/4D-QPDF | Extraer archivos adjuntos de archivos PDF/A-3 | `PDF Get attachments` | -| 4D SVG | https://github.com/4d/4D-SVG | Crear y manipular objetos gráficos svg comunes | `SVGTool_Display_viewer`, métodos múltiples `SVG_` | -| 4D ViewPro | https://github.com/4d/4d-view-pro | Funciones de hoja de cálculo en sus formularios | Ver la [documentación 4D View Pro](ViewPro/getting-started.md) | -| 4D Widgets | https://github.com/4d/4D-Widgets | Gestione los widgets DatePicker, TimePicker, SearchPicker 4D | `DatePicker calendar`, `DateEntry area`, `TimeEntry`, `SearchPicker SET HELP TEXT`, ... | -| Interfaz 4D WritePro | https://github.com/4d/4D-WritePro-Interface | Manage 4D Write Pro palettes and [table wizard](../WritePro/writeprointerface.md) | `WP PictureSettings`, `WP ShowTabPages`, `WP SwitchToolbar`, `WP UpdateWidget` | -| Build4D | https://github.com/4d-depot/Build4D | Compilar, construir y firmar proyectos | CI/CD | +| Componente | Repositorio Github | Descripción | Principales funcionalidades | +| -------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- | +| 4D AIKit | https://github.com/4d/4D-AIKit | Conjunto de clases a conectar con las APIs OpenAI de terceros | `OpenAIChat`, `OpenAIImage`... | +| 4D NetKit | https://github.com/4d/4D-NetKit | Conjunto de herramientas de servicios web para conectarse a APIs de terceros | `OAuth2Provider` class, `New OAuth2 provider`, `OAuth2ProviderObject.getToken()` | +| 4D Progress | https://github.com/4d/4D-Progress | Abrir una o varias barras de progreso en la misma ventana | `Progress New`, `Progress SET ON STOP METHOD`, `Progress SET PROGRESS`, ... | +| 4D QPDF | https://github.com/4d/4D-QPDF | Extraer archivos adjuntos de archivos PDF/A-3 | `PDF Get attachments` | +| 4D SVG | https://github.com/4d/4D-SVG | Crear y manipular objetos gráficos svg comunes | `SVGTool_Display_viewer`, métodos múltiples `SVG_` | +| 4D ViewPro | https://github.com/4d/4d-view-pro | Funciones de hoja de cálculo en sus formularios | Ver la [documentación 4D View Pro](ViewPro/getting-started.md) | +| 4D Widgets | https://github.com/4d/4D-Widgets | Gestione los widgets DatePicker, TimePicker, SearchPicker 4D | `DatePicker calendar`, `DateEntry area`, `TimeEntry`, `SearchPicker SET HELP TEXT`, ... | +| Interfaz 4D WritePro | https://github.com/4d/4D-WritePro-Interface | Gestión de paletas y del [asistente de tablas](../WritePro/writeprointerface.md) en 4D Write Pro | `WP PictureSettings`, `WP ShowTabPages`, `WP SwitchToolbar`, `WP UpdateWidget` | +| Build4D | https://github.com/4d-depot/Build4D | Compilar, construir y firmar proyectos | CI/CD | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/formEditor.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/formEditor.md index 4aea53b4daeb2e..55169d4e3065a5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/formEditor.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/formEditor.md @@ -148,7 +148,7 @@ Para seleccionar un objeto utilizando la barra de herramientas: 1. Haga clic en la herramienta Flecha de la barra de herramientas.
    ![](../assets/en/FormEditor/selection.png) -
    When you move the pointer into the form area, it becomes a standard arrow-shaped pointer. +
    Cuando mueve el puntero en el área del formulario, se convierte en un puntero estándar con forma de flecha. 2. Haga clic en el objeto que desea seleccionar. Las manillas de redimensionamiento identifican el objeto seleccionado.
    ![](../assets/en/FormEditor/selectResize.png) @@ -247,7 +247,7 @@ Para agrupar los objetos: Para desagrupar un grupo de objetos: 1. Seleccione el grupo de objetos que desea desagrupar. -2. Seleccione **Ungroup** en el menú **Object**.
    OR
    Click the **Ungroup** button (variant of the **Group** button) in the toolbar of the Form editor.
    Si **Desagrupar** está atenuado, significa que el objeto seleccionado ya está separado en su forma más simple. 4D marca los bordes de los objetos individuales con marcas. +2. Seleccione **Ungroup** en el menú **Object**.
    OR
    Haga clic en el botón **Ungroup** (variante del botón **Group**) en la barra de herramientas del editor de formularios.
    Si **Desagrupar** está atenuado, significa que el objeto seleccionado ya está separado en su forma más simple. 4D marca los bordes de los objetos individuales con marcas. ### Alinear objetos @@ -325,7 +325,7 @@ Para distribuir objetos utilizando la caja de diálogo Alinear y Distribuir: 3. En las áreas Alineación izquierda/derecha y/o Alineación superior/inferior, haga clic en el icono de distribución estándar: ![](../assets/en/FormEditor/horizontalDistribution.png)
    (Icono de distribución horizontal estándar)
    El área de ejemplo muestra los resultados de su selección. -4. To perform a distribution that uses the standard scheme, click **Preview** or *Apply*.
    In this case 4D will perform a standard distribution, so that the objects are set out with an equal amount of space between them.
    OR:
    To execute a specific distribution, select the **Distribute** option (for example if you want to distribute the objects based on the distance to their right side). Esta opción actúa como un interruptor. Si la casilla de selección Distribuir está seleccionada, los iconos situados debajo de ella realizan una función diferente:
    +4. Para efectuar una repartición estándar que utilice el esquema estándar, haga clic en **Previsualización** o *Aplicar*.
    In this case 4D will perform a standard distribution, so that the objects are set out with an equal amount of space between them.
    OR:
    To execute a specific distribution, select the **Distribute** option (for example if you want to distribute the objects based on the distance to their right side). Esta opción actúa como un interruptor. Si la casilla de selección Distribuir está seleccionada, los iconos situados debajo de ella realizan una función diferente:
    - Horizontalmente, los iconos corresponden a las siguientes distribuciones: uniformemente con respecto a los lados izquierdos, centros (hor.) y los lados derechos de los objetos seleccionados. - Verticalmente, los iconos corresponden a las siguientes distribuciones: uniformemente con respecto a los bordes superiores, centros (vert.) y los bordes inferiores de los objetos seleccionados. @@ -352,7 +352,7 @@ Cuando se superponen varios objetos, se puede utilizar el atajo **Ctrl+Mayús+cl :::note -In binary databases, use **Ctrl+Click / Command+Click** to perform the same action. +En bases de datos binarias, utilice **Ctrl+Clic / Comando+Clic** para efectuar la misma acción. ::: @@ -390,7 +390,7 @@ Para ver o cambiar el orden de entrada: El puntero se convierte en un puntero de orden de entrada y 4D dibuja una línea en el formulario mostrando el orden en que selecciona los objetos durante la entrada de datos. Ver y cambiar el orden de entrada de datos son las únicas acciones que puede realizar hasta que haga clic en cualquier herramienta de la paleta Herramientas. -2. To change the data entry order, position the pointer on an object in the form and, while holding down the mouse button, drag the pointer to the object you want next in the data entry order.
    ![](../assets/en/FormEditor/entryOrder3.png)
    4D will adjust the entry order accordingly. +2. To change the data entry order, position the pointer on an object in the form and, while holding down the mouse button, drag the pointer to the object you want next in the data entry order.
    ![](../assets/en/FormEditor/entryOrder3.png)
    4D ajustará el orden de entrada en consecuencia. 3. Repita el paso 2 tantas veces como sea necesario para establecer el orden de entrada de datos que desee. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/properties_Markers.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/properties_Markers.md index cecc6b6b4e022d..b80b59a9bca1cc 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/properties_Markers.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/properties_Markers.md @@ -21,9 +21,9 @@ Puede hacer que las áreas Ruptura sean más pequeñas o más grandes. Puede uti #### Gramática JSON -| Nombre | Tipos de datos | Valores posibles | -| ----------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| markerBreak | integer | integer collection | Break marker position or collection of break marker positions in pixels.
    Valor mínimo: 0 | +| Nombre | Tipos de datos | Valores posibles | +| ----------- | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| markerBreak | integer | integer collection | Posición del marcador de ruptura o colección de posiciones del marcador de ruptura en píxeles.
    Valor mínimo: 0 | --- diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/button_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/button_overview.md index bc28dd10b260a0..f47035dbbd758a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/button_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/button_overview.md @@ -328,7 +328,7 @@ Todos los botones comparten el mismo conjunto de propiedades básicas: [Negrita](properties_Text.md#bold) - [Estilo de línea de borde](properties_BackgroundAndBorder.md#border-line-style) - [Fondo](properties_CoordinatesAndSizing.md#bottom) - [Estilo de botón](properties_TextAndPicture.md#button-style) - [Clase](properties_Object.md#css-class) - [Soltable](properties_Action.md#droppable) - [Enfocable](properties_Entry.md#focusable) - [Fuente](properties_Text.md#font) - [Color de fuente](properties_Text.md#font-color) - [Tamaño de fuente](properties_Text.md#font-size) - [Altura](properties_CoordinatesAndSizing.md#height) - [Consejo de ayuda](properties_Help.md#help-tip) - [Alineación horizontal](properties_Text.md#horizontal-alignment) - [Tamaño horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Cursiva](properties_Text.md#italic) - [Título de abrazos de imagen](properties_TextAndPicture.md#image-hugs-title)(1) - [Izquierda](properties_CoordinatesAndSizing.md#left) - [No renderizado](properties_Display.md#not-rendered) - [Número de estados](properties_TextAndPicture.md#number-of-states)(1) - [Nombre del objeto](properties_Object.md#object-name) - [Nombre de la ruta de la imagen](properties_TextAndPicture.md#picture-pathname)(1) - [Derecha](properties_CoordinatesAndSizing.md#right) - [Acceso directo](properties_Entry.md#shortcut) - [Acción estándar](properties_Action.md#standard-action) - [Título](properties_Object.md#title) - [Posición del título/imagen](properties_TextAndPicture.md#titlepicture-position)(1) - [Superior](properties_CoordinatesAndSizing.md#top) - [Tipo](properties_Object.md#tipo) - [Subrayado](properties_Text.md#underline) - [Variable o expresión](properties_Object.md#variable-or-expression) - [Tamaño vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilidad](properties_Display.md#visibility) - [Ancho](properties_CoordinatesAndSizing.md#width) - [Con menú emergente](properties_TextAndPicture.md#with-pop-up-menu)(2) > (1) No soportado por el estilo [Ayuda](#help).
    -> (2) Not supported by the [Help](#help), [Flat](#flat) and [Regular](#regular) styles. +> (2) No soportado por los estilos [Help](#help), [Flat](#flat) y [Regular](#regular). Existen propiedades específicas adicionales, dependiendo del [estilo-de-botón](#button-styles): diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md index 978af992f51d90..3f61236a812366 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md @@ -523,7 +523,7 @@ El soporte de ordenación estándar depende del tipo de list box: | Tipo de list box | Soporte de ordenación estándar | Comentarios | | ------------------------------ | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Colección de objetos | Sí |
    • "This.a" or "This.a.b" columns are sortable.
    • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
    | +| Colección de objetos | Sí |
    • Las columnas "This.a" o "This.a.b" son ordenables.
    • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
    | | Colección de valores escalares | No | Utilice la ordenación personalizada con la función [`orderBy()`](../API/CollectionClass.md#orderby) | | Entity selection | Sí |
  • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
  • Supported: sorts on object attribute properties (e.g. "This.data.city" when "data" is an object attribute)
  • Supported: sorts on related attributes (e.g. "This.company.name")
  • Not supported: sorts on object attribute properties through related attributes (e.g. "This.company.data.city"). Para ello, debe utilizar la ordenación personalizada con la función [`orderByFormula()`](../API/EntitySelectionClass.md#orderbyformula) (ver el siguiente ejemplo)
  • | | Selección actual | Sí | Sólo se pueden ordenar las expresiones simples (por ejemplo, `[Table_1]Campo_2`) | @@ -812,7 +812,7 @@ If the user selects a break row, [`LISTBOX GET CELL POSITION`](../commands/listb ![](../assets/en/FormObjects/hierarch11.png) -... [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) returns (2;4). To select a break row by programming, you will need to use the [`LISTBOX SELECT BREAK`](../commands/listbox-select-break) command. +... [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devuelve (2;4). To select a break row by programming, you will need to use the [`LISTBOX SELECT BREAK`](../commands/listbox-select-break) command. Las líneas de rotura no se tienen en cuenta en los arrays internos utilizados para gestionar el aspecto gráfico de los list box (estilos y colores). No obstante, es posible modificar estas características para las líneas de ruptura mediante los comandos de gestión gráfica de los objetos. Basta con ejecutar los comandos adecuados en los arrays que constituyen la jerarquía. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_BackgroundAndBorder.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_BackgroundAndBorder.md index 84e2079f5e71ac..0eb71aceb033b9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_BackgroundAndBorder.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_BackgroundAndBorder.md @@ -186,7 +186,7 @@ Designa el grosor de una línea. --- -## Row Background Color Array {#row-background-color-array} +## Array colores de fondo {#row-background-color-array} `List boxes de tipo array` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Display.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Display.md index 70acd1ce6ab087..64fc8e1bd49d2a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Display.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Display.md @@ -104,7 +104,7 @@ Se pueden crear formatos de fecha personalizados utilizando varios patrones desc :::note blankIfNull -- By default, a [null date](../Concepts/dt_date.md#date-literals) is displayed with zeros, e.g. 00/00/00. Con la opción "blankIfNull", una fecha null se muestra como un área vacía. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. +- Por defecto, una [fecha nula](../Concepts/dt_date.md#date-literals) se muestra con ceros, por ejemplo, 00/00/00. Con la opción "blankIfNull", una fecha null se muestra como un área vacía. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. La cadena "blankIfNull" (distingue mayúsculas de minúsculas) debe combinarse con el valor de formato seleccionado. - Las [columnas list box](listbox_overview.md#list-box-columns) y los [pies List box](listbox_overview.md#list-box-footers) de tipo fecha utilizan siempre el comportamiento "blank if null" (no se puede desactivar). ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Object.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Object.md index faf778d6fa7852..ecd495239f8435 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Object.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Object.md @@ -90,9 +90,9 @@ Las variables o expresiones se pueden introducir o no y pueden recibir datos de #### Gramática JSON -| Nombre | Tipos de datos | Valores posibles | -| ---------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| dataSource | cadena o array de cadenas |
  • Variable, nombre de campo o cualquier expresión 4D.
  • Empty string for [dynamic variables](#dynamic-variables).
  • String array (collection of array names) for a [hierarchical listbox](listbox_overview.md#hierarchical-list-boxes) column]
  • | +| Nombre | Tipos de datos | Valores posibles | +| ---------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| dataSource | cadena o array de cadenas |
  • Variable, nombre de campo o cualquier expresión 4D.
  • Cadena vacía para las [variables dinámicas](#dynamic-variables).
  • String array (collection of array names) for a [hierarchical listbox](listbox_overview.md#hierarchical-list-boxes) column]
  • | ### Expresiones diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md index 2605754775fea7..9563e559ec2d24 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md @@ -11,7 +11,7 @@ Varias [acciones estándar](#standard-actions) dedicadas, numerosos [comandos de :::info Mostrar páginas Qodly -In 4D client/server applications, Web areas can be used to display Qodly pages and [share the remote user session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). This feature allows you to design web-based interfaces for your client/server desktop applications. +In 4D client/server applications, Web areas can be used to display Qodly pages and [share the remote user session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). Esta funcionalidad le permite diseñar interfaces web para sus aplicaciones de escritorio cliente/servidor. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md index ca4a2a53300ae3..b5ccc8c652538b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -16,6 +16,7 @@ Lea [**Novedades en 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/), la ent - posibilidad para definir los [gestores de peticiones HTTP](../WebServer/http-request-handler.md) utilizando una propiedad `handlers` en el parámetro *settings* de la función [`start()`](../API/WebServerClass.md#start) del servidor Web, - el objeto servidor Web contiene nuevas propiedades [`rules`](../API/WebServerClass.md#rules) y [`handlers`](../API/WebServerClass.md#handlers). - Nuevos [eventos ORDA sobre los datos](../ORDA/orda-events.md): validateSave, saving, afterSave, validateDrop, dropping, afterDrop. +- Support of the new [`restrictedByDefault` property](../ORDA/privileges.md#restriction-modes) in the `roles.json` file to block access by default to all resources without explicit permission. - Nueva opción que permite utilizar certificados de Windows Certificate Store en lugar de una carpeta local de certificados en las clases [`HTTPRequest`](../API/HTTPRequestClass.md#4dhttprequestnew) y [`HTTPAgent`](../API/HTTPAgentClass.md#4dhttpagentnew). - Cliente/servidor: - Puede mostrar las páginas Qodly en las áreas Web y [compartir la sesión del cliente remoto](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/entities.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/entities.md index 1d3ac2bbf5320c..ceb0d989f2296a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/entities.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/entities.md @@ -566,7 +566,7 @@ El siguiente diagrama ilustra el bloqueo optimista: 1. Dos procesos cargan la misma entidad.

    ![](../assets/en/ORDA/optimisticLock1.png) -2. El primer proceso modifica la entidad y valida el cambio. Se llama al método `entity.save( )`. El motor 4D compara automáticamente el valor del marcador interno de la entidad modificada con el de la entidad almacenada en los datos. Since they match, the entity is saved and its stamp value is incremented.

    ![](../assets/en/ORDA/optimisticLock2.png) +2. El primer proceso modifica la entidad y valida el cambio. Se llama al método `entity.save( )`. El motor 4D compara automáticamente el valor del marcador interno de la entidad modificada con el de la entidad almacenada en los datos. Como corresponden, la entidad se guarda y el valor de su marcador se incrementa.

    ![](../assets/en/ORDA/optimisticLock2.png) 3. El segundo proceso también modifica la entidad cargada y valida sus cambios. Se llama al método `entity.save( )`. Since the stamp value of the modified entity does not match the one of the entity stored in the data, the save is not performed and an error is returned.

    ![](../assets/en/ORDA/optimisticLock3.png) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index 586a2822234bef..4fc5a4b70f00eb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -327,11 +327,11 @@ Function event validateSave ($event : Object) Este evento se activa cada vez que una entidad está a punto de ser guardada. - si define la función a nivel de entidad (primera sintaxis), se llama para cualquier atributo de la entidad. -- si definió la función en el nivel de atributo (segunda sintaxis), sólo se llama para este atributo. This function is **not** executed if the attribute has not been touched in the entity. +- si definió la función en el nivel de atributo (segunda sintaxis), sólo se llama para este atributo. Esta función **no** se ejecuta si el atributo no ha sido tocado en la entidad. La función recibe un [objeto *event*](#event-parameter) como parámetro. -This event is triggered by the following functions: +Este evento es activado por las siguientes funciones: - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) @@ -348,7 +348,7 @@ No se recomienda actualizar la entidad dentro de esta función (utilizando `This #### Ejemplo -In this example, it is not allowed to save a product with a margin lower than 50%. In case of an invalid price attribute, you return an error object and thus, stop the save action. +En este ejemplo, no se permite guardar un producto con un margen inferior al 50%. In case of an invalid price attribute, you return an error object and thus, stop the save action. ```4d // ProductsEntity class @@ -374,22 +374,22 @@ return $result ```4d Function event saving($event : Object) Function event saving ($event : Object) -// code +// código ``` Este evento se activa cada vez que se guarda una entidad. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. The function is executed even if no attribute has been touched in the entity (e.g. in case of sending data to an external app each time a save is done). -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. The function is **not** executed if the attribute has not been touched in the entity. +- Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. The function is executed even if no attribute has been touched in the entity (e.g. in case of sending data to an external app each time a save is done). +- If you defined the function at the attribute level (second syntax), it is called only for this attribute. La función **no** se ejecuta si el atributo no ha sido tocado en la entidad. La función recibe un [objeto *event*](#event-parameter) como parámetro. -This event is triggered by the following functions: +Este evento es activado por las siguientes funciones: - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) -Este evento se activa **mientras** la entidad se guarda. If a [`validateSave()`](#function-event-validatesave) event function was defined, the `saving()` event function is called if no error was triggered by `validateSave()`. For example, you can use this event to create a document on a Google Drive account. +Este evento se activa **mientras** la entidad se guarda. If a [`validateSave()`](#function-event-validatesave) event function was defined, the `saving()` event function is called if no error was triggered by `validateSave()`. Por ejemplo, puede utilizar este evento para crear un documento en una cuenta de Google Drive. :::note @@ -397,13 +397,13 @@ The business logic should raise errors which can't be detected during the `valid ::: -During the save action, 4D engine errors can be raised (index, stamp has changed, not enough space on disk). +Durante la acción de guardar, se pueden producir errores en el motor 4D (índice, sello ha cambiado, no hay suficiente espacio en el disco). To stop the action, the code of the function must return an [error object](#error-object). #### Ejemplo -When a file is saved on disk, catch errors related to disk space for example. +Cuando se guarda un archivo en el disco, por ejemplo, se capturan errores relacionados con el espacio de disco. ```4d // ProductsEntity class @@ -443,14 +443,14 @@ Función evento afterSave($event : Object) // código ``` -This event is triggered just after an entity is saved in the data file, when at least one attribute was modified. It is not executed if no attribute has been touched in the entity. +This event is triggered just after an entity is saved in the data file, when at least one attribute was modified. No se ejecuta si no se ha tocado ningún atributo en la entidad. -This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. For example, it can be used to send a confirmation email after data have been saved. Or, in case of error while saving data, it can make a rollback to restore a consistent state of data. +This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. Por ejemplo, se puede utilizar para enviar un correo electrónico de confirmación después de guardar los datos. O, en caso de error al guardar los datos, puede hacer una cancelación para restaurar un estado consistente de los datos. La función recibe un [objeto *event*](#event-parameter) como parámetro. - To avoid infinite loops, calling a [`save()`](../API/EntityClass.md#save) on the current entity (through `This`) in this function is **not allowed**. Se producirá un error. -- Throwing an [error object](#error-object) is **not supported** by this function. +- Arrojar un [objeto error](#error-object) **no es soportado** por esta función. #### Ejemplo @@ -483,9 +483,9 @@ Function event validateDrop ($event : Object) // código ``` -This event is triggered each time an entity is about to be dropped. +Este evento se activa cada vez que una entidad está a punto de ser soltada. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. +- Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. - If you defined the function at the attribute level (second syntax), it is called only for this attribute. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -532,7 +532,7 @@ Function event dropping ($event : Object) Este evento se activa cada vez que se elimina una entidad. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. +- Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. - If you defined the function at the attribute level (second syntax), it is called only for this attribute. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -555,7 +555,7 @@ To stop the action, the code of the function must return an [error object](#erro #### Ejemplo -Here is an example of `dropping` event at entity level: +Estes es un ejemplo del evento `dropping` a nivel de entidad: ```4d // ProductsEntity class @@ -589,18 +589,18 @@ Function event afterDrop($event : Object) // código ``` -This event is triggered just after an entity is dropped. +Este evento se activa justo después de que una entidad es soltada. -This event is useful after dropping data to propagate the drop action outside the application or to execute administration tasks. For example, it can be used to send a cancellation email after data have been dropped. Or, in case of error while dropping data, it can log an information for the administrator to check data consistency. +This event is useful after dropping data to propagate the drop action outside the application or to execute administration tasks. Por ejemplo, se puede utilizar para enviar un correo electrónico de cancelación después de soltar los datos. Or, in case of error while dropping data, it can log an information for the administrator to check data consistency. La función recibe un [objeto *event*](#event-parameter) como parámetro. - To avoid infinite loops, calling a [`drop()`](../API/EntityClass.md#drop) on the current entity (through `This`) in this function is **not allowed**. Se producirá un error. -- Throwing an [error object](#error-object) is **not supported** by this function. +- Arrojar un [objeto error](#error-object) **no es soportado** por esta función. :::note -The dropped entity is referenced by `This` and still exists in memory. +La entidad eliminada es referenciada por `This` y aún existe en memoria. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index 5bb31631d97539..72cf097a8cd4f4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -27,27 +27,21 @@ Si un usuario intenta ejecutar una acción y no tiene los derechos de acceso ade Puede asignar acciones de permiso específicas a los siguientes recursos en su proyecto: -- el almacén de datos -- una clase de datos -- un atributo (incluidos los calculados y los alias) -- una función de clase de modelo de datos -- una función [singleton](../REST/$singleton.md) +- the [datastore](../ORDA/dsMapping.md#datastore) +- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) +- functions of the [data model classes](../ORDA/ordaClasses.md) +- [singleton](../REST/$singleton.md) functions Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma en que se acceda), 4D verifica que la sesión tenga los permisos apropiados y rechaza el acceso si no está autorizado. -Una acción de permiso definida en un nivel determinado se hereda por defecto en los niveles inferiores, pero se pueden establecer varios permisos: - -- Una acción de permiso definida a nivel de almacén de datos se asigna automáticamente a todas las clases de datos. La acción de permiso *execute* definida en el nivel del datastore se aplica a todas las funciones del proyecto, incluyendo todas las funciones [singleton](../REST/$singleton.md). -- Una acción de permiso definida a nivel de clase de datos anula la configuración del almacén de datos (si existe). Por defecto, todos los atributos de la clase de datos heredan de los permisos de la clase de datos. -- A diferencia de los permisos de clase de datos, una acción de permiso definida a nivel de atributo no anula los permisos de clase de datos padre, sino que se añade a ellos. Por ejemplo, si asignó el privilegio "general" a una clase de datos y el privilegio "detail" a un atributo de la clase de datos, tanto el privilegio "general" como el privilegio "detail" deben definirse en la sesión para acceder al atributo. - -:::info +## Permissions -Los permisos controlan el acceso a los objetos o funciones del almacén de datos. Si desea filtrar los datos leídos según algún criterio, puede considerar [restringir las selecciones de entidades](entities.md#restricting-entity-selections) que puede ser más apropiado en este caso. +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). -::: +When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). -## Acciones de autorización +### Acciones de autorización Las acciones disponibles están relacionadas con el recurso de destino. @@ -73,6 +67,65 @@ Las acciones disponibles están relacionadas con el recurso de destino. Los parámetros de permisos requieren ser consistentes, en particular los permisos **update** y **drop** también necesitan el permiso **read** (pero **create** no lo necesita). +### Permisos heredados + +Una acción de permiso definida en un nivel determinado se hereda por defecto en los niveles inferiores, pero se pueden establecer varios permisos: + +- Una acción de permiso definida a nivel de almacén de datos se asigna automáticamente a todas las clases de datos. La acción de permiso *execute* definida en el nivel del datastore se aplica a todas las funciones del proyecto, incluyendo todas las funciones [singleton](../REST/$singleton.md). +- Una acción de permiso definida a nivel de clase de datos anula la configuración del almacén de datos (si existe). Por defecto, todos los atributos de la clase de datos heredan de los permisos de la clase de datos. +- A diferencia de los permisos de clase de datos, una acción de permiso definida a nivel de atributo no anula los permisos de clase de datos padre, sino que se añade a ellos. Por ejemplo, si asignó el privilegio "general" a una clase de datos y el privilegio "detail" a un atributo de la clase de datos, tanto el privilegio "general" como el privilegio "detail" deben definirse en la sesión para acceder al atributo. + +:::info + +Los permisos controlan el acceso a los objetos o funciones del almacén de datos. Si desea filtrar los datos leídos según algún criterio, puede considerar [restringir las selecciones de entidades](entities.md#restricting-entity-selections) que puede ser más apropiado en este caso. + +::: + +### Asignación de permisos a las funciones de la clase ORDA + +Al configurar los permisos, las funciones de clase ORDA se declaran en el elemento `applyTo` usando la siguiente sintaxis: + +```json +. +``` + +Por ejemplo, si desea aplicar un permiso a la siguiente función: + +```4d +// cs.CityEntity class +Class extends Entity + Function getPopulation() : Integer + ... +``` + +... tiene que escribir: + +```json +"applyTo":"City.getPopulation" +``` + +Significa que no puede utilizar los mismos nombres de función en las distintas clases ORDA (entidad, selección de entidad, dataclass) si desea que se les asignen privilegios. En este caso, debe utilizar nombres de función distintos. Por ejemplo, si has creado una función "drop" en ambas clases `cs.CityEntity` y `cs.CitySelection`, necesita darles nombres diferentes como `dropEntity()` y `dropSelection()`. A continuación, puede escribir en el archivo "roles.json": + +```json + "permissions": { + "allowed": [ + { + "applyTo": "City.dropEntity", + "type": "method", + "promote": [ + "name" + ] + }, + { + "applyTo": "City.dropSelection", + "type": "method", + "promote": [ + "name" + ] + } + ] +``` + ## Privilegios y roles Un \*\*privilegio \*\* es la capacidad técnica de ejecutar \*\*acciones \*\* en \*\*recursos \*\*, mientras que un **rol** es un privilegio publicado para ser utilizado por un administrador. Básicamente, un rol reúne varios privilegios para definir un perfil de usuario empresarial. Por ejemplo, "manageInvoices" podría ser un privilegio mientras que "secretary" podría ser un rol (que incluye "manageInvoices" y otros privilegios). @@ -111,70 +164,7 @@ exposed Function authenticate($identifier : Text; $password : Text)->$result : T ## archivo `roles.json` -El archivo `roles.json` describe todos los parámetros de seguridad del proyecto. - -### Archivo por defecto - -Al crear un proyecto, se crea un archivo `roles.json` por defecto en la siguiente ubicación: `/Project/Sources/` (ver la sección [Architecture](../Project/architecture.md#sources)). - -El archivo por defecto tiene el siguiente contenido: - -```json title="/Project/Sources/roles.json" - -{ - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - - "roles": [], - - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": ["all"], - "create": ["all"], - "update": ["all"], - "drop": ["all"], - "execute": ["all"], - "promote": ["all"] - } - ] - }, - - "forceLogin": true - -} - -``` - -For a highest level of security, the "all" privilege is assigned to all permissions in the datastore, thus data access on the whole `ds` object is disabled by default. The principle is as follows: assigning a permission is like putting a lock on a door. Only sessions with privilege having the corresponding key (i.e., a permission) will be able to open the lock. -Se recomienda no modificar ni utilizar este privilegio de bloqueo, sino agregar permisos específicos a cada recurso que desee poner a disposición desde solicitudes web o REST ([ver ejemplo a continuación](#example-of-privilege-configuration)). - -:::caution - -Cuando no se definen parámetros específicos en el archivo `roles.json`, los accesos no son limitados. Esta configuración le permite desarrollar la aplicación sin tener que preocuparse por los accesos, pero no se recomienda en entornos de producción. - -::: - -:::note Compatibilidad - -En versiones anteriores, el archivo `roles.json` no fue creado por defecto. A partir de 4D 20 R6, al abrir un proyecto existente que no contiene un archivo `roles.json` o los parámetros `"forceLogin": true`, el botón **Activar la autenticación REST mediante la función ds.authentify()** está disponible en la página [**Funcionalidades web** de la caja de diálogo Parámetros](../settings/web.md#access). Este botón actualiza automáticamente su configuración de seguridad (es posible que tenga que modificar su código, [ver esta publicación del blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). -::: - -:::note Qodly Studio - -En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](../WebServer/qodly-studio.md#force-login) en el panel de Privilegios. - -::: - -### Sintaxis - -La sintaxis del archivo `roles.json` es la siguiente: +El archivo `roles.json` describe todos los parámetros de seguridad web del proyecto. La sintaxis del archivo `roles.json` es la siguiente: | Nombre de propiedad | | | Tipo | Obligatorio | Descripción | | ------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | --------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------ | @@ -194,60 +184,87 @@ La sintaxis del archivo `roles.json` es la siguiente: | | | \[].drop | Colección de cadenas | | Lista de privilegios | | | | \[].execute | Colección de cadenas | | Lista de privilegios | | | | \[].promote | Colección de cadenas | | Lista de privilegios | -| forceLogin | | | Boolean | | True para habilitar el [modo "forceLogin"](../REST/authUsers.md#force-login-mode) | +| restrictedByDefault | | | Boolean | | Si es true, se niega el acceso a recursos sin permisos explícitos | +| forceLogin | | | Boolean | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | :::caution Recordatorio - El nombre de privilegio "WebAdmin" está reservado a la aplicación. No se recomienda utilizar este nombre para los privilegios personalizados. -- los nombres de `privileges` y `roles` son insensibles a mayúsculas y minúsculas. +- `privileges` and `roles` names are case-insensitive. ::: -#### Asignación de permisos a las funciones de la clase ORDA +### Default File Location and Content -Al configurar los permisos, las funciones de clase ORDA se declaran en el elemento `applyTo` usando la siguiente sintaxis: +When a new project is created, a default `roles.json` file is generated at: -```json -. ``` - -Por ejemplo, si desea aplicar un permiso a la siguiente función: - -```4d -// cs.CityEntity class -Class extends Entity - Function getPopulation() : Integer - ... +/Project/Sources/ ``` -... tiene que escribir: +Ver la sección [Arquitectura](../Project/architecture.md#sources). -```json -"applyTo":"City.getPopulation" -``` +Contenido predeterminado: -Significa que no puede utilizar los mismos nombres de función en las distintas clases ORDA (entidad, selección de entidad, dataclass) si desea que se les asignen privilegios. En este caso, debe utilizar nombres de función distintos. Por ejemplo, si has creado una función "drop" en ambas clases `cs.CityEntity` y `cs.CitySelection`, necesita darles nombres diferentes como `dropEntity()` y `dropSelection()`. A continuación, puede escribir en el archivo "roles.json": +```json title="/Project/Sources/roles.json" -```json - "permissions": { - "allowed": [ - { - "applyTo": "City.dropEntity", - "type": "method", - "promote": [ - "name" - ] - }, - { - "applyTo": "City.dropSelection", - "type": "method", - "promote": [ - "name" - ] - } +{ + "privileges": [ + ], + "roles": [ + ], + "permissions": { + "allowed": [ + { + "applyTo": "ds", + "type": "datastore", + "read": [], + "create": [], + "update": [], + "drop": [], + "execute": [], + "promote": [] + } ] + }, + "restrictedByDefault": false, + "forceLogin": false +} ``` +:::note Compatibilidad + +En versiones anteriores, el archivo `roles.json` no fue creado por defecto. A partir de 4D 20 R6, al abrir un proyecto existente que no contiene un archivo `roles.json` o los parámetros `"forceLogin": true`, el botón **Activar la autenticación REST mediante la función ds.authentify()** está disponible en la página [**Funcionalidades web** de la caja de diálogo Parámetros](../settings/web.md#access). Este botón actualiza automáticamente su configuración de seguridad (es posible que tenga que modificar su código, [ver esta publicación del blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). + +::: + +:::note Qodly Studio + +In Qodly Studio for 4D, the login mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Roles and Privileges panel. + +::: + +## Restriction Modes + +The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): + +- **Unrestricted mode** (`restrictedByDefault`: **false**): Resources without defined permissions are accessible to all requests. Este modo es adecuado para entornos de desarrollo donde el acceso se puede restringir gradualmente. +- **Restricted mode** (`restrictedByDefault`: **true**): Resources without defined permissions are blocked by default. Este modo se recomienda para entornos de producción donde el acceso debe ser otorgado explícitamente. + +:::note Compatibilidad + +- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Tenga en cuenta que esta configuración está hecha a medida para un inicio rápido y un desarrollo fluido. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. + +::: + +### Configuración recomendada + +Depending on your environment, the recommended settings are: + +- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. + ### Archivo `Roles_Errors.json` El archivo `roles.json` es analizado por 4D al inicio. Debe reiniciar la aplicación si desea que se tengan en cuenta las modificaciones en este archivo. @@ -267,93 +284,28 @@ End if ## Ejemplo de configuración de privilegios -The good practice is to keep all data access locked by default thanks to the "all" privilege and to configure the `roles.json` file to only open controlled parts to authorized sessions. For example, to allow some accesses to "guest" sessions: - ```json title="/Project/Sources/roles.json" { - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - "roles": [], - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": [ - "all" - ], - "create": [ - "all" - ], - "update": [ - "all" - ], - "drop": [ - "all" - ], - "execute": [ - "all" - ], - "promote": [ - "all" - ] - }, - { - "applyTo": "ds.loginAs", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.hasPrivilege", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.clearPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.isGuest", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.getPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.setAllPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "mySingletonClass.createID", - "type": "singletonMethod", - "execute": [ - "guest" - ] - } - ] - }, - "forceLogin": true + "forceLogin": true, + "restrictedByDefault": true, + "permissions": { + "allowed": [ + { + "applyTo": "People", + "type": "dataclass", + "read": [ + "viewPeople" + ] + } + ] + }, + "privileges": [ + { + "privilege": "viewPeople", + "includes": [] + } + ], + "roles": [] } ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Project/compiler.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Project/compiler.md index 1158b612ee42c7..77cb73581775e8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Project/compiler.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Project/compiler.md @@ -148,7 +148,7 @@ El modo de escritura directa es opcional sólo en proyectos convertidos. Se util Select **All variables are typed (Direct typing)** option in the **Compilation Path** menu to enable the direct typing mode. Cuando se selecciona esta opción, las demás opciones de compatibilidad pierden su utilidad y dejan de mostrarse. -Se recomienda utilizar esta opción, ya que proporciona flexibilidad y eficiencia. The direct typing concept assumes that all elements are directly declared where they are defined in your code. Solo tiene que asegurarse de que todas sus variables son declaradas utilizando la [sintaxis 'var'](../Concepts/variables.md#declaring-variables) y que sus parámetros de método y función son declarados [en sus prototipos](../Concepts/parameters.md) (la función [Verificar sintaxis](#check-syntax) puede ayudarle a detectar declaraciones faltantes o no válidas). +Se recomienda utilizar esta opción, ya que proporciona flexibilidad y eficiencia. El concepto de escritura directa asume que todos los elementos se declaran directamente donde están definidos en su código. Solo tiene que asegurarse de que todas sus variables son declaradas utilizando la [sintaxis 'var'](../Concepts/variables.md#declaring-variables) y que sus parámetros de método y función son declarados [en sus prototipos](../Concepts/parameters.md) (la función [Verificar sintaxis](#check-syntax) puede ayudarle a detectar declaraciones faltantes o no válidas). ## Advertencias diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$filter.md b/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$filter.md index 39c7beb92cfae9..daaa27e8603038 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$filter.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$filter.md @@ -90,13 +90,13 @@ Use the `params` property to provide the filter with the vector comparison param El parámetro *vectorComparison* es una colección de los siguientes elementos: -| Propiedad | Tipo | Descripción | -| -------------------------------------------------------------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [].vector | Colección de números | Obligatorio. Una colección que representa el vector a comparar | -| [].metric | Text | Opcional. [Cálculo vectorial](../API/VectorClass.md#understanding-the-different-vector-computations) a utilizar para la consulta. Supported values:
  • "cosine" (default if omitted): calculates the cosine similarity between vectors.
  • "dot": calculates the dot similarity of vectors.
  • "euclídea": calcula la distancia euclidiana entre vectores. | -| [].threshold | Real | Opcional (por defecto: 0,5). Un valor umbral utilizado para filtrar las comparaciones de vectores en función de su puntuación de similitud coseno, punto o euclídea según la "métrica" seleccionada. Es altamente recomendable elegir una similitud que se adapte mejor a su caso de uso específico para obtener resultados óptimos. | +| Propiedad | Tipo | Descripción | +| -------------------------------------------------------------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [].vector | Colección de números | Obligatorio. Una colección que representa el vector a comparar | +| [].metric | Text | Opcional. [Cálculo vectorial](../API/VectorClass.md#understanding-the-different-vector-computations) a utilizar para la consulta. Supported values:
  • "cosine" (default if omitted): calculates the cosine similarity between vectors.
  • "dot": calcula la similitud de puntos de los vectores.
  • "euclídea": calcula la distancia euclidiana entre vectores. | +| [].threshold | Real | Opcional (por defecto: 0,5). Un valor umbral utilizado para filtrar las comparaciones de vectores en función de su puntuación de similitud coseno, punto o euclídea según la "métrica" seleccionada. Es altamente recomendable elegir una similitud que se adapte mejor a su caso de uso específico para obtener resultados óptimos. | -Only a subset of **comparator** symbols are supported with vector comparisons. Tenga en cuenta que comparan los resultados con el valor umbral: +Solo un subconjunto de símbolos **comparadores** son soportados con comparaciones vectoriales. Tenga en cuenta que comparan los resultados con el valor umbral: | Comparador | Símbolo(s) | Comentario | | ----------------- | ----------------------------- | --------------------------- | @@ -126,7 +126,7 @@ En este ejemplo, buscamos en la clase de datos Person todas las personas cuya pr GET /rest/Person/?filter="anotherobj.mynum > 50" ``` -In this example, we do a vector search with basic values: +En este ejemplo, hacemos una búsqueda vectorial con los valores de base: ``` GET /rest/Person/?filter="VectorAtt>=:1"&$params='[{vector:[1,2,3],threshold:1}]' diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$singleton.md b/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$singleton.md index dd6441c98e068f..f2526bf683cf39 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$singleton.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$singleton.md @@ -5,7 +5,7 @@ title: $singleton Puede llamar directamente a [funciones de sus singletons compartidos](../Concepts/classes.md#singleton-classes) a través de REST. -Singleton functions are called in POST or GET requests with the `$singleton` command and without `()`. Por ejemplo, si ha definido una función `buildVehicle()` en la clase compartida singleton `VehicleFactory`, podría llamarla utilizando la siguiente petición: +Las funciones Singleton se llaman en peticiones POST o GET con el comando `$singleton` y sin `()`. Por ejemplo, si ha definido una función `buildVehicle()` en la clase compartida singleton `VehicleFactory`, podría llamarla utilizando la siguiente petición: ```json /rest/$singleton/VehicleFactory/buildVehicle diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-copy-to-object.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-copy-to-object.md index b8680a5547e280..704a4b63bc00d1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-copy-to-object.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-copy-to-object.md @@ -31,10 +31,10 @@ En *rangeObj*, pase el rango de celdas con los valores, formato y fórmulas a co Puede pasar un parámetro opcional *options* con las siguientes propiedades: -| Propiedad | Tipo | Descripción | -| ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| copy | Boolean | *True* (por defecto) para mantener los valores, el formato y las fórmulas copiados después de la ejecución del comando. *False* para eliminarlos. | -| copyOptions | Integer | Especifica lo que se copia o mueve. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Copies all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Copia solo el formato.
    `vk clipboard options formulas`Copies only the formulas.
    `vk clipboard options formulas and formatting`Copies the formulas and formatting.
    `vk clipboard options values`Copia solo los valores.
    `vk clipboard options value and formatting`Copies the values and formatting.

    | +| Propiedad | Tipo | Descripción | +| ----------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| copy | Boolean | *True* (por defecto) para mantener los valores, el formato y las fórmulas copiados después de la ejecución del comando. *False* para eliminarlos. | +| copyOptions | Integer | Especifica lo que se copia o mueve. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Copies all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Copia solo el formato.
    `vk clipboard options formulas`Copies only the formulas.
    `vk clipboard options formulas and formatting`Copia las fórmulas y formato.
    `vk clipboard options values`Copia solo los valores.
    `vk clipboard options value and formatting`Copia los valores y el formato.

    | Se tienen en cuenta las opciones de pegado definidas en las [opciones del libro de trabajo](vp-set-workbook-options.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-export-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-export-document.md index 8dfcf9c5401f37..94eefcc2eb31d0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-export-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-export-document.md @@ -77,11 +77,11 @@ El parámetro opcional *paramObj* le permite definir múltiples propiedades para | | includeStyles | boolean | Si se incluye el estilo al exportar, por defecto true. | | | includeFormulas | boolean | Si se incluye la fórmula al exportar, por defecto true. | | | saveAsView | boolean | Si aplicar la cadena de formato al valor de exportación al exportar, por defecto false. | -| | rowHeadersAsFrozenColumns | boolean | Whether to treat the row headers as frozen columns when exporting, default false. | +| | rowHeadersAsFrozenColumns | boolean | Si tratar los encabezados de línea como columnas congeladas al exportar, por defecto false. | | | columnHeadersAsFrozenRows | boolean | Si tratar los encabezados de columna como líneas congeladas al exportar, por defecto false. | | | includeAutoMergedCells | boolean | Si se incluyen las celdas combinadas automáticamente al exportar, false por defecto. | -| | includeCalcModelCache | boolean | Si desea incluir los datos adicionales de cálculo. Can be faster when open the file with those data, default false. | -| | includeUnusedNames | boolean | Whether to include the unused custom name when exporting, default true. | +| | includeCalcModelCache | boolean | Si desea incluir los datos adicionales de cálculo. Puede ser más rápido al abrir el archivo con esos datos, false por defecto. | +| | includeUnusedNames | boolean | Si se incluye el nombre personalizado no utilizado al exportar, true por defecto. | | | includeEmptyRegionCells | boolean | Si se incluyen celdas vacías (celdas sin datos o solo con estilo) fuera del rango de datos utilizado, por defecto true. | | | contraseña | text | Contraseña a definir para abrir el libro de trabajo. | | `\` | | any | Toda propiedad personalizada que estará disponible a través del parámetro $3 en el método de retrollamada. | @@ -90,7 +90,7 @@ El parámetro opcional *paramObj* le permite definir múltiples propiedades para - Al exportar un documento 4D View Pro a un archivo con formato Microsoft Excel, pueden perderse algunos parámetros. Por ejemplo, los métodos y fórmulas 4D no son soportados por Excel. Puede verificar otras configuraciones con [esta lista de SpreadJS](https://developer.mescius.com/spreadjs/docs/excelimpexp/excelexport). - La exportación en este formato se ejecuta de forma asíncrona, utilice la propiedad `formula` del *paramObj* para el código a ejecutar después de la exportación. -- Se recomienda utilizar el objeto *excelOptions* al exportar en formato ".xlsx". Make sure to not mix this object with legacy first level properties (*password*, *includeBindingSource*...) para evitar problemas potientales. +- Se recomienda utilizar el objeto *excelOptions* al exportar en formato ".xlsx". Asegúrese de no mezclar este objeto con propiedades heredadas de primer nivel (*password*, *includeBindingSource*...) para evitar problemas potientales. **Notas sobre el formato PDF**: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-find.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-find.md index 4ccd334c12e81f..cdf07a14ec6e8f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-find.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-find.md @@ -33,7 +33,7 @@ Puede pasar el parámetro opcional *searchCondition* para especificar el funcion | afterRow | Integer | El número de la línea justo antes de la línea inicial de la búsqueda. Si *rangeObj* es un rango combinado, el número de línea indicado debe ser del primer rango. Valor por defecto: -1 (inicio de *rangeObj*) | | all | Boolean |
  • True - Se devuelven todas las celdas en *rangeObj* correspondientes a *searchValue*
  • False - (valor por defecto) Sólo se devuelve la primera celda de *rangeObj* correspondiente a *searchValue*
  • | | flags | Integer |
    `vk find flag exact match`El contenido completo de la celda debe coincidir completamente con el valor de búsqueda
    `vk find flag ignore case`Las mayúsculas y minúsculas se consideran iguales. Ej: "a" es lo mismo que "A".
    `vk find flag none`no search flags are considered (default)
    `vk find flag use wild cards`Wildcard characters (\*,?) puede utilizarse en la cadena de búsqueda. Los caracteres comodín se pueden utilizar en cualquier comparación de cadenas para coincidir con cualquier número de caracteres:
  • \* para cero o varios caracteres (por ejemplo, al buscar "bl*" se puede encontrar "bl", "black" o "blob")
  • ? para un solo carácter (por ejemplo, la búsqueda de "h?t" puede encontrar "hot", o "hit"
  • Estos indicadores pueden combinarse. Por ejemplo: $search.flags:=vk find flag use wild cards+vk find flag ignore case | -| order | Integer |
    `vk find order by columns`La búsqueda se realiza por columnas. Each row of a column is searched before the search continues to the next column.
    `vk find order by rows`The search is performed by rows. Se busca en cada columna de una linea antes de continuar con la siguiente linea (por defecto)
    | +| order | Integer |
    `vk find order by columns`La búsqueda se realiza por columnas. Se busca en cada línea de una columna antes de continuar con la siguiente.
    `vk find order by rows`La búsqueda es realizada por líneas. Se busca en cada columna de una linea antes de continuar con la siguiente linea (por defecto)
    | | target | Integer |
    `vk find target formula`La búsqueda se realiza en la fórmula de la celda
    `vk find target tag`La búsqueda se realiza en la etiqueta de la celda
    `vk find target text`La búsqueda se realiza en el texto de la celda (predeterminado)

    Estas banderas pueden combinarse. Por ejemplo:$search.target:=vk find target formula+vk find target text

    | En el parámetro opcional *replaceValue*, puede pasar un texto para que ocupe el lugar de toda instancia del texto en el *searchValue* encontrado en *rangeObj*. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md index e8bed742d07c39..229ed41326b42a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md @@ -43,33 +43,33 @@ Se devuelve un error si el parámetro `filePath` no es válido, o si el archivo El parámetro opcional *paramObj* permite definir las propiedades del documento importado: -| Parámetros | | Tipo | Descripción | -| ------------ | ------------------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| formula | | 4D.Function | Un método de retollamada que se lanzará cuando la importación haya terminado. Debe utilizar una fórmula devuelta por el comando [`Formula`](../../commands/formula.md). Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | -| contraseña | | text | Sólo Microsoft Excel (opcional) - La contraseña utilizada para proteger un documento MS Excel. | -| csvOptions | | object | opciones de importación csv | -| | range | object | Rango de celdas que contiene la primera celda donde se escribirán los datos. Si el rango especificado no es un rango de celdas, sólo se utiliza la primera celda del rango. | -| | rowDelimiter | text | Delimitador de línea. Si no está presente, el delimitador es determinado automáticamente por 4D. | -| | columnDelimiter | text | Delimitador de columna. Por defecto: "," | -| sjsOptions | | object | opciones para la importación de sjs | -| | calcOnDemand | boolean | Si se calculan las fórmulas sólo cuando se solicitan, por defecto es false. | -| | dynamicReferences | boolean | Si calcular funciones con referencias dinámicas, por defecto es true. | -| | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | -| | includeFormulas | boolean | Si se incluyen las fórmulas al cargar, por defecto es true. | -| | includeStyles | boolean | Si se incluyen los estilos al cargar, por defecto es true. | -| | includeUnusedStyles | boolean | Si se incluyen los estilos de nombre no utilizados al convertir excel xml a json, por defecto es true. | -| | openMode | integer |
  • 0 (normal): modo abierto normal, sin perezoso (lazy) e incremental. When opening file, UI and UI event could be refreshed and responsive at specific time points.
  • 1 (lazy): modo de apertura lazy. Al abrir el archivo, sólo se cargará directamente la hoja activa. Las demás hojas sólo se cargarán cuando se vayan a utilizar.
  • 2 (incremental): modo abierto incremental. Al abrir un archivo, la interfaz de usuario y el evento de interfaz de usuario podrían actualizarse y responder directamente.
  • | -| excelOptions | | object | Sólo Excel (opcional) - Opciones para exportar Excel | -| | includeStyles | boolean | Si se incluye el estilo al importar, por defecto true. | -| | includeFormulas | boolean | Si se incluye la fórmula al importar, por defecto true. | -| | frozenColumnsAsRowHeaders | boolean | Bien sea tratar las columnas congeladas como encabezados de línea al importar, por defecto false. | -| | frozenRowsAsColumnHeaders | boolean | Whether to treat the frozen rows as column headers when importing, default false. | -| | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | -| | dynamicReferences | boolean | Si calcular funciones con referencia dinámica, por defecto true. | -| | calcOnDemand | boolean | Whether to calculate formulas only when they are demanded, default false. | -| | includeUnusedStyles | boolean | Si incluir el estilo de nombre no utilizado al convertir excel xml al json, default true. | -| | contraseña | text | La contraseña para abrir el workbook. | -| | openMode | text | The open mode of normal, lazy and incremental. Por defecto es normal. | +| Parámetros | | Tipo | Descripción | +| ------------ | ------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| formula | | 4D.Function | Un método de retollamada que se lanzará cuando la importación haya terminado. Debe utilizar una fórmula devuelta por el comando [`Formula`](../../commands/formula.md). Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | +| contraseña | | text | Sólo Microsoft Excel (opcional) - La contraseña utilizada para proteger un documento MS Excel. | +| csvOptions | | object | opciones de importación csv | +| | range | object | Rango de celdas que contiene la primera celda donde se escribirán los datos. Si el rango especificado no es un rango de celdas, sólo se utiliza la primera celda del rango. | +| | rowDelimiter | text | Delimitador de línea. Si no está presente, el delimitador es determinado automáticamente por 4D. | +| | columnDelimiter | text | Delimitador de columna. Por defecto: "," | +| sjsOptions | | object | opciones para la importación de sjs | +| | calcOnDemand | boolean | Si se calculan las fórmulas sólo cuando se solicitan, por defecto es false. | +| | dynamicReferences | boolean | Si calcular funciones con referencias dinámicas, por defecto es true. | +| | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | +| | includeFormulas | boolean | Si se incluyen las fórmulas al cargar, por defecto es true. | +| | includeStyles | boolean | Si se incluyen los estilos al cargar, por defecto es true. | +| | includeUnusedStyles | boolean | Si se incluyen los estilos de nombre no utilizados al convertir excel xml a json, por defecto es true. | +| | openMode | integer |
  • 0 (normal): modo abierto normal, sin perezoso (lazy) e incremental. Al abrir un archivo, la interfaz de usuario y el evento de interfaz de usuario podrían actualizarse y responder en momentos específicos.
  • 1 (lazy): modo de apertura lazy. Al abrir el archivo, sólo se cargará directamente la hoja activa. Las demás hojas sólo se cargarán cuando se vayan a utilizar.
  • 2 (incremental): modo abierto incremental. Al abrir un archivo, la interfaz de usuario y el evento de interfaz de usuario podrían actualizarse y responder directamente.
  • | +| excelOptions | | object | Sólo Excel (opcional) - Opciones para exportar Excel | +| | includeStyles | boolean | Si se incluye el estilo al importar, por defecto true. | +| | includeFormulas | boolean | Si se incluye la fórmula al importar, por defecto true. | +| | frozenColumnsAsRowHeaders | boolean | Bien sea tratar las columnas congeladas como encabezados de línea al importar, por defecto false. | +| | frozenRowsAsColumnHeaders | boolean | Bien sea tratar las líneas congeladas como encabezados de columna al importar, por defecto false. | +| | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | +| | dynamicReferences | boolean | Si calcular funciones con referencia dinámica, por defecto true. | +| | calcOnDemand | boolean | Whether to calculate formulas only when they are demanded, default false. | +| | includeUnusedStyles | boolean | Si incluir el estilo de nombre no utilizado al convertir excel xml al json, default true. | +| | contraseña | text | La contraseña para abrir el workbook. | +| | openMode | text | The open mode of normal, lazy and incremental. Por defecto es normal. | :::note Notas diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-move-cells.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-move-cells.md index 5e7750583d5ac0..f924914b108639 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-move-cells.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-move-cells.md @@ -35,10 +35,10 @@ En *targetRange*, pase el rango de celdas donde se copiarán o moverán los valo El parámetro *options* tiene varias propiedades: -| Propiedad | Tipo | Descripción | -| ------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| copy | Boolean | Determina si los valores, el formato y las fórmulas de las celdas de *originRange* se eliminan después de ejecutar el comando:
    • *False* (por defecto) para eliminarlos
    • *True* para mantenerlos
    | -| pasteOptions | Integer | Especifica lo que se pega. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Pastes all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Pega solo el formato.
    `vk clipboard options formulas`Pega sólo las fórmulas.
    `vk clipboard options formulas and formatting`Pastes the formulas and formatting.
    `vk clipboard options values`Pega solo los valores.
    `vk clipboard options value and formatting`Pastes the values and formatting.

    | +| Propiedad | Tipo | Descripción | +| ------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| copy | Boolean | Determina si los valores, el formato y las fórmulas de las celdas de *originRange* se eliminan después de ejecutar el comando:
    • *False* (por defecto) para eliminarlos
    • *True* para mantenerlos
    | +| pasteOptions | Integer | Especifica lo que se pega. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Pastes all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Pega solo el formato.
    `vk clipboard options formulas`Pega sólo las fórmulas.
    `vk clipboard options formulas and formatting`Pega las fórmulas y el formato.
    `vk clipboard options values`Pega solo los valores.
    `vk clipboard options value and formatting`Pega los valores y el formato.

    | Se tienen en cuenta las opciones de pegado definidas en las [opciones del libro de trabajo](vp-set-workbook-options.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md index bdc02342a44e14..d059be21bf1f19 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md @@ -48,14 +48,14 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | autoFitType | number | El contenido se formatea para que se ajuste en las celdas, o en las celdas y los encabezados. Valores disponibles:
    ConstanteValorDescripción
    vk auto fit type cell 0 El contenido se ajusta automáticamente a las celdas
    vk auto fit type cell with header 1 El contenido se ajusta automáticamente a las celdas y encabezados
    | | backColor | string | Una cadena de color utilizada para representar el color de fondo del área, como "red", "#FFFF00", "rgb(255,0,0)", "Acento 5". El color de fondo inicial se oculta cuando se define una backgroundImage. | | backgroundImage | string / picture / file | Imagen de fondo para el área. | -| backgroundImageLayout | number | Cómo se muestra la imagen de fondo. Available values:
    ConstantValueDescription
    vk image layout center 1 In the center of the area.
    vk image layout none 3 In the upper left corner of the area with its original size.
    vk image layout stretch 0 Fills the area.
    vk image layout zoom 2 Displayed with its original aspect ratio.
    | +| backgroundImageLayout | number | Cómo se muestra la imagen de fondo. Available values:
    ConstantValueDescription
    vk image layout center 1 In the center of the area.
    vk image layout none 3 In the upper left corner of the area with its original size.
    vk image layout stretch 0 Llena el área.
    vk image layout zoom 2 Mostrado con su relación de aspecto original.
    | | calcOnDemand | boolean | Las fórmulas se calculan sólo cuando se piden. | | columnResizeMode | number | Redimensiona modo para columnas. Valores disponibles:
    ConstanteValorDescripción
    vk resize mode normal 0 Utiliza el modo de redimensionamiento normal (es decir, las columnas restantes se ven afectadas)
    vk resize mode split 1 Utiliza el modo dividido (es decir, las columnas restantes no se ven afectadas)
    | | copyPasteHeaderOptions | number | Encabezados para incluir cuando se copian o pegan datos. Available values:
    ConstantValueDescription
    vk copy paste header options all headers3 Includes selected headers when data is copied; overwrites selected headers when data is pasted.
    vk copy paste header options column headers 2 Includes selected column headers when data is copied; overwrites selected column headers when data is pasted.
    vk copy paste header options no headers0 Column and row headers are not included when data is copied; does not overwrite selected column or row headers when data is pasted.
    vk copy paste header options row headers1 Includes selected row headers when data is copied; overwrites selected row headers when data is pasted.
    | | customList | collection | La lista para que los usuarios personalicen el relleno de arrastre, dar prioridad a que coincida con esta lista en cada relleno. Cada elemento de colección es una colección de cadenas. Vet en [SpreadJS docs](https://developer.mescius.com/spreadjs/docs/features/cells/AutoFillData/AutoFillLists). | | cutCopyIndicatorBorderColor | string | Color del borde del indicador que aparece cuando el usuario corta o copia la selección. | | cutCopyIndicatorVisible | boolean | Muestra un indicador al copiar o cortar el elemento seleccionado. | -| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Fills cells only with formatting.
    vk auto fill type fill series 1 Fills cells with series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | +| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Fills cells with series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | | enableAccessibility | boolean | El soporte de accesibilidad está activado en la hoja de cálculo. | | enableFormulaTextbox | boolean | Se activa la caja de texto de la fórmula. | | grayAreaBackColor | string | Una cadena color utilizada para representar el color de fondo del área gris, como "red", "#FFFF00", "rgb(255,0,0)", "Accent 5", etc. | @@ -69,7 +69,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | referenceStyle | number | Estilo para referencias de celdas y rangos en fórmulas de celdas. Available values:
    ConstantValueDescription
    vk reference style A1 0 Use A1 style.
    vk reference style R1C1 1 Use R1C1 style
    | | resizeZeroIndicator | number | Política de dibujo cuando las líneas o columnas se redimensionan a 0. Available values:
    ConstantValueDescription
    vk resize zero indicator default 0 Uses the current drawing policy when the row or column is resized to zero.
    vk resize zero indicator enhanced 1 Draws two short lines when the row or column is resized to zero.
    | | rowResizeMode | number | La forma en que se redimensionan las líneas. Los valores disponibles son los mismos qe columnResizeMode | -| scrollbarAppearance | number | Apariencia de la barra de desplazamiento. Available values:
    ConstantValueDescription
    vk scrollbar appearance mobile1 Mobile scrollbar appearance.
    vk scrollbar appearance skin (default)0 Excel-like classic scrollbar appearance.
    | +| scrollbarAppearance | number | Apariencia de la barra de desplazamiento. Available values:
    ConstantValueDescription
    vk scrollbar appearance mobile1 Mobile scrollbar appearance.
    vk scrollbar appearance skin (por defecto)0 Apariencia clásica de la barra de desplazamiento similar a Excel.
    | | scrollbarMaxAlign | boolean | La barra de desplazamiento se alinea con la última línea y columna de la hoja activa. | | scrollbarShowMax | boolean | Las barras de desplazamiento mostradas se basan en el número total de columnas y líneas de la hoja. | | scrollByPixel | boolean | Activar desplazamiento de precisión por píxel. | @@ -79,8 +79,8 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | showDragFillSmartTag | boolean | Mostrar el diálogo de arrastrar y rellenar. | | showDragFillTip | boolean | Mostrar la punta de arrastrar y soltar. | | showHorizontalScrollbar | boolean | Mostrar la barra de desplazamiento horizontal. | -| showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Only the horizontal resize tip is displayed.
    vk show resize tip none 0 No resize tip is displayed.
    vk show resize tip row 2 Only the vertical resize tip is displayed.
    | -| showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Only the horizontal scroll tip is displayed.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Only the vertical scroll tip is displayed.
    | +| showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Solo se muestra la punta de redimensionamiento horizontal.
    vk show resize tip none 0 No resize tip is displayed.
    vk show resize tip row 2 Only the vertical resize tip is displayed.
    | +| showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Only the horizontal scroll tip is displayed.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Solo se muestra la punta de desplazamiento vertical.
    | | showVerticalScrollbar | boolean | Mostrar la barra de desplazamiento vertical. | | tabEditable | boolean | La pestaña de la hoja se puede editar. | | tabNavigationVisible | boolean | Mostrar la navegación por pestañas. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md index 8577eb589df53b..97732b237a5018 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md @@ -13,9 +13,9 @@ La integración de áreas de 4D View Pro en sus formularios le permite importar ## Instalación y activación -4D View Pro debe estar instalado en sus proyectos. The 4D View Pro component is available from the [**4D-ViewPro github repository**](https://github.com/4d/4D-ViewPro). +4D View Pro debe estar instalado en sus proyectos. El componente 4D View Pro está disponible en el [\*\*repositorio github 4D-ViewPro \*\*](https://github.com/4d/4D-ViewPro). -The easiest way to install 4D View Pro in an opened project is to use the Dependency Manager: +La forma más fácil de instalar 4D View Pro en un proyecto abierto es utilizar el Administrador de dependencias: 1. Abra la ventana [Dependency Manager](../Project/components.md). 2. Haga clic en el botón **+** para añadir un componente. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/authentication.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/authentication.md index ee0943ee56293f..509461ed5e00bf 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/authentication.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/authentication.md @@ -119,7 +119,7 @@ Debe declarar estos parámetros de la siguiente manera: :::note -Todos los parámetros del método base `On Web Authentication` no están necesariamente rellenados. The information received by the database method depends on the selected [authentication mode](#authentication-modes). +Todos los parámetros del método base `On Web Authentication` no están necesariamente rellenados. La información recibida por el método base depende del [modo de autenticación](#authentication-modes) seleccionado. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md index 16c9f337b0de37..bc8018c82e60ac 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md @@ -58,7 +58,7 @@ Se soportan las siguientes palabras clave de acción: | `removeHeaders` | Texto o colección de textos | Encabezado(s) para eliminar de las respuestas HTTP. Si un encabezado a eliminar no existe en el encabezado de respuesta, se ignora. | | `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. | | `setHeaders` | Object | Name (text) and value (text) of header(s) to modify in the HTTP responses. Si un encabezado a modificar no existe en el encabezado de respuesta, se añade. | -| `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. When the access to a resource is denied, the web server returns a 403 status by default | +| `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. Cuando el acceso a un recurso es denegado, el servidor web devuelve un estado 403 por defecto | | `redirect` | Text | Redirigir URL. Cuando se activa una redirección, el servidor web devuelve un estado 302 por defecto | | `status` | Number | Estado HTTP | @@ -74,7 +74,7 @@ Algunos encabezados no pudieron ser añadidos, modificados o eliminados: | Vary | Sí | No | No | | Set-Cookie | Sí | Añadir cookie | No | -Unauthorized changes on these headers do not generate errors, however modifications will be ignored. +Los cambios no autorizados en estos encabezados no generan errores, sin embargo las modificaciones serán ignoradas. ### Reglas actuales diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/preemptiveWeb.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/preemptiveWeb.md index 6a5929785ac538..c270d197d2e68a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/preemptiveWeb.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/preemptiveWeb.md @@ -27,7 +27,7 @@ La siguiente tabla indica si el modo apropiativo se utiliza o está disponible, - Servidor web: maneja las [plantillas web](templates.md), [4DACTION y los métodos base](httpRequests.md) - Servidor de servicios web: gestiona las peticiones SOAP - ***web setting*** means that the preemptive mode depends on the [**scalable sessions**](sessions.md#enabling-web-sessions) status: - - if scalable sessions are enabled, the preemptive mode is automatically used for web and web service processes. + - si las sesiones escalables están activadas, el modo apropiativo se utiliza automáticamente para los procesos web y servicios web. - si las sesiones escalables no están activadas: - for web processes, the [**Use preemptive processes**](webServerConfig.md#use-preemptive-processes) option is taken into account. - for web service processes (server or client), preemptive mode is supported at method level. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md index 615a144ad69146..105b658372a4fe 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md @@ -80,7 +80,7 @@ La autenticación en el servidor web WebAdmin se realiza utilizando una llave de De acuerdo con la gestión de proyectos 4D, sólo se admiten los siguientes usos: - el desarrollo con Qodly Studio debe realizarse a través de **4D** (monousuario). -- deployment of 4D applications powered with Qodly pages must be done using **4D Server**. +- el despliegue de aplicaciones 4D alimentadas por páginas Qodly debe hacerse utilizando **4D Server**. :::warning diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index 8602f8f2fab3ec..daeaf088d5b5d0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -211,7 +211,7 @@ End if El servidor web 4D le permite generar, compartir y utilizar tokens de sesión OTP (One-Time Passcode). Los tokens de sesión OTP se utilizan para asegurar comunicaciones con aplicaciones de terceros o sitios web. For information on OTP, please refer to the [One-time password page](https://en.wikipedia.org/wiki/One-time_password) on Wikipedia. -In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. The callback link includes the OTP token, so that the session which triggered the callback is loaded along with its data and privileges. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. +In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. :::tips Entradas de blog relacionadas @@ -251,7 +251,7 @@ Una url [`4DACCIÓN`](./httpRequests.md#4daction) también puede ser usada en el #### Utilizar un parámetro personalizado -The OTP token can also be provided as a custom parameter that you need to process specifically to restore the session. Debe utilizar esta solución si: +El token OTP también se puede suministrar como un parámetro personalizado que necesita procesar específicamente para restaurar la sesión. Debe utilizar esta solución si: - la aplicación de terceros no permite insertar parámetros como un `$4DSID` directamente en la Uri de redirección, y proporciona una API dedicada (la implementación depende de la aplicación de terceros), - o, quiere llamar a una función ORDA a través de REST para procesar la retrollamada, en cuyo caso es necesario pasar el OTP con la [sintaxis de parámetro REST](../REST/ClassFunctions.md#parameters) (por ejemplo, `?$params='["XXX123"]'`). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServer.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServer.md index 1a85350e7e6a34..3563c5462c2ac4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServer.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServer.md @@ -8,7 +8,7 @@ title: Servidor Web :::warning Funcionalidad obsoleta -Using the web server on a remote 4D is **deprecated** as of 4D 21. Ya no se recomienda utilizar esta funcionalidad. +El uso del servidor web en un 4D remoto es **obsoleto** a partir de 4D 21. Ya no se recomienda utilizar esta funcionalidad. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md index 948cf5cf8afce8..e32bca5acba067 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md @@ -55,10 +55,10 @@ Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* c | Constante | Valor | Comentario | | ------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | -| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Note: If the folder already exists, it is emptied before the file is exported. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | +| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | | wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](#wk-factur-x-object)). | | wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | -| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Useful if you want to use fonts that are not available by default on Windows or macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | +| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | | wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | | wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | | wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). If a picture contains more than one format, the format for screen rendering is used.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md index 0975d8aeb5e67b..606d4bcc42bcd7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md @@ -55,10 +55,10 @@ Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* c | Constante | Valor | Comentario | | ------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | -| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Note: If the folder already exists, it is emptied before the file is exported. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | +| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | | wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](./wp-export-document.md#wk-factur-x-object)). | | wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](./wp-export-document.md#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | -| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Useful if you want to use fonts that are not available by default on Windows or macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | +| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | | wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | | wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | | wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). If a picture contains more than one format, the format for screen rendering is used.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md index 57405625d969f7..625a6d5df492ed 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md @@ -51,20 +51,20 @@ Por defecto, las expresiones HTML insertadas en documentos heredados de 4D Write Puede pasar un objeto para definir cómo se gestionan los siguientes atributos durante la operación de importación: -| **Atributo** | **Tipo** | **Description** | -| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | -| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Anchored images are imported, but any text wrapping around the image is ignored. **ignore** \- Las imágenes ancladas no son importadas. | -| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Continuous, even, or odd sections are converted to standard sections. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Note**: Section breaks of any type but continuous are converted to section breaks with page break. Continuous section breaks are imported as continuous section breaks. | -| fields | Text | Sólo para documentos MS Word (.docx). Specifies how .docx fields that can't be converted to 4D Write Pro formulas are handled. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - The last computed value for the .docx field (if available) is imported. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | -| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Available values:

    **collapse** \- Paragraph formatting is modified to mimic automatically collapsed borders. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | -| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Specifies the preferred typeface to use when different typefaces are defined for a single font property in OOXML. Available values:

    **latin** (default) - Latin script **bidi** \- Bidrectional script. Suitable if document is mainly bidirectional left-to-right (LTR) or right-to-left (RTL) text (e.g., Arabic or Hebrew). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | -| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | -| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | +| **Atributo** | **Tipo** | **Description** | +| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | +| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | +| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | +| fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | +| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | +| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Specifies the preferred typeface to use when different typefaces are defined for a single font property in OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | +| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | +| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | **Notas de compatibilidad** -- *Character style sheets in legacy 4D Write documents use a proprietary mechanism, which is not supported by 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Legacy character style sheets are not imported and are no longer referenced in the document.* +- *Character style sheets in legacy 4D Write documents use a proprietary mechanism, which is not supported by 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Las hojas de estilo de caracteres antiguos no son importadas y ya no están referenciadas en el documento.* - *Support for importing in .docx format is only certified for Microsoft Word 2010 and newer. Versiones antiguas, especialmente Microsoft Word 2007, pueden no importar correctamente.* ## Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-reset-attributes.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-reset-attributes.md index e3c95cabba2413..da3a00bcb36f12 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-reset-attributes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-reset-attributes.md @@ -19,7 +19,7 @@ displayed_sidebar: docs ## Descripción -El comando **WP RESET ATTRIBUTES** le permite restablecer el valor de uno o más atributos en el rango, elemento o documento pasado como parámetro. This command can remove any kind of 4D Write Pro internal attribute: character, paragraph, document, table, or image. Puede pasar el nombre del atributo a restablecer en *attribName* o puede pasar una colección de atributos en *attribColl* para restablecer varios atributos a la vez. +El comando **WP RESET ATTRIBUTES** le permite restablecer el valor de uno o más atributos en el rango, elemento o documento pasado como parámetro. Este comando puede eliminar cualquier tipo de atributo interno de 4D Write Pro: carácter, párrafo, documento, tabla o imagen. Puede pasar el nombre del atributo a restablecer en *attribName* o puede pasar una colección de atributos en *attribColl* para restablecer varios atributos a la vez. > En el caso de una sección o subsección, el objeto *sectionOrSubsection* puede pasarse solo y todos los atributos se restablecen a la vez. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md index 4b19b4951ce87d..128c04f6bef972 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md @@ -93,7 +93,7 @@ Por ejemplo, para insertar el número de página en el pie de página: ## Table formula context object -When used in a formula within the table, the **This** keyword gives access to different data according to the context: +Cuando se utiliza en una fórmula dentro de la tabla, la palabra clave **This** da acceso a diferentes datos según el contexto: | **Contexto** | **Expression** | **Tipo** | **Devuelve** | | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -104,7 +104,7 @@ When used in a formula within the table, the **This** keyword gives access to di | | [This](../commands/this.md).tableData | Collection o Entity selection (por lo general) | table.dataSource evaluada | | In each data row when a table datasource returns a collection or an entity selection | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | | | [This](../commands/this.md).itemIndex | Number | Índice del elemento actual en la colección o selección de entidades, a partir de 0 | -| In any row (except header rows) when a table datasource returns a collection or an entity selection | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    This expression returns the same type of value as the **This.tableData** expression. | +| In any row (except header rows) when a table datasource returns a collection or an entity selection | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    Esta expresión devuelve el mismo tipo de valor que la expresión **This.tableData**. | | In a break row | [This](../commands/this.md).breakItems | Collection o entity selection | Items of the collection or entity selection displayed in the rows between:
    • the current break row and the previous break row of the same level (or the start of the table) if the break row(s) are displayed after the data row.
    • the current break and the next break row of the same level (or the end of the table) if the break row(s) are displayed before the data row.
    | En cualquier otro contexto, estas expresiones devolverán *undefined*. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md index 21dc2ecf7aa074..1271a5aaaa8e21 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md @@ -5,7 +5,7 @@ title: OpenAI # OpenAI -La clase `OpenAI` proporciona un cliente para acceder a varios recursos de la API OpenAI. It includes properties for managing API configurations and methods for performing HTTP requests to the OpenAI endpoints. +La clase `OpenAI` proporciona un cliente para acceder a varios recursos de la API OpenAI. Incluye propiedades de gestión de las configuraciones API y de los métodos para efectuar las peticiones HTTP a los puntos de terminación de OpenAI. ## Propiedades de configuración @@ -58,7 +58,7 @@ $client.baseURL:="https://server.ai" ## Recursos API -The API provides access to multiple resources that allow seamless interaction with OpenAI's services. Each resource is encapsulated within a dedicated API class, offering a structured and intuitive way to interact with different functionalities. +La API ofrece acceso a múltiples recursos que permiten una interacción perfecta con los servicios de OpenAI. Each resource is encapsulated within a dedicated API class, offering a structured and intuitive way to interact with different functionalities. | Nombre de la propiedad | Tipo | Descripción | | ---------------------- | ----------------------------------------------- | ------------------------------------------------ | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatAPI.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatAPI.md index 8b794fda25d429..acf7c8b80ee550 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatAPI.md @@ -9,10 +9,10 @@ The `OpenAIChatAPI` class provides an interface to interact with OpenAI's chat b ## Propiedades -| Propiedad | Tipo | Descripción | -| ------------- | ------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `completions` | [OpenAIChatCompletionsAPI](OpenAIChatCompletionsAPI.md) | Una instancia que maneja las solicitudes de finalización del chat. | -| `vision` | [OpenAIVision](OpenAIVision.md) | A helper instance that handles vision-related requests. | +| Propiedad | Tipo | Descripción | +| ------------- | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `completions` | [OpenAIChatCompletionsAPI](OpenAIChatCompletionsAPI.md) | Una instancia que maneja las solicitudes de finalización del chat. | +| `vision` | [OpenAIVision](OpenAIVision.md) | Una instancia de ayuda que gestiona las peticiones relacionadas con la visión. | ## Function diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsAPI.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsAPI.md index f5d15116434873..4ce850b3b4ecd9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsAPI.md @@ -5,7 +5,7 @@ title: OpenAIChatCompletionsAPI # OpenAIChatCompletionsAPI -La clase `OpenAIChatCompletionsAPI` está diseñada para gestionar las finalizaciones de chat con la API OpenAI. It provides methods to create, retrieve, update, delete, and list chat completions. +La clase `OpenAIChatCompletionsAPI` está diseñada para gestionar las finalizaciones de chat con la API OpenAI. Ofrece métodos para crear, recuperar, actualizar, eliminar y listar respuestas de chat. https://platform.openai.com/docs/api-reference/chat @@ -21,7 +21,7 @@ https://platform.openai.com/docs/api-reference/chat | *parámetros* | [OpenAIChatCompletionsParameters](OpenAIChatCompletionsParameters.md) | Los parámetros para la solicitud de finalización del chat. | | Resultado | Object | El resultado de la solicitud de finalización del chat. | -Creates a model response for the given chat conversation. +Crea un modelo de respuesta para la conversación dada. https://platform.openai.com/docs/api-reference/chat/create diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsListParameters.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsListParameters.md index 93b8c3e4bee066..7f1a363b63e090 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsListParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsListParameters.md @@ -5,7 +5,7 @@ title: OpenAIChatCompletionsListParameters # OpenAIChatCompletionsListParameters -This class is used to define parameters for retrieving a list of chat completions from the OpenAI API. Permite personalizar la paginación, ordenar y filtrar los mensajes de chat. +Esta clase se utiliza para definir los parámetros de recuperación de una lista de terminaciones de chat de la API OpenAI. Permite personalizar la paginación, ordenar y filtrar los mensajes de chat. ## Hereda diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md index 2502d80c2c15ea..c9624656bfe290 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIChatCompletionsMessagesAPI.md @@ -13,11 +13,11 @@ The `OpenAIChatCompletionsMessagesAPI` class is designed to interact with the Op **list**(*completionID* : Text; *parameters* : OpenAIChatCompletionsMessagesParameters) : Variant -| Parámetros | Tipo | Descripción | -| -------------- | ----------------------------------------- | -------------------------------------------------------------------------------- | -| *completionID* | Text | The ID of the chat completion to retrieve messages for. | -| *parámetros* | `OpenAIChatCompletionsMessagesParameters` | Parámetros para filtrar y personalizar la respuesta. | -| Resultado | Variant | Los mensajes recuperados asociados con la finalización del chat. | +| Parámetros | Tipo | Descripción | +| -------------- | ----------------------------------------- | ------------------------------------------------------------------------------------- | +| *completionID* | Text | El ID de la finalización de chat para la cual recuperar los mensajes. | +| *parámetros* | `OpenAIChatCompletionsMessagesParameters` | Parámetros para filtrar y personalizar la respuesta. | +| Resultado | Variant | Los mensajes recuperados asociados con la finalización del chat. | La función `list()` recupera los mensajes asociados a un ID de finalización de chat específico. Lanza un error si `completionID` está vacío. If the *parameters* argument is not an instance of `OpenAIChatCompletionsMessagesParameters`, it will create a new instance using the provided parameters. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIEmbeddingsAPI.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIEmbeddingsAPI.md index dabbcc1cee4797..7d99ad8f1204a6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIEmbeddingsAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIEmbeddingsAPI.md @@ -15,14 +15,14 @@ https://platform.openai.com/docs/api-reference/embeddings **create**(*input* : Text; *model*: Text; *parameters* : OpenAIEmbeddingsParameters) : OpenAIEmbeddingsResult -Creates an embeddings for the provided input, model and parameters. - -| Argumento | Tipo | Descripción | -| ------------ | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| *entrada* | Texto o colección de texto | La entrada a vectorizar. | -| *model* | Text | The [model to use](https://platform.openai.com/docs/guides/embeddings#embedding-models) | -| *parámetros* | [OpenAIEmbeddingsParameters](OpenAIEmbeddingsParameters.md) | Los parámetros para personalizar la petición de representaciones vectoriales. | -| Resultado | [OpenAIEmbeddingsResult](OpenAIEmbeddingsResult.md) | Las integraciones. | +Crea una representación vectorial para la entrada, el modelo y los parámetros ofrecidos. + +| Argumento | Tipo | Descripción | +| ------------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| *entrada* | Texto o colección de texto | La entrada a vectorizar. | +| *model* | Text | El [modelo a utilizar] (https://platform.openai.com/docs/guides/embeddings#embedding-models) | +| *parámetros* | [OpenAIEmbeddingsParameters](OpenAIEmbeddingsParameters.md) | Los parámetros para personalizar la petición de representaciones vectoriales. | +| Resultado | [OpenAIEmbeddingsResult](OpenAIEmbeddingsResult.md) | Las integraciones. | #### Ejemplos de uso diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md index a1b407b5774618..50c983790a5e75 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md @@ -41,7 +41,7 @@ La clase `OpenAIError` está diseñada para manejar errores devueltos por la API | ---------------------------- | ------- | ------------------------------------------------------------------------------------------------- | | `isBadRequestError` | Boolean | Indica si se trata de un error 400 Bad Request. | | `isAuthenticationError` | Boolean | Indica si se trata de un error de autenticación 401. | -| `isPermissionDeniedError` | Boolean | Indicates ∏if the error is a 403 Permission Denied error. | +| `isPermissionDeniedError` | Boolean | Indica si el error es un error 403 Permiso denegado. | | `isNotFoundError` | Boolean | Indica si el error es un error 404 Not Found. | | `isUnprocessableEntityError` | Boolean | Indica si el error es un error de entidad no procesable (422). | | `isRateLimitError` | Boolean | Indica si el error es un error de límite de velocidad 429. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIImage.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIImage.md index 04c86973e749d1..2917ecf2bf83db 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIImage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIImage.md @@ -11,11 +11,11 @@ https://platform.openai.com/docs/api-reference/images/object ## Propiedades -| Propiedad | Tipo | Descripción | -| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------- | -| `url` | Text | La URL de la imagen generada, si `response_format` es `url` (por defecto). | -| `b64_json` | Text | The base64-encoded JSON of the generated image, if `response_format` is `b64_json`. | -| `revised_prompt` | Variant | The prompt that was used to generate the image, if there was any revision to the prompt. | +| Propiedad | Tipo | Descripción | +| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------- | +| `url` | Text | La URL de la imagen generada, si `response_format` es `url` (por defecto). | +| `b64_json` | Text | El JSON codificado en base64 de la imagen generada, si `response_format` es `b64_json`. | +| `revised_prompt` | Variant | La instrucción que se utilizó para generar la imagen, si hubo alguna revisión de la instrucción. | ## Funciones @@ -23,9 +23,9 @@ https://platform.openai.com/docs/api-reference/images/object **asBlob**() : 4D.Blob -| Parámetros | Tipo | Descripción | -| ---------- | ----------------------- | ------------------------------------------------------------------------------------------------------ | -| Resultado | 4D.Blob | Converts the generated image to a blob format based on its URL or base64-encoded JSON. | +| Parámetros | Tipo | Descripción | +| ---------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------ | +| Resultado | 4D.Blob | Convierte la imagen generada a un formato blob basado en su URL o en un JSON codificado en base64. | #### Ejemplo de Uso diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md index fe0fd70f8dbc2e..223b4de69615ec 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md @@ -9,13 +9,13 @@ The `OpenAIMessage` class represents a structured message containing a role, con ## Propiedades -| Propiedad | Tipo | Descripción | -| -------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `rol` | Text | The role of the message (e.g., "user", "assistant", "system", "tool"). | -| `contenido` | Variant | El contenido del mensaje, que puede ser un texto o una colección de objetos. | -| `user` | Text | An optional property representing the user associated with the message. | -| `tool_calls` | Collection | A collection of tool calls requested by the assistant. Cada llamada a una herramienta contiene un objeto `id`, `type` y `function`. | -| `tool_call_id` | Text | El ID de la llamada a la herramienta a la que responde este mensaje (se utiliza cuando `role` es "tool"). | +| Propiedad | Tipo | Descripción | +| -------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `rol` | Text | El rol del mensaje (por ejemplo, "user", "assistant", "system", "tool"). | +| `contenido` | Variant | El contenido del mensaje, que puede ser un texto o una colección de objetos. | +| `user` | Text | Una propiedad opcional que representa al usuario asociado al mensaje. | +| `tool_calls` | Collection | Una colección de llamadas de herramientas solicitadas por el asistente. Cada llamada a una herramienta contiene un objeto `id`, `type` y `function`. | +| `tool_call_id` | Text | El ID de la llamada a la herramienta a la que responde este mensaje (se utiliza cuando `role` es "tool"). | ## Propiedades calculadas @@ -50,7 +50,7 @@ $message.addImageURL("http://example.com/image.jpg"; "high") ### Responder a un mensaje de llamada de herramienta -When an assistant needs to use external functions, it generates a message with `tool_calls` to request function execution. +Cuando un asistente necesita utilizar las funciones externas, genera un mensaje con `tool_calls` para solicitar la ejecución de la función. **Mensaje del asistente solicitando las llamadas de la herramienta:** @@ -76,7 +76,7 @@ Cuando reciba un mensaje de llamada de herramienta, debe: 1. **Extraer la información relativa a la función:** - `function.name`: The name of the function to call (must match a function defined in your [OpenAITool](OpenAITool.md) - you can select code to execute according to this name) - - `function.arguments`: A JSON string containing the function parameters that must be parsed with `JSON Parse` + - `function.arguments`: una cadena JSON que contiene los parámetros de la función que deben analizarse con `JSON Parse` - `id`: el identificador único para esta llamada específica a la herramienta 2. **Execute the function:** @@ -103,7 +103,7 @@ var $toolResponse:=cs.AIKit.OpenAIMessage.new({ \ // Add it to the conversation and continue ``` -**Important:** The `tool_call_id` in your response must exactly match the `id` from the original tool call. This allows the AI model to correctly associate your response with the specific function call that was made. +**Important:** The `tool_call_id` in your response must exactly match the `id` from the original tool call. Esto permite que el modelo de IA asocie correctamente su respuesta con la llamada de función específica que se realizó. ## Ver también diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIModeration.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIModeration.md index 3c92f30cc3c7c7..1b7928f32cb10a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIModeration.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIModeration.md @@ -5,7 +5,7 @@ title: OpenAIModeration # OpenAIModeration -La clase `OpenAIModeration` está diseñada para manejar los resultados de moderación de la API OpenAI. It contains properties for storing the moderation ID, model used, and the results of the moderation. +La clase `OpenAIModeration` está diseñada para manejar los resultados de moderación de la API OpenAI. Contiene propiedades para almacenar el ID de moderación, el modelo utilizado y los resultados de la moderación. https://platform.openai.com/docs/api-reference/moderations/object diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIModerationResult.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIModerationResult.md index b486c693fb10f3..6ae6717533fd23 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIModerationResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIModerationResult.md @@ -5,7 +5,7 @@ title: OpenAIModerationResult # OpenAIModerationResult -The `OpenAIModerationResult` provides functionality to handle moderation results from the OpenAI API. +`OpenAIModerationResult` ofrece funcionalidades para manejar los resultados de moderación de la API OpenAI. ## Hereda diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIParameters.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIParameters.md index 9f01e306d19db4..9b33b972486a0f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIParameters.md @@ -19,14 +19,14 @@ Utilice esta propiedad de retrollamada para recibir el resultado independienteme Use these callback properties for more granular control over success and error handling: -| Propiedad | Tipo | Descripción | -| ------------ | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `onResponse` | 4D.Function | A function to be called asynchronously when the request finishes **successfully**. Asegúrese de que el proceso actual no termina. | -| `onError` | 4D.Function | A function to be called asynchronously when the request finishes **with errors**. Asegúrese de que el proceso actual no termina. | +| Propiedad | Tipo | Descripción | +| ------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `onResponse` | 4D.Function | Una función a llamar de forma asíncrona cuando la petición finalice **con éxito**. Asegúrese de que el proceso actual no termina. | +| `onError` | 4D.Function | Una función que se llamará de forma asíncrona cuando la petición finalice **con errores**. Asegúrese de que el proceso actual no termina. | > The callback function will receive the same result object type (one of [OpenAIResult](./OpenAIResult.md) child classes) that would be returned by the function in synchronous code. -See [documentation about asynchronous code for examples](../asynchronous-call.md) +Ver la [documentación sobre código asíncrono para ejemplos](../asynchronous-call.md) ### Propiedades de la red diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIResult.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIResult.md index a56ffcdcd8d803..ef3e9ad3508ea9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIResult.md @@ -21,13 +21,13 @@ The `OpenAIResult` class is designed to handle the response from HTTP requests a | `errors` | Collection | Devuelve una colección de errores. Estos podrían ser errores de red o errores devueltos por OpenAI. | | `terminated` | Boolean | Un booleano que indica si la petición HTTP fue terminada. | | `headers` | Object | Devuelve los encabezados de respuesta como un objeto. | -| `rateLimit` | Object | Returns rate limit information from the response headers. | +| `rateLimit` | Object | Devuelve la información relativa al límite de tasa de los encabezados de la respuesta. | | `utilización` | Object | Devuelve la información de uso del cuerpo de la respuesta, si existe. | ### rateLimit -The `rateLimit` property returns an object containing rate limit information from the response headers. -This information includes the limits, remaining requests, and reset times for both requests and tokens. +La propiedad `rateLimit` devuelve un objeto que contiene información sobre el límite de velocidad de los encabezados de respuesta. +Esta información incluye los límites, las peticiones restantes y los tiempos de reinicialización tanto para peticiones como para tokens. For more details on rate limits and the specific headers used, refer to [the OpenAI Rate Limits Documentation](https://platform.openai.com/docs/guides/rate-limits#rate-limits-in-headers). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/compatible-openai.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/compatible-openai.md index 5b5e136edec480..ca4d836251504a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/compatible-openai.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/compatible-openai.md @@ -5,7 +5,7 @@ title: Proveedores # Proveedores -Many AI providers propose an OpenAI-like API, so you can use this project to connect to them. +Muchos proveedores de IA proponen una API similar a la de OpenAI, así que puede utilizar este proyecto para conectarse a ellos. Para ello sólo tiene que definir la `baseURL` a la del proveedor y utilizar su clave api si es necesario. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/code-editor/write-class-method.md b/i18n/es/docusaurus-plugin-content-docs/version-21/code-editor/write-class-method.md index 002a2f09517834..f047f57dab287d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/code-editor/write-class-method.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/code-editor/write-class-method.md @@ -803,7 +803,7 @@ La etiqueta `` permite generar y utilizar macrocomandos que ejecutan mé El código de un método llamado se ejecuta en un nuevo proceso. Este proceso se cierra una vez se ejecuta el método. -> Note: The structure process remains frozen until the called method execution is completed. Debe asegurarse de que la ejecución es rápida y de que no hay riesgo de que bloquee la aplicación. If this occurs, use the **Ctrl+F8** (Windows) or **Command+F8** (macOS) command to "kill" the process. +> Note: The structure process remains frozen until the called method execution is completed. Debe asegurarse de que la ejecución es rápida y de que no hay riesgo de que bloquee la aplicación. Si esto ocurre, utilice el comando **Ctrl+F8** (Windows) o **Comando+F8** (macOS) para "matar" el proceso. ### Llamando macros diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md index 71416c9f2cbcc3..fdbd960b6e8acd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md @@ -25,14 +25,14 @@ displayed_sidebar: docs ## Descripción -The **Call chain** command returns a collection of objects describing each step of the method call chain within the current process. Ofrece la misma información que la ventana Depurador. It has the added benefit of being able to be executed from any 4D environment, including compiled mode. +The **Call chain** command returns a collection of objects describing each step of the method call chain within the current process. Ofrece la misma información que la ventana Depurador. Tiene la ventaja adicional de poder ser ejecutado desde cualquier entorno 4D, incluyendo el modo compilado. The command facilitates debugging by enabling the identification of the method or formula called, the component that called it, and the line number where the call was made. Cada objeto de la colección devuelta contiene las siguientes propiedades: | **Propiedad** | **Tipo** | **Description** | **Ejemplo** | | ------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | | database | Text | Name of the database calling the method (to distinguish host methods and component methods) | "database":"contactInfo" | -| formula | Text (si lo hay) | Contents of the current line of code at the current level of the call chain (raw text). Corresponde al contenido de la línea referenciada por la propiedad `line` en el archivo fuente indicado por el método. Si el código fuente no está disponible, la propiedad `formula` se omite (Undefined). | "var $stack:=Call chain" | +| formula | Text (si lo hay) | Contenido de la línea actual de código en el nivel actual de la cadena de llamadas (texto bruto). Corresponde al contenido de la línea referenciada por la propiedad `line` en el archivo fuente indicado por el método. Si el código fuente no está disponible, la propiedad `formula` se omite (Undefined). | "var $stack:=Call chain" | | línea | Integer | Número de línea de llamada al método | "line":6 | | name | Text | Nombre del método llamado | "name":"On Load" | | type | Text | Type of the method:
  • "projectMethod"
  • "formObjectMethod"
  • "formmethod"
  • "databaseMethod"
  • "triggerMethod"
  • "executeOnServer" (when calling a project method with the *Execute on Server attribute*)
  • "executeFormula" (when executing a formula via [PROCESS 4D TAGS](../commands-legacy/process-4d-tags.md) or the evaluation of a formula in a 4D Write Pro document)
  • "classFunction"
  • "formMethod"
  • | "type":"formMethod" | @@ -45,7 +45,7 @@ Para que este comando pueda operar en modo compilado, la [verificación de rango ## Ejemplo -The following code returns a collection of objects containing information about the method call chain: +El siguiente código devuelve una colección de objetos que contienen información acerca de la cadena de llamadas de métodos: ```4d var $currentCallChain : Collection diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md index f48fc456753f3c..08c1237eb694d5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md @@ -36,7 +36,7 @@ Hay dos parámetros opcionales: - *info*: propiedades del comando. The returned value is a *bit field*, where the following bits are meaningful: - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Only thread-safe commands can be used in [preemptive processes](../Develop/preemptive.md). - - Second bit (bit 1): set to 1 if the command is **deprecated**, and 0 if it is not. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). + - Segundo bit (bit 1): se define en 1 si el comando es **obsoleto**, y en 0 si no lo es. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). *theme*: nombre del tema del lenguaje 4D para el comando. @@ -80,9 +80,9 @@ En un formulario, quiere una lista desplegable con los comandos básicos de info  End case ``` -In the English version of 4D, the drop-down list will read: Sum, Average, Min, and Max. In the French version\*, the drop-down list will read: Somme, Moyenne, Min, and Max. +En la versión inglesa de 4D, la lista desplegable leerá: Sum, Average, Min y Max. In the French version\*, the drop-down list will read: Somme, Moyenne, Min, and Max. -\*with a 4D application configured to use the French programming language (see compatibility note) +\*con una aplicación 4D configurada para usar el lenguaje de programación en francés (ver nota de compatibilidad) ## Ejemplo 3 @@ -110,7 +110,7 @@ Luego, para el comando "SAVE RECORD" (53) por ejemplo, puede escribir: ## Ejemplo 4 -You want to return a collection of all deprecated commands in your version of 4D. +Quiere devolver una colección de todos los comandos obsoletos en su versión de 4D. ```4d var $info; $Lon_id : Integer diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/create-deployment-license.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/create-deployment-license.md index 57ffea72a3cfe9..a943e2ddaadfc1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/create-deployment-license.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/create-deployment-license.md @@ -112,7 +112,7 @@ Designar una licencia de uso: ## Ver también -[Blog post - Build an application with 4D commands](https://blog.4d.com/build-an-application-with-4d-commands) +[Post de blog - Crear una aplicación con los comandos 4D](https://blog.4d.com/build-an-application-with-4d-commands) ## Propiedades diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/form.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/form.md index 355633c3e4ffb9..79fa8e19d3a3a9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/form.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/form.md @@ -24,7 +24,7 @@ displayed_sidebar: docs ## Descripción -El comando **Form** devuelve el objeto asociado al formulario actual (instanciado a partir del parámetro *formData* o de la clase de usuario asignada en el editor de formularios). 4D automatically associates an object to the current form in the following cases: +El comando **Form** devuelve el objeto asociado al formulario actual (instanciado a partir del parámetro *formData* o de la clase de usuario asignada en el editor de formularios). 4D asocia automáticamente un objeto al formulario actual en los siguientes casos: - el formulario actual ha sido cargado por uno de los comandos [`DIALOG`](dialog.md), [`Print form`](print-form.md), o [`FORM LOAD`](form-load.md), - el formulario actual es un subformulario, diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-get-property.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-get-property.md index 1950ec74b81673..e0fe65323178a0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-get-property.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-get-property.md @@ -85,7 +85,7 @@ Dado un list box "MyListbox", si ejecuta la siguiente instrucción: $Value:=LISTBOX Get property(*; "MyListbox";lk selection mode) // el valor devuelto indica el modo de selección ``` -In this case, the result returned indicates whether multiple rows can be selected. +En este caso, el resultado devuelto indica si varios registros pueden ser seleccionados. ## Ejemplo 2 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-set-property.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-set-property.md index bad06c1b5092c0..d6641157210542 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-set-property.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-set-property.md @@ -25,7 +25,7 @@ Si pasa el parámetro opcional *\**, indica que el parámetro *object* es un nom **Note:** If the list box or list box column specified using the *object* and *\** parameters does not exist, the command does nothing and no error is triggered. -In the *property* and *value* parameters, you indicate, respectively, the property to set and its new value. Puede utilizar las siguientes constantes encontradas en el tema “*List Box*: +En los parámetros *property* y *value*, usted indica, respectivamente, la propiedad a definir y su nuevo valor. Puede utilizar las siguientes constantes encontradas en el tema “*List Box*: | Constante | Valor | Comentario | | ------------------------------ | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -69,7 +69,7 @@ In the *property* and *value* parameters, you indicate, respectively, the proper ## Ejemplo 1 -You want to make all columns of the "MyListbox" list box resizable: +Quiere que todas las columnas del list box "MyListbox" sean redimensionables: ```4d LISTBOX SET PROPERTY(*;"MyListbox";lk column resizable;lk yes) //Todas las columnas del list box "MyListbox" se establecen como redimensionables diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/new-log-file.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/new-log-file.md index dc7638f769dbd6..a3a706e3623201 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/new-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/new-log-file.md @@ -20,12 +20,12 @@ displayed_sidebar: docs The **New log file** command closes the current log file, renames it and creates a new one with the same name in the same location as the previous one. This command is meant to be used for setting up a backup system using a logical mirror (see the section *Setting up a logical mirror* in the [4D Server Reference Manual](https://doc/4d.com)). -The command returns the full pathname (access path + name) of the log file being closed (called the “segment”). Este archivo se almacena en la misma ubicación que el archivo de registro actual (especificado en la [página de configuración](../Backup/settings.md#configuration) en el tema de copia de seguridad de la configuración). The command does not carry out any processing (compression, segmentation) on the saved file. No aparece ninguna +El comando devuelve el nombre completo de la ruta (ruta de acceso + nombre) del archivo de registro que se está cerrando (llamado “segment”). Este archivo se almacena en la misma ubicación que el archivo de registro actual (especificado en la [página de configuración](../Backup/settings.md#configuration) en el tema de copia de seguridad de la configuración). El comando no realiza ningún procesamiento (compresión, segmentación) en el archivo guardado. No aparece ninguna caja de diálogo. The file is renamed with the current backup numbers of the database and of the log file, as shown in the following example: DatabaseName\[BackupNum-LogBackupNum\].journal. Por ejemplo: -- If the MyDatabase.4DD database has been saved 4 times, the last backup file will be named MyDatabase\[0004\].4BK. The name of the first “segment” of the log file will therefore be MyDatabase\[0004-0001\].journal. +- If the MyDatabase.4DD database has been saved 4 times, the last backup file will be named MyDatabase\[0004\].4BK. El nombre del primer “segment” del archivo de registro será, por lo tanto, MyDatabase\[0004-0001\].journal. - If the MyDatabase.4DD database has been saved 3 times and the log file has been saved 5 times since, the name of the 6th backup of the log file will be MyDatabase\[0003-0006\].journal. :::warning diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/select-log-file.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/select-log-file.md index 4645679308f3d1..05b28a5eb1d550 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/select-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/select-log-file.md @@ -17,11 +17,11 @@ displayed_sidebar: docs ## Descripción -The **SELECT LOG FILE** command creates, or closes the log file according to the value you pass in parameter. +El comando **SELECT LOG FILE** crea o cierra el archivo de historial de acuerdo al valor que pase en el parámetro. -In *logFile*, pass the name or the full pathname of the log file to be created. If you only pass a name, the file will be created in the "Logs" folder of the database located next to the database structure file. +En *logFile*, pase el nombre o la ruta completa del archivo de registro a ser creado. If you only pass a name, the file will be created in the "Logs" folder of the database located next to the database structure file. -If you pass an empty string in *logFile*, **SELECT LOG FILE** presents an Save File dialog box, allowing the user to choose the name and location of the log file to be created. Si el archivo se crea correctamente, la variable OK toma el valor 1. Otherwise, if the user clicks Cancel or if the log file could not be created, OK is set to 0. +If you pass an empty string in *logFile*, **SELECT LOG FILE** presents an Save File dialog box, allowing the user to choose the name and location of the log file to be created. Si el archivo se crea correctamente, la variable OK toma el valor 1. De lo contrario, si el usuario hace clic en Cancelar o si el archivo de registro no pudo ser creado, OK toma el valor 0. **Note:** The new log file is not generated immediately after execution of the command, but after the next backup (the parameter is kept in the data file and will be taken into account even if the database is closed in the meantime) or a call to the [New log file](new-log-file.md) command. Puede llamar al comando [BACKUP](../commands-legacy/backup.md) para activar la creación del archivo de registro. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/string.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/string.md index a7928fff8b6d0d..80dd73a149d5ca 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/string.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/string.md @@ -31,7 +31,7 @@ displayed_sidebar: docs El comando **String** devuelve en forma de cadena alfanumérica la expresión numérica, fecha, hora, cadena o booleana que se pasa en *expression*. -If you do not pass any other parameter, the string is returned with the appropriate default format. Si pasa *format*, puede forzar que la cadena resultante tenga un formato específico. +Si no pasa ningún otro parámetro, la cadena se devuelve con el formato apropiado por defecto. Si pasa *format*, puede forzar que la cadena resultante tenga un formato específico. El parámetro opcional *addTime* añade una hora a una fecha en un formato combinado. Sólo puede utilizarse cuando el parámetro *expression* es una fecha (ver abajo). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/trim.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/trim.md index 5cb9ac27fad57e..44a293403f43d9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/trim.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/trim.md @@ -31,7 +31,7 @@ To return a new string with whitespace trimmed from just one end, use [`Trim sta En el parámetro *aString*, puede pasar cualquier expresión de tipo texto. Será dejado sin tocar por el comando. -El comando devuelve la versión recortada de la cadena *aString*. If there is no whitespace at any end of *aString*, the returned string is identical as the one passed in parameter. +El comando devuelve la versión recortada de la cadena *aString*. Si no hay espacios en blanco en ningún extremo de *aString*, la cadena devuelta es idéntica a la pasada como parámetro. :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/wa-get-context.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/wa-get-context.md index 98329331b077f7..366311d7124bd5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/wa-get-context.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/wa-get-context.md @@ -18,7 +18,7 @@ displayed_sidebar: docs ### Descripción -El comando `WA Get context` recupera el objeto de contexto definido para `$4d` en el área Web designada por los parámetros \* y *object* utilizando [`WA SET CONTEXT`](./wa-set-context.md). If `WA SET CONTEXT` was not called for the web area the command returns `null`. +El comando `WA Get context` recupera el objeto de contexto definido para `$4d` en el área Web designada por los parámetros \* y *object* utilizando [`WA SET CONTEXT`](./wa-set-context.md). Si `WA SET CONTEXT` no fue llamado para el área web, el comando devuelve `null`. :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/settings/client-server.md b/i18n/es/docusaurus-plugin-content-docs/version-21/settings/client-server.md index b03e5465634991..a2115ea9a211c6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/settings/client-server.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/settings/client-server.md @@ -92,7 +92,7 @@ En caso de modificación, deberá reiniciar la aplicación para que se tenga en :::note -This option is not available when the [QUIC](#network-layer) network layer is selected. +Esta opción no está disponible cuando se selecciona la capa de red [QUIC](#network-layer). ::: @@ -110,7 +110,7 @@ Cuando esta opción está marcada, todas las máquinas remotas 4D que se conecta :::note -This option is not available when the [QUIC](#network-layer) network layer option is selected. +Esta opción no está disponible cuando se selecciona la opción capa de red [QUIC](#network-layer). ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/settings/web.md b/i18n/es/docusaurus-plugin-content-docs/version-21/settings/web.md index 052d2beaf51c2c..d827ba37fa6121 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/settings/web.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/settings/web.md @@ -124,7 +124,7 @@ Define el sistema de autenticación que desea aplicar a su servidor web. Se prop - Contraseñas con protocolo BASIC - Contraseñas con protocolo DIGEST -Se recomienda utilizar la autenticación **personalizada**. See [**Authentication**](../WebServer/authentication.md) section. +Se recomienda utilizar la autenticación **personalizada**. Ver la sección[**autenticación**](../WebServer/authentication.md). #### Generic Web User diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/privileges.md index 8357f0fdab2d8c..c9fe27abd154c3 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -27,27 +27,21 @@ Si un utilisateur tente d'exécuter une action et ne dispose pas des droits d'ac Vous pouvez assigner des actions de permission spécifiques aux ressources suivantes dans votre projet : -- le datastore -- une dataclass -- un attribut (y compris calculé et alias) -- une fonction de classe du modèle de données -- une fonction [singleton](../REST/$singleton.md) +- the [datastore](../ORDA/dsMapping.md#datastore) +- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) +- functions of the [data model classes](../ORDA/ordaClasses.md) +- [singleton](../REST/$singleton.md) functions Chaque fois qu'on accède à une ressource dans une session (quelle que soit la manière dont on y accède), 4D vérifie que la session dispose des autorisations appropriées et rejette l'accès s'il n'est pas autorisé. -Une action de permission définie à un certain niveau est héritée par défaut aux niveaux inférieurs, mais plusieurs niveaux de permissions peuvent être définis : - -- Une action de permission définie au niveau du datastore est automatiquement assignée à toutes les dataclass. L'action de permission *execute* définie au niveau du datastore s'applique à toutes les fonctions du projet, y compris aux fonctions [singleton](../REST/$singleton.md). -- Une action de permission définie au niveau dataclass remplace le paramétrage du datastore (le cas échéant). Par défaut, tous les attributs de la dataclass héritent des permissions de la dataclass. -- Contrairement aux permissions des dataclass, une action de permission définie au niveau de l'attribut ne remplace pas la permission de la dataclass parente, mais y est ajoutée. Par exemple, si vous avez attribué le privilège "général" à une dataclass et le privilège "détail" à un attribut de la dataclass, les deux privilèges, "général" et "détail", doivent être définis dans la session afin d'accéder à l'attribut. +## Permissions -:::info +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Each permission can be given to one or more [privileges](#privileges-and-roles). -Les permissions contrôlent l'accès aux objets ou fonctions du datastore. Si vous voulez filtrer les données de lecture selon certains critères, vous pouvez envisager d'utiliser les [entity selections restreintes](entities.md#restricting-entity-selections) qui peuvent être plus appropriées dans ce cas. +When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). -::: - -## Actions de permission +### Actions de permission Les actions disponibles sont liées à la ressource cible. @@ -73,6 +67,65 @@ Les actions disponibles sont liées à la ressource cible. Le paramétrage des permissions nécessite d'être cohérent, en particulier les permissions **update** et **drop** ont également besoin d'une permission **read** (mais **create** n'en a pas besoin). +### Inherited permissions + +Une action de permission définie à un certain niveau est héritée par défaut aux niveaux inférieurs, mais plusieurs niveaux de permissions peuvent être définis : + +- Une action de permission définie au niveau du datastore est automatiquement assignée à toutes les dataclass. L'action de permission *execute* définie au niveau du datastore s'applique à toutes les fonctions du projet, y compris aux fonctions [singleton](../REST/$singleton.md). +- Une action de permission définie au niveau dataclass remplace le paramétrage du datastore (le cas échéant). Par défaut, tous les attributs de la dataclass héritent des permissions de la dataclass. +- Contrairement aux permissions des dataclass, une action de permission définie au niveau de l'attribut ne remplace pas la permission de la dataclass parente, mais y est ajoutée. Par exemple, si vous avez attribué le privilège "général" à une dataclass et le privilège "détail" à un attribut de la dataclass, les deux privilèges, "général" et "détail", doivent être définis dans la session afin d'accéder à l'attribut. + +:::info + +Les permissions contrôlent l'accès aux objets ou fonctions du datastore. Si vous voulez filtrer les données de lecture selon certains critères, vous pouvez envisager d'utiliser les [entity selections restreintes](entities.md#restricting-entity-selections) qui peuvent être plus appropriées dans ce cas. + +::: + +### Attribution de permissions aux fonctions de la classe ORDA + +Lors de la configuration des permissions, les fonctions de classe ORDA sont déclarées dans l'élément `applyTo` en utilisant la syntaxe suivante : + +```json +. +``` + +Par exemple, si vous voulez appliquer une permission à la fonction suivante : + +```4d +// cs.CityEntity class +Class extends Entity + Function getPopulation() : Integer + ... +``` + +... vous devez écrire : + +```json +"applyTo":"City.getPopulation" +``` + +Cela signifie que vous ne pouvez pas utiliser les mêmes noms de fonctions dans les différentes classes ORDA (entité, entity selection, dataclass) si vous souhaitez que des privilèges leur soient attribués. Dans ce cas, vous devez utiliser des noms de fonction distincts. Par exemple, si vous avez créé une fonction "drop" dans les classes `cs.CityEntity` et `cs.CitySelection`, vous devez leur donner des noms différents tels que `dropEntity()` et `dropSelection()`. Vous pouvez ensuite écrire dans le fichier "roles.json" : + +```json + "permissions": { + "allowed": [ + { + "applyTo": "City.dropEntity", + "type": "method", + "promote": [ + "name" + ] + }, + { + "applyTo": "City.dropSelection", + "type": "method", + "promote": [ + "name" + ] + } + ] +``` + ## Privilèges et Rôles Un **privilège** est la capacité technique d'exécuter des **actions** sur des **ressources**, tandis qu'un **rôle** est un privilège public destiné à être utilisé par un administrateur. Fondamentalement, un rôle rassemble plusieurs privilèges pour définir un profil utilisateur métier. Par exemple, "manageInvoices" pourrait être un privilège tandis que "secrétaire" pourrait être un rôle (qui inclut "manageInvoices" et d'autres privilèges). @@ -111,142 +164,106 @@ exposed Function authenticate($identifier : Text; $password : Text)->$result : T ## `roles.json` -Le fichier `roles.json` décrit l'ensemble des paramètres de sécurité du projet. - -### Fichier par défaut +The `roles.json` file describes the whole web security settings for the project. La syntaxe du fichier `roles.json` est la suivante: + +| Nom de propriété | | | Type | Obligatoire | Description | +| ------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| privileges | | | Collection d'objets `privilege` | X | Liste de privilèges définis | +| | \[].privilege | | Text | | Nom de privilège | +| | \[].includes | | Collection de chaînes | | Liste de noms de privilèges inclus | +| roles | | | Collection d'objets `role` | | Liste de rôles définis | +| | \[].role | | Text | | Nom de rôle | +| | \[].privileges | | Collection de chaînes | | Liste de noms de privilèges inclus | +| permissions | | | Object | X | Liste d'actions autorisées | +| | allowed | | Collection d'objets `permission` | | Liste de permissions autorisées | +| | | \[].applyTo | Text | X | Nom de [ressource](#resources) cible | +| | | \[].type | Text | X | Type de [ressource](#ressources) : "datastore", "dataclass", "attribute", "method", "singletonMethod", "singleton" | +| | | \[].read | Collection de chaînes | | Liste de privilèges | +| | | \[].create | Collection de chaînes | | Liste de privilèges | +| | | \[].update | Collection de chaînes | | Liste de privilèges | +| | | \[].drop | Collection de chaînes | | Liste de privilèges | +| | | \[].execute | Collection de chaînes | | Liste de privilèges | +| | | \[].promote | Collection de chaînes | | Liste de privilèges | +| restrictedByDefault | | | Boolean | | If true, access to resources without explicit permissions is denied | +| forceLogin | | | Boolean | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | -Lorsque vous créez un projet, un fichier `roles.json` par défaut est créé à l'emplacement suivant : `/Project/Sources/` (voir la section [Architecture](../Project/architecture.md#sources)). +:::caution Rappel -Le fichier par défaut a le contenu suivant : +- Le nom de privilège "WebAdmin" est réservé à l'application. Il est déconseillé d'utiliser ce nom pour les privilèges personnalisés. +- `privileges` and `roles` names are case-insensitive. -```json title="/Project/Sources/roles.json" +::: -{ - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - - "roles": [], - - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": ["all"], - "create": ["all"], - "update": ["all"], - "drop": ["all"], - "execute": ["all"], - "promote": ["all"] - } - ] - }, - - "forceLogin": true +### Default File Location and Content -} +When a new project is created, a default `roles.json` file is generated at: +``` +/Project/Sources/ ``` -Pour un niveau de sécurité maximal, le privilège "all" est attribué à toutes les autorisations dans le datastore, ce qui signifie que l'accès aux données sur l'ensemble de l'objet `ds` est désactivé par défaut. Le principe est le suivant : attribuer une autorisation, c'est comme mettre un verrou sur une porte. Seules les sessions disposant d'un privilège et de la clé correspondante (c'est-à-dire d'une permission) pourront ouvrir la serrure. -Il est recommandé de ne pas modifier ou utiliser ce privilège de verrouillage, mais d'ajouter des permissions spécifiques à chaque ressource que vous souhaitez rendre disponible à partir de requêtes web ou REST ([voir l'exemple ci-dessous](#example-of-privilege-configuration)). +Voir la section [Architecture](../Project/architecture.md#sources) . -:::caution +Default content: -Si aucun paramètre spécifique n'est défini dans le fichier `roles.json`, les accès ne sont pas limités. Cette configuration vous permet de développer l'application sans avoir à vous soucier des accès, mais est fortement déconseillée dans un environnement de production. +```json title="/Project/Sources/roles.json" -::: +{ + "privileges": [ + ], + "roles": [ + ], + "permissions": { + "allowed": [ + { + "applyTo": "ds", + "type": "datastore", + "read": [], + "create": [], + "update": [], + "drop": [], + "execute": [], + "promote": [] + } + ] + }, + "restrictedByDefault": false, + "forceLogin": false +} +``` :::note Compatibilité Dans les versions précédentes, le fichier `roles.json` n'était pas créé par défaut. Depuis 4D 20 R6, lors de l'ouverture d'un projet existant qui ne contient pas de fichier `roles.json` ou les paramètres `"forceLogin" : true`, le bouton **Activer l'authentification REST via la fonction ds.authentify()** est disponible dans la page [**Fonctionnalités Web** de la boîte de dialogue Paramètres](../settings/web.md#access). Ce bouton met automatiquement à jour vos paramètres de sécurité (vous devrez peut-être modifier votre code, [voir cet article de blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). + ::: :::note Qodly Studio -Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](../WebServer/qodly-studio.md#force-login) dans l'onglet Privileges. +In Qodly Studio for 4D, the login mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Roles and Privileges panel. ::: -### Syntaxe - -La syntaxe du fichier `roles.json` est la suivante: - -| Nom de propriété | | | Type | Obligatoire | Description | -| ---------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| privileges | | | Collection d'objets `privilege` | X | Liste de privilèges définis | -| | \[].privilege | | Text | | Nom de privilège | -| | \[].includes | | Collection de chaînes | | Liste de noms de privilèges inclus | -| roles | | | Collection d'objets `role` | | Liste de rôles définis | -| | \[].role | | Text | | Nom de rôle | -| | \[].privileges | | Collection de chaînes | | Liste de noms de privilèges inclus | -| permissions | | | Object | X | Liste d'actions autorisées | -| | allowed | | Collection d'objets `permission` | | Liste de permissions autorisées | -| | | \[].applyTo | Text | X | Nom de [ressource](#resources) cible | -| | | \[].type | Text | X | Type de [ressource](#ressources) : "datastore", "dataclass", "attribute", "method", "singletonMethod", "singleton" | -| | | \[].read | Collection de chaînes | | Liste de privilèges | -| | | \[].create | Collection de chaînes | | Liste de privilèges | -| | | \[].update | Collection de chaînes | | Liste de privilèges | -| | | \[].drop | Collection de chaînes | | Liste de privilèges | -| | | \[].execute | Collection de chaînes | | Liste de privilèges | -| | | \[].promote | Collection de chaînes | | Liste de privilèges | -| forceLogin | | | Boolean | | True pour activer le [mode "forceLogin"](../REST/authUsers.md#force-login-mode) | - -:::caution Rappel - -- Le nom de privilège "WebAdmin" est réservé à l'application. Il est déconseillé d'utiliser ce nom pour les privilèges personnalisés. -- Les noms `privileges` et `roles` sont insensibles à la casse. +## Restriction Modes -::: +The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): -#### Attribution de permissions aux fonctions de la classe ORDA +- **Unrestricted mode** (`restrictedByDefault`: **false**): Resources without defined permissions are accessible to all requests. This mode is suitable for development environments where access can be gradually restricted. +- **Restricted mode** (`restrictedByDefault`: **true**): Resources without defined permissions are blocked by default. This mode is recommended for production environments where access must be explicitly granted. -Lors de la configuration des permissions, les fonctions de classe ORDA sont déclarées dans l'élément `applyTo` en utilisant la syntaxe suivante : - -```json -. -``` +:::note Compatibilité -Par exemple, si vous voulez appliquer une permission à la fonction suivante : +- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Keep in mind that this configuration is tailored for quick start and smooth development. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. -```4d -// cs.CityEntity class -Class extends Entity - Function getPopulation() : Integer - ... -``` +::: -... vous devez écrire : +### Recommended Configuration -```json -"applyTo":"City.getPopulation" -``` +Depending on your environment, the recommended settings are: -Cela signifie que vous ne pouvez pas utiliser les mêmes noms de fonctions dans les différentes classes ORDA (entité, entity selection, dataclass) si vous souhaitez que des privilèges leur soient attribués. Dans ce cas, vous devez utiliser des noms de fonction distincts. Par exemple, si vous avez créé une fonction "drop" dans les classes `cs.CityEntity` et `cs.CitySelection`, vous devez leur donner des noms différents tels que `dropEntity()` et `dropSelection()`. Vous pouvez ensuite écrire dans le fichier "roles.json" : - -```json - "permissions": { - "allowed": [ - { - "applyTo": "City.dropEntity", - "type": "method", - "promote": [ - "name" - ] - }, - { - "applyTo": "City.dropSelection", - "type": "method", - "promote": [ - "name" - ] - } - ] -``` +- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. This ensures maximum security by requiring user authentication and explicitly defined permissions for resource access. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. ### `Roles_Errors.json` @@ -267,93 +284,28 @@ End if ## Exemple de configuration de privilèges -La bonne pratique est de garder tous les accès aux données verrouillés par défaut grâce au privilège "all" et de configurer le fichier `roles.json` pour n'ouvrir les parties contrôlées qu'aux sessions autorisées. Par exemple, pour autoriser certains accès aux sessions "guest" : - ```json title="/Project/Sources/roles.json" { - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - "roles": [], - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": [ - "all" - ], - "create": [ - "all" - ], - "update": [ - "all" - ], - "drop": [ - "all" - ], - "execute": [ - "all" - ], - "promote": [ - "all" - ] - }, - { - "applyTo": "ds.loginAs", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.hasPrivilege", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.clearPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.isGuest", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.getPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.setAllPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "mySingletonClass.createID", - "type": "singletonMethod", - "execute": [ - "guest" - ] - } - ] - }, - "forceLogin": true + "forceLogin": true, + "restrictedByDefault": true, + "permissions": { + "allowed": [ + { + "applyTo": "People", + "type": "dataclass", + "read": [ + "viewPeople" + ] + } + ] + }, + "privileges": [ + { + "privilege": "viewPeople", + "includes": [] + } + ], + "roles": [] } ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/REST/configuration.md b/i18n/fr/docusaurus-plugin-content-docs/current/REST/configuration.md index e287a8275b6b29..82420294acf7b9 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/REST/configuration.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/REST/configuration.md @@ -70,9 +70,9 @@ Pour supprimer l'exposition REST d'un champ : 1. Affichez l'Inspecteur de champ dans l'Editeur de structure et sélectionnez le champ à modifier. -2. Décochez la case **Exposer en tant que ressource REST** pour le champ. - ![alt-text](../assets/en/REST/field.png) - Répétez cette opération pour chaque champ dont l'exposition doit être modifiée. +2. Uncheck the **Expose as REST resource** for the field.
    + ![alt-text](../assets/en/REST/field.png)
    + Repeat this for each field whose exposure needs to be modified. > Pour qu'un champ soit accessible via REST, la table parente doit l'être également. Si la table parente n'est pas exposée, aucun de ses champs ne le sera, quel que soit leur statut. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md index b65b3976b2ba52..75bc8ba7bb479c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -11,6 +11,14 @@ Lisez [**Les nouveautés de 4D 20**](https://blog.4d.com/fr-whats-new-in-4d-v20/ ::: +## 4D 20.8 LTS + +#### Points forts + +- [**Fixed bugs list**](https://bugs.4d.com/fixes?version=20.8): list of all bugs that have been fixed in 4D 20.8 LTS. + + + ## 4D 20.7 LTS #### Points forts diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md index f9cd498f3e85e2..8c81601b612bfb 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -16,6 +16,7 @@ Lisez [**Les nouveautés de 4D 21**](https://blog.4d.com/fe-whats-new-in-4d-v21/ - possibilité de définir des [gestionnaires de requêtes HTTP](../WebServer/http-request-handler.md) en utilisant une propriété `handlers` dans le paramètre *settings* de la fonction [`start()`](../API/WebServerClass.md#start) du serveur Web, - l'objet serveur Web contient de nouvelles propriétés [`rules`](../API/WebServerClass.md#rules) et [`handlers`](../API/WebServerClass.md#handlers). - Nouveaux [événements ORDA sur les données](../ORDA/orda-events.md) : validateSave, saving, afterSave, validateDrop, dropping, afterDrop. +- Support of the new [`restrictedByDefault` property](../ORDA/privileges.md#restriction-modes) in the `roles.json` file to block access by default to all resources without explicit permission. - Nouvelle option permettant d'utiliser les certificats du Windows Certificate Store au lieu d'un dossier de certificats locaux dans les classes [`HTTPRequest`](../API/HTTPRequestClass.md#4dhttprequestnew) et [`HTTPAgent`](../API/HTTPAgentClass.md#4dhttpagentnew). - Client/serveur : - Vous pouvez afficher des pages Qodly dans des zones Web et [partager la session du client distant](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index 8357f0fdab2d8c..c9fe27abd154c3 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -27,27 +27,21 @@ Si un utilisateur tente d'exécuter une action et ne dispose pas des droits d'ac Vous pouvez assigner des actions de permission spécifiques aux ressources suivantes dans votre projet : -- le datastore -- une dataclass -- un attribut (y compris calculé et alias) -- une fonction de classe du modèle de données -- une fonction [singleton](../REST/$singleton.md) +- the [datastore](../ORDA/dsMapping.md#datastore) +- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) +- functions of the [data model classes](../ORDA/ordaClasses.md) +- [singleton](../REST/$singleton.md) functions Chaque fois qu'on accède à une ressource dans une session (quelle que soit la manière dont on y accède), 4D vérifie que la session dispose des autorisations appropriées et rejette l'accès s'il n'est pas autorisé. -Une action de permission définie à un certain niveau est héritée par défaut aux niveaux inférieurs, mais plusieurs niveaux de permissions peuvent être définis : - -- Une action de permission définie au niveau du datastore est automatiquement assignée à toutes les dataclass. L'action de permission *execute* définie au niveau du datastore s'applique à toutes les fonctions du projet, y compris aux fonctions [singleton](../REST/$singleton.md). -- Une action de permission définie au niveau dataclass remplace le paramétrage du datastore (le cas échéant). Par défaut, tous les attributs de la dataclass héritent des permissions de la dataclass. -- Contrairement aux permissions des dataclass, une action de permission définie au niveau de l'attribut ne remplace pas la permission de la dataclass parente, mais y est ajoutée. Par exemple, si vous avez attribué le privilège "général" à une dataclass et le privilège "détail" à un attribut de la dataclass, les deux privilèges, "général" et "détail", doivent être définis dans la session afin d'accéder à l'attribut. +## Permissions -:::info +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Each permission can be given to one or more [privileges](#privileges-and-roles). -Les permissions contrôlent l'accès aux objets ou fonctions du datastore. Si vous voulez filtrer les données de lecture selon certains critères, vous pouvez envisager d'utiliser les [entity selections restreintes](entities.md#restricting-entity-selections) qui peuvent être plus appropriées dans ce cas. +When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). -::: - -## Actions de permission +### Actions de permission Les actions disponibles sont liées à la ressource cible. @@ -73,6 +67,65 @@ Les actions disponibles sont liées à la ressource cible. Le paramétrage des permissions nécessite d'être cohérent, en particulier les permissions **update** et **drop** ont également besoin d'une permission **read** (mais **create** n'en a pas besoin). +### Inherited permissions + +Une action de permission définie à un certain niveau est héritée par défaut aux niveaux inférieurs, mais plusieurs niveaux de permissions peuvent être définis : + +- Une action de permission définie au niveau du datastore est automatiquement assignée à toutes les dataclass. L'action de permission *execute* définie au niveau du datastore s'applique à toutes les fonctions du projet, y compris aux fonctions [singleton](../REST/$singleton.md). +- Une action de permission définie au niveau dataclass remplace le paramétrage du datastore (le cas échéant). Par défaut, tous les attributs de la dataclass héritent des permissions de la dataclass. +- Contrairement aux permissions des dataclass, une action de permission définie au niveau de l'attribut ne remplace pas la permission de la dataclass parente, mais y est ajoutée. Par exemple, si vous avez attribué le privilège "général" à une dataclass et le privilège "détail" à un attribut de la dataclass, les deux privilèges, "général" et "détail", doivent être définis dans la session afin d'accéder à l'attribut. + +:::info + +Les permissions contrôlent l'accès aux objets ou fonctions du datastore. Si vous voulez filtrer les données de lecture selon certains critères, vous pouvez envisager d'utiliser les [entity selections restreintes](entities.md#restricting-entity-selections) qui peuvent être plus appropriées dans ce cas. + +::: + +### Attribution de permissions aux fonctions de la classe ORDA + +Lors de la configuration des permissions, les fonctions de classe ORDA sont déclarées dans l'élément `applyTo` en utilisant la syntaxe suivante : + +```json +. +``` + +Par exemple, si vous voulez appliquer une permission à la fonction suivante : + +```4d +// cs.CityEntity class +Class extends Entity + Function getPopulation() : Integer + ... +``` + +... vous devez écrire : + +```json +"applyTo":"City.getPopulation" +``` + +Cela signifie que vous ne pouvez pas utiliser les mêmes noms de fonctions dans les différentes classes ORDA (entité, entity selection, dataclass) si vous souhaitez que des privilèges leur soient attribués. Dans ce cas, vous devez utiliser des noms de fonction distincts. Par exemple, si vous avez créé une fonction "drop" dans les classes `cs.CityEntity` et `cs.CitySelection`, vous devez leur donner des noms différents tels que `dropEntity()` et `dropSelection()`. Vous pouvez ensuite écrire dans le fichier "roles.json" : + +```json + "permissions": { + "allowed": [ + { + "applyTo": "City.dropEntity", + "type": "method", + "promote": [ + "name" + ] + }, + { + "applyTo": "City.dropSelection", + "type": "method", + "promote": [ + "name" + ] + } + ] +``` + ## Privilèges et Rôles Un **privilège** est la capacité technique d'exécuter des **actions** sur des **ressources**, tandis qu'un **rôle** est un privilège public destiné à être utilisé par un administrateur. Fondamentalement, un rôle rassemble plusieurs privilèges pour définir un profil utilisateur métier. Par exemple, "manageInvoices" pourrait être un privilège tandis que "secrétaire" pourrait être un rôle (qui inclut "manageInvoices" et d'autres privilèges). @@ -111,142 +164,106 @@ exposed Function authenticate($identifier : Text; $password : Text)->$result : T ## `roles.json` -Le fichier `roles.json` décrit l'ensemble des paramètres de sécurité du projet. - -### Fichier par défaut +The `roles.json` file describes the whole web security settings for the project. La syntaxe du fichier `roles.json` est la suivante: + +| Nom de propriété | | | Type | Obligatoire | Description | +| ------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| privileges | | | Collection d'objets `privilege` | X | Liste de privilèges définis | +| | \[].privilege | | Text | | Nom de privilège | +| | \[].includes | | Collection de chaînes | | Liste de noms de privilèges inclus | +| roles | | | Collection d'objets `role` | | Liste de rôles définis | +| | \[].role | | Text | | Nom de rôle | +| | \[].privileges | | Collection de chaînes | | Liste de noms de privilèges inclus | +| permissions | | | Object | X | Liste d'actions autorisées | +| | allowed | | Collection d'objets `permission` | | Liste de permissions autorisées | +| | | \[].applyTo | Text | X | Nom de [ressource](#resources) cible | +| | | \[].type | Text | X | Type de [ressource](#ressources) : "datastore", "dataclass", "attribute", "method", "singletonMethod", "singleton" | +| | | \[].read | Collection de chaînes | | Liste de privilèges | +| | | \[].create | Collection de chaînes | | Liste de privilèges | +| | | \[].update | Collection de chaînes | | Liste de privilèges | +| | | \[].drop | Collection de chaînes | | Liste de privilèges | +| | | \[].execute | Collection de chaînes | | Liste de privilèges | +| | | \[].promote | Collection de chaînes | | Liste de privilèges | +| restrictedByDefault | | | Boolean | | If true, access to resources without explicit permissions is denied | +| forceLogin | | | Boolean | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | -Lorsque vous créez un projet, un fichier `roles.json` par défaut est créé à l'emplacement suivant : `/Project/Sources/` (voir la section [Architecture](../Project/architecture.md#sources)). +:::caution Rappel -Le fichier par défaut a le contenu suivant : +- Le nom de privilège "WebAdmin" est réservé à l'application. Il est déconseillé d'utiliser ce nom pour les privilèges personnalisés. +- `privileges` and `roles` names are case-insensitive. -```json title="/Project/Sources/roles.json" +::: -{ - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - - "roles": [], - - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": ["all"], - "create": ["all"], - "update": ["all"], - "drop": ["all"], - "execute": ["all"], - "promote": ["all"] - } - ] - }, - - "forceLogin": true +### Default File Location and Content -} +When a new project is created, a default `roles.json` file is generated at: +``` +/Project/Sources/ ``` -Pour un niveau de sécurité maximal, le privilège "all" est attribué à toutes les autorisations dans le datastore, ce qui signifie que l'accès aux données sur l'ensemble de l'objet `ds` est désactivé par défaut. Le principe est le suivant : attribuer une autorisation, c'est comme mettre un verrou sur une porte. Seules les sessions disposant d'un privilège et de la clé correspondante (c'est-à-dire d'une permission) pourront ouvrir la serrure. -Il est recommandé de ne pas modifier ou utiliser ce privilège de verrouillage, mais d'ajouter des permissions spécifiques à chaque ressource que vous souhaitez rendre disponible à partir de requêtes web ou REST ([voir l'exemple ci-dessous](#example-of-privilege-configuration)). +Voir la section [Architecture](../Project/architecture.md#sources) . -:::caution +Default content: -Si aucun paramètre spécifique n'est défini dans le fichier `roles.json`, les accès ne sont pas limités. Cette configuration vous permet de développer l'application sans avoir à vous soucier des accès, mais est fortement déconseillée dans un environnement de production. +```json title="/Project/Sources/roles.json" -::: +{ + "privileges": [ + ], + "roles": [ + ], + "permissions": { + "allowed": [ + { + "applyTo": "ds", + "type": "datastore", + "read": [], + "create": [], + "update": [], + "drop": [], + "execute": [], + "promote": [] + } + ] + }, + "restrictedByDefault": false, + "forceLogin": false +} +``` :::note Compatibilité Dans les versions précédentes, le fichier `roles.json` n'était pas créé par défaut. Depuis 4D 20 R6, lors de l'ouverture d'un projet existant qui ne contient pas de fichier `roles.json` ou les paramètres `"forceLogin" : true`, le bouton **Activer l'authentification REST via la fonction ds.authentify()** est disponible dans la page [**Fonctionnalités Web** de la boîte de dialogue Paramètres](../settings/web.md#access). Ce bouton met automatiquement à jour vos paramètres de sécurité (vous devrez peut-être modifier votre code, [voir cet article de blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). + ::: :::note Qodly Studio -Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](../WebServer/qodly-studio.md#force-login) dans l'onglet Privileges. +In Qodly Studio for 4D, the login mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Roles and Privileges panel. ::: -### Syntaxe - -La syntaxe du fichier `roles.json` est la suivante: - -| Nom de propriété | | | Type | Obligatoire | Description | -| ---------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| privileges | | | Collection d'objets `privilege` | X | Liste de privilèges définis | -| | \[].privilege | | Text | | Nom de privilège | -| | \[].includes | | Collection de chaînes | | Liste de noms de privilèges inclus | -| roles | | | Collection d'objets `role` | | Liste de rôles définis | -| | \[].role | | Text | | Nom de rôle | -| | \[].privileges | | Collection de chaînes | | Liste de noms de privilèges inclus | -| permissions | | | Object | X | Liste d'actions autorisées | -| | allowed | | Collection d'objets `permission` | | Liste de permissions autorisées | -| | | \[].applyTo | Text | X | Nom de [ressource](#resources) cible | -| | | \[].type | Text | X | Type de [ressource](#ressources) : "datastore", "dataclass", "attribute", "method", "singletonMethod", "singleton" | -| | | \[].read | Collection de chaînes | | Liste de privilèges | -| | | \[].create | Collection de chaînes | | Liste de privilèges | -| | | \[].update | Collection de chaînes | | Liste de privilèges | -| | | \[].drop | Collection de chaînes | | Liste de privilèges | -| | | \[].execute | Collection de chaînes | | Liste de privilèges | -| | | \[].promote | Collection de chaînes | | Liste de privilèges | -| forceLogin | | | Boolean | | True pour activer le [mode "forceLogin"](../REST/authUsers.md#force-login-mode) | - -:::caution Rappel - -- Le nom de privilège "WebAdmin" est réservé à l'application. Il est déconseillé d'utiliser ce nom pour les privilèges personnalisés. -- Les noms `privileges` et `roles` sont insensibles à la casse. +## Restriction Modes -::: +The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): -#### Attribution de permissions aux fonctions de la classe ORDA +- **Unrestricted mode** (`restrictedByDefault`: **false**): Resources without defined permissions are accessible to all requests. This mode is suitable for development environments where access can be gradually restricted. +- **Restricted mode** (`restrictedByDefault`: **true**): Resources without defined permissions are blocked by default. This mode is recommended for production environments where access must be explicitly granted. -Lors de la configuration des permissions, les fonctions de classe ORDA sont déclarées dans l'élément `applyTo` en utilisant la syntaxe suivante : - -```json -. -``` +:::note Compatibilité -Par exemple, si vous voulez appliquer une permission à la fonction suivante : +- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Keep in mind that this configuration is tailored for quick start and smooth development. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. -```4d -// cs.CityEntity class -Class extends Entity - Function getPopulation() : Integer - ... -``` +::: -... vous devez écrire : +### Recommended Configuration -```json -"applyTo":"City.getPopulation" -``` +Depending on your environment, the recommended settings are: -Cela signifie que vous ne pouvez pas utiliser les mêmes noms de fonctions dans les différentes classes ORDA (entité, entity selection, dataclass) si vous souhaitez que des privilèges leur soient attribués. Dans ce cas, vous devez utiliser des noms de fonction distincts. Par exemple, si vous avez créé une fonction "drop" dans les classes `cs.CityEntity` et `cs.CitySelection`, vous devez leur donner des noms différents tels que `dropEntity()` et `dropSelection()`. Vous pouvez ensuite écrire dans le fichier "roles.json" : - -```json - "permissions": { - "allowed": [ - { - "applyTo": "City.dropEntity", - "type": "method", - "promote": [ - "name" - ] - }, - { - "applyTo": "City.dropSelection", - "type": "method", - "promote": [ - "name" - ] - } - ] -``` +- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. This ensures maximum security by requiring user authentication and explicitly defined permissions for resource access. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. ### `Roles_Errors.json` @@ -267,93 +284,28 @@ End if ## Exemple de configuration de privilèges -La bonne pratique est de garder tous les accès aux données verrouillés par défaut grâce au privilège "all" et de configurer le fichier `roles.json` pour n'ouvrir les parties contrôlées qu'aux sessions autorisées. Par exemple, pour autoriser certains accès aux sessions "guest" : - ```json title="/Project/Sources/roles.json" { - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - "roles": [], - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": [ - "all" - ], - "create": [ - "all" - ], - "update": [ - "all" - ], - "drop": [ - "all" - ], - "execute": [ - "all" - ], - "promote": [ - "all" - ] - }, - { - "applyTo": "ds.loginAs", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.hasPrivilege", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.clearPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.isGuest", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.getPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.setAllPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "mySingletonClass.createID", - "type": "singletonMethod", - "execute": [ - "guest" - ] - } - ] - }, - "forceLogin": true + "forceLogin": true, + "restrictedByDefault": true, + "permissions": { + "allowed": [ + { + "applyTo": "People", + "type": "dataclass", + "read": [ + "viewPeople" + ] + } + ] + }, + "privileges": [ + { + "privilege": "viewPeople", + "includes": [] + } + ], + "roles": [] } ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/SystemWorkerClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/SystemWorkerClass.md index 89c889f5096c76..ae195a59ea79d4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/SystemWorkerClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/SystemWorkerClass.md @@ -161,7 +161,7 @@ var $sw : 4D.SystemWorker $sw:=4D.SystemWorker.new($mydoc) ``` -4. カレントディレクトリでコマンドを実行し、メッセージそ送信します: +4. カレントディレクトリでコマンドを実行し、メッセージを送信します: ```4d var $param : Object diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/privileges.md index 7c132e1778a823..cd4fbfc0254764 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -27,27 +27,21 @@ Webユーザーまたは RESTユーザーがログインすると、そのセッ プロジェクト内の以下のリソースに対して、許諾アクションと権限名を割り当てることができます (この設定をパーミッションと呼びます): -- データストア -- データクラス -- 属性 (計算属性およびエイリアス属性を含む) -- データモデルクラス関数 -- [シングルトン](../REST/$singleton.md)関数 +- the [datastore](../ORDA/dsMapping.md#datastore) +- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) +- functions of the [data model classes](../ORDA/ordaClasses.md) +- [singleton](../REST/$singleton.md) functions セッションがリソースにアクセスするたびに (アクセス形式に関係なく)、4D はセッションの権限を確認し、許可されていない場合にはアクセスを拒否します。 -あるレベルにおいて定義されたパーミッションは基本的に下位レベルに継承されますが、パーミッションは複数のレベルで設定することもできます: - -- データストアレベルで定義されたパーミッションは、自動的にすべてのデータクラスに割り当てられます。 データストアレベルで定義されたパーミッションは、自動的にすべてのデータクラスに割り当てられます。 データストアレベルで定義された*execute* 権限アクションは、[シングルトン](../REST/$singleton.md) 関数を含めてプロジェクトの全ての関数に対して適用されます。 -- データクラスレベルで定義されたパーミッションは、データストアの設定をオーバーライドします (あれば)。 デフォルトでは、データクラスのすべての属性が、データクラスのパーミッションを継承します。 -- データクラスとは異なり、属性レベルで定義されたパーミッションは、親のデータクラスの設定をオーバーライドするのではなく、それに追加されます。 たとえば、同じ許諾アクションに対し、データクラスのレベルでは "general" という権限名を、データクラスの属性のレベルでは "detail" という権限名を割り当てた場合、その属性にアクセスするには、セッションに "general" と "detail" の両方の権限が設定されている必要があります。 +## 権限 -:::info +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Each permission can be given to one or more [privileges](#privileges-and-roles). -パーミッションは、データストアオブジェクトや関数へのアクセスを制御します。 特定の条件に基づいて読み取りデータをフィルタリングしたい場合は、[制限付エンティティセレクション](entities.md#制限付エンティティセレクション) の利用がより適切かもしれません。 +When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). -::: - -## 許諾アクション +### 許諾アクション 利用可能なアクションは対象となるリソースによります。 @@ -73,6 +67,65 @@ Webユーザーまたは RESTユーザーがログインすると、そのセッ 権限の設定には一貫性が必要です。特に、**update** および **drop** 権限は**read** 権限も必要とします(ただし**create** はそれを必要としません)。 +### Inherited permissions + +あるレベルにおいて定義されたパーミッションは基本的に下位レベルに継承されますが、パーミッションは複数のレベルで設定することもできます: + +- データストアレベルで定義されたパーミッションは、自動的にすべてのデータクラスに割り当てられます。 データストアレベルで定義されたパーミッションは、自動的にすべてのデータクラスに割り当てられます。 データストアレベルで定義された*execute* 権限アクションは、[シングルトン](../REST/$singleton.md) 関数を含めてプロジェクトの全ての関数に対して適用されます。 +- データクラスレベルで定義されたパーミッションは、データストアの設定をオーバーライドします (あれば)。 デフォルトでは、データクラスのすべての属性が、データクラスのパーミッションを継承します。 +- データクラスとは異なり、属性レベルで定義されたパーミッションは、親のデータクラスの設定をオーバーライドするのではなく、それに追加されます。 たとえば、同じ許諾アクションに対し、データクラスのレベルでは "general" という権限名を、データクラスの属性のレベルでは "detail" という権限名を割り当てた場合、その属性にアクセスするには、セッションに "general" と "detail" の両方の権限が設定されている必要があります。 + +:::info + +パーミッションは、データストアオブジェクトや関数へのアクセスを制御します。 特定の条件に基づいて読み取りデータをフィルタリングしたい場合は、[制限付エンティティセレクション](entities.md#制限付エンティティセレクション) の利用がより適切かもしれません。 + +::: + +### ORDA クラス関数の権限の設定 + +When configuring permissions, ORDA class functions are declared in the `applyTo` element using the following syntax: + +```json +. +``` + +For example, if you want to apply a permission to the following function: + +```4d +// cs.CityEntity class +Class extends Entity + Function getPopulation() : Integer + ... +``` + +... 以下のように記述します: + +```json +"applyTo":"City.getPopulation" +``` + +It means that you cannot use the same function names in the various ORDA classes (entity, entity selection, dataclass) if you want them to be assigned privileges. In this case, you need to use distinct function names. For example, if you have created a "drop" function in both `cs.CityEntity` and `cs.CitySelection` classes, you need to give them different names such as `dropEntity()` and `dropSelection()`. You can then write in the "roles.json" file: + +```json + "permissions": { + "allowed": [ + { + "applyTo": "City.dropEntity", + "type": "method", + "promote": [ + "name" + ] + }, + { + "applyTo": "City.dropSelection", + "type": "method", + "promote": [ + "name" + ] + } + ] +``` + ## 権限とロール **権限** とは、**リソース** に対して **アクション** を実行する技術的な能力であり、**ロール** は、管理者が使用するために公開された権限のことです。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 @@ -112,142 +165,106 @@ exposed Function authenticate($identifier : Text; $password : Text)->$result : T ## `roles.json` ファイル -`roles.json` ファイルは、プロジェクトのセキュリティ設定の全体を記述します。 - -### デフォルトファイル +The `roles.json` file describes the whole web security settings for the project. `roles.json` ファイルの構文は次のとおりです: + +| プロパティ名 | | | 型 | 必須 | 説明 | +| ------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------- | -- | ------------------------------------------------------------------------------------------------------------------ | +| privileges | | | `privilege` オブジェクトの Collection | X | 定義された権限のリスト | +| | \[].privilege | | Text | | アクセス権の名称 | +| | \[].includes | | String の Collection | | 内包する権限名のリスト | +| roles | | | `role` オブジェクトの Collection | | 定義されたロールのリスト | +| | \[].role | | Text | | ロール名 | +| | \[].privileges | | String の Collection | | 内包する権限名のリスト | +| permissions | | | Object | X | 設定されたパーミッションのリスト | +| | allowed | | `permission` オブジェクトの Collection | | 許可されたパーミッションのリスト | +| | | \[].applyTo | Text | X | 対象の [リソース](#リソース) 名 | +| | | \[].type | Text | X | [リソース](#リソース) タイプ: "datastore", "dataclass", "attribute", "method", "singletonMethod", "singleton" | +| | | \[].read | String の Collection | | 権限名のリスト | +| | | \[].create | String の Collection | | 権限名のリスト | +| | | \[].update | String の Collection | | 権限名のリスト | +| | | \[].drop | String の Collection | | 権限名のリスト | +| | | \[].execute | String の Collection | | 権限名のリスト | +| | | \[].promote | String の Collection | | 権限名のリスト | +| restrictedByDefault | | | Boolean | | If true, access to resources without explicit permissions is denied | +| forceLogin | | | Boolean | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | -プロジェクトを作成すると、デフォルトの `roles.json` ファイルが次の場所に作成されます: `/Project/Sources/` ([アーキテクチャー](../Project/architecture.md#sources) 参照)。 +:::caution 注記 -デフォルトのファイルには次の内容が含まれています: +- "WebAdmin" 権限名は、アプリケーションによって予約されています。 この名前をカスタムの権限名に使用することは推奨されません。 +- `privileges` and `roles` names are case-insensitive. -```json title="/Project/Sources/roles.json" +::: -{ - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - - "roles": [], - - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": ["all"], - "create": ["all"], - "update": ["all"], - "drop": ["all"], - "execute": ["all"], - "promote": ["all"] - } - ] - }, - - "forceLogin": true +### Default File Location and Content -} +When a new project is created, a default `roles.json` file is generated at: +``` +/Project/Sources/ ``` -For a highest level of security, the "all" privilege is assigned to all permissions in the datastore, thus data access on the whole `ds` object is disabled by default. The principle is as follows: assigning a permission is like putting a lock on a door. Only sessions with privilege having the corresponding key (i.e., a permission) will be able to open the lock. -この "none" 権限はセキュリティのため、使用も変更もしないことが推奨されています。Web や RESTリクエストから利用可能にしたい各リソースには、それ専用の権限を新たに追加することが推奨されています ([以下の例を参照](#権限設定の例))。 +[アーキテクチャー](../Project/architecture.md#sources) を参照ください。 -:::caution +Default content: -`roles.json` ファイルに特定のパラメーターが定義されていない場合、アクセスは制限されません。 これにより、アクセスを気にすることなくアプリケーションを開発することができますが、本番環境では推奨されていません。 +```json title="/Project/Sources/roles.json" -::: +{ + "privileges": [ + ], + "roles": [ + ], + "permissions": { + "allowed": [ + { + "applyTo": "ds", + "type": "datastore", + "read": [], + "create": [], + "update": [], + "drop": [], + "execute": [], + "promote": [] + } + ] + }, + "restrictedByDefault": false, + "forceLogin": false +} +``` :::note 互換性 以前のリリースでは、`roles.json` ファイルはデフォルトで作成されませんでした。 4D 20 R6 以降、`roles.json`ファイルを含まない、または `"forceLogin": true` の設定が含まれていない既存のプロジェクトを開く場合、[設定ダイアログボックスの **Web機能** ページ](../settings/web.md#アクセス権) で **ds.authentify() 関数を通しての REST認証を有効化** ボタンが利用可能になります。 このボタンはセキュリティ設定を自動的にアップグレードします (コードを修正する必要があるかもしれません。[このブログ記事を参照ください](https://blog.4d.com/ja/force-login-becomes-default-for-all-rest-auth))。 + ::: :::note Qodly Studio -Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](../WebServer/qodly-studio.md#force-login) を使用してログインモードを設定することができます。 +In Qodly Studio for 4D, the login mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Roles and Privileges panel. ::: -### シンタックス - -`roles.json` ファイルの構文は次のとおりです: - -| プロパティ名 | | | 型 | 必須 | 説明 | -| ----------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------- | -- | ------------------------------------------------------------------------------------------------------------------ | -| privileges | | | `privilege` オブジェクトの Collection | X | 定義された権限のリスト | -| | \[].privilege | | Text | | アクセス権の名称 | -| | \[].includes | | String の Collection | | 内包する権限名のリスト | -| roles | | | `role` オブジェクトの Collection | | 定義されたロールのリスト | -| | \[].role | | Text | | ロール名 | -| | \[].privileges | | String の Collection | | 内包する権限名のリスト | -| permissions | | | Object | X | 設定されたパーミッションのリスト | -| | allowed | | `permission` オブジェクトの Collection | | 許可されたパーミッションのリスト | -| | | \[].applyTo | Text | X | 対象の [リソース](#リソース) 名 | -| | | \[].type | Text | X | [リソース](#リソース) タイプ: "datastore", "dataclass", "attribute", "method", "singletonMethod", "singleton" | -| | | \[].read | String の Collection | | 権限名のリスト | -| | | \[].create | String の Collection | | 権限名のリスト | -| | | \[].update | String の Collection | | 権限名のリスト | -| | | \[].drop | String の Collection | | 権限名のリスト | -| | | \[].execute | String の Collection | | 権限名のリスト | -| | | \[].promote | String の Collection | | 権限名のリスト | -| forceLogin | | | Boolean | | ["forceLogin" モード](../REST/authUsers.md#force-login-mode) を有効にする場合は true | - -:::caution 注記 - -- "WebAdmin" 権限名は、アプリケーションによって予約されています。 この名前をカスタムの権限名に使用することは推奨されません。 -- `privileges` および `roles` の名称においては文字の大小が区別されます。 +## Restriction Modes -::: +The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): -#### Assigning permissions to ORDA class functions +- **Unrestricted mode** (`restrictedByDefault`: **false**): Resources without defined permissions are accessible to all requests. This mode is suitable for development environments where access can be gradually restricted. +- **Restricted mode** (`restrictedByDefault`: **true**): Resources without defined permissions are blocked by default. This mode is recommended for production environments where access must be explicitly granted. -When configuring permissions, ORDA class functions are declared in the `applyTo` element using the following syntax: - -```json -. -``` +:::note 互換性 -For example, if you want to apply a permission to the following function: +- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Keep in mind that this configuration is tailored for quick start and smooth development. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. -```4d -// cs.CityEntity class -Class extends Entity - Function getPopulation() : Integer - ... -``` +::: -... you have to write: +### Recommended Configuration -```json -"applyTo":"City.getPopulation" -``` +Depending on your environment, the recommended settings are: -It means that you cannot use the same function names in the various ORDA classes (entity, entity selection, dataclass) if you want them to be assigned privileges. In this case, you need to use distinct function names. For example, if you have created a "drop" function in both `cs.CityEntity` and `cs.CitySelection` classes, you need to give them different names such as `dropEntity()` and `dropSelection()`. You can then write in the "roles.json" file: - -```json - "permissions": { - "allowed": [ - { - "applyTo": "City.dropEntity", - "type": "method", - "promote": [ - "name" - ] - }, - { - "applyTo": "City.dropSelection", - "type": "method", - "promote": [ - "name" - ] - } - ] -``` +- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. This ensures maximum security by requiring user authentication and explicitly defined permissions for resource access. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. ### `Roles_Errors.json` ファイル @@ -269,93 +286,28 @@ End if ## 権限設定の例 -The good practice is to keep all data access locked by default thanks to the "all" privilege and to configure the `roles.json` file to only open controlled parts to authorized sessions. For example, to allow some accesses to "guest" sessions: - ```json title="/Project/Sources/roles.json" { - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - "roles": [], - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": [ - "all" - ], - "create": [ - "all" - ], - "update": [ - "all" - ], - "drop": [ - "all" - ], - "execute": [ - "all" - ], - "promote": [ - "all" - ] - }, - { - "applyTo": "ds.loginAs", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.hasPrivilege", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.clearPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.isGuest", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.getPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.setAllPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "mySingletonClass.createID", - "type": "singletonMethod", - "execute": [ - "guest" - ] - } - ] - }, - "forceLogin": true + "forceLogin": true, + "restrictedByDefault": true, + "permissions": { + "allowed": [ + { + "applyTo": "People", + "type": "dataclass", + "read": [ + "viewPeople" + ] + } + ] + }, + "privileges": [ + { + "privilege": "viewPeople", + "includes": [] + } + ], + "roles": [] } ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/REST/configuration.md b/i18n/ja/docusaurus-plugin-content-docs/current/REST/configuration.md index 94a70d353e9499..f1ee2368682fda 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/REST/configuration.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/REST/configuration.md @@ -70,8 +70,8 @@ REST 経由でアクセス可能なデータストアオブジェクトを制限 1. ストラクチャーエディターにて対象となるフィールドを選択し、右クリックでコンテキストメニューを開いてフィールドプロパティを選択します。 -2. フィールドの **RESTリソースとして公開** オプションの選択を解除します: - ![alt-text](../assets/en/REST/field.png) +2. Uncheck the **Expose as REST resource** for the field.
    + ![alt-text](../assets/en/REST/field.png)
    Repeat this for each field whose exposure needs to be modified. > あるフィールドが REST を通してアクセス可能であるためには、その親テーブルも公開されている必要があります。 親テーブルが公開されていない場合、各フィールドの公開設定に関わらず、すべてのフィールドがアクセス不可になります。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/SystemWorkerClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/SystemWorkerClass.md index 89c889f5096c76..ae195a59ea79d4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/SystemWorkerClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/SystemWorkerClass.md @@ -161,7 +161,7 @@ var $sw : 4D.SystemWorker $sw:=4D.SystemWorker.new($mydoc) ``` -4. カレントディレクトリでコマンドを実行し、メッセージそ送信します: +4. カレントディレクトリでコマンドを実行し、メッセージを送信します: ```4d var $param : Object diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md index 4a1dcab564b42c..8e1688c5125199 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md @@ -201,7 +201,7 @@ Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプシ ::: -#### Assigning permissions to ORDA class functions +#### ORDA クラス関数の権限の設定 When configuring permissions, ORDA class functions are declared in the `applyTo` element using the following syntax: @@ -218,7 +218,7 @@ Class extends Entity ... ``` -... you have to write: +... 以下のように記述します: ```json "applyTo":"City.getPopulation" diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md index 3b62e29954c52f..b218f9699528f3 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -11,6 +11,14 @@ title: リリースノート ::: +## 4D 20.8 LTS + +#### ハイライト + +- [**修正リスト**](https://bugs.4d.com/fixes?version=20.8): 4D 20.8 LTS で修正されたバグのリストです ([日本語版はこちら](https://4d-jp.github.io/2024/276/release-note-version-20/))。 + + + ## 4D 20.7 LTS #### ハイライト diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/SystemWorkerClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/SystemWorkerClass.md index 89c889f5096c76..ae195a59ea79d4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/SystemWorkerClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/SystemWorkerClass.md @@ -161,7 +161,7 @@ var $sw : 4D.SystemWorker $sw:=4D.SystemWorker.new($mydoc) ``` -4. カレントディレクトリでコマンドを実行し、メッセージそ送信します: +4. カレントディレクトリでコマンドを実行し、メッセージを送信します: ```4d var $param : Object diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md index e0b65d5524830a..7bdb8b1d9fa45c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -16,6 +16,7 @@ title: リリースノート - Web サーバーの[`start()`](../API/WebServerClass.md#start) 関数の*settings* 引数内の`handlers` プロパティを使用することで、[HTTP リクエストハンドラー](../WebServer/http-request-handler.md) を設定することができます。 - Web サーバーオブジェクトには新しい[`rules`](../API/WebServerClass.md#rules) and [`handlers`](../API/WebServerClass.md#handlers) プロパティが含まれます。 - 新しい[データに対するORDA イベント](../ORDA/orda-events.md): validateSave、saving、afterSave、validateDrop、dropping、afterDrop +- Support of the new [`restrictedByDefault` property](../ORDA/privileges.md#restriction-modes) in the `roles.json` file to block access by default to all resources without explicit permission. - [`HTTPRequest`](../API/HTTPRequestClass.md#4dhttprequestnew) および [`HTTPAgent`](../API/HTTPAgentClass.md#4dhttpagentnew) クラスにおいて、ローカルの証明書フォルダの代わりにWindows 証明書ストアからの証明書を使用することを許可する新しいオプション。 - クライアント/サーバー: - Web エリア内でQodly ページを表示し、[リモートクライアントセッションを共有](../Desktop/clientServer.md#web-エリア内のqodly-ページでセッションを共有する)することができるようになりました。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index 7c132e1778a823..cd4fbfc0254764 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -27,27 +27,21 @@ Webユーザーまたは RESTユーザーがログインすると、そのセッ プロジェクト内の以下のリソースに対して、許諾アクションと権限名を割り当てることができます (この設定をパーミッションと呼びます): -- データストア -- データクラス -- 属性 (計算属性およびエイリアス属性を含む) -- データモデルクラス関数 -- [シングルトン](../REST/$singleton.md)関数 +- the [datastore](../ORDA/dsMapping.md#datastore) +- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) +- functions of the [data model classes](../ORDA/ordaClasses.md) +- [singleton](../REST/$singleton.md) functions セッションがリソースにアクセスするたびに (アクセス形式に関係なく)、4D はセッションの権限を確認し、許可されていない場合にはアクセスを拒否します。 -あるレベルにおいて定義されたパーミッションは基本的に下位レベルに継承されますが、パーミッションは複数のレベルで設定することもできます: - -- データストアレベルで定義されたパーミッションは、自動的にすべてのデータクラスに割り当てられます。 データストアレベルで定義されたパーミッションは、自動的にすべてのデータクラスに割り当てられます。 データストアレベルで定義された*execute* 権限アクションは、[シングルトン](../REST/$singleton.md) 関数を含めてプロジェクトの全ての関数に対して適用されます。 -- データクラスレベルで定義されたパーミッションは、データストアの設定をオーバーライドします (あれば)。 デフォルトでは、データクラスのすべての属性が、データクラスのパーミッションを継承します。 -- データクラスとは異なり、属性レベルで定義されたパーミッションは、親のデータクラスの設定をオーバーライドするのではなく、それに追加されます。 たとえば、同じ許諾アクションに対し、データクラスのレベルでは "general" という権限名を、データクラスの属性のレベルでは "detail" という権限名を割り当てた場合、その属性にアクセスするには、セッションに "general" と "detail" の両方の権限が設定されている必要があります。 +## 権限 -:::info +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Each permission can be given to one or more [privileges](#privileges-and-roles). -パーミッションは、データストアオブジェクトや関数へのアクセスを制御します。 特定の条件に基づいて読み取りデータをフィルタリングしたい場合は、[制限付エンティティセレクション](entities.md#制限付エンティティセレクション) の利用がより適切かもしれません。 +When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). -::: - -## 許諾アクション +### 許諾アクション 利用可能なアクションは対象となるリソースによります。 @@ -73,6 +67,65 @@ Webユーザーまたは RESTユーザーがログインすると、そのセッ 権限の設定には一貫性が必要です。特に、**update** および **drop** 権限は**read** 権限も必要とします(ただし**create** はそれを必要としません)。 +### Inherited permissions + +あるレベルにおいて定義されたパーミッションは基本的に下位レベルに継承されますが、パーミッションは複数のレベルで設定することもできます: + +- データストアレベルで定義されたパーミッションは、自動的にすべてのデータクラスに割り当てられます。 データストアレベルで定義されたパーミッションは、自動的にすべてのデータクラスに割り当てられます。 データストアレベルで定義された*execute* 権限アクションは、[シングルトン](../REST/$singleton.md) 関数を含めてプロジェクトの全ての関数に対して適用されます。 +- データクラスレベルで定義されたパーミッションは、データストアの設定をオーバーライドします (あれば)。 デフォルトでは、データクラスのすべての属性が、データクラスのパーミッションを継承します。 +- データクラスとは異なり、属性レベルで定義されたパーミッションは、親のデータクラスの設定をオーバーライドするのではなく、それに追加されます。 たとえば、同じ許諾アクションに対し、データクラスのレベルでは "general" という権限名を、データクラスの属性のレベルでは "detail" という権限名を割り当てた場合、その属性にアクセスするには、セッションに "general" と "detail" の両方の権限が設定されている必要があります。 + +:::info + +パーミッションは、データストアオブジェクトや関数へのアクセスを制御します。 特定の条件に基づいて読み取りデータをフィルタリングしたい場合は、[制限付エンティティセレクション](entities.md#制限付エンティティセレクション) の利用がより適切かもしれません。 + +::: + +### ORDA クラス関数の権限の設定 + +When configuring permissions, ORDA class functions are declared in the `applyTo` element using the following syntax: + +```json +. +``` + +For example, if you want to apply a permission to the following function: + +```4d +// cs.CityEntity class +Class extends Entity + Function getPopulation() : Integer + ... +``` + +... 以下のように記述します: + +```json +"applyTo":"City.getPopulation" +``` + +It means that you cannot use the same function names in the various ORDA classes (entity, entity selection, dataclass) if you want them to be assigned privileges. In this case, you need to use distinct function names. For example, if you have created a "drop" function in both `cs.CityEntity` and `cs.CitySelection` classes, you need to give them different names such as `dropEntity()` and `dropSelection()`. You can then write in the "roles.json" file: + +```json + "permissions": { + "allowed": [ + { + "applyTo": "City.dropEntity", + "type": "method", + "promote": [ + "name" + ] + }, + { + "applyTo": "City.dropSelection", + "type": "method", + "promote": [ + "name" + ] + } + ] +``` + ## 権限とロール **権限** とは、**リソース** に対して **アクション** を実行する技術的な能力であり、**ロール** は、管理者が使用するために公開された権限のことです。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 @@ -112,142 +165,106 @@ exposed Function authenticate($identifier : Text; $password : Text)->$result : T ## `roles.json` ファイル -`roles.json` ファイルは、プロジェクトのセキュリティ設定の全体を記述します。 - -### デフォルトファイル +The `roles.json` file describes the whole web security settings for the project. `roles.json` ファイルの構文は次のとおりです: + +| プロパティ名 | | | 型 | 必須 | 説明 | +| ------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------- | -- | ------------------------------------------------------------------------------------------------------------------ | +| privileges | | | `privilege` オブジェクトの Collection | X | 定義された権限のリスト | +| | \[].privilege | | Text | | アクセス権の名称 | +| | \[].includes | | String の Collection | | 内包する権限名のリスト | +| roles | | | `role` オブジェクトの Collection | | 定義されたロールのリスト | +| | \[].role | | Text | | ロール名 | +| | \[].privileges | | String の Collection | | 内包する権限名のリスト | +| permissions | | | Object | X | 設定されたパーミッションのリスト | +| | allowed | | `permission` オブジェクトの Collection | | 許可されたパーミッションのリスト | +| | | \[].applyTo | Text | X | 対象の [リソース](#リソース) 名 | +| | | \[].type | Text | X | [リソース](#リソース) タイプ: "datastore", "dataclass", "attribute", "method", "singletonMethod", "singleton" | +| | | \[].read | String の Collection | | 権限名のリスト | +| | | \[].create | String の Collection | | 権限名のリスト | +| | | \[].update | String の Collection | | 権限名のリスト | +| | | \[].drop | String の Collection | | 権限名のリスト | +| | | \[].execute | String の Collection | | 権限名のリスト | +| | | \[].promote | String の Collection | | 権限名のリスト | +| restrictedByDefault | | | Boolean | | If true, access to resources without explicit permissions is denied | +| forceLogin | | | Boolean | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | -プロジェクトを作成すると、デフォルトの `roles.json` ファイルが次の場所に作成されます: `/Project/Sources/` ([アーキテクチャー](../Project/architecture.md#sources) 参照)。 +:::caution 注記 -デフォルトのファイルには次の内容が含まれています: +- "WebAdmin" 権限名は、アプリケーションによって予約されています。 この名前をカスタムの権限名に使用することは推奨されません。 +- `privileges` and `roles` names are case-insensitive. -```json title="/Project/Sources/roles.json" +::: -{ - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - - "roles": [], - - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": ["all"], - "create": ["all"], - "update": ["all"], - "drop": ["all"], - "execute": ["all"], - "promote": ["all"] - } - ] - }, - - "forceLogin": true +### Default File Location and Content -} +When a new project is created, a default `roles.json` file is generated at: +``` +/Project/Sources/ ``` -For a highest level of security, the "all" privilege is assigned to all permissions in the datastore, thus data access on the whole `ds` object is disabled by default. The principle is as follows: assigning a permission is like putting a lock on a door. Only sessions with privilege having the corresponding key (i.e., a permission) will be able to open the lock. -この "none" 権限はセキュリティのため、使用も変更もしないことが推奨されています。Web や RESTリクエストから利用可能にしたい各リソースには、それ専用の権限を新たに追加することが推奨されています ([以下の例を参照](#権限設定の例))。 +[アーキテクチャー](../Project/architecture.md#sources) を参照ください。 -:::caution +Default content: -`roles.json` ファイルに特定のパラメーターが定義されていない場合、アクセスは制限されません。 これにより、アクセスを気にすることなくアプリケーションを開発することができますが、本番環境では推奨されていません。 +```json title="/Project/Sources/roles.json" -::: +{ + "privileges": [ + ], + "roles": [ + ], + "permissions": { + "allowed": [ + { + "applyTo": "ds", + "type": "datastore", + "read": [], + "create": [], + "update": [], + "drop": [], + "execute": [], + "promote": [] + } + ] + }, + "restrictedByDefault": false, + "forceLogin": false +} +``` :::note 互換性 以前のリリースでは、`roles.json` ファイルはデフォルトで作成されませんでした。 4D 20 R6 以降、`roles.json`ファイルを含まない、または `"forceLogin": true` の設定が含まれていない既存のプロジェクトを開く場合、[設定ダイアログボックスの **Web機能** ページ](../settings/web.md#アクセス権) で **ds.authentify() 関数を通しての REST認証を有効化** ボタンが利用可能になります。 このボタンはセキュリティ設定を自動的にアップグレードします (コードを修正する必要があるかもしれません。[このブログ記事を参照ください](https://blog.4d.com/ja/force-login-becomes-default-for-all-rest-auth))。 + ::: :::note Qodly Studio -Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](../WebServer/qodly-studio.md#force-login) を使用してログインモードを設定することができます。 +In Qodly Studio for 4D, the login mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Roles and Privileges panel. ::: -### シンタックス - -`roles.json` ファイルの構文は次のとおりです: - -| プロパティ名 | | | 型 | 必須 | 説明 | -| ----------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------- | -- | ------------------------------------------------------------------------------------------------------------------ | -| privileges | | | `privilege` オブジェクトの Collection | X | 定義された権限のリスト | -| | \[].privilege | | Text | | アクセス権の名称 | -| | \[].includes | | String の Collection | | 内包する権限名のリスト | -| roles | | | `role` オブジェクトの Collection | | 定義されたロールのリスト | -| | \[].role | | Text | | ロール名 | -| | \[].privileges | | String の Collection | | 内包する権限名のリスト | -| permissions | | | Object | X | 設定されたパーミッションのリスト | -| | allowed | | `permission` オブジェクトの Collection | | 許可されたパーミッションのリスト | -| | | \[].applyTo | Text | X | 対象の [リソース](#リソース) 名 | -| | | \[].type | Text | X | [リソース](#リソース) タイプ: "datastore", "dataclass", "attribute", "method", "singletonMethod", "singleton" | -| | | \[].read | String の Collection | | 権限名のリスト | -| | | \[].create | String の Collection | | 権限名のリスト | -| | | \[].update | String の Collection | | 権限名のリスト | -| | | \[].drop | String の Collection | | 権限名のリスト | -| | | \[].execute | String の Collection | | 権限名のリスト | -| | | \[].promote | String の Collection | | 権限名のリスト | -| forceLogin | | | Boolean | | ["forceLogin" モード](../REST/authUsers.md#force-login-mode) を有効にする場合は true | - -:::caution 注記 - -- "WebAdmin" 権限名は、アプリケーションによって予約されています。 この名前をカスタムの権限名に使用することは推奨されません。 -- `privileges` および `roles` の名称においては文字の大小が区別されます。 +## Restriction Modes -::: +The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): -#### Assigning permissions to ORDA class functions +- **Unrestricted mode** (`restrictedByDefault`: **false**): Resources without defined permissions are accessible to all requests. This mode is suitable for development environments where access can be gradually restricted. +- **Restricted mode** (`restrictedByDefault`: **true**): Resources without defined permissions are blocked by default. This mode is recommended for production environments where access must be explicitly granted. -When configuring permissions, ORDA class functions are declared in the `applyTo` element using the following syntax: - -```json -. -``` +:::note 互換性 -For example, if you want to apply a permission to the following function: +- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Keep in mind that this configuration is tailored for quick start and smooth development. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. -```4d -// cs.CityEntity class -Class extends Entity - Function getPopulation() : Integer - ... -``` +::: -... you have to write: +### Recommended Configuration -```json -"applyTo":"City.getPopulation" -``` +Depending on your environment, the recommended settings are: -It means that you cannot use the same function names in the various ORDA classes (entity, entity selection, dataclass) if you want them to be assigned privileges. In this case, you need to use distinct function names. For example, if you have created a "drop" function in both `cs.CityEntity` and `cs.CitySelection` classes, you need to give them different names such as `dropEntity()` and `dropSelection()`. You can then write in the "roles.json" file: - -```json - "permissions": { - "allowed": [ - { - "applyTo": "City.dropEntity", - "type": "method", - "promote": [ - "name" - ] - }, - { - "applyTo": "City.dropSelection", - "type": "method", - "promote": [ - "name" - ] - } - ] -``` +- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. This ensures maximum security by requiring user authentication and explicitly defined permissions for resource access. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. ### `Roles_Errors.json` ファイル @@ -269,93 +286,28 @@ End if ## 権限設定の例 -The good practice is to keep all data access locked by default thanks to the "all" privilege and to configure the `roles.json` file to only open controlled parts to authorized sessions. For example, to allow some accesses to "guest" sessions: - ```json title="/Project/Sources/roles.json" { - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - "roles": [], - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": [ - "all" - ], - "create": [ - "all" - ], - "update": [ - "all" - ], - "drop": [ - "all" - ], - "execute": [ - "all" - ], - "promote": [ - "all" - ] - }, - { - "applyTo": "ds.loginAs", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.hasPrivilege", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.clearPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.isGuest", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.getPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.setAllPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "mySingletonClass.createID", - "type": "singletonMethod", - "execute": [ - "guest" - ] - } - ] - }, - "forceLogin": true + "forceLogin": true, + "restrictedByDefault": true, + "permissions": { + "allowed": [ + { + "applyTo": "People", + "type": "dataclass", + "read": [ + "viewPeople" + ] + } + ] + }, + "privileges": [ + { + "privilege": "viewPeople", + "includes": [] + } + ], + "roles": [] } ``` diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/privileges.md index 73c0eff02fec15..d77f22431e141f 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -27,27 +27,21 @@ Se um usuário tentar executar uma ação e não tiver os direitos de acesso ade You can assign specific permission actions to the following resources in your project: -- o datastore -- uma classe de dados -- um atributo (inclusive calculado e aliases) -- uma função de classe de modelo de dados -- uma função [singleton](../REST/$singleton.md) +- the [datastore](../ORDA/dsMapping.md#datastore) +- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) +- functions of the [data model classes](../ORDA/ordaClasses.md) +- [singleton](../REST/$singleton.md) functions Each time a resource is accessed within a session (whatever the way it is accessed), 4D checks that the session has the appropriate permissions, and rejects the access if it is not authorized. -Uma ação de permissão definida em um determinado nível é herdada por padrão em níveis inferiores, mas várias permissões podem ser configuradas: - -- Uma ação de permissão definida no nível do datastore é automaticamente atribuída a todas as dataclasses. A ação de permissão *execute* definida no nível de datastore aplica-se a todas as funções do projeto, incluindo todas as funções [singleton](../REST/$singleton.md). -- Uma ação de permissão definida ao nível da classe de dados substitui a definição do armazenamento de dados (se existir). Por padrão, todos os atributos do dataclass herdam das permissões de banco de dados. -- Ao contrário das permissões da classe de dados, uma ação de permissão definida no nível do atributo não substitui a(s) permissão(ões) pai da classe de dados, mas é adicionada a ela. Por exemplo, se você atribuiu o privilégio "geral" a uma classe de dados e o privilégio "detalhe" a um atributo da classe de dados, ambos os privilégios "geral" e "detalhe" devem ser definidos na sessão para acessar o atributo. - -:::info +## Permissions -Permissões controlam o acesso a objetos ou funções de armazenamento de dados. Se você deseja filtrar os dados lidos de acordo com alguns critérios, você pode considerar [restringir as seleções de entidades](entities.md#restricting-entity-selections) que pode ser mais apropriado neste caso. +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Each permission can be given to one or more [privileges](#privileges-and-roles). -::: +When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). -## Ações de permissão +### Ações de permissão As ações disponíveis estão relacionadas com o recurso alvo. @@ -73,6 +67,65 @@ As ações disponíveis estão relacionadas com o recurso alvo. Setting permissions requires to be consistent, in particular **update** and **drop** permissions also need **read** permission (but **create** does not need it). +### Inherited permissions + +Uma ação de permissão definida em um determinado nível é herdada por padrão em níveis inferiores, mas várias permissões podem ser configuradas: + +- Uma ação de permissão definida no nível do datastore é automaticamente atribuída a todas as dataclasses. A ação de permissão *execute* definida no nível de datastore aplica-se a todas as funções do projeto, incluindo todas as funções [singleton](../REST/$singleton.md). +- Uma ação de permissão definida ao nível da classe de dados substitui a definição do armazenamento de dados (se existir). Por padrão, todos os atributos do dataclass herdam das permissões de banco de dados. +- Ao contrário das permissões da classe de dados, uma ação de permissão definida no nível do atributo não substitui a(s) permissão(ões) pai da classe de dados, mas é adicionada a ela. Por exemplo, se você atribuiu o privilégio "geral" a uma classe de dados e o privilégio "detalhe" a um atributo da classe de dados, ambos os privilégios "geral" e "detalhe" devem ser definidos na sessão para acessar o atributo. + +:::info + +Permissões controlam o acesso a objetos ou funções de armazenamento de dados. Se você deseja filtrar os dados lidos de acordo com alguns critérios, você pode considerar [restringir as seleções de entidades](entities.md#restricting-entity-selections) que pode ser mais apropriado neste caso. + +::: + +### Atribuição de permissões a funções da classe ORDA + +When configuring permissions, ORDA class functions are declared in the `applyTo` element using the following syntax: + +```json +. +``` + +For example, if you want to apply a permission to the following function: + +```4d +// cs.CityEntity class +Class extends Entity + Function getPopulation() : Integer + ... +``` + +... você precisa escrever: + +```json +"applyTo":"City.getPopulation" +``` + +It means that you cannot use the same function names in the various ORDA classes (entity, entity selection, dataclass) if you want them to be assigned privileges. In this case, you need to use distinct function names. For example, if you have created a "drop" function in both `cs.CityEntity` and `cs.CitySelection` classes, you need to give them different names such as `dropEntity()` and `dropSelection()`. Em seguida, você pode escrever no arquivo "roles.json": + +```json + "permissions": { + "allowed": [ + { + "applyTo": "City.dropEntity", + "type": "method", + "promote": [ + "name" + ] + }, + { + "applyTo": "City.dropSelection", + "type": "method", + "promote": [ + "name" + ] + } + ] +``` + ## Privilégios e funções Um **privilégio** é a habilidade técnica de executar **ações** em **recursos**, enquanto um **cargo** é um privilégio posto de uso por um administrador. Basicamente, uma função reúne vários privilégios para definir um perfil de usuário corporativo. Por exemplo, "manageInvoices" poderia ser um privilégio enquanto "secretary" poderia ser uma função (que inclui "manageInvoices" e outros privilégios). @@ -111,70 +164,7 @@ exposed Function authenticate($identifier : Text; $password : Text)->$result : T ## arquivo `roles.json` -O arquivo `roles.json` descreve todas as configurações de segurança do projeto. - -### Arquivo padrão - -When you create a project, a default `roles.json` file is created at the following location: `/Project/Sources/` (see [Architecture](../Project/architecture.md#sources) section). - -O arquivo padrão tem o seguinte conteúdo: - -```json title="/Project/Sources/roles.json" - -{ - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - - "roles": [], - - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": ["all"], - "create": ["all"], - "update": ["all"], - "drop": ["all"], - "execute": ["all"], - "promote": ["all"] - } - ] - }, - - "forceLogin": true - -} - -``` - -For a highest level of security, the "all" privilege is assigned to all permissions in the datastore, thus data access on the whole `ds` object is disabled by default. The principle is as follows: assigning a permission is like putting a lock on a door. Only sessions with privilege having the corresponding key (i.e., a permission) will be able to open the lock. -É recomendado não modificar ou usar esse privilégio de bloqueio, mas adicionar permissões específicas a cada recurso que você deseja disponibilizar para solicitações da web ou REST (veja o exemplo abaixo). - -:::caution - -Quando nenhum parâmetro específico é definido no arquivo `roles.json`, os acessos não são limitados. Esta configuração permite que você desenvolva a aplicação sem se preocupar com acessos, mas não é recomendada em ambiente de produção. - -::: - -:::note Compatibidade - -Em versões anteriores, o arquivo `roles.json` não foi criado por padrão. A partir de 4D 20 R6, ao abrir um projeto existente que não contém um `cargos. arquivo son` ou as configurações `"forceLogin": true`, a **Ativar autenticação REST através de d. Função uthentify()** está disponível na página [**Recursos Web** da caixa de diálogo Configurações](../settings/web.md#access). Este botão atualiza automaticamente suas configurações de segurança (você pode ter que modificar seu código, [veja este post de blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). -::: - -:::note Qodly Studio - -No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](../WebServer/qodly-studio.md#force-login) no painel de Privilégios. - -::: - -### Sintaxe - -A sintaxe do arquivo `roles.json` é a seguinte: +The `roles.json` file describes the whole web security settings for the project. A sintaxe do arquivo `roles.json` é a seguinte: | Nome da propriedade | | | Tipo | Obrigatório | Descrição | | ------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ---------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------ | @@ -194,60 +184,87 @@ A sintaxe do arquivo `roles.json` é a seguinte: | | | \[].drop | Coleção de strings | | Lista de privilégios | | | | \[].execute | Coleção de strings | | Lista de privilégios | | | | \[].promote | Coleção de strings | | Lista de privilégios | -| forceLogin | | | Parâmetros | | True para habilitar el [modo "forceLogin"](../REST/authUsers.md#force-login-mode) | +| restrictedByDefault | | | Parâmetros | | If true, access to resources without explicit permissions is denied | +| forceLogin | | | Parâmetros | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | :::caution Lembrete - O nome do privilégio "WebAdmin" está reservado à aplicação. Não se recomenda a utilização deste nome para privilégios personalizados. -- Os nomes de `privilégios` e `cargos` são insensíveis a maiúsculas e minúsculas. +- `privileges` and `roles` names are case-insensitive. ::: -#### Atribuição de permissões a funções da classe ORDA +### Default File Location and Content -When configuring permissions, ORDA class functions are declared in the `applyTo` element using the following syntax: +When a new project is created, a default `roles.json` file is generated at: -```json -. ``` - -For example, if you want to apply a permission to the following function: - -```4d -// cs.CityEntity class -Class extends Entity - Function getPopulation() : Integer - ... +/Project/Sources/ ``` -... você precisa escrever: +Ver la sección [Arquitectura](../Project/architecture.md#sources). -```json -"applyTo":"City.getPopulation" -``` +Default content: -It means that you cannot use the same function names in the various ORDA classes (entity, entity selection, dataclass) if you want them to be assigned privileges. In this case, you need to use distinct function names. For example, if you have created a "drop" function in both `cs.CityEntity` and `cs.CitySelection` classes, you need to give them different names such as `dropEntity()` and `dropSelection()`. Em seguida, você pode escrever no arquivo "roles.json": +```json title="/Project/Sources/roles.json" -```json - "permissions": { - "allowed": [ - { - "applyTo": "City.dropEntity", - "type": "method", - "promote": [ - "name" - ] - }, - { - "applyTo": "City.dropSelection", - "type": "method", - "promote": [ - "name" - ] - } +{ + "privileges": [ + ], + "roles": [ + ], + "permissions": { + "allowed": [ + { + "applyTo": "ds", + "type": "datastore", + "read": [], + "create": [], + "update": [], + "drop": [], + "execute": [], + "promote": [] + } ] + }, + "restrictedByDefault": false, + "forceLogin": false +} ``` +:::note Compatibidade + +Em versões anteriores, o arquivo `roles.json` não foi criado por padrão. A partir de 4D 20 R6, ao abrir um projeto existente que não contém um `cargos. arquivo son` ou as configurações `"forceLogin": true`, a **Ativar autenticação REST através de d. Função uthentify()** está disponível na página [**Recursos Web** da caixa de diálogo Configurações](../settings/web.md#access). Este botão atualiza automaticamente suas configurações de segurança (você pode ter que modificar seu código, [veja este post de blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). + +::: + +:::note Qodly Studio + +In Qodly Studio for 4D, the login mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Roles and Privileges panel. + +::: + +## Restriction Modes + +The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): + +- **Unrestricted mode** (`restrictedByDefault`: **false**): Resources without defined permissions are accessible to all requests. This mode is suitable for development environments where access can be gradually restricted. +- **Restricted mode** (`restrictedByDefault`: **true**): Resources without defined permissions are blocked by default. This mode is recommended for production environments where access must be explicitly granted. + +:::note Compatibidade + +- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Keep in mind that this configuration is tailored for quick start and smooth development. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. + +::: + +### Recommended Configuration + +Depending on your environment, the recommended settings are: + +- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. This ensures maximum security by requiring user authentication and explicitly defined permissions for resource access. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. + ### Arquivo `Roles_Errors.json` O arquivo `roles.json` é analisado pelo 4D na inicialização. Você precisa reiniciar o aplicativo se quiser que as modificações neste arquivo sejam consideradas. @@ -267,93 +284,28 @@ Finalizado, se ## Exemplo de configuração de privilégios -The good practice is to keep all data access locked by default thanks to the "all" privilege and to configure the `roles.json` file to only open controlled parts to authorized sessions. For example, to allow some accesses to "guest" sessions: - ```json title="/Project/Sources/roles.json" { - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - "roles": [], - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": [ - "all" - ], - "create": [ - "all" - ], - "update": [ - "all" - ], - "drop": [ - "all" - ], - "execute": [ - "all" - ], - "promote": [ - "all" - ] - }, - { - "applyTo": "ds.loginAs", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.hasPrivilege", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.clearPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.isGuest", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.getPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.setAllPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "mySingletonClass.createID", - "type": "singletonMethod", - "execute": [ - "guest" - ] - } - ] - }, - "forceLogin": true + "forceLogin": true, + "restrictedByDefault": true, + "permissions": { + "allowed": [ + { + "applyTo": "People", + "type": "dataclass", + "read": [ + "viewPeople" + ] + } + ] + }, + "privileges": [ + { + "privilege": "viewPeople", + "includes": [] + } + ], + "roles": [] } ``` diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/REST/configuration.md b/i18n/pt/docusaurus-plugin-content-docs/current/REST/configuration.md index 3f4634994d1de1..c661a5b35d2ee0 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/REST/configuration.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/REST/configuration.md @@ -70,8 +70,8 @@ Para eliminar a exposição REST de um campo: 1. Exibar o inspetor de Campo no editor de Estruturas e selecione o campo a modificar. -2. Desmarque la opción **Exponer como recurso REST** para el campo. - ![alt-text](../assets/en/REST/field.png) +2. Uncheck the **Expose as REST resource** for the field.
    + ![alt-text](../assets/en/REST/field.png)
    Repeat this for each field whose exposure needs to be modified. > Para que um campo seja accessível a través de REST, a tabela pai também deve ser. Se a tabela pai não estiver exposta, nenhum dos campos estará, independente de seu estado. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md index 9c041416784e6d..9f8a14853cafd3 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -11,6 +11,14 @@ Leia [**O que há de novo no 4D 20**](https://blog.4d.com/en-whats-new-in-4d-v20 ::: +## 4D 20.8 LTS + +#### Destaques + +- [**Lista de bugs corrigidos**](https://bugs.4d.com/fixes?version=20.8): lista de todos os erros corrigidos no 4D 20.8 LTS. + + + ## 4D 20.7 LTS #### Destaques diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md index 52e8e6a51fb89e..aaa5ca6daaf843 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -16,6 +16,7 @@ Leia [**O que há de novo no 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/ - ability to set [HTTP request handlers](../WebServer/http-request-handler.md) using a `handlers` property in the *settings* parameter of the Web server [`start()`](../API/WebServerClass.md#start) function, - the Web server object contains new [`rules`](../API/WebServerClass.md#rules) and [`handlers`](../API/WebServerClass.md#handlers) properties. - New [ORDA events on data](../ORDA/orda-events.md): validateSave, saving, afterSave, validateDrop, dropping, afterDrop. +- Support of the new [`restrictedByDefault` property](../ORDA/privileges.md#restriction-modes) in the `roles.json` file to block access by default to all resources without explicit permission. - New option allowing to use certificates from Windows Certificate Store instead of a local certificates folder in [`HTTPRequest`](../API/HTTPRequestClass.md#4dhttprequestnew) and [`HTTPAgent`](../API/HTTPAgentClass.md#4dhttpagentnew) classes. - Client/server: - You can display Qodly pages in Web areas and [share the remote client session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index 73c0eff02fec15..d77f22431e141f 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -27,27 +27,21 @@ Se um usuário tentar executar uma ação e não tiver os direitos de acesso ade You can assign specific permission actions to the following resources in your project: -- o datastore -- uma classe de dados -- um atributo (inclusive calculado e aliases) -- uma função de classe de modelo de dados -- uma função [singleton](../REST/$singleton.md) +- the [datastore](../ORDA/dsMapping.md#datastore) +- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) +- functions of the [data model classes](../ORDA/ordaClasses.md) +- [singleton](../REST/$singleton.md) functions Each time a resource is accessed within a session (whatever the way it is accessed), 4D checks that the session has the appropriate permissions, and rejects the access if it is not authorized. -Uma ação de permissão definida em um determinado nível é herdada por padrão em níveis inferiores, mas várias permissões podem ser configuradas: - -- Uma ação de permissão definida no nível do datastore é automaticamente atribuída a todas as dataclasses. A ação de permissão *execute* definida no nível de datastore aplica-se a todas as funções do projeto, incluindo todas as funções [singleton](../REST/$singleton.md). -- Uma ação de permissão definida ao nível da classe de dados substitui a definição do armazenamento de dados (se existir). Por padrão, todos os atributos do dataclass herdam das permissões de banco de dados. -- Ao contrário das permissões da classe de dados, uma ação de permissão definida no nível do atributo não substitui a(s) permissão(ões) pai da classe de dados, mas é adicionada a ela. Por exemplo, se você atribuiu o privilégio "geral" a uma classe de dados e o privilégio "detalhe" a um atributo da classe de dados, ambos os privilégios "geral" e "detalhe" devem ser definidos na sessão para acessar o atributo. - -:::info +## Permissions -Permissões controlam o acesso a objetos ou funções de armazenamento de dados. Se você deseja filtrar os dados lidos de acordo com alguns critérios, você pode considerar [restringir as seleções de entidades](entities.md#restricting-entity-selections) que pode ser mais apropriado neste caso. +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Each permission can be given to one or more [privileges](#privileges-and-roles). -::: +When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). -## Ações de permissão +### Ações de permissão As ações disponíveis estão relacionadas com o recurso alvo. @@ -73,6 +67,65 @@ As ações disponíveis estão relacionadas com o recurso alvo. Setting permissions requires to be consistent, in particular **update** and **drop** permissions also need **read** permission (but **create** does not need it). +### Inherited permissions + +Uma ação de permissão definida em um determinado nível é herdada por padrão em níveis inferiores, mas várias permissões podem ser configuradas: + +- Uma ação de permissão definida no nível do datastore é automaticamente atribuída a todas as dataclasses. A ação de permissão *execute* definida no nível de datastore aplica-se a todas as funções do projeto, incluindo todas as funções [singleton](../REST/$singleton.md). +- Uma ação de permissão definida ao nível da classe de dados substitui a definição do armazenamento de dados (se existir). Por padrão, todos os atributos do dataclass herdam das permissões de banco de dados. +- Ao contrário das permissões da classe de dados, uma ação de permissão definida no nível do atributo não substitui a(s) permissão(ões) pai da classe de dados, mas é adicionada a ela. Por exemplo, se você atribuiu o privilégio "geral" a uma classe de dados e o privilégio "detalhe" a um atributo da classe de dados, ambos os privilégios "geral" e "detalhe" devem ser definidos na sessão para acessar o atributo. + +:::info + +Permissões controlam o acesso a objetos ou funções de armazenamento de dados. Se você deseja filtrar os dados lidos de acordo com alguns critérios, você pode considerar [restringir as seleções de entidades](entities.md#restricting-entity-selections) que pode ser mais apropriado neste caso. + +::: + +### Atribuição de permissões a funções da classe ORDA + +When configuring permissions, ORDA class functions are declared in the `applyTo` element using the following syntax: + +```json +. +``` + +For example, if you want to apply a permission to the following function: + +```4d +// cs.CityEntity class +Class extends Entity + Function getPopulation() : Integer + ... +``` + +... você precisa escrever: + +```json +"applyTo":"City.getPopulation" +``` + +It means that you cannot use the same function names in the various ORDA classes (entity, entity selection, dataclass) if you want them to be assigned privileges. In this case, you need to use distinct function names. For example, if you have created a "drop" function in both `cs.CityEntity` and `cs.CitySelection` classes, you need to give them different names such as `dropEntity()` and `dropSelection()`. Em seguida, você pode escrever no arquivo "roles.json": + +```json + "permissions": { + "allowed": [ + { + "applyTo": "City.dropEntity", + "type": "method", + "promote": [ + "name" + ] + }, + { + "applyTo": "City.dropSelection", + "type": "method", + "promote": [ + "name" + ] + } + ] +``` + ## Privilégios e funções Um **privilégio** é a habilidade técnica de executar **ações** em **recursos**, enquanto um **cargo** é um privilégio posto de uso por um administrador. Basicamente, uma função reúne vários privilégios para definir um perfil de usuário corporativo. Por exemplo, "manageInvoices" poderia ser um privilégio enquanto "secretary" poderia ser uma função (que inclui "manageInvoices" e outros privilégios). @@ -111,70 +164,7 @@ exposed Function authenticate($identifier : Text; $password : Text)->$result : T ## arquivo `roles.json` -O arquivo `roles.json` descreve todas as configurações de segurança do projeto. - -### Arquivo padrão - -When you create a project, a default `roles.json` file is created at the following location: `/Project/Sources/` (see [Architecture](../Project/architecture.md#sources) section). - -O arquivo padrão tem o seguinte conteúdo: - -```json title="/Project/Sources/roles.json" - -{ - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - - "roles": [], - - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": ["all"], - "create": ["all"], - "update": ["all"], - "drop": ["all"], - "execute": ["all"], - "promote": ["all"] - } - ] - }, - - "forceLogin": true - -} - -``` - -For a highest level of security, the "all" privilege is assigned to all permissions in the datastore, thus data access on the whole `ds` object is disabled by default. The principle is as follows: assigning a permission is like putting a lock on a door. Only sessions with privilege having the corresponding key (i.e., a permission) will be able to open the lock. -É recomendado não modificar ou usar esse privilégio de bloqueio, mas adicionar permissões específicas a cada recurso que você deseja disponibilizar para solicitações da web ou REST (veja o exemplo abaixo). - -:::caution - -Quando nenhum parâmetro específico é definido no arquivo `roles.json`, os acessos não são limitados. Esta configuração permite que você desenvolva a aplicação sem se preocupar com acessos, mas não é recomendada em ambiente de produção. - -::: - -:::note Compatibidade - -Em versões anteriores, o arquivo `roles.json` não foi criado por padrão. A partir de 4D 20 R6, ao abrir um projeto existente que não contém um `cargos. arquivo son` ou as configurações `"forceLogin": true`, a **Ativar autenticação REST através de d. Função uthentify()** está disponível na página [**Recursos Web** da caixa de diálogo Configurações](../settings/web.md#access). Este botão atualiza automaticamente suas configurações de segurança (você pode ter que modificar seu código, [veja este post de blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). -::: - -:::note Qodly Studio - -No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](../WebServer/qodly-studio.md#force-login) no painel de Privilégios. - -::: - -### Sintaxe - -A sintaxe do arquivo `roles.json` é a seguinte: +The `roles.json` file describes the whole web security settings for the project. A sintaxe do arquivo `roles.json` é a seguinte: | Nome da propriedade | | | Tipo | Obrigatório | Descrição | | ------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ---------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------ | @@ -194,60 +184,87 @@ A sintaxe do arquivo `roles.json` é a seguinte: | | | \[].drop | Coleção de strings | | Lista de privilégios | | | | \[].execute | Coleção de strings | | Lista de privilégios | | | | \[].promote | Coleção de strings | | Lista de privilégios | -| forceLogin | | | Parâmetros | | True para habilitar el [modo "forceLogin"](../REST/authUsers.md#force-login-mode) | +| restrictedByDefault | | | Parâmetros | | If true, access to resources without explicit permissions is denied | +| forceLogin | | | Parâmetros | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | :::caution Lembrete - O nome do privilégio "WebAdmin" está reservado à aplicação. Não se recomenda a utilização deste nome para privilégios personalizados. -- Os nomes de `privilégios` e `cargos` são insensíveis a maiúsculas e minúsculas. +- `privileges` and `roles` names are case-insensitive. ::: -#### Atribuição de permissões a funções da classe ORDA +### Default File Location and Content -When configuring permissions, ORDA class functions are declared in the `applyTo` element using the following syntax: +When a new project is created, a default `roles.json` file is generated at: -```json -. ``` - -For example, if you want to apply a permission to the following function: - -```4d -// cs.CityEntity class -Class extends Entity - Function getPopulation() : Integer - ... +/Project/Sources/ ``` -... você precisa escrever: +Ver la sección [Arquitectura](../Project/architecture.md#sources). -```json -"applyTo":"City.getPopulation" -``` +Default content: -It means that you cannot use the same function names in the various ORDA classes (entity, entity selection, dataclass) if you want them to be assigned privileges. In this case, you need to use distinct function names. For example, if you have created a "drop" function in both `cs.CityEntity` and `cs.CitySelection` classes, you need to give them different names such as `dropEntity()` and `dropSelection()`. Em seguida, você pode escrever no arquivo "roles.json": +```json title="/Project/Sources/roles.json" -```json - "permissions": { - "allowed": [ - { - "applyTo": "City.dropEntity", - "type": "method", - "promote": [ - "name" - ] - }, - { - "applyTo": "City.dropSelection", - "type": "method", - "promote": [ - "name" - ] - } +{ + "privileges": [ + ], + "roles": [ + ], + "permissions": { + "allowed": [ + { + "applyTo": "ds", + "type": "datastore", + "read": [], + "create": [], + "update": [], + "drop": [], + "execute": [], + "promote": [] + } ] + }, + "restrictedByDefault": false, + "forceLogin": false +} ``` +:::note Compatibidade + +Em versões anteriores, o arquivo `roles.json` não foi criado por padrão. A partir de 4D 20 R6, ao abrir um projeto existente que não contém um `cargos. arquivo son` ou as configurações `"forceLogin": true`, a **Ativar autenticação REST através de d. Função uthentify()** está disponível na página [**Recursos Web** da caixa de diálogo Configurações](../settings/web.md#access). Este botão atualiza automaticamente suas configurações de segurança (você pode ter que modificar seu código, [veja este post de blog](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth/)). + +::: + +:::note Qodly Studio + +In Qodly Studio for 4D, the login mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Roles and Privileges panel. + +::: + +## Restriction Modes + +The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): + +- **Unrestricted mode** (`restrictedByDefault`: **false**): Resources without defined permissions are accessible to all requests. This mode is suitable for development environments where access can be gradually restricted. +- **Restricted mode** (`restrictedByDefault`: **true**): Resources without defined permissions are blocked by default. This mode is recommended for production environments where access must be explicitly granted. + +:::note Compatibidade + +- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Keep in mind that this configuration is tailored for quick start and smooth development. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. + +::: + +### Recommended Configuration + +Depending on your environment, the recommended settings are: + +- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. This ensures maximum security by requiring user authentication and explicitly defined permissions for resource access. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. + ### Arquivo `Roles_Errors.json` O arquivo `roles.json` é analisado pelo 4D na inicialização. Você precisa reiniciar o aplicativo se quiser que as modificações neste arquivo sejam consideradas. @@ -267,93 +284,28 @@ Finalizado, se ## Exemplo de configuração de privilégios -The good practice is to keep all data access locked by default thanks to the "all" privilege and to configure the `roles.json` file to only open controlled parts to authorized sessions. For example, to allow some accesses to "guest" sessions: - ```json title="/Project/Sources/roles.json" { - "privileges": [ - { - "privilege": "all", - "includes": [] - } - ], - "roles": [], - "permissions": { - "allowed": [ - { - "applyTo": "ds", - "type": "datastore", - "read": [ - "all" - ], - "create": [ - "all" - ], - "update": [ - "all" - ], - "drop": [ - "all" - ], - "execute": [ - "all" - ], - "promote": [ - "all" - ] - }, - { - "applyTo": "ds.loginAs", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.hasPrivilege", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.clearPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.isGuest", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.getPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "ds.setAllPrivileges", - "type": "method", - "execute": [ - "guest" - ] - }, - { - "applyTo": "mySingletonClass.createID", - "type": "singletonMethod", - "execute": [ - "guest" - ] - } - ] - }, - "forceLogin": true + "forceLogin": true, + "restrictedByDefault": true, + "permissions": { + "allowed": [ + { + "applyTo": "People", + "type": "dataclass", + "read": [ + "viewPeople" + ] + } + ] + }, + "privileges": [ + { + "privilege": "viewPeople", + "includes": [] + } + ], + "roles": [] } ``` From c87a9b41e34994041a21d54c164094ecc4a6af9a Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 13 Nov 2025 12:06:26 +0100 Subject: [PATCH 02/75] fixes --- docs/FormObjects/listbox_overview.md | 2 +- docs/commands/license-info.md | 7 +++++++ .../version-20-R10/FormObjects/listbox_overview.md | 2 +- versioned_docs/version-20-R10/commands/license-info.md | 5 +++++ versioned_docs/version-20/FormObjects/listbox_overview.md | 2 +- versioned_docs/version-20/Notes/updates.md | 2 ++ versioned_docs/version-21/FormObjects/listbox_overview.md | 2 +- versioned_docs/version-21/commands/license-info.md | 5 +++++ 8 files changed, 23 insertions(+), 4 deletions(-) diff --git a/docs/FormObjects/listbox_overview.md b/docs/FormObjects/listbox_overview.md index 5a8823f0db922b..80068dd175a6cf 100644 --- a/docs/FormObjects/listbox_overview.md +++ b/docs/FormObjects/listbox_overview.md @@ -1153,7 +1153,7 @@ Examples: OB SET($ob;"value";2) //displays London by default OB SET($ob;"requiredListReference";<>List) ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName and choiceListReference diff --git a/docs/commands/license-info.md b/docs/commands/license-info.md index e1e8b1caeb5e64..3d4f419a901afe 100644 --- a/docs/commands/license-info.md +++ b/docs/commands/license-info.md @@ -18,6 +18,13 @@ displayed_sidebar: docs If the command is executed on a 4D application that does not use locally a license (e.g. 4D remote), the command returns a Null object. +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: + + The returned object contains the following properties: ```json diff --git a/versioned_docs/version-20-R10/FormObjects/listbox_overview.md b/versioned_docs/version-20-R10/FormObjects/listbox_overview.md index 9657a607cb73bb..a3782c5d4ebe5a 100644 --- a/versioned_docs/version-20-R10/FormObjects/listbox_overview.md +++ b/versioned_docs/version-20-R10/FormObjects/listbox_overview.md @@ -1155,7 +1155,7 @@ Examples: OB SET($ob;"value";2) //displays London by default OB SET($ob;"requiredListReference";<>List) ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName and choiceListReference diff --git a/versioned_docs/version-20-R10/commands/license-info.md b/versioned_docs/version-20-R10/commands/license-info.md index e1e8b1caeb5e64..296d459f34e664 100644 --- a/versioned_docs/version-20-R10/commands/license-info.md +++ b/versioned_docs/version-20-R10/commands/license-info.md @@ -18,6 +18,11 @@ displayed_sidebar: docs If the command is executed on a 4D application that does not use locally a license (e.g. 4D remote), the command returns a Null object. +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: The returned object contains the following properties: ```json diff --git a/versioned_docs/version-20/FormObjects/listbox_overview.md b/versioned_docs/version-20/FormObjects/listbox_overview.md index ec77a42d634eed..2a6a9e3f657dea 100644 --- a/versioned_docs/version-20/FormObjects/listbox_overview.md +++ b/versioned_docs/version-20/FormObjects/listbox_overview.md @@ -1149,7 +1149,7 @@ Examples: OB SET($ob;"value";2) //displays London by default OB SET($ob;"requiredListReference";<>List) ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName and choiceListReference diff --git a/versioned_docs/version-20/Notes/updates.md b/versioned_docs/version-20/Notes/updates.md index 5ddc0b83f81cf2..3bc47a3fd312df 100644 --- a/versioned_docs/version-20/Notes/updates.md +++ b/versioned_docs/version-20/Notes/updates.md @@ -15,6 +15,8 @@ Read [**What’s new in 4D 20**](https://blog.4d.com/en-whats-new-in-4d-v20/), t #### Highlights +- 4D 20.8 LTS is certified on Windows 11 25H2. +- 4D 20.8 LTS is certified on macOS Tahoe (macOS 26). - [**Fixed bugs list**](https://bugs.4d.com/fixes?version=20.8): list of all bugs that have been fixed in 4D 20.8 LTS. diff --git a/versioned_docs/version-21/FormObjects/listbox_overview.md b/versioned_docs/version-21/FormObjects/listbox_overview.md index 9657a607cb73bb..a3782c5d4ebe5a 100644 --- a/versioned_docs/version-21/FormObjects/listbox_overview.md +++ b/versioned_docs/version-21/FormObjects/listbox_overview.md @@ -1155,7 +1155,7 @@ Examples: OB SET($ob;"value";2) //displays London by default OB SET($ob;"requiredListReference";<>List) ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName and choiceListReference diff --git a/versioned_docs/version-21/commands/license-info.md b/versioned_docs/version-21/commands/license-info.md index e1e8b1caeb5e64..296d459f34e664 100644 --- a/versioned_docs/version-21/commands/license-info.md +++ b/versioned_docs/version-21/commands/license-info.md @@ -18,6 +18,11 @@ displayed_sidebar: docs If the command is executed on a 4D application that does not use locally a license (e.g. 4D remote), the command returns a Null object. +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: The returned object contains the following properties: ```json From 8608d1a57e49117243180a2381adc00f8dc32e8e Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 13 Nov 2025 12:29:47 +0100 Subject: [PATCH 03/75] add precision for idle connection timeout --- docs/commands-legacy/get-database-parameter.md | 2 +- docs/commands-legacy/set-database-parameter.md | 2 +- .../version-20-R10/commands-legacy/get-database-parameter.md | 2 +- .../version-20-R10/commands-legacy/set-database-parameter.md | 2 +- .../version-21/commands-legacy/get-database-parameter.md | 2 +- .../version-21/commands-legacy/set-database-parameter.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/commands-legacy/get-database-parameter.md b/docs/commands-legacy/get-database-parameter.md index e914d8c09c5fd2..a4af0faf373e1e 100644 --- a/docs/commands-legacy/get-database-parameter.md +++ b/docs/commands-legacy/get-database-parameter.md @@ -438,7 +438,7 @@ In order to be taken into account, this parameter must be executed on the server **Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity (timeout) for connections to both the 4D database engine and the SQL engine, as well as, in *ServerNet* mode (new network layer), to the 4D application server. When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. diff --git a/docs/commands-legacy/set-database-parameter.md b/docs/commands-legacy/set-database-parameter.md index 3266bac99350bd..61a24845e90b76 100644 --- a/docs/commands-legacy/set-database-parameter.md +++ b/docs/commands-legacy/set-database-parameter.md @@ -437,7 +437,7 @@ In order to be taken into account, this parameter must be executed on the server **Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity (timeout) for connections to both the 4D database engine and the SQL engine, as well as, in *ServerNet* mode (new network layer), to the 4D application server. When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. diff --git a/versioned_docs/version-20-R10/commands-legacy/get-database-parameter.md b/versioned_docs/version-20-R10/commands-legacy/get-database-parameter.md index e914d8c09c5fd2..a4af0faf373e1e 100644 --- a/versioned_docs/version-20-R10/commands-legacy/get-database-parameter.md +++ b/versioned_docs/version-20-R10/commands-legacy/get-database-parameter.md @@ -438,7 +438,7 @@ In order to be taken into account, this parameter must be executed on the server **Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity (timeout) for connections to both the 4D database engine and the SQL engine, as well as, in *ServerNet* mode (new network layer), to the 4D application server. When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. diff --git a/versioned_docs/version-20-R10/commands-legacy/set-database-parameter.md b/versioned_docs/version-20-R10/commands-legacy/set-database-parameter.md index 3266bac99350bd..61a24845e90b76 100644 --- a/versioned_docs/version-20-R10/commands-legacy/set-database-parameter.md +++ b/versioned_docs/version-20-R10/commands-legacy/set-database-parameter.md @@ -437,7 +437,7 @@ In order to be taken into account, this parameter must be executed on the server **Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity (timeout) for connections to both the 4D database engine and the SQL engine, as well as, in *ServerNet* mode (new network layer), to the 4D application server. When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. diff --git a/versioned_docs/version-21/commands-legacy/get-database-parameter.md b/versioned_docs/version-21/commands-legacy/get-database-parameter.md index e914d8c09c5fd2..a4af0faf373e1e 100644 --- a/versioned_docs/version-21/commands-legacy/get-database-parameter.md +++ b/versioned_docs/version-21/commands-legacy/get-database-parameter.md @@ -438,7 +438,7 @@ In order to be taken into account, this parameter must be executed on the server **Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity (timeout) for connections to both the 4D database engine and the SQL engine, as well as, in *ServerNet* mode (new network layer), to the 4D application server. When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. diff --git a/versioned_docs/version-21/commands-legacy/set-database-parameter.md b/versioned_docs/version-21/commands-legacy/set-database-parameter.md index 3266bac99350bd..61a24845e90b76 100644 --- a/versioned_docs/version-21/commands-legacy/set-database-parameter.md +++ b/versioned_docs/version-21/commands-legacy/set-database-parameter.md @@ -437,7 +437,7 @@ In order to be taken into account, this parameter must be executed on the server **Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity (timeout) for connections to both the 4D database engine and the SQL engine, as well as, in *ServerNet* mode (new network layer), to the 4D application server. When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. From 26ebb5f3703903cb58fb85dab0f472f572ee5c0d Mon Sep 17 00:00:00 2001 From: nobu teshima <44628598+nobuteshima@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:06:16 +0900 Subject: [PATCH 04/75] Update wa-get-url-history.md (#2990) JA fixing the Compatibility note witch was missing the "Current URL" in the translation --- .../current/commands-legacy/wa-get-url-history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/wa-get-url-history.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/wa-get-url-history.md index f8ff556747f091..96cece1363ea0e 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/wa-get-url-history.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/wa-get-url-history.md @@ -38,7 +38,7 @@ URLは時間順に並びかえられます。 *titlesArr* 引数を渡すと、URLに関連付けられたウィンドウの名前が返されます。この配列は*urlsArr* 配列と同期しています。 -**互換性に関する注意:** **4D v19 R5 以降、このコマンドは Windows のシステムレンダリングエンジン を使用しているWeb エリアにおける urlsArr および titlesArr 配列のみを返します。* +**互換性に関する注意:** **4D v19 R5 以降、このコマンドは Windows のシステムレンダリングエンジン を使用しているWeb エリアにおいて urlsArr および titlesArr 配列にはカレントの URL のみを返します。* ## 参照 From 1b6063b2d6107fcdf99229e0b26ecea529cedeab Mon Sep 17 00:00:00 2001 From: nobu teshima <44628598+nobuteshima@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:06:46 +0900 Subject: [PATCH 05/75] Update new-process.md (Changes of local process) (#2991) JA fixing changes regarding the removal or local process --- .../current/commands-legacy/new-process.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/new-process.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/new-process.md index 397470fab7482d..7ae4e5168ea256 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/new-process.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/new-process.md @@ -5,6 +5,15 @@ slug: /commands/new-process displayed_sidebar: docs --- +
    History + +|リリース|内容| +|---|---| +|21|特定のローカルプロセス処理について削除| + +
    + + **New process** ( *method* ; *stack* {; *name* {; *param* {; *param2* ; ... ; *paramN*}}}{; *} ) : Integer | 引数 | 型 | | 説明 | @@ -41,9 +50,7 @@ displayed_sidebar: docs ### プロセス名 -*name*には新しいプロセスの名前を指定します。シングルユーザーモードでは、ここで指定した名前がランタイムエクスプローラーのプロセスリストに表示され、この新しいプロセスに対して [Process info](../commands/process-info.md) コマンドを実行するとこの名前が返されます。この引数は省略することができます。省略した場合、プロセス名は空の文字列になります。ローカルスコープのプロセスを作成するには、名前の先頭にドルサイン ($) をつけます。 - -**重要**: クライアント/サーバーにおいて、ローカルプロセスはデータにアクセスしてはいけないことに注意してください。詳細な情報については、*グローバルプロセスとローカルプロセス* の章を参照してください。 +*name* には新しいプロセスの名前を指定します。シングルユーザーモードでは、ここで指定した名前がランタイムエクスプローラーのプロセスリストに表示され、この新しいプロセスに対して [Process info](../commands/process-info.md) コマンドを実行するとこの名前が返されます。この引数は省略することができます。省略した場合、プロセス名は空の文字列になります。 ### プロセスメソッドの引数 From 6657f21c3b7db7ddd90a7d8d22e13dd7d44b0b8f Mon Sep 17 00:00:00 2001 From: nobu teshima <44628598+nobuteshima@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:07:04 +0900 Subject: [PATCH 06/75] Update new-process.md (Changes of local process into ver 21) (#2992) JA fixing changes regarding the removal or local process into version 21 --- .../version-21/commands-legacy/new-process.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/new-process.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/new-process.md index 397470fab7482d..e89edb42cceacf 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/new-process.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/new-process.md @@ -5,6 +5,15 @@ slug: /commands/new-process displayed_sidebar: docs --- +
    History + +|リリース|リリース| +|---|---| +|21|特定のローカルプロセス処理について削除| + +
    + + **New process** ( *method* ; *stack* {; *name* {; *param* {; *param2* ; ... ; *paramN*}}}{; *} ) : Integer | 引数 | 型 | | 説明 | @@ -41,9 +50,7 @@ displayed_sidebar: docs ### プロセス名 -*name*には新しいプロセスの名前を指定します。シングルユーザーモードでは、ここで指定した名前がランタイムエクスプローラーのプロセスリストに表示され、この新しいプロセスに対して [Process info](../commands/process-info.md) コマンドを実行するとこの名前が返されます。この引数は省略することができます。省略した場合、プロセス名は空の文字列になります。ローカルスコープのプロセスを作成するには、名前の先頭にドルサイン ($) をつけます。 - -**重要**: クライアント/サーバーにおいて、ローカルプロセスはデータにアクセスしてはいけないことに注意してください。詳細な情報については、*グローバルプロセスとローカルプロセス* の章を参照してください。 +*name*には新しいプロセスの名前を指定します。シングルユーザーモードでは、ここで指定した名前がランタイムエクスプローラーのプロセスリストに表示され、この新しいプロセスに対して [Process info](../commands/process-info.md) コマンドを実行するとこの名前が返されます。この引数は省略することができます。省略した場合、プロセス名は空の文字列になります。 ### プロセスメソッドの引数 From 3f294c077c68fe64cd7842269989c8a50d6ed883 Mon Sep 17 00:00:00 2001 From: nobu teshima <44628598+nobuteshima@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:07:19 +0900 Subject: [PATCH 07/75] Update register-client.md (updating old information) (#2993) JA updating register client command so that includes latest information about the process and clients --- .../commands-legacy/register-client.md | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/register-client.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/register-client.md index 97ecb783be1cd2..674b8a5222d151 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/register-client.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/register-client.md @@ -5,30 +5,35 @@ slug: /commands/register-client displayed_sidebar: docs --- -**REGISTER CLIENT** ( *clientName* {; *period*}{; *} ) +
    履歴 + +|リリース|内容| +|---|---| +|21|\* 引数は無視されます| +|11.3|*period* 引数は無視されます| + +
    + + +**REGISTER CLIENT** ( *clientName* ) | 引数 | 型 | | 説明 | | --- | --- | --- | --- | | clientName | Text | → | 4Dクライアントセッション名 | -| period | Integer | → | ***バージョン11.3より無効*** | -| * | 演算子 | → | ローカルプロセス | ## 説明 -REGISTER CLIENT コマンドは、4Dクライアントステーションを、*clientName*で指定した名前で4D Serverに登録し、他のクライアントもしくは4D Server (ストアドプロシージャから) が登録されたマシン上で、[EXECUTE ON CLIENT](execute-on-client.md "EXECUTE ON CLIENT")コマンドを使ってメソッドを実行できるようにします。一旦登録されると、4Dクライアントは他のクライアント用に1つまたはそれ以上のメソッドを実行することができます。 +REGISTER CLIENT コマンドは、4Dクライアントステーションを、*clientName*で指定した名前で4D Serverに登録し、他のクライアントもしくは4D Server (ストアドプロシージャから) が登録されたマシン上で、[`EXECUTE ON CLIENT`](execute-on-client.md) コマンドを使ってメソッドを実行できるようにします。一旦登録されると、4Dクライアントは他のクライアント用に1つまたはそれ以上のメソッドを実行することができます。 **Notes:** -* データベース環境設定ダイアログの、起動時にクライアント登録オプションを使って、4D Serverに接続するクライアントステーションを自動的に登録することができます。 +* ストラクチャー設定ダイアログの、「Execute On Client のために起動時にクライアント登録」オプションを使って、4D Serverに接続するクライアントステーションを自動的に登録することができます。 * ローカルモードの4Dでこのコマンドが使用されても効果はありません。 * ひとつ以上の4Dクライアントが同じ登録名を持つことができます。 -このコマンドが実行されると、クライアントステーション上に*clientName*という名のプロセスが作成されます。このプロセスは[UNREGISTER CLIENT](unregister-client.md "UNREGISTER CLIENT")コマンドによってのみアボート可能です。 -オプションの *\** 引数を渡すと、作成されるプロセスはローカルプロセスになり、4Dは自動的にプロセス名の始めにドルマーク ($) を付け加えます。そうでない場合は、グローバルプロセスです。 - -4Dバージョン11.3より、サーバ/クライアント通信のメカニズムが最適化されました。サーバは必要に応じて直接、登録されたクライアントに実行 リクエストを送信します ("プッシュ"テクノロジ)。以前の、クライアントが定期的にサーバに問い合わせする方法は使用されません。*period*引数は無視されます。 +このコマンドが実行されると、クライアントステーション上に*clientName*という名のプロセスが作成されます。このプロセスは[`UNREGISTER CLIENT`](unregister-client.md) コマンドによってのみアボート可能です。 一度コマンドが実行されると、4Dクライアント名を動的に変更することはできません。これを実行するには、UNREGISTERCLIENTコマンドを呼び出し、再度REGISTER CLIENTコマンドを呼び出します。 @@ -40,6 +45,7 @@ displayed_sidebar: docs ```4d   //他の名前で登録する前に登録解除する必要がある + var vPseudoName : Text  UNREGISTER CLIENT  REPEAT     vPseudoName:=Request("名前を入力:";"ユーザ";"OK";"キャンセル") @@ -55,6 +61,7 @@ displayed_sidebar: docs 2) 以下の指示は、登録されたクライアントのリストを得ることができるようにするものです。これは内に置くことができます: ```4d + var PrClientList : Integer  PrClientList:=New process("4D Client List";32000;"List of registered clients")   ``` @@ -62,6 +69,11 @@ displayed_sidebar: docs 3) 以下の4D Client Listメソッドは、メッセージ受信可能な登録済み全4Dクライアントの登録名リストを入手します: ```4d + + var $Ref; $p : Integer + ARRAY TEXT($ClientList;0) + ARRAY LONGINT($ListeCharge;0) +  If(Application type=4D Remote Mode)   // 以下のコードはクライアントサーバでのみ有効     $Ref:=Open window(100;100;300;400;-(Palette window+Has window title);"List of registered clients") @@ -83,6 +95,7 @@ displayed_sidebar: docs 4) 下記のメソッドは、登録済みの他の4Dクライアントにメッセージを送ります。これは、送られた4DクライアントでDisplay\_Messageメソッドを呼び出します(下記参照)。 ```4d + var $Addressee; $Message : Text  $Addressee:=Request("メッセージの宛先:";"")   // On Startup データベースメソッドで取得した、メッセージ受信可能者リストの名前を指定  If(OK#0) From 704018071f389e37542a702b36eab1b813880880 Mon Sep 17 00:00:00 2001 From: nobu teshima <44628598+nobuteshima@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:07:33 +0900 Subject: [PATCH 08/75] Update register-client.md (updating old information into 21) (#2994) JA updating register client command so that includes latest information about the process and clients into version 21 --- .../commands-legacy/register-client.md | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/register-client.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/register-client.md index 97ecb783be1cd2..51948e4f9f6e9b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/register-client.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/register-client.md @@ -5,32 +5,37 @@ slug: /commands/register-client displayed_sidebar: docs --- -**REGISTER CLIENT** ( *clientName* {; *period*}{; *} ) +
    履歴 + +|リリース|内容| +|---|---| +|21|\* 引数は無視されます| +|11.3|*period* 引数は無視されます| + +
    + + +**REGISTER CLIENT** ( *clientName* ) | 引数 | 型 | | 説明 | | --- | --- | --- | --- | | clientName | Text | → | 4Dクライアントセッション名 | -| period | Integer | → | ***バージョン11.3より無効*** | -| * | 演算子 | → | ローカルプロセス | ## 説明 -REGISTER CLIENT コマンドは、4Dクライアントステーションを、*clientName*で指定した名前で4D Serverに登録し、他のクライアントもしくは4D Server (ストアドプロシージャから) が登録されたマシン上で、[EXECUTE ON CLIENT](execute-on-client.md "EXECUTE ON CLIENT")コマンドを使ってメソッドを実行できるようにします。一旦登録されると、4Dクライアントは他のクライアント用に1つまたはそれ以上のメソッドを実行することができます。 +REGISTER CLIENT コマンドは、4Dクライアントステーションを、*clientName*で指定した名前で4D Serverに登録し、他のクライアントもしくは4D Server (ストアドプロシージャから) が登録されたマシン上で、[`EXECUTE ON CLIENT`](execute-on-client.md) コマンドを使ってメソッドを実行できるようにします。一旦登録されると、4Dクライアントは他のクライアント用に1つまたはそれ以上のメソッドを実行することができます。 **Notes:** -* データベース環境設定ダイアログの、起動時にクライアント登録オプションを使って、4D Serverに接続するクライアントステーションを自動的に登録することができます。 +* ストラクチャー設定ダイアログの、「Execute On Client のために起動時にクライアント登録」オプションを使って、4D Serverに接続するクライアントステーションを自動的に登録することができます。 * ローカルモードの4Dでこのコマンドが使用されても効果はありません。 * ひとつ以上の4Dクライアントが同じ登録名を持つことができます。 -このコマンドが実行されると、クライアントステーション上に*clientName*という名のプロセスが作成されます。このプロセスは[UNREGISTER CLIENT](unregister-client.md "UNREGISTER CLIENT")コマンドによってのみアボート可能です。 -オプションの *\** 引数を渡すと、作成されるプロセスはローカルプロセスになり、4Dは自動的にプロセス名の始めにドルマーク ($) を付け加えます。そうでない場合は、グローバルプロセスです。 +このコマンドが実行されると、クライアントステーション上に*clientName*という名のプロセスが作成されます。このプロセスは[`UNREGISTER CLIENT`](unregister-client.md) コマンドによってのみアボート可能です。 -4Dバージョン11.3より、サーバ/クライアント通信のメカニズムが最適化されました。サーバは必要に応じて直接、登録されたクライアントに実行 リクエストを送信します ("プッシュ"テクノロジ)。以前の、クライアントが定期的にサーバに問い合わせする方法は使用されません。*period*引数は無視されます。 - -一度コマンドが実行されると、4Dクライアント名を動的に変更することはできません。これを実行するには、UNREGISTERCLIENTコマンドを呼び出し、再度REGISTER CLIENTコマンドを呼び出します。 +一度コマンドが実行されると、4Dクライアント名を動的に変更することはできません。これを実行するには、UNREGISTER CLIENTコマンドを呼び出し、再度REGISTER CLIENTコマンドを呼び出します。 ## 例題 @@ -40,6 +45,7 @@ displayed_sidebar: docs ```4d   //他の名前で登録する前に登録解除する必要がある + var vPseudoName : Text  UNREGISTER CLIENT  REPEAT     vPseudoName:=Request("名前を入力:";"ユーザ";"OK";"キャンセル") @@ -55,6 +61,7 @@ displayed_sidebar: docs 2) 以下の指示は、登録されたクライアントのリストを得ることができるようにするものです。これは内に置くことができます: ```4d + var PrClientList : Integer  PrClientList:=New process("4D Client List";32000;"List of registered clients")   ``` @@ -62,6 +69,11 @@ displayed_sidebar: docs 3) 以下の4D Client Listメソッドは、メッセージ受信可能な登録済み全4Dクライアントの登録名リストを入手します: ```4d + + var $Ref; $p : Integer + ARRAY TEXT($ClientList;0) + ARRAY LONGINT($ListeCharge;0) +  If(Application type=4D Remote Mode)   // 以下のコードはクライアントサーバでのみ有効     $Ref:=Open window(100;100;300;400;-(Palette window+Has window title);"List of registered clients") @@ -83,6 +95,7 @@ displayed_sidebar: docs 4) 下記のメソッドは、登録済みの他の4Dクライアントにメッセージを送ります。これは、送られた4DクライアントでDisplay\_Messageメソッドを呼び出します(下記参照)。 ```4d + var $Addressee; $Message : Text  $Addressee:=Request("メッセージの宛先:";"")   // On Startup データベースメソッドで取得した、メッセージ受信可能者リストの名前を指定  If(OK#0) From f4e237fe1042372dd3a709613cf7ea6b3364d5ee Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 13 Nov 2025 14:23:10 +0100 Subject: [PATCH 09/75] fix db param en FR --- .../current/commands-legacy/get-database-parameter.md | 2 +- .../current/commands-legacy/set-database-parameter.md | 2 +- .../version-20-R10/commands-legacy/get-database-parameter.md | 2 +- .../version-20-R10/commands-legacy/set-database-parameter.md | 2 +- .../version-21/commands-legacy/get-database-parameter.md | 2 +- .../version-21/commands-legacy/set-database-parameter.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md index a2c368c18016f0..408256a6f92ce3 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md @@ -434,7 +434,7 @@ A des fins d’optimisation, cette taille peut être diminuée sensiblement si l **Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données et au serveur SQL de 4D ainsi que, en mode *ServerNet* (nouvelle couche réseau), au serveur d'applications 4D. Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md index 3c82b1faab6257..cc438fb9687309 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md @@ -433,7 +433,7 @@ A des fins d’optimisation, cette taille peut être diminuée sensiblement si l **Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données et au serveur SQL de 4D ainsi que, en mode *ServerNet* (nouvelle couche réseau), au serveur d'applications 4D. Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/get-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/get-database-parameter.md index a2c368c18016f0..408256a6f92ce3 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/get-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/get-database-parameter.md @@ -434,7 +434,7 @@ A des fins d’optimisation, cette taille peut être diminuée sensiblement si l **Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données et au serveur SQL de 4D ainsi que, en mode *ServerNet* (nouvelle couche réseau), au serveur d'applications 4D. Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/set-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/set-database-parameter.md index db1b97c945a0c5..4c206c0620cb6c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/set-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/set-database-parameter.md @@ -433,7 +433,7 @@ A des fins d’optimisation, cette taille peut être diminuée sensiblement si l **Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données et au serveur SQL de 4D ainsi que, en mode *ServerNet* (nouvelle couche réseau), au serveur d'applications 4D. Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md index a2c368c18016f0..408256a6f92ce3 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md @@ -434,7 +434,7 @@ A des fins d’optimisation, cette taille peut être diminuée sensiblement si l **Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données et au serveur SQL de 4D ainsi que, en mode *ServerNet* (nouvelle couche réseau), au serveur d'applications 4D. Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md index 3c82b1faab6257..cc438fb9687309 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md @@ -433,7 +433,7 @@ A des fins d’optimisation, cette taille peut être diminuée sensiblement si l **Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données et au serveur SQL de 4D ainsi que, en mode *ServerNet* (nouvelle couche réseau), au serveur d'applications 4D. Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. From a5c184006366f40c16e78dbae338d06b66414fb1 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 13 Nov 2025 15:27:16 +0100 Subject: [PATCH 10/75] not DP AI integrated --- docs/WritePro/writeprointerface.md | 2 +- versioned_docs/version-20-R10/WritePro/writeprointerface.md | 2 +- versioned_docs/version-21/WritePro/writeprointerface.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/WritePro/writeprointerface.md b/docs/WritePro/writeprointerface.md index 88ceb9359ccc8f..180464b5c76159 100644 --- a/docs/WritePro/writeprointerface.md +++ b/docs/WritePro/writeprointerface.md @@ -314,7 +314,7 @@ The 4D Write Pro interface uses OpenAI, for which you need to provide your own k ::: -### Limitations (Developer Preview) +### Limitations In the current implementation, the feature has the following limitations: diff --git a/versioned_docs/version-20-R10/WritePro/writeprointerface.md b/versioned_docs/version-20-R10/WritePro/writeprointerface.md index 88ceb9359ccc8f..180464b5c76159 100644 --- a/versioned_docs/version-20-R10/WritePro/writeprointerface.md +++ b/versioned_docs/version-20-R10/WritePro/writeprointerface.md @@ -314,7 +314,7 @@ The 4D Write Pro interface uses OpenAI, for which you need to provide your own k ::: -### Limitations (Developer Preview) +### Limitations In the current implementation, the feature has the following limitations: diff --git a/versioned_docs/version-21/WritePro/writeprointerface.md b/versioned_docs/version-21/WritePro/writeprointerface.md index 88ceb9359ccc8f..180464b5c76159 100644 --- a/versioned_docs/version-21/WritePro/writeprointerface.md +++ b/versioned_docs/version-21/WritePro/writeprointerface.md @@ -314,7 +314,7 @@ The 4D Write Pro interface uses OpenAI, for which you need to provide your own k ::: -### Limitations (Developer Preview) +### Limitations In the current implementation, the feature has the following limitations: From 6efce890a98a209e0fd410fceab121c49dc90ce8 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 13 Nov 2025 18:14:18 +0100 Subject: [PATCH 11/75] enhanced saving example --- docs/ORDA/orda-events.md | 9 ++++++++- versioned_docs/version-21/ORDA/orda-events.md | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/ORDA/orda-events.md b/docs/ORDA/orda-events.md index f661164ca4e23c..16940a5c6fe0f5 100644 --- a/docs/ORDA/orda-events.md +++ b/docs/ORDA/orda-events.md @@ -453,7 +453,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -467,6 +469,11 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: ### `Function event afterSave` diff --git a/versioned_docs/version-21/ORDA/orda-events.md b/versioned_docs/version-21/ORDA/orda-events.md index f661164ca4e23c..16940a5c6fe0f5 100644 --- a/versioned_docs/version-21/ORDA/orda-events.md +++ b/versioned_docs/version-21/ORDA/orda-events.md @@ -453,7 +453,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -467,6 +469,11 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: ### `Function event afterSave` From 26660dfd14de787a428cb97c7cbf8c2fc105c657 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 13 Nov 2025 18:32:22 +0100 Subject: [PATCH 12/75] orda events and table lock --- docs/ORDA/orda-events.md | 2 +- versioned_docs/version-20-R10/ORDA/orda-events.md | 2 +- versioned_docs/version-21/ORDA/orda-events.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/ORDA/orda-events.md b/docs/ORDA/orda-events.md index 16940a5c6fe0f5..37e6f72be80965 100644 --- a/docs/ORDA/orda-events.md +++ b/docs/ORDA/orda-events.md @@ -29,7 +29,7 @@ You cannot directly trigger event function execution. Events are called automati :::info Compatibility note -ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. +ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: diff --git a/versioned_docs/version-20-R10/ORDA/orda-events.md b/versioned_docs/version-20-R10/ORDA/orda-events.md index 42f09ec34ffe8a..69d761cdb242bf 100644 --- a/versioned_docs/version-20-R10/ORDA/orda-events.md +++ b/versioned_docs/version-20-R10/ORDA/orda-events.md @@ -21,7 +21,7 @@ You cannot directly trigger event function execution. Events are called automati :::info Compatibility note -ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. +ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: diff --git a/versioned_docs/version-21/ORDA/orda-events.md b/versioned_docs/version-21/ORDA/orda-events.md index 16940a5c6fe0f5..37e6f72be80965 100644 --- a/versioned_docs/version-21/ORDA/orda-events.md +++ b/versioned_docs/version-21/ORDA/orda-events.md @@ -29,7 +29,7 @@ You cannot directly trigger event function execution. Events are called automati :::info Compatibility note -ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. +ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: From b68e111c7cbffd715e27f8a87ee741ebf3e694a0 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 13 Nov 2025 18:38:11 +0100 Subject: [PATCH 13/75] Updated blob to print settings - removed old stuff --- docs/commands-legacy/blob-to-print-settings.md | 8 ++------ .../commands-legacy/blob-to-print-settings.md | 8 ++------ .../version-21/commands-legacy/blob-to-print-settings.md | 8 ++------ 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/docs/commands-legacy/blob-to-print-settings.md b/docs/commands-legacy/blob-to-print-settings.md index 31cc5f522e5274..a474607f73cc37 100644 --- a/docs/commands-legacy/blob-to-print-settings.md +++ b/docs/commands-legacy/blob-to-print-settings.md @@ -17,14 +17,14 @@ displayed_sidebar: docs ## Description -The **BLOB to print settings** command replaces the current 4D print settings with the parameters stored in the *printSettings* BLOB. This BLOB must have been generated by the [Print settings to BLOB](print-settings-to-blob.md) command or the 4D Pack command (see below). +The **BLOB to print settings** command replaces the current 4D print settings with the parameters stored in the *printSettings* BLOB. This BLOB must have been generated by the [Print settings to BLOB](print-settings-to-blob.md) command. The *params* parameter allows you to define how to handle the basic "number of copies" and "page range" settings: * If you pass 0 or omit this parameter, the values stored in the BLOB are restored, * If you pass 1, the values are reset to default: the number of copies is set to 1 and the page range is set to "all pages". -The parameters are applied to the [current 4D printing settings](../settings/compatibility.md) as long as no command such as *\_o\_PAGE SETUP*, [SET PRINT OPTION](set-print-option.md) or [PRINT SELECTION](print-selection.md) without the > parameter modifies them. The parameters set are used more particularly by the [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) and [QR REPORT](qr-report.md) commands, as well as by the menu commands of 4D, including those of the Design environment. +The parameters are applied to the [current 4D printing settings](../settings/compatibility.md) as long as no command such as [SET PRINT OPTION](set-print-option.md) or [PRINT SELECTION](print-selection.md) without the > parameter modifies them. The parameters set are used more particularly by the [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) and [QR REPORT](qr-report.md) commands, as well as by the menu commands of 4D, including those of the Design environment. The [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), and [PRINT RECORD](print-record.md) commands must be called with the *\>* parameter (if applicable) in order for the settings defined by **BLOB to print settings** to be kept. @@ -43,10 +43,6 @@ The command returns one of the following status codes: The *printSettings* BLOB can be saved and read on both platforms. However, even if some print settings are common, some others are platform-specific and depend on the drivers and system versions. If the same *printSettings* BLOB is shared between both platforms, you may lose parts of the information. When used in a heterogeneous environment, in order to restore the maximum settings available for each platform (and not only the common part), it is recommended that you work with two *printSettings* BLOBs, one for each platform. -### Compatibility with 4D Pack commands - -The print settings BLOBs generated by the legacy command from 4D Pack can be loaded and used by the **BLOB to print settings** command. Note however that if they are saved using [Print settings to BLOB](print-settings-to-blob.md), they are converted and can no longer be opened using . The **BLOB to print settings** command stores much more printing information than . - ## Example You want to apply print settings previously saved to disk to the current 4D printing context: diff --git a/versioned_docs/version-20-R10/commands-legacy/blob-to-print-settings.md b/versioned_docs/version-20-R10/commands-legacy/blob-to-print-settings.md index 31cc5f522e5274..a474607f73cc37 100644 --- a/versioned_docs/version-20-R10/commands-legacy/blob-to-print-settings.md +++ b/versioned_docs/version-20-R10/commands-legacy/blob-to-print-settings.md @@ -17,14 +17,14 @@ displayed_sidebar: docs ## Description -The **BLOB to print settings** command replaces the current 4D print settings with the parameters stored in the *printSettings* BLOB. This BLOB must have been generated by the [Print settings to BLOB](print-settings-to-blob.md) command or the 4D Pack command (see below). +The **BLOB to print settings** command replaces the current 4D print settings with the parameters stored in the *printSettings* BLOB. This BLOB must have been generated by the [Print settings to BLOB](print-settings-to-blob.md) command. The *params* parameter allows you to define how to handle the basic "number of copies" and "page range" settings: * If you pass 0 or omit this parameter, the values stored in the BLOB are restored, * If you pass 1, the values are reset to default: the number of copies is set to 1 and the page range is set to "all pages". -The parameters are applied to the [current 4D printing settings](../settings/compatibility.md) as long as no command such as *\_o\_PAGE SETUP*, [SET PRINT OPTION](set-print-option.md) or [PRINT SELECTION](print-selection.md) without the > parameter modifies them. The parameters set are used more particularly by the [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) and [QR REPORT](qr-report.md) commands, as well as by the menu commands of 4D, including those of the Design environment. +The parameters are applied to the [current 4D printing settings](../settings/compatibility.md) as long as no command such as [SET PRINT OPTION](set-print-option.md) or [PRINT SELECTION](print-selection.md) without the > parameter modifies them. The parameters set are used more particularly by the [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) and [QR REPORT](qr-report.md) commands, as well as by the menu commands of 4D, including those of the Design environment. The [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), and [PRINT RECORD](print-record.md) commands must be called with the *\>* parameter (if applicable) in order for the settings defined by **BLOB to print settings** to be kept. @@ -43,10 +43,6 @@ The command returns one of the following status codes: The *printSettings* BLOB can be saved and read on both platforms. However, even if some print settings are common, some others are platform-specific and depend on the drivers and system versions. If the same *printSettings* BLOB is shared between both platforms, you may lose parts of the information. When used in a heterogeneous environment, in order to restore the maximum settings available for each platform (and not only the common part), it is recommended that you work with two *printSettings* BLOBs, one for each platform. -### Compatibility with 4D Pack commands - -The print settings BLOBs generated by the legacy command from 4D Pack can be loaded and used by the **BLOB to print settings** command. Note however that if they are saved using [Print settings to BLOB](print-settings-to-blob.md), they are converted and can no longer be opened using . The **BLOB to print settings** command stores much more printing information than . - ## Example You want to apply print settings previously saved to disk to the current 4D printing context: diff --git a/versioned_docs/version-21/commands-legacy/blob-to-print-settings.md b/versioned_docs/version-21/commands-legacy/blob-to-print-settings.md index 31cc5f522e5274..a474607f73cc37 100644 --- a/versioned_docs/version-21/commands-legacy/blob-to-print-settings.md +++ b/versioned_docs/version-21/commands-legacy/blob-to-print-settings.md @@ -17,14 +17,14 @@ displayed_sidebar: docs ## Description -The **BLOB to print settings** command replaces the current 4D print settings with the parameters stored in the *printSettings* BLOB. This BLOB must have been generated by the [Print settings to BLOB](print-settings-to-blob.md) command or the 4D Pack command (see below). +The **BLOB to print settings** command replaces the current 4D print settings with the parameters stored in the *printSettings* BLOB. This BLOB must have been generated by the [Print settings to BLOB](print-settings-to-blob.md) command. The *params* parameter allows you to define how to handle the basic "number of copies" and "page range" settings: * If you pass 0 or omit this parameter, the values stored in the BLOB are restored, * If you pass 1, the values are reset to default: the number of copies is set to 1 and the page range is set to "all pages". -The parameters are applied to the [current 4D printing settings](../settings/compatibility.md) as long as no command such as *\_o\_PAGE SETUP*, [SET PRINT OPTION](set-print-option.md) or [PRINT SELECTION](print-selection.md) without the > parameter modifies them. The parameters set are used more particularly by the [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) and [QR REPORT](qr-report.md) commands, as well as by the menu commands of 4D, including those of the Design environment. +The parameters are applied to the [current 4D printing settings](../settings/compatibility.md) as long as no command such as [SET PRINT OPTION](set-print-option.md) or [PRINT SELECTION](print-selection.md) without the > parameter modifies them. The parameters set are used more particularly by the [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) and [QR REPORT](qr-report.md) commands, as well as by the menu commands of 4D, including those of the Design environment. The [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), and [PRINT RECORD](print-record.md) commands must be called with the *\>* parameter (if applicable) in order for the settings defined by **BLOB to print settings** to be kept. @@ -43,10 +43,6 @@ The command returns one of the following status codes: The *printSettings* BLOB can be saved and read on both platforms. However, even if some print settings are common, some others are platform-specific and depend on the drivers and system versions. If the same *printSettings* BLOB is shared between both platforms, you may lose parts of the information. When used in a heterogeneous environment, in order to restore the maximum settings available for each platform (and not only the common part), it is recommended that you work with two *printSettings* BLOBs, one for each platform. -### Compatibility with 4D Pack commands - -The print settings BLOBs generated by the legacy command from 4D Pack can be loaded and used by the **BLOB to print settings** command. Note however that if they are saved using [Print settings to BLOB](print-settings-to-blob.md), they are converted and can no longer be opened using . The **BLOB to print settings** command stores much more printing information than . - ## Example You want to apply print settings previously saved to disk to the current 4D printing context: From 8dd964ed3799a9183b7160abce287792da454343 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 14 Nov 2025 09:44:42 +0100 Subject: [PATCH 14/75] New Crowdin updates (#2995) * New translations updates.md (French) * New translations listbox_overview.md (French) * New translations listbox_overview.md (French) * New translations writeprointerface.md (French) * New translations license-info.md (French) * New translations listbox_overview.md (French) * New translations writeprointerface.md (French) * New translations license-info.md (French) * New translations listbox_overview.md (French) * New translations license-info.md (French) * New translations writeprointerface.md (French) * New translations updates.md (Spanish) * New translations listbox_overview.md (Spanish) * New translations quick-tour.md (Spanish) * New translations debugger.md (Spanish) * New translations clientserver.md (Spanish) * New translations formeditor.md (Spanish) * New translations listbox_overview.md (Spanish) * New translations entities.md (Spanish) * New translations privileges.md (Spanish) * New translations compiler.md (Spanish) * New translations vp-import-from-object.md (Spanish) * New translations sessions.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations license-info.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations tcpeventclass.md (Spanish) * New translations new-log-file.md (Spanish) * New translations openaimessage.md (Spanish) * New translations asynchronous-call.md (Spanish) * New translations orda-events.md (Spanish) * New translations field-properties.md (Spanish) * New translations udpeventclass.md (Spanish) * New translations openaiembeddingsapi.md (Spanish) * New translations tcpeventclass.md (Spanish) * New translations udpeventclass.md (Spanish) * New translations debugger.md (Spanish) * New translations field-properties.md (Spanish) * New translations listbox_overview.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations entities.md (Spanish) * New translations orda-events.md (Spanish) * New translations compiler.md (Spanish) * New translations vp-import-from-object.md (Spanish) * New translations vp-set-data-context.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations configuring.md (Spanish) * New translations sessions.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations openaiembeddingsapi.md (Spanish) * New translations openaimessage.md (Spanish) * New translations asynchronous-call.md (Spanish) * New translations write-class-method.md (Spanish) * New translations command-name.md (Spanish) * New translations license-info.md (Spanish) * New translations new-log-file.md (Spanish) * New translations tcpeventclass.md (Spanish) * New translations udpeventclass.md (Spanish) * New translations quick-tour.md (Spanish) * New translations debugger.md (Spanish) * New translations clientserver.md (Spanish) * New translations field-properties.md (Spanish) * New translations formeditor.md (Spanish) * New translations listbox_overview.md (Spanish) * New translations write-class-method.md (Spanish) * New translations command-name.md (Spanish) * New translations license-info.md (Spanish) * New translations new-log-file.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations entities.md (Spanish) * New translations orda-events.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations compiler.md (Spanish) * New translations vp-import-from-object.md (Spanish) * New translations vp-set-data-context.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations configuring.md (Spanish) * New translations sessions.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations openaiembeddingsapi.md (Spanish) * New translations openaimessage.md (Spanish) * New translations asynchronous-call.md (Spanish) * New translations updates.md (Japanese) * New translations listbox_overview.md (Japanese) * New translations listbox_overview.md (Japanese) * New translations writeprointerface.md (Japanese) * New translations license-info.md (Japanese) * New translations listbox_overview.md (Japanese) * New translations writeprointerface.md (Japanese) * New translations license-info.md (Japanese) * New translations listbox_overview.md (Japanese) * New translations license-info.md (Japanese) * New translations writeprointerface.md (Japanese) * New translations updates.md (Portuguese, Brazilian) * New translations listbox_overview.md (Portuguese, Brazilian) * New translations listbox_overview.md (Portuguese, Brazilian) * New translations writeprointerface.md (Portuguese, Brazilian) * New translations license-info.md (Portuguese, Brazilian) * New translations listbox_overview.md (Portuguese, Brazilian) * New translations writeprointerface.md (Portuguese, Brazilian) * New translations license-info.md (Portuguese, Brazilian) * New translations listbox_overview.md (Portuguese, Brazilian) * New translations license-info.md (Portuguese, Brazilian) * New translations writeprointerface.md (Portuguese, Brazilian) --- .../current/API/TCPEventClass.md | 2 +- .../current/API/UDPEventClass.md | 2 +- .../current/Concepts/quick-tour.md | 2 +- .../current/Debugging/debugger.md | 2 +- .../current/Desktop/clientServer.md | 2 +- .../current/Develop/field-properties.md | 4 ++-- .../current/FormEditor/formEditor.md | 2 +- .../current/FormObjects/listbox_overview.md | 4 +--- .../current/FormObjects/webArea_overview.md | 2 +- .../current/ORDA/entities.md | 2 +- .../current/ORDA/orda-events.md | 4 ++-- .../current/ORDA/privileges.md | 4 ++-- .../current/Project/compiler.md | 2 +- .../ViewPro/commands/vp-import-from-object.md | 6 +++--- .../current/WebServer/sessions.md | 4 ++-- .../WritePro/commands/wp-import-document.md | 2 +- .../current/WritePro/managing-formulas.md | 2 +- .../current/WritePro/writeprointerface.md | 2 +- .../aikit/Classes/OpenAIEmbeddingsAPI.md | 2 +- .../current/aikit/Classes/OpenAIMessage.md | 2 +- .../current/aikit/asynchronous-call.md | 2 +- .../current/commands/license-info.md | 6 ++++++ .../current/commands/new-log-file.md | 2 +- .../version-20-R10/API/TCPEventClass.md | 2 +- .../version-20-R10/API/UDPEventClass.md | 2 +- .../version-20-R10/Debugging/debugger.md | 2 +- .../Develop/field-properties.md | 4 ++-- .../FormObjects/listbox_overview.md | 4 +--- .../FormObjects/webArea_overview.md | 2 +- .../version-20-R10/ORDA/entities.md | 2 +- .../version-20-R10/ORDA/orda-events.md | 2 +- .../version-20-R10/Project/compiler.md | 2 +- .../ViewPro/commands/vp-import-from-object.md | 6 +++--- .../ViewPro/commands/vp-set-data-context.md | 8 ++++---- .../commands/vp-set-workbook-options.md | 4 ++-- .../version-20-R10/ViewPro/configuring.md | 20 +++++++++---------- .../version-20-R10/WebServer/sessions.md | 2 +- .../WritePro/commands/wp-import-document.md | 2 +- .../WritePro/managing-formulas.md | 2 +- .../WritePro/writeprointerface.md | 2 +- .../aikit/Classes/OpenAIEmbeddingsAPI.md | 2 +- .../aikit/Classes/OpenAIMessage.md | 2 +- .../version-20-R10/aikit/asynchronous-call.md | 2 +- .../code-editor/write-class-method.md | 20 +++++++++---------- .../version-20-R10/commands/command-name.md | 2 +- .../version-20-R10/commands/license-info.md | 7 ++++++- .../version-20-R10/commands/new-log-file.md | 2 +- .../FormObjects/listbox_overview.md | 4 +--- .../version-20/Notes/updates.md | 2 ++ .../version-21/API/TCPEventClass.md | 2 +- .../version-21/API/UDPEventClass.md | 2 +- .../version-21/Concepts/quick-tour.md | 2 +- .../version-21/Debugging/debugger.md | 2 +- .../version-21/Desktop/clientServer.md | 2 +- .../version-21/Develop/field-properties.md | 4 ++-- .../version-21/FormEditor/formEditor.md | 2 +- .../FormObjects/listbox_overview.md | 4 +--- .../FormObjects/webArea_overview.md | 2 +- .../version-21/ORDA/entities.md | 2 +- .../version-21/ORDA/orda-events.md | 4 ++-- .../version-21/ORDA/ordaClasses.md | 2 +- .../version-21/ORDA/privileges.md | 4 ++-- .../version-21/Project/compiler.md | 2 +- .../ViewPro/commands/vp-import-from-object.md | 6 +++--- .../ViewPro/commands/vp-set-data-context.md | 8 ++++---- .../commands/vp-set-workbook-options.md | 4 ++-- .../version-21/ViewPro/configuring.md | 20 +++++++++---------- .../version-21/WebServer/sessions.md | 4 ++-- .../WritePro/commands/wp-import-document.md | 2 +- .../version-21/WritePro/managing-formulas.md | 2 +- .../version-21/WritePro/writeprointerface.md | 2 +- .../aikit/Classes/OpenAIEmbeddingsAPI.md | 2 +- .../version-21/aikit/Classes/OpenAIMessage.md | 4 ++-- .../version-21/aikit/asynchronous-call.md | 2 +- .../code-editor/write-class-method.md | 20 +++++++++---------- .../version-21/commands/command-name.md | 2 +- .../version-21/commands/license-info.md | 7 ++++++- .../version-21/commands/new-log-file.md | 2 +- .../current/FormObjects/listbox_overview.md | 12 +++++------ .../current/WritePro/writeprointerface.md | 2 +- .../current/commands/license-info.md | 6 ++++++ .../FormObjects/listbox_overview.md | 4 +--- .../WritePro/writeprointerface.md | 2 +- .../version-20-R10/commands/license-info.md | 7 ++++++- .../FormObjects/listbox_overview.md | 4 +--- .../version-20/Notes/updates.md | 2 ++ .../FormObjects/listbox_overview.md | 4 +--- .../version-21/WritePro/writeprointerface.md | 2 +- .../version-21/commands/license-info.md | 7 ++++++- .../current/FormObjects/listbox_overview.md | 4 +--- .../current/WritePro/writeprointerface.md | 2 +- .../current/commands/license-info.md | 6 ++++++ .../FormObjects/listbox_overview.md | 4 +--- .../WritePro/writeprointerface.md | 2 +- .../version-20-R10/commands/license-info.md | 7 ++++++- .../FormObjects/listbox_overview.md | 4 +--- .../version-20/Notes/updates.md | 2 ++ .../FormObjects/listbox_overview.md | 4 +--- .../version-21/WritePro/writeprointerface.md | 2 +- .../version-21/commands/license-info.md | 7 ++++++- .../current/FormObjects/listbox_overview.md | 4 +--- .../current/WritePro/writeprointerface.md | 2 +- .../current/commands/license-info.md | 6 ++++++ .../FormObjects/listbox_overview.md | 4 +--- .../WritePro/writeprointerface.md | 2 +- .../version-20-R10/commands/license-info.md | 7 ++++++- .../FormObjects/listbox_overview.md | 4 +--- .../version-20/Notes/updates.md | 2 ++ .../FormObjects/listbox_overview.md | 4 +--- .../version-21/WritePro/writeprointerface.md | 2 +- .../version-21/commands/license-info.md | 7 ++++++- 111 files changed, 239 insertions(+), 199 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md index 52e2c9108a0367..c5ed7c2561fabb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md @@ -35,7 +35,7 @@ Las siguientes propiedades están disponibles: #### Descripción -The `.address` property contains the IP address of the remote machine. +La propiedad `.address` contiene la dirección IP de la máquina remota. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/UDPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/UDPEventClass.md index 50ee0a4757f21a..60a92ed745b94b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/UDPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/UDPEventClass.md @@ -34,7 +34,7 @@ Las siguientes propiedades están disponibles: #### Descripción -The `.address` property contains the IP address of the remote machine. +La propiedad `.address` contiene la dirección IP de la máquina remota. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md index 11a8bfb346184d..cbb2891ff73f2a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md @@ -428,4 +428,4 @@ Las siguientes convenciones se utilizan en la documentación del lenguaje 4D: - los caracteres{ }`(llaves) indican parámetros opcionales. Por ejemplo,`.delete( { option : Integer } )\` significa que el parámetro *option* puede omitirse al llamar a la función. - la notación `{ ; ...param }` indica un número ilimitado de parámetros. Por ejemplo, `.concat( value : any { ;...valueN } ) : Collection` significa que se puede pasar a la función un número ilimitado de valores de cualquier tipo. -- the `any` keyword is used for parameters that can be of any type (number, text, boolean, date, time, object, collection...). +- la palabra clave `any` se utiliza para parámetros que pueden ser de cualquier tipo (número, texto, booleano, fecha, hora, objeto, colección...). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Debugging/debugger.md b/i18n/es/docusaurus-plugin-content-docs/current/Debugging/debugger.md index 61da45ff362f5b..e684cd82a4f2a2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Debugging/debugger.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Debugging/debugger.md @@ -393,7 +393,7 @@ Esta área también le permite añadir o eliminar [**puntos de ruptura**](breakp ### Prototipo -The prototype of the currently executed method or function in the Call chain is displayed on the top of the pane: +El prototipo del método o de la función en ejecución en la cadena de llamadas se muestra en la parte superior del panel: ![prototype](../assets/en/Debugging/prototype.png) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Desktop/clientServer.md b/i18n/es/docusaurus-plugin-content-docs/current/Desktop/clientServer.md index fa5d056395d3c4..689333389298b9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Desktop/clientServer.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Desktop/clientServer.md @@ -120,7 +120,7 @@ Todos los procedimientos almacenados en el servidor comparten la misma sesión d ### Compartiendo la sesión con páginas Qodly en áreas web -Remote client sessions can be used to handle Client/Server applications where [Qodly pages](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview) are used for the interface, running on remote machines. With this configuration, your applications have modern CSS-based web interfaces but still benefit from the power and simplicity of integrated client/server development. In such applications, Qodly pages are executed within standard 4D [Web areas](../FormObjects/webArea_overview.md). +Remote client sessions can be used to handle Client/Server applications where [Qodly pages](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview) are used for the interface, running on remote machines. With this configuration, your applications have modern CSS-based web interfaces but still benefit from the power and simplicity of integrated client/server development. En tales aplicaciones, las páginas Qodly se ejecutan dentro de las [áreas Web](../FormObjects/webArea_overview.md) 4D estándar. Para gestionar esta configuración, necesita utilizar sesiones cliente remotas. Actually, requests coming from both the remote 4D application and its Qodly pages loaded in Web areas need to work inside a single user session. You just have to share the same session between the remote client and its web pages so that you can have the same [session storage](../API/SessionClass.md#storage) and client license, whatever the request origin. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md b/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md index 26c51c0f4661d3..f51a7c77821969 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md @@ -15,7 +15,7 @@ Puede introducir cualquier nombre de clase válido en esta propiedad, incluyendo - Clases usuario (por ejemplo, `cs.MyClass`) - Clases 4D integradas (por ejemplo, `4D.File`, `4D.Folder`) -- [Exposed](../Extensions/develop-components.md#sharing-of-classes) component-defined classes (e.g. `cs.MyComponent.MyClass`) +- las clases [exposed](../Extensions/develop-components.md#sharing-of-classes) definidas por componentes (por ejemplo, `cs.MyComponent.MyClass`) Si introduce un nombre de clase inválido, se activa una advertencia y se rechaza la entrada. @@ -31,6 +31,6 @@ To retrieve the associated class name at runtime, use the [`classID`](../API/Dat ### Ver también -- [Blog post: Stricter class-based typing for objects](https://blog.4d.com/stricter-class-based-typing-for-objects/) +- [Articulo de blog: tipificación más estricta de objetos basada en clases](https://blog.4d.com/stricter-class-based-typing-for-objects/) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/formEditor.md b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/formEditor.md index 97382d62de2ca5..cf6cf60af1898f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/formEditor.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/formEditor.md @@ -157,7 +157,7 @@ Para seleccionar un objeto utilizando la Lista de propiedades: 1. Seleccione el nombre del objeto en la lista desplegable de objetos situada en la parte superior de la lista de propiedades. Con estos dos métodos, puede seleccionar un objeto que esté oculto por otros objetos o que se encuentre fuera del área visible de la ventana actual. Para deseleccionar un objeto, haga clic fuera del límite del objeto o **Mayúsculas+clic** en el objeto. -> It is also possible to select objects by double-clicking them in the result window of "Find in design" operation. +> También es posible seleccionar objetos haciendo doble clic en la ventana de resultados de la operación "Buscar en diseño". ### Selección de múltiples objetos diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md index c0eb2ead1f7645..70f95f80f4359e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md @@ -1035,7 +1035,7 @@ Ejemplos: ARRAY TEXT($RequiredList;0) APPEND TO ARRAY($RequiredList;"Open") APPEND TO ARRAY($RequiredList;"Closed") - var $ob Object + var $ob : Object OB SET($ob;"valueType";"text") OB SET($ob;"value";"Closed") OB SET ARRAY($ob;"requiredList";$RequiredList) @@ -1100,9 +1100,7 @@ Ejemplos: OB SET($ob;"requiredListReference";<>List) ``` -``` ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) -``` #### choiceListName y choiceListReference diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md index 9563e559ec2d24..649f7739c0fabc 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md @@ -57,7 +57,7 @@ $4d.HelloWorld(); ### Controlar el acceso a $4d -Con [`WA SET CONTEXT`](../commands/wa-set-context.md), los desarrolladores pueden controlar lo que puede estar disponible a través de `$4d` desde un área Web. Using this command you define a **context object** that declares for example 4D methods through formulas and class instances. +Con [`WA SET CONTEXT`](../commands/wa-set-context.md), los desarrolladores pueden controlar lo que puede estar disponible a través de `$4d` desde un área Web. Este comando permite definir un **objeto contexto** que declara, por ejemplo, los métodos 4D a través de fórmulas e instancias de clase. Para verificar el contexto definido actualmente, utilice [`WA Get context`](../commands/wa-get-context.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/entities.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/entities.md index 759037097c7260..c720b3faff06f5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/entities.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/entities.md @@ -462,7 +462,7 @@ Function event restrict() -> $result : cs.*DataClassName*Selection Esta función se llama cada vez que se solicita una selección de entidades o una entidad de la dataclass. El filtro se ejecuta una vez, cuando se crea la selección de entidades. -El filtro debe devolver una selección de entidades de la clase de datos. It can be an entity selection built upon a query, stored in the [`Storage`](../API/SessionClass.md#storage), etc. +El filtro debe devolver una selección de entidades de la clase de datos. Puede ser una selección de entidades basada en una petición, almacenada en el [`Storage`](../API/SessionClass.md#storage), etc. :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index e0a193b6847649..6b204d9893d00f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -443,7 +443,7 @@ Función evento afterSave($event : Object) // código ``` -This event is triggered just after an entity is saved in the data file, when at least one attribute was modified. No se ejecuta si no se ha tocado ningún atributo en la entidad. +Este evento se activa justo después de guardar una entidad en el archivo de datos, cuando se ha modificado al menos un atributo. No se ejecuta si no se ha tocado ningún atributo en la entidad. This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. Por ejemplo, se puede utilizar para enviar un correo electrónico de confirmación después de guardar los datos. O, en caso de error al guardar los datos, puede hacer una cancelación para restaurar un estado consistente de los datos. @@ -454,7 +454,7 @@ La función recibe un [objeto *event*](#event-parameter) como parámetro. #### Ejemplo -If an error occurred in the above saving event, the attribute value is reset accordingly in the `afterSave` event: +Si se produce un error en el evento de guardado anterior, el valor del atributo se restablece en consecuencia en el evento `afterSave`: ```4d // ProductsEntity class diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md index 72cf097a8cd4f4..24876efc710352 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -253,7 +253,7 @@ The `restrictedByDefault` property configures how every [resource](#resources) a :::note Compatibilidad -- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Tenga en cuenta que esta configuración está hecha a medida para un inicio rápido y un desarrollo fluido. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- Al **crear un nuevo proyecto**, la propiedad `restrictedByDefault` se establece en **false** en el archivo *roles.json* (ver abajo). Tenga en cuenta que esta configuración está hecha a medida para un inicio rápido y un desarrollo fluido. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). - In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. ::: @@ -263,7 +263,7 @@ The `restrictedByDefault` property configures how every [resource](#resources) a Depending on your environment, the recommended settings are: - **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. -- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. Esto permite un acceso más fácil durante el desarrollo y la depuración, con la posibilidad de aplicar gradualmente restricciones. ### Archivo `Roles_Errors.json` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Project/compiler.md b/i18n/es/docusaurus-plugin-content-docs/current/Project/compiler.md index 77cb73581775e8..094ac783b93138 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Project/compiler.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Project/compiler.md @@ -146,7 +146,7 @@ El modo de escritura directa es opcional sólo en proyectos convertidos. Se util ::: -Select **All variables are typed (Direct typing)** option in the **Compilation Path** menu to enable the direct typing mode. Cuando se selecciona esta opción, las demás opciones de compatibilidad pierden su utilidad y dejan de mostrarse. +Seleccione la opción **Todas las variables se escriben (escritura directa)** en el menú **Ruta de compilación** para activar el modo de escritura directa. Cuando se selecciona esta opción, las demás opciones de compatibilidad pierden su utilidad y dejan de mostrarse. Se recomienda utilizar esta opción, ya que proporciona flexibilidad y eficiencia. El concepto de escritura directa asume que todos los elementos se declaran directamente donde están definidos en su código. Solo tiene que asegurarse de que todas sus variables son declaradas utilizando la [sintaxis 'var'](../Concepts/variables.md#declaring-variables) y que sus parámetros de método y función son declarados [en sus prototipos](../Concepts/parameters.md) (la función [Verificar sintaxis](#check-syntax) puede ayudarle a detectar declaraciones faltantes o no válidas). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-from-object.md b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-from-object.md index 5de7dd5a04b0d3..9198703b14db21 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-from-object.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-from-object.md @@ -37,9 +37,9 @@ Se devuelve un error si el objeto *viewPro* no es válido. En *paramObj*, puede pasar la siguiente propiedad: -| Propiedad | Tipo | Descripción | -| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| formula | 4D.Function | (Optional) Callback function to be executed when the object is loaded and all 4D custom functions have responded. Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | +| Propiedad | Tipo | Descripción | +| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| formula | 4D.Function | (Opcional) Función de retrollamada a ser ejecutada cuando el objeto está cargado y todas las funciones personalizadas 4D han respondido. Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | Los siguientes parámetros se pueden utilizar en el método de retrollamada: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md index daeaf088d5b5d0..ae2eec52be1b58 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -211,11 +211,11 @@ End if El servidor web 4D le permite generar, compartir y utilizar tokens de sesión OTP (One-Time Passcode). Los tokens de sesión OTP se utilizan para asegurar comunicaciones con aplicaciones de terceros o sitios web. For information on OTP, please refer to the [One-time password page](https://en.wikipedia.org/wiki/One-time_password) on Wikipedia. -In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. +In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Normalmente, una aplicación de terceros envía un correo electrónico de confirmación que contiene un enlace de retrollamada en el que el usuario tiene que hacer clic. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. :::tips Entradas de blog relacionadas -[Connect Your Web Apps to Third-Party Systems](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) +[Conecte sus aplicaciones web a sistemas de terceros](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md index 625a6d5df492ed..05064f54bf9dd9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md @@ -58,7 +58,7 @@ Puede pasar un objeto para definir cómo se gestionan los siguientes atributos d | secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | | fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | | borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | -| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Specifies the preferred typeface to use when different typefaces are defined for a single font property in OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | +| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | | htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | | importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md index 9b3b514f1617ea..35e3b3b515c769 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md @@ -201,7 +201,7 @@ En este caso, puede mostrar las referencias a fórmulas como símbolos ![](../as Para mostrar las referencias a fórmulas como símbolos, puede: -- check the **Display formula source as symbol option** in the Property list (see *Configuring View properties*), or +- active la opción **Mostrar origen de fórmula como símbolo** en la lista de propiedades (consulte *Configuración de las propiedades de la vista*), o - utilizar la acción estándar displayFormulaAsSymbol (ver *Uso de las acciones estándar de 4D Write Pro*), o bien - usa el comando [**WP SET VIEW PROPERTIES**](commands-legacy/wp-set-view-properties.md) con el selector `wk display formula as symbol` en **True**. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index febf1ee68cb3e9..b5c8070174f4d1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -312,7 +312,7 @@ La interfaz de 4D Write Pro utiliza OpenAI, para lo cual necesita suministrar su ::: -### Limitaciones (Developer Preview) +### Limitaciones En la aplicación actual, la función tiene las siguientes limitaciones: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIEmbeddingsAPI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIEmbeddingsAPI.md index 7d99ad8f1204a6..af4bea76385705 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIEmbeddingsAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIEmbeddingsAPI.md @@ -46,7 +46,7 @@ var $vectors : Collection:=$result.vectors // collection of 4D.Vector > Before using embeddings with a specific service, please check its documentation to see if embeddings are supported, and select the appropriate embedding model. -For example, for Mistral, use [mistral-embed or codestral-embed](https://docs.mistral.ai/capabilities/embeddings/) +Por ejemplo, para Mistral, utilice [mistral-embed o codestral-embed](https://docs.mistral.ai/capabilities/embeddings/) ```4d var $result:=$client.embeddings.create($inputs; "mistral-embed") diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index 217e62d372ad77..223b4de69615ec 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -50,7 +50,7 @@ $message.addImageURL("http://example.com/image.jpg"; "high") ### Responder a un mensaje de llamada de herramienta -When an assistant needs to use external functions, it generates a message with `tool_calls` to request function execution. +Cuando un asistente necesita utilizar las funciones externas, genera un mensaje con `tool_calls` para solicitar la ejecución de la función. **Mensaje del asistente solicitando las llamadas de la herramienta:** diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/asynchronous-call.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/asynchronous-call.md index ff565bb2601c7b..ed81a7d77e2b7a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/asynchronous-call.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/asynchronous-call.md @@ -25,7 +25,7 @@ The asynchronous method is based on [4D.HTTPRequest](https://developer.4d.com/do $client.models.list({formula: Formula(MyReceiveMethod($1))}) ``` -`$1` will be an instance of [OpenAIModelListResult](Classes/OpenAIModelListResult.md), so `MyReceiveMethod` method could be: +`$1` será una instancia de [OpenAIModelListResult](Classes/OpenAIModelListResult.md), por lo que el método `MyReceiveMethod` podría ser: ```4d #DECLARE($result: cs.AIKit.OpenAIModelListResult) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/license-info.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/license-info.md index 2dd755075547c4..c2f031693f6363 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/license-info.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/license-info.md @@ -20,6 +20,12 @@ displayed_sidebar: docs Si el comando se ejecuta en una aplicación 4D que no utiliza localmente una licencia (por ejemplo, 4D remote), el comando devuelve un objeto Null. +:::note + +Este comando recarga los archivos de licencia desde el disco y actualiza los derechos asociados si han sido modificados. + +::: + El objeto devuelto contiene las siguientes propiedades: ```json diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/new-log-file.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/new-log-file.md index a3a706e3623201..cd29afa0fbc333 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/new-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/new-log-file.md @@ -25,7 +25,7 @@ caja de diálogo. The file is renamed with the current backup numbers of the database and of the log file, as shown in the following example: DatabaseName\[BackupNum-LogBackupNum\].journal. Por ejemplo: -- If the MyDatabase.4DD database has been saved 4 times, the last backup file will be named MyDatabase\[0004\].4BK. El nombre del primer “segment” del archivo de registro será, por lo tanto, MyDatabase\[0004-0001\].journal. +- Si la base de datos MyDatabase.4DD ha sido guardada 4 veces, el último archivo de copia de seguridad se llamará MyDatabase\[0004\].4BK. El nombre del primer “segment” del archivo de registro será, por lo tanto, MyDatabase\[0004-0001\].journal. - If the MyDatabase.4DD database has been saved 3 times and the log file has been saved 5 times since, the name of the 6th backup of the log file will be MyDatabase\[0003-0006\].journal. :::warning diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md index 52e2c9108a0367..c5ed7c2561fabb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md @@ -35,7 +35,7 @@ Las siguientes propiedades están disponibles: #### Descripción -The `.address` property contains the IP address of the remote machine. +La propiedad `.address` contiene la dirección IP de la máquina remota. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/UDPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/UDPEventClass.md index 50ee0a4757f21a..60a92ed745b94b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/UDPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/UDPEventClass.md @@ -34,7 +34,7 @@ Las siguientes propiedades están disponibles: #### Descripción -The `.address` property contains the IP address of the remote machine. +La propiedad `.address` contiene la dirección IP de la máquina remota. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugger.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugger.md index 61da45ff362f5b..e684cd82a4f2a2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugger.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugger.md @@ -393,7 +393,7 @@ Esta área también le permite añadir o eliminar [**puntos de ruptura**](breakp ### Prototipo -The prototype of the currently executed method or function in the Call chain is displayed on the top of the pane: +El prototipo del método o de la función en ejecución en la cadena de llamadas se muestra en la parte superior del panel: ![prototype](../assets/en/Debugging/prototype.png) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md index 26c51c0f4661d3..f51a7c77821969 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md @@ -15,7 +15,7 @@ Puede introducir cualquier nombre de clase válido en esta propiedad, incluyendo - Clases usuario (por ejemplo, `cs.MyClass`) - Clases 4D integradas (por ejemplo, `4D.File`, `4D.Folder`) -- [Exposed](../Extensions/develop-components.md#sharing-of-classes) component-defined classes (e.g. `cs.MyComponent.MyClass`) +- las clases [exposed](../Extensions/develop-components.md#sharing-of-classes) definidas por componentes (por ejemplo, `cs.MyComponent.MyClass`) Si introduce un nombre de clase inválido, se activa una advertencia y se rechaza la entrada. @@ -31,6 +31,6 @@ To retrieve the associated class name at runtime, use the [`classID`](../API/Dat ### Ver también -- [Blog post: Stricter class-based typing for objects](https://blog.4d.com/stricter-class-based-typing-for-objects/) +- [Articulo de blog: tipificación más estricta de objetos basada en clases](https://blog.4d.com/stricter-class-based-typing-for-objects/) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md index 3f61236a812366..ab7f86953d4573 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md @@ -1102,9 +1102,7 @@ Ejemplos: OB SET($ob;"requiredListReference";<>List) ``` - ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) - ``` +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName y choiceListReference diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md index 0370bcc059fdce..008310d5b2f8a3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md @@ -51,7 +51,7 @@ $4d.HelloWorld(); ### Controlar el acceso a $4d -Con [`WA SET CONTEXT`](../commands/wa-set-context.md), los desarrolladores pueden controlar lo que puede estar disponible a través de `$4d` desde un área Web. Using this command you define a **context object** that declares for example 4D methods through formulas and class instances. +Con [`WA SET CONTEXT`](../commands/wa-set-context.md), los desarrolladores pueden controlar lo que puede estar disponible a través de `$4d` desde un área Web. Este comando permite definir un **objeto contexto** que declara, por ejemplo, los métodos 4D a través de fórmulas e instancias de clase. Para verificar el contexto definido actualmente, utilice [`WA Get context`](../commands/wa-get-context.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md index ceb0d989f2296a..5acb3f71d8b59c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md @@ -462,7 +462,7 @@ Function event restrict() -> $result : cs.*DataClassName*Selection Esta función se llama cada vez que se solicita una selección de entidades o una entidad de la dataclass. El filtro se ejecuta una vez, cuando se crea la selección de entidades. -El filtro debe devolver una selección de entidades de la clase de datos. It can be an entity selection built upon a query, stored in the [`Storage`](../API/SessionClass.md#storage), etc. +El filtro debe devolver una selección de entidades de la clase de datos. Puede ser una selección de entidades basada en una petición, almacenada en el [`Storage`](../API/SessionClass.md#storage), etc. :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md index ada6076fe08286..dbba01abbd9f8a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md @@ -88,7 +88,7 @@ Las funciones de evento aceptan un único objeto *event* como parámetro. Cuando Este evento se activa cada vez que se modifica un valor en la entidad. - if you defined the function at the entity level (first syntax), it is triggered for modifications on any attribute of the entity. -- if you defined the function at the attribute level (second syntax), it is triggered only for modifications on this attribute. +- si ha definido la función en el nivel de atributo (segunda sintaxis), se activa sólo para modificaciones en este atributo. Este evento se activa tan pronto como el motor de 4D Server / 4D detecta una modificación del valor del atributo que puede deberse a las siguientes acciones: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/compiler.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/compiler.md index 77cb73581775e8..094ac783b93138 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/compiler.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/compiler.md @@ -146,7 +146,7 @@ El modo de escritura directa es opcional sólo en proyectos convertidos. Se util ::: -Select **All variables are typed (Direct typing)** option in the **Compilation Path** menu to enable the direct typing mode. Cuando se selecciona esta opción, las demás opciones de compatibilidad pierden su utilidad y dejan de mostrarse. +Seleccione la opción **Todas las variables se escriben (escritura directa)** en el menú **Ruta de compilación** para activar el modo de escritura directa. Cuando se selecciona esta opción, las demás opciones de compatibilidad pierden su utilidad y dejan de mostrarse. Se recomienda utilizar esta opción, ya que proporciona flexibilidad y eficiencia. El concepto de escritura directa asume que todos los elementos se declaran directamente donde están definidos en su código. Solo tiene que asegurarse de que todas sus variables son declaradas utilizando la [sintaxis 'var'](../Concepts/variables.md#declaring-variables) y que sus parámetros de método y función son declarados [en sus prototipos](../Concepts/parameters.md) (la función [Verificar sintaxis](#check-syntax) puede ayudarle a detectar declaraciones faltantes o no válidas). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-from-object.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-from-object.md index 5de7dd5a04b0d3..9198703b14db21 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-from-object.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-from-object.md @@ -37,9 +37,9 @@ Se devuelve un error si el objeto *viewPro* no es válido. En *paramObj*, puede pasar la siguiente propiedad: -| Propiedad | Tipo | Descripción | -| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| formula | 4D.Function | (Optional) Callback function to be executed when the object is loaded and all 4D custom functions have responded. Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | +| Propiedad | Tipo | Descripción | +| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| formula | 4D.Function | (Opcional) Función de retrollamada a ser ejecutada cuando el objeto está cargado y todas las funciones personalizadas 4D han respondido. Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | Los siguientes parámetros se pueden utilizar en el método de retrollamada: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-data-context.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-data-context.md index 8a32e26833bd1a..23421aa679b365 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-data-context.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-data-context.md @@ -42,10 +42,10 @@ Para pasar un valor de tiempo en *dataObj* o *dataColl*, encapsúlelo en un obje En *options*, puede pasar un objeto que especifique las opciones adicionales. Las propiedades posibles son: -| Propiedad | Tipo | Descripción | -| ------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| reset | Object | True para restablecer el contenido de la hoja antes de cargar el nuevo contexto, False (por defecto) en caso contrario. | -| autoGenerateColumns | Object | Sólo se utiliza cuando los datos son una colección. True (por defecto) para especificar que las columnas deben generarse automáticamente cuando se vincula el contexto de datos. In this case, the following rules apply:
    • If *dataColl* is a collection of objects, attribute names are used as column titles (see example 2).
    • If *dataColl* contains subcollections of scalar values, each subcollection defines the values in a row (see example 3). La primera subcolección determina cuántas columnas se crean.
    | +| Propiedad | Tipo | Descripción | +| ------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| reset | Object | True para restablecer el contenido de la hoja antes de cargar el nuevo contexto, False (por defecto) en caso contrario. | +| autoGenerateColumns | Object | Sólo se utiliza cuando los datos son una colección. True (por defecto) para especificar que las columnas deben generarse automáticamente cuando se vincula el contexto de datos. In this case, the following rules apply:
    • If *dataColl* is a collection of objects, attribute names are used as column titles (see example 2).
    • Si *dataColl* contiene subcolecciones de valores escalares, cada subcolección define los valores de una línea (ver el ejemplo 3). La primera subcolección determina cuántas columnas se crean.
    | En *sheet*, pase el índice de la hoja que recibirá el contexto de datos. Si no se pasa ningún índice, el contexto se aplica a la hoja actual. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md index d059be21bf1f19..2843b740b83dc6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md @@ -80,11 +80,11 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | showDragFillTip | boolean | Mostrar la punta de arrastrar y soltar. | | showHorizontalScrollbar | boolean | Mostrar la barra de desplazamiento horizontal. | | showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Solo se muestra la punta de redimensionamiento horizontal.
    vk show resize tip none 0 No resize tip is displayed.
    vk show resize tip row 2 Only the vertical resize tip is displayed.
    | -| showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Only the horizontal scroll tip is displayed.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Solo se muestra la punta de desplazamiento vertical.
    | +| showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Solo se muestra la punta de desplazamiento vertical.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Solo se muestra la punta de desplazamiento vertical.
    | | showVerticalScrollbar | boolean | Mostrar la barra de desplazamiento vertical. | | tabEditable | boolean | La pestaña de la hoja se puede editar. | | tabNavigationVisible | boolean | Mostrar la navegación por pestañas. | -| tabStripPosition | number | Posición de la barra de pestañas. Available values:
    ConstantValueDescription
    vk tab strip position bottom 0 Tab strip position is relative to the bottom of the workbook.
    vk tab strip position left 2 Tab strip position is relative to the left of the workbook.
    vk tab strip position right 3 Tab strip position is relative to the right of the workbook.
    vk tab strip position top 1 Tab strip position is relative to the top of the workbook.
    | +| tabStripPosition | number | Posición de la barra de pestañas. Available values:
    ConstantValueDescription
    vk tab strip position bottom 0 Tab strip position is relative to the bottom of the workbook.
    vk tab strip position left2 La posición de la barra de tabulación es relativa a la parte izquierda del libro de trabajo.
    vk tab strip position right 3 Tab strip position is relative to the right of the workbook.
    vk tab strip position top 1 La posición de la barra de tabulación es relativa a la parte superior del libro de trabajo.
    | | tabStripRatio | number | Valor porcentual (0,x) que especifica qué parte del espacio horizontal se asignará al tabulador. El resto del área horizontal (1 - 0.x) se asignará a la barra de desplazamiento horizontal. | | tabStripVisible | boolean | Mostrar la barra de pestañas de la hoja. | | tabStripWidth | number | Ancho de la etiqueta cuando la posición es izquierda o derecha. Por defecto y el mínimo es 80. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/configuring.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/configuring.md index 7d22996a114d4a..e389c32c3190f5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/configuring.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/configuring.md @@ -332,16 +332,16 @@ Los atributos de orientación se utilizan para especificar la dirección del dis Los atributos página se utilizan para especificar la configuración general de impresión del documento. -| Propiedad | Tipo | Descripción | -| --------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| blackAndWhite | boolean | Impresión sólo en blanco y negro.

    Valor por defecto = false

    **Nota**: este atributo no afecta a los archivos PDF. Se mantienen los colores en los PDF.

    | -| centering | entero largo | Como se centran los contenidos en la página impresa. Valores disponibles: `vk print centering both`, `vk print centering horizontal`, `vk print centering none` (por defecto), `vk print centering vertical` | -| firstPageNumber | entero largo | El número de página a imprimir en la primera página. Valor por defecto = 1 | -| pageOrder | entero largo | Las páginas del pedido se imprimen. Valores disponibles: `vk print page order auto` (por defecto), `vk print page order down then over`, `vk print page order over then down`. | -| pageRange | text | El rango de páginas a imprimir | -| qualityFactor | entero largo | El factor de calidad para la impresión (1 - 8). The higher the quality factor, the better the printing quality, however printing performance may be affected.

    Valor por defecto = 2

    | -| useMax | boolean | Sólo se imprimen columnas y líneas con datos.

    Valor por defecto = true

    | -| zoomFactor | real | La cantidad para ampliar o reducir la página impresa.

    Valor por defecto = 1

    | +| Propiedad | Tipo | Descripción | +| --------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| blackAndWhite | boolean | Impresión sólo en blanco y negro.

    Valor por defecto = false

    **Nota**: este atributo no afecta a los archivos PDF. Se mantienen los colores en los PDF.

    | +| centering | entero largo | Como se centran los contenidos en la página impresa. Valores disponibles: `vk print centering both`, `vk print centering horizontal`, `vk print centering none` (por defecto), `vk print centering vertical` | +| firstPageNumber | entero largo | El número de página a imprimir en la primera página. Valor por defecto = 1 | +| pageOrder | entero largo | Las páginas del pedido se imprimen. Valores disponibles: `vk print page order auto` (por defecto), `vk print page order down then over`, `vk print page order over then down`. | +| pageRange | text | El rango de páginas a imprimir | +| qualityFactor | entero largo | El factor de calidad para la impresión (1 - 8). Cuanto mayor sea el factor de calidad, mejor será la calidad de impresión, aunque el rendimiento de la impresión puede verse afectado.

    Valor por defecto = 2

    | +| useMax | boolean | Sólo se imprimen columnas y líneas con datos.

    Valor por defecto = true

    | +| zoomFactor | real | La cantidad para ampliar o reducir la página impresa.

    Valor por defecto = 1

    | ### Tamaño del papel diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index 241f091dac5e5e..1c57acedaefb02 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -211,7 +211,7 @@ End if El servidor web 4D le permite generar, compartir y utilizar tokens de sesión OTP (One-Time Passcode). Los tokens de sesión OTP se utilizan para asegurar comunicaciones con aplicaciones de terceros o sitios web. For information on OTP, please refer to the [One-time password page](https://en.wikipedia.org/wiki/One-time_password) on Wikipedia. -In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. +In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Normalmente, una aplicación de terceros envía un correo electrónico de confirmación que contiene un enlace de retrollamada en el que el usuario tiene que hacer clic. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. ### Generalidades diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md index 625a6d5df492ed..05064f54bf9dd9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md @@ -58,7 +58,7 @@ Puede pasar un objeto para definir cómo se gestionan los siguientes atributos d | secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | | fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | | borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | -| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Specifies the preferred typeface to use when different typefaces are defined for a single font property in OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | +| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | | htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | | importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/managing-formulas.md index a46f2511021a9f..aa3861e5fb4023 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/managing-formulas.md @@ -177,7 +177,7 @@ En este caso, puede mostrar las referencias a fórmulas como símbolos ![](../as Para mostrar las referencias a fórmulas como símbolos, puede: -- check the **Display formula source as symbol option** in the Property list (see *Configuring View properties*), or +- active la opción **Mostrar origen de fórmula como símbolo** en la lista de propiedades (consulte *Configuración de las propiedades de la vista*), o - utilizar la acción estándar displayFormulaAsSymbol (ver *Uso de las acciones estándar de 4D Write Pro*), o bien - usa el comando [**WP SET VIEW PROPERTIES**](commands-legacy/wp-set-view-properties.md) con el selector `wk display formula as symbol` en **True**. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md index febf1ee68cb3e9..b5c8070174f4d1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md @@ -312,7 +312,7 @@ La interfaz de 4D Write Pro utiliza OpenAI, para lo cual necesita suministrar su ::: -### Limitaciones (Developer Preview) +### Limitaciones En la aplicación actual, la función tiene las siguientes limitaciones: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIEmbeddingsAPI.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIEmbeddingsAPI.md index 7d99ad8f1204a6..af4bea76385705 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIEmbeddingsAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIEmbeddingsAPI.md @@ -46,7 +46,7 @@ var $vectors : Collection:=$result.vectors // collection of 4D.Vector > Before using embeddings with a specific service, please check its documentation to see if embeddings are supported, and select the appropriate embedding model. -For example, for Mistral, use [mistral-embed or codestral-embed](https://docs.mistral.ai/capabilities/embeddings/) +Por ejemplo, para Mistral, utilice [mistral-embed o codestral-embed](https://docs.mistral.ai/capabilities/embeddings/) ```4d var $result:=$client.embeddings.create($inputs; "mistral-embed") diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md index 25479618986396..95969f8925c9ff 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md @@ -5,7 +5,7 @@ title: OpenAIMessage # OpenAIMessage -The `OpenAIMessage` class represents a structured message containing a role, content, and an optional user. This class provides methods to manipulate and retrieve the text and other content of the message. +La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, un contenido y un usuario opcional. This class provides methods to manipulate and retrieve the text and other content of the message. ## Propiedades diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/asynchronous-call.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/asynchronous-call.md index a5f4fd483ff3a6..90a8a0f9ad4cd2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/asynchronous-call.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/asynchronous-call.md @@ -21,7 +21,7 @@ The asynchronous method is based on [4D.HTTPRequest](https://developer.4d.com/do $client.models.list({formula: Formula(MyReceiveMethod($1))}) ``` -`$1` will be an instance of [OpenAIModelListResult](Classes/OpenAIModelListResult.md), so `MyReceiveMethod` method could be: +`$1` será una instancia de [OpenAIModelListResult](Classes/OpenAIModelListResult.md), por lo que el método `MyReceiveMethod` podría ser: ```4d #DECLARE($result: cs.AIKit.OpenAIModelListResult) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/code-editor/write-class-method.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/code-editor/write-class-method.md index f047f57dab287d..a02505ed1f8e28 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/code-editor/write-class-method.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/code-editor/write-class-method.md @@ -25,16 +25,16 @@ If you are used to coding with **VS Code**, you can also use this editor with 4D Cada ventana del Editor de Código tiene una barra de herramientas que ofrece acceso instantáneo a las funciones básicas relacionadas con la ejecución y edición de código. -| Elemento | Icono | Descripción | -| ------------------------------------ | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Ejecución del método** | ![execute-method](../assets/en/code-editor/execute-method.png) | Cuando se trabaja con métodos, cada ventana del Editor de Código tiene un botón que puede utilizarse para ejecutar el método actual. Using the menu associated with this button, you can choose the type of execution:
    • **Run new process**: Creates a process and runs the method in standard mode in this process.
    • **Run and debug new process**: Creates a new process and displays the method in the Debugger window for step by step execution in this process.
    • **Run in Application process**: Runs the method in standard mode in the context of the Application process (in other words, the record display window).
    • **Run and debug in Application process**: Displays the method in the Debugger window for step by step execution in the context of the Application process (in other words, the record display window).
    For more information on method execution, see [Calling Project Methods](../Concepts/methods.md#calling-project-methods). | -| **Buscar en el método** | ![search-icon](../assets/en/code-editor/search.png) | Muestra el [*Área de búsqueda*](#find-and-replace). | -| **Macros** | ![macros-button](../assets/en/code-editor/macros.png) | Inserta una macro en la selección. Haga clic en la flecha desplegable para mostrar una lista de macros disponibles. Para obtener más información sobre como crear e instanciar macros, consulte [Macros](#macros). | -| **Expandir todo/Contraer todo** | ![expand-collapse-button](../assets/en/code-editor/expand-collapse-all.png) | Estos botones permiten expandir o contraer todas las estructuras de flujo de control del código. | -| **Información del método** | ![method-information-icon](../assets/en/code-editor/method-information.png) | Muestra el diálogo [Propiedades del método](../Project/code-overview.md#project-method-properties) (sólo métodos proyecto). | -| **Últimos valores del portapapeles** | ![last-clipboard-values-icon](../assets/en/code-editor/last-clipboard-values.png) | Muestra los últimos valores almacenados en el portapapeles. | -| **Portapapeles** | ![clipboard icons](../assets/en/code-editor/clipboards.png) | Nueve portapapeles disponibles en el editor de código. Puede [utilizar estos portapapeles](#clipboards) haciendo clic directamente en ellos o utilizando los atajos de teclado. Puede utilizar la opción [Preferencias](Preferences/methods.md#options-1) para ocultarlas. | -| **Menú desplegable de navegación** | ![code-navigation-icons](../assets/en/code-editor/tags.png) | Le permite navegar dentro de métodos y clases con contenido etiquetado automáticamente o marcadores declarados manualmente. Ver abajo | +| Elemento | Icono | Descripción | +| ------------------------------------ | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Ejecución del método** | ![execute-method](../assets/en/code-editor/execute-method.png) | Cuando se trabaja con métodos, cada ventana del Editor de Código tiene un botón que puede utilizarse para ejecutar el método actual. Using the menu associated with this button, you can choose the type of execution:
    • **Run new process**: Creates a process and runs the method in standard mode in this process.
    • **Run and debug new process**: Creates a new process and displays the method in the Debugger window for step by step execution in this process.
    • **Run in Application process**: Runs the method in standard mode in the context of the Application process (in other words, the record display window).
    • **Run and debug in Application process**: Displays the method in the Debugger window for step by step execution in the context of the Application process (in other words, the record display window).
    Para más información sobre la ejecución de métodos, ver [Llamada a métodos proyecto](../Concepts/methods.md#calling-project-methods). | +| **Buscar en el método** | ![search-icon](../assets/en/code-editor/search.png) | Muestra el [*Área de búsqueda*](#find-and-replace). | +| **Macros** | ![macros-button](../assets/en/code-editor/macros.png) | Inserta una macro en la selección. Haga clic en la flecha desplegable para mostrar una lista de macros disponibles. Para obtener más información sobre como crear e instanciar macros, consulte [Macros](#macros). | +| **Expandir todo/Contraer todo** | ![expand-collapse-button](../assets/en/code-editor/expand-collapse-all.png) | Estos botones permiten expandir o contraer todas las estructuras de flujo de control del código. | +| **Información del método** | ![method-information-icon](../assets/en/code-editor/method-information.png) | Muestra el diálogo [Propiedades del método](../Project/code-overview.md#project-method-properties) (sólo métodos proyecto). | +| **Últimos valores del portapapeles** | ![last-clipboard-values-icon](../assets/en/code-editor/last-clipboard-values.png) | Muestra los últimos valores almacenados en el portapapeles. | +| **Portapapeles** | ![clipboard icons](../assets/en/code-editor/clipboards.png) | Nueve portapapeles disponibles en el editor de código. Puede [utilizar estos portapapeles](#clipboards) haciendo clic directamente en ellos o utilizando los atajos de teclado. Puede utilizar la opción [Preferencias](Preferences/methods.md#options-1) para ocultarlas. | +| **Menú desplegable de navegación** | ![code-navigation-icons](../assets/en/code-editor/tags.png) | Le permite navegar dentro de métodos y clases con contenido etiquetado automáticamente o marcadores declarados manualmente. Ver abajo | ### Área de edición diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md index 188b150d0f8a71..81ea01647a075f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md @@ -28,7 +28,7 @@ displayed_sidebar: docs ## Descripción -The **Command name** command returns the name as well as (optionally) the properties of the command whose command number you pass in *command*.The number of each command is indicated in the Explorer as well as in the Properties area of this documentation. +The **Command name** command returns the name as well as (optionally) the properties of the command whose command number you pass in *command*.El número de cada comando se indica tanto en el explorador como en el área Propiedades de esta documentación. **Compatibility note:** A command name may vary from one 4D version to the next (commands renamed), this command was used in previous versions to designate a command directly by means of its number, especially in non-tokenized portions of code. This need has diminished over time as 4D continues to evolve because, for non-tokenized statements (formulas), 4D now provides a token syntax. This syntax allows you to avoid potential problems due to variations in command names as well as other elements such as tables, while still being able to type these names in a legible manner (for more information, refer to the *Using tokens in formulas* section). Tenga en cuenta también que la opción \*[Usar parámetros del sistema regional\* de las Preferencias](../Preferences/methods.md#4d-programming-language-use-regional-system-settings) le permite seguir usando el idioma francés en una versión francesa de 4D. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md index 0831a61bd841cc..8a4db22e4f7d89 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md @@ -20,7 +20,12 @@ displayed_sidebar: docs Si el comando se ejecuta en una aplicación 4D que no utiliza localmente una licencia (por ejemplo, 4D remote), el comando devuelve un objeto Null. -El objeto devuelto contiene las siguientes propiedades: +:::note + +Este comando recarga los archivos de licencia desde el disco y actualiza los derechos asociados si han sido modificados. + +::: +The returned object contains the following properties: ```json { diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/new-log-file.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/new-log-file.md index a3a706e3623201..cd29afa0fbc333 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/new-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/new-log-file.md @@ -25,7 +25,7 @@ caja de diálogo. The file is renamed with the current backup numbers of the database and of the log file, as shown in the following example: DatabaseName\[BackupNum-LogBackupNum\].journal. Por ejemplo: -- If the MyDatabase.4DD database has been saved 4 times, the last backup file will be named MyDatabase\[0004\].4BK. El nombre del primer “segment” del archivo de registro será, por lo tanto, MyDatabase\[0004-0001\].journal. +- Si la base de datos MyDatabase.4DD ha sido guardada 4 veces, el último archivo de copia de seguridad se llamará MyDatabase\[0004\].4BK. El nombre del primer “segment” del archivo de registro será, por lo tanto, MyDatabase\[0004-0001\].journal. - If the MyDatabase.4DD database has been saved 3 times and the log file has been saved 5 times since, the name of the 6th backup of the log file will be MyDatabase\[0003-0006\].journal. :::warning diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md index c64e5189564b6f..5d420a34536890 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md @@ -1176,9 +1176,7 @@ Ejemplos: OB SET($ob;"value";2) //muestra Londres por defecto OB SET($ob;"requiredListReference";<>List) ``` - - - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName y choiceListReference diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md index f1bbda81ce6386..843be639654a7d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -15,6 +15,8 @@ Lea las [**novedades de 4D 20**](https://blog.4d.com/en-whats-new-in-4d-v20/), l #### Lo más destacado +- 4D 20.8 LTS is certified on Windows 11 25H2. +- 4D 20.8 LTS is certified on macOS Tahoe (macOS 26). - [**Lista de bugs corregidos**](https://bugs.4d.com/fixes?version=20.8): lista de todos los bugs corregidos en 4D 20.8 LTS. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md index 52e2c9108a0367..c5ed7c2561fabb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md @@ -35,7 +35,7 @@ Las siguientes propiedades están disponibles: #### Descripción -The `.address` property contains the IP address of the remote machine. +La propiedad `.address` contiene la dirección IP de la máquina remota. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/UDPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/UDPEventClass.md index 50ee0a4757f21a..60a92ed745b94b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/UDPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/UDPEventClass.md @@ -34,7 +34,7 @@ Las siguientes propiedades están disponibles: #### Descripción -The `.address` property contains the IP address of the remote machine. +La propiedad `.address` contiene la dirección IP de la máquina remota. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md index 11a8bfb346184d..cbb2891ff73f2a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md @@ -428,4 +428,4 @@ Las siguientes convenciones se utilizan en la documentación del lenguaje 4D: - los caracteres{ }`(llaves) indican parámetros opcionales. Por ejemplo,`.delete( { option : Integer } )\` significa que el parámetro *option* puede omitirse al llamar a la función. - la notación `{ ; ...param }` indica un número ilimitado de parámetros. Por ejemplo, `.concat( value : any { ;...valueN } ) : Collection` significa que se puede pasar a la función un número ilimitado de valores de cualquier tipo. -- the `any` keyword is used for parameters that can be of any type (number, text, boolean, date, time, object, collection...). +- la palabra clave `any` se utiliza para parámetros que pueden ser de cualquier tipo (número, texto, booleano, fecha, hora, objeto, colección...). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Debugging/debugger.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Debugging/debugger.md index 61da45ff362f5b..e684cd82a4f2a2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Debugging/debugger.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Debugging/debugger.md @@ -393,7 +393,7 @@ Esta área también le permite añadir o eliminar [**puntos de ruptura**](breakp ### Prototipo -The prototype of the currently executed method or function in the Call chain is displayed on the top of the pane: +El prototipo del método o de la función en ejecución en la cadena de llamadas se muestra en la parte superior del panel: ![prototype](../assets/en/Debugging/prototype.png) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md index fa5d056395d3c4..689333389298b9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md @@ -120,7 +120,7 @@ Todos los procedimientos almacenados en el servidor comparten la misma sesión d ### Compartiendo la sesión con páginas Qodly en áreas web -Remote client sessions can be used to handle Client/Server applications where [Qodly pages](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview) are used for the interface, running on remote machines. With this configuration, your applications have modern CSS-based web interfaces but still benefit from the power and simplicity of integrated client/server development. In such applications, Qodly pages are executed within standard 4D [Web areas](../FormObjects/webArea_overview.md). +Remote client sessions can be used to handle Client/Server applications where [Qodly pages](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview) are used for the interface, running on remote machines. With this configuration, your applications have modern CSS-based web interfaces but still benefit from the power and simplicity of integrated client/server development. En tales aplicaciones, las páginas Qodly se ejecutan dentro de las [áreas Web](../FormObjects/webArea_overview.md) 4D estándar. Para gestionar esta configuración, necesita utilizar sesiones cliente remotas. Actually, requests coming from both the remote 4D application and its Qodly pages loaded in Web areas need to work inside a single user session. You just have to share the same session between the remote client and its web pages so that you can have the same [session storage](../API/SessionClass.md#storage) and client license, whatever the request origin. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md index 26c51c0f4661d3..f51a7c77821969 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md @@ -15,7 +15,7 @@ Puede introducir cualquier nombre de clase válido en esta propiedad, incluyendo - Clases usuario (por ejemplo, `cs.MyClass`) - Clases 4D integradas (por ejemplo, `4D.File`, `4D.Folder`) -- [Exposed](../Extensions/develop-components.md#sharing-of-classes) component-defined classes (e.g. `cs.MyComponent.MyClass`) +- las clases [exposed](../Extensions/develop-components.md#sharing-of-classes) definidas por componentes (por ejemplo, `cs.MyComponent.MyClass`) Si introduce un nombre de clase inválido, se activa una advertencia y se rechaza la entrada. @@ -31,6 +31,6 @@ To retrieve the associated class name at runtime, use the [`classID`](../API/Dat ### Ver también -- [Blog post: Stricter class-based typing for objects](https://blog.4d.com/stricter-class-based-typing-for-objects/) +- [Articulo de blog: tipificación más estricta de objetos basada en clases](https://blog.4d.com/stricter-class-based-typing-for-objects/) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/formEditor.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/formEditor.md index 55169d4e3065a5..4d524e01e782fb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/formEditor.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/formEditor.md @@ -314,7 +314,7 @@ Para repartir los objetos con igual espacio: 1. Seleccione tres o más objetos y haga clic en la herramienta Distribuir correspondiente. -2. In the toolbar, click on the distribution tool that corresponds to the distribution you want to apply.
    ![](../assets/en/FormEditor/distributionTool.png)
    OR
    Select a distribution menu command from the **Align** submenu in the **Object** menu or from the context menu of the editor. +2. En la barra de herramientas, haga clic en la herramienta de distribución que corresponde a la distribución que desea aplicar.
    ![](../assets/en/FormEditor/distributionTool.png)
    OR
    Select a distribution menu command from the **Align** submenu in the **Object** menu or from the context menu of the editor. 4D distribuye los objetos consecuentemente. Los objetos se distribuyen utilizando la distancia a sus centros y se utiliza como referencia la mayor distancia entre dos objetos consecutivos. Para distribuir objetos utilizando la caja de diálogo Alinear y Distribuir: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md index 3f61236a812366..ab7f86953d4573 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md @@ -1102,9 +1102,7 @@ Ejemplos: OB SET($ob;"requiredListReference";<>List) ``` - ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) - ``` +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName y choiceListReference diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md index 9563e559ec2d24..649f7739c0fabc 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md @@ -57,7 +57,7 @@ $4d.HelloWorld(); ### Controlar el acceso a $4d -Con [`WA SET CONTEXT`](../commands/wa-set-context.md), los desarrolladores pueden controlar lo que puede estar disponible a través de `$4d` desde un área Web. Using this command you define a **context object** that declares for example 4D methods through formulas and class instances. +Con [`WA SET CONTEXT`](../commands/wa-set-context.md), los desarrolladores pueden controlar lo que puede estar disponible a través de `$4d` desde un área Web. Este comando permite definir un **objeto contexto** que declara, por ejemplo, los métodos 4D a través de fórmulas e instancias de clase. Para verificar el contexto definido actualmente, utilice [`WA Get context`](../commands/wa-get-context.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/entities.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/entities.md index ceb0d989f2296a..5acb3f71d8b59c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/entities.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/entities.md @@ -462,7 +462,7 @@ Function event restrict() -> $result : cs.*DataClassName*Selection Esta función se llama cada vez que se solicita una selección de entidades o una entidad de la dataclass. El filtro se ejecuta una vez, cuando se crea la selección de entidades. -El filtro debe devolver una selección de entidades de la clase de datos. It can be an entity selection built upon a query, stored in the [`Storage`](../API/SessionClass.md#storage), etc. +El filtro debe devolver una selección de entidades de la clase de datos. Puede ser una selección de entidades basada en una petición, almacenada en el [`Storage`](../API/SessionClass.md#storage), etc. :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index 4fc5a4b70f00eb..4e2033c1d4caa1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -443,7 +443,7 @@ Función evento afterSave($event : Object) // código ``` -This event is triggered just after an entity is saved in the data file, when at least one attribute was modified. No se ejecuta si no se ha tocado ningún atributo en la entidad. +Este evento se activa justo después de guardar una entidad en el archivo de datos, cuando se ha modificado al menos un atributo. No se ejecuta si no se ha tocado ningún atributo en la entidad. This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. Por ejemplo, se puede utilizar para enviar un correo electrónico de confirmación después de guardar los datos. O, en caso de error al guardar los datos, puede hacer una cancelación para restaurar un estado consistente de los datos. @@ -454,7 +454,7 @@ La función recibe un [objeto *event*](#event-parameter) como parámetro. #### Ejemplo -If an error occurred in the above saving event, the attribute value is reset accordingly in the `afterSave` event: +Si se produce un error en el evento de guardado anterior, el valor del atributo se restablece en consecuencia en el evento `afterSave`: ```4d // ProductsEntity class diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index 8d48e8c9c0f133..fced235a8d45cd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -338,7 +338,7 @@ La función `Class constructor` es activada por los siguientes comandos y funcio :::note Notas -- The [`entity.clone()`](../API/EntityClass.md#clone) function does not trigger the entity Class constructor. +- La función [`entity.clone()`](../API/EntityClass.md#clone) no activa el constructor de la clase de la entidad. - Los registros creados a nivel de la base de datos 4D utilizando comandos del lenguaje clásico 4D o acciones estándar no activan el Class constructor de la entidad. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index 72cf097a8cd4f4..24876efc710352 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -253,7 +253,7 @@ The `restrictedByDefault` property configures how every [resource](#resources) a :::note Compatibilidad -- When **creating a new project**, the `restrictedByDefault` property is set to **false** in the *roles.json* file (see below). Tenga en cuenta que esta configuración está hecha a medida para un inicio rápido y un desarrollo fluido. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). +- Al **crear un nuevo proyecto**, la propiedad `restrictedByDefault` se establece en **false** en el archivo *roles.json* (ver abajo). Tenga en cuenta que esta configuración está hecha a medida para un inicio rápido y un desarrollo fluido. In production environment, [it is recommended to set the `restrictedByDefault` and `forceLogin` properties to **true**](#configuring-restrictedbydefault-and-forcelogin-properties). - In **projects converted from previous releases**; when enabling access to Qodly Studio using the [One-click configuration dialog](https://developer.4d.com/qodly/4DQodlyPro/gettingStarted#one-click-configuration), the `restrictedByDefault` property is added with value **true** in the *roles.json* file. ::: @@ -263,7 +263,7 @@ The `restrictedByDefault` property configures how every [resource](#resources) a Depending on your environment, the recommended settings are: - **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. -- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. This allows easier access during development and debugging, with the possibility to gradually apply restrictions. +- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. Esto permite un acceso más fácil durante el desarrollo y la depuración, con la posibilidad de aplicar gradualmente restricciones. ### Archivo `Roles_Errors.json` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Project/compiler.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Project/compiler.md index 77cb73581775e8..094ac783b93138 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Project/compiler.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Project/compiler.md @@ -146,7 +146,7 @@ El modo de escritura directa es opcional sólo en proyectos convertidos. Se util ::: -Select **All variables are typed (Direct typing)** option in the **Compilation Path** menu to enable the direct typing mode. Cuando se selecciona esta opción, las demás opciones de compatibilidad pierden su utilidad y dejan de mostrarse. +Seleccione la opción **Todas las variables se escriben (escritura directa)** en el menú **Ruta de compilación** para activar el modo de escritura directa. Cuando se selecciona esta opción, las demás opciones de compatibilidad pierden su utilidad y dejan de mostrarse. Se recomienda utilizar esta opción, ya que proporciona flexibilidad y eficiencia. El concepto de escritura directa asume que todos los elementos se declaran directamente donde están definidos en su código. Solo tiene que asegurarse de que todas sus variables son declaradas utilizando la [sintaxis 'var'](../Concepts/variables.md#declaring-variables) y que sus parámetros de método y función son declarados [en sus prototipos](../Concepts/parameters.md) (la función [Verificar sintaxis](#check-syntax) puede ayudarle a detectar declaraciones faltantes o no válidas). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-from-object.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-from-object.md index 5de7dd5a04b0d3..9198703b14db21 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-from-object.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-from-object.md @@ -37,9 +37,9 @@ Se devuelve un error si el objeto *viewPro* no es válido. En *paramObj*, puede pasar la siguiente propiedad: -| Propiedad | Tipo | Descripción | -| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| formula | 4D.Function | (Optional) Callback function to be executed when the object is loaded and all 4D custom functions have responded. Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | +| Propiedad | Tipo | Descripción | +| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| formula | 4D.Function | (Opcional) Función de retrollamada a ser ejecutada cuando el objeto está cargado y todas las funciones personalizadas 4D han respondido. Ver [Pasar un método de retrollamada (fórmula)](vp-export-document.md#passing-a-callback-method-formula). | Los siguientes parámetros se pueden utilizar en el método de retrollamada: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-data-context.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-data-context.md index 8a32e26833bd1a..23421aa679b365 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-data-context.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-data-context.md @@ -42,10 +42,10 @@ Para pasar un valor de tiempo en *dataObj* o *dataColl*, encapsúlelo en un obje En *options*, puede pasar un objeto que especifique las opciones adicionales. Las propiedades posibles son: -| Propiedad | Tipo | Descripción | -| ------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| reset | Object | True para restablecer el contenido de la hoja antes de cargar el nuevo contexto, False (por defecto) en caso contrario. | -| autoGenerateColumns | Object | Sólo se utiliza cuando los datos son una colección. True (por defecto) para especificar que las columnas deben generarse automáticamente cuando se vincula el contexto de datos. In this case, the following rules apply:
    • If *dataColl* is a collection of objects, attribute names are used as column titles (see example 2).
    • If *dataColl* contains subcollections of scalar values, each subcollection defines the values in a row (see example 3). La primera subcolección determina cuántas columnas se crean.
    | +| Propiedad | Tipo | Descripción | +| ------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| reset | Object | True para restablecer el contenido de la hoja antes de cargar el nuevo contexto, False (por defecto) en caso contrario. | +| autoGenerateColumns | Object | Sólo se utiliza cuando los datos son una colección. True (por defecto) para especificar que las columnas deben generarse automáticamente cuando se vincula el contexto de datos. In this case, the following rules apply:
    • If *dataColl* is a collection of objects, attribute names are used as column titles (see example 2).
    • Si *dataColl* contiene subcolecciones de valores escalares, cada subcolección define los valores de una línea (ver el ejemplo 3). La primera subcolección determina cuántas columnas se crean.
    | En *sheet*, pase el índice de la hoja que recibirá el contexto de datos. Si no se pasa ningún índice, el contexto se aplica a la hoja actual. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md index d059be21bf1f19..2843b740b83dc6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md @@ -80,11 +80,11 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | showDragFillTip | boolean | Mostrar la punta de arrastrar y soltar. | | showHorizontalScrollbar | boolean | Mostrar la barra de desplazamiento horizontal. | | showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Solo se muestra la punta de redimensionamiento horizontal.
    vk show resize tip none 0 No resize tip is displayed.
    vk show resize tip row 2 Only the vertical resize tip is displayed.
    | -| showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Only the horizontal scroll tip is displayed.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Solo se muestra la punta de desplazamiento vertical.
    | +| showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Solo se muestra la punta de desplazamiento vertical.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Solo se muestra la punta de desplazamiento vertical.
    | | showVerticalScrollbar | boolean | Mostrar la barra de desplazamiento vertical. | | tabEditable | boolean | La pestaña de la hoja se puede editar. | | tabNavigationVisible | boolean | Mostrar la navegación por pestañas. | -| tabStripPosition | number | Posición de la barra de pestañas. Available values:
    ConstantValueDescription
    vk tab strip position bottom 0 Tab strip position is relative to the bottom of the workbook.
    vk tab strip position left 2 Tab strip position is relative to the left of the workbook.
    vk tab strip position right 3 Tab strip position is relative to the right of the workbook.
    vk tab strip position top 1 Tab strip position is relative to the top of the workbook.
    | +| tabStripPosition | number | Posición de la barra de pestañas. Available values:
    ConstantValueDescription
    vk tab strip position bottom 0 Tab strip position is relative to the bottom of the workbook.
    vk tab strip position left2 La posición de la barra de tabulación es relativa a la parte izquierda del libro de trabajo.
    vk tab strip position right 3 Tab strip position is relative to the right of the workbook.
    vk tab strip position top 1 La posición de la barra de tabulación es relativa a la parte superior del libro de trabajo.
    | | tabStripRatio | number | Valor porcentual (0,x) que especifica qué parte del espacio horizontal se asignará al tabulador. El resto del área horizontal (1 - 0.x) se asignará a la barra de desplazamiento horizontal. | | tabStripVisible | boolean | Mostrar la barra de pestañas de la hoja. | | tabStripWidth | number | Ancho de la etiqueta cuando la posición es izquierda o derecha. Por defecto y el mínimo es 80. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/configuring.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/configuring.md index 7d22996a114d4a..e389c32c3190f5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/configuring.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/configuring.md @@ -332,16 +332,16 @@ Los atributos de orientación se utilizan para especificar la dirección del dis Los atributos página se utilizan para especificar la configuración general de impresión del documento. -| Propiedad | Tipo | Descripción | -| --------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| blackAndWhite | boolean | Impresión sólo en blanco y negro.

    Valor por defecto = false

    **Nota**: este atributo no afecta a los archivos PDF. Se mantienen los colores en los PDF.

    | -| centering | entero largo | Como se centran los contenidos en la página impresa. Valores disponibles: `vk print centering both`, `vk print centering horizontal`, `vk print centering none` (por defecto), `vk print centering vertical` | -| firstPageNumber | entero largo | El número de página a imprimir en la primera página. Valor por defecto = 1 | -| pageOrder | entero largo | Las páginas del pedido se imprimen. Valores disponibles: `vk print page order auto` (por defecto), `vk print page order down then over`, `vk print page order over then down`. | -| pageRange | text | El rango de páginas a imprimir | -| qualityFactor | entero largo | El factor de calidad para la impresión (1 - 8). The higher the quality factor, the better the printing quality, however printing performance may be affected.

    Valor por defecto = 2

    | -| useMax | boolean | Sólo se imprimen columnas y líneas con datos.

    Valor por defecto = true

    | -| zoomFactor | real | La cantidad para ampliar o reducir la página impresa.

    Valor por defecto = 1

    | +| Propiedad | Tipo | Descripción | +| --------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| blackAndWhite | boolean | Impresión sólo en blanco y negro.

    Valor por defecto = false

    **Nota**: este atributo no afecta a los archivos PDF. Se mantienen los colores en los PDF.

    | +| centering | entero largo | Como se centran los contenidos en la página impresa. Valores disponibles: `vk print centering both`, `vk print centering horizontal`, `vk print centering none` (por defecto), `vk print centering vertical` | +| firstPageNumber | entero largo | El número de página a imprimir en la primera página. Valor por defecto = 1 | +| pageOrder | entero largo | Las páginas del pedido se imprimen. Valores disponibles: `vk print page order auto` (por defecto), `vk print page order down then over`, `vk print page order over then down`. | +| pageRange | text | El rango de páginas a imprimir | +| qualityFactor | entero largo | El factor de calidad para la impresión (1 - 8). Cuanto mayor sea el factor de calidad, mejor será la calidad de impresión, aunque el rendimiento de la impresión puede verse afectado.

    Valor por defecto = 2

    | +| useMax | boolean | Sólo se imprimen columnas y líneas con datos.

    Valor por defecto = true

    | +| zoomFactor | real | La cantidad para ampliar o reducir la página impresa.

    Valor por defecto = 1

    | ### Tamaño del papel diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index daeaf088d5b5d0..ae2eec52be1b58 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -211,11 +211,11 @@ End if El servidor web 4D le permite generar, compartir y utilizar tokens de sesión OTP (One-Time Passcode). Los tokens de sesión OTP se utilizan para asegurar comunicaciones con aplicaciones de terceros o sitios web. For information on OTP, please refer to the [One-time password page](https://en.wikipedia.org/wiki/One-time_password) on Wikipedia. -In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. +In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Normalmente, una aplicación de terceros envía un correo electrónico de confirmación que contiene un enlace de retrollamada en el que el usuario tiene que hacer clic. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. :::tips Entradas de blog relacionadas -[Connect Your Web Apps to Third-Party Systems](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) +[Conecte sus aplicaciones web a sistemas de terceros](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md index 625a6d5df492ed..05064f54bf9dd9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md @@ -58,7 +58,7 @@ Puede pasar un objeto para definir cómo se gestionan los siguientes atributos d | secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | | fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | | borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | -| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Specifies the preferred typeface to use when different typefaces are defined for a single font property in OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | +| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | | htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | | importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md index 128c04f6bef972..a84f91af9e168c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md @@ -201,7 +201,7 @@ En este caso, puede mostrar las referencias a fórmulas como símbolos ![](../as Para mostrar las referencias a fórmulas como símbolos, puede: -- check the **Display formula source as symbol option** in the Property list (see *Configuring View properties*), or +- active la opción **Mostrar origen de fórmula como símbolo** en la lista de propiedades (consulte *Configuración de las propiedades de la vista*), o - utilizar la acción estándar displayFormulaAsSymbol (ver *Uso de las acciones estándar de 4D Write Pro*), o bien - usa el comando [**WP SET VIEW PROPERTIES**](commands-legacy/wp-set-view-properties.md) con el selector `wk display formula as symbol` en **True**. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index febf1ee68cb3e9..b5c8070174f4d1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -312,7 +312,7 @@ La interfaz de 4D Write Pro utiliza OpenAI, para lo cual necesita suministrar su ::: -### Limitaciones (Developer Preview) +### Limitaciones En la aplicación actual, la función tiene las siguientes limitaciones: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIEmbeddingsAPI.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIEmbeddingsAPI.md index 7d99ad8f1204a6..af4bea76385705 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIEmbeddingsAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIEmbeddingsAPI.md @@ -46,7 +46,7 @@ var $vectors : Collection:=$result.vectors // collection of 4D.Vector > Before using embeddings with a specific service, please check its documentation to see if embeddings are supported, and select the appropriate embedding model. -For example, for Mistral, use [mistral-embed or codestral-embed](https://docs.mistral.ai/capabilities/embeddings/) +Por ejemplo, para Mistral, utilice [mistral-embed o codestral-embed](https://docs.mistral.ai/capabilities/embeddings/) ```4d var $result:=$client.embeddings.create($inputs; "mistral-embed") diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md index 223b4de69615ec..df318d585644d2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md @@ -5,7 +5,7 @@ title: OpenAIMessage # OpenAIMessage -The `OpenAIMessage` class represents a structured message containing a role, content, and an optional user. This class provides methods to manipulate and retrieve the text and other content of the message. +La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, un contenido y un usuario opcional. This class provides methods to manipulate and retrieve the text and other content of the message. ## Propiedades @@ -103,7 +103,7 @@ var $toolResponse:=cs.AIKit.OpenAIMessage.new({ \ // Add it to the conversation and continue ``` -**Important:** The `tool_call_id` in your response must exactly match the `id` from the original tool call. Esto permite que el modelo de IA asocie correctamente su respuesta con la llamada de función específica que se realizó. +**Importante:** el `tool_call_id` de su respuesta debe coincidir exactamente con el `id` de la llamada de la herramienta original. Esto permite que el modelo de IA asocie correctamente su respuesta con la llamada de función específica que se realizó. ## Ver también diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/asynchronous-call.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/asynchronous-call.md index ff565bb2601c7b..ed81a7d77e2b7a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/asynchronous-call.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/asynchronous-call.md @@ -25,7 +25,7 @@ The asynchronous method is based on [4D.HTTPRequest](https://developer.4d.com/do $client.models.list({formula: Formula(MyReceiveMethod($1))}) ``` -`$1` will be an instance of [OpenAIModelListResult](Classes/OpenAIModelListResult.md), so `MyReceiveMethod` method could be: +`$1` será una instancia de [OpenAIModelListResult](Classes/OpenAIModelListResult.md), por lo que el método `MyReceiveMethod` podría ser: ```4d #DECLARE($result: cs.AIKit.OpenAIModelListResult) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/code-editor/write-class-method.md b/i18n/es/docusaurus-plugin-content-docs/version-21/code-editor/write-class-method.md index f047f57dab287d..a02505ed1f8e28 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/code-editor/write-class-method.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/code-editor/write-class-method.md @@ -25,16 +25,16 @@ If you are used to coding with **VS Code**, you can also use this editor with 4D Cada ventana del Editor de Código tiene una barra de herramientas que ofrece acceso instantáneo a las funciones básicas relacionadas con la ejecución y edición de código. -| Elemento | Icono | Descripción | -| ------------------------------------ | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Ejecución del método** | ![execute-method](../assets/en/code-editor/execute-method.png) | Cuando se trabaja con métodos, cada ventana del Editor de Código tiene un botón que puede utilizarse para ejecutar el método actual. Using the menu associated with this button, you can choose the type of execution:
    • **Run new process**: Creates a process and runs the method in standard mode in this process.
    • **Run and debug new process**: Creates a new process and displays the method in the Debugger window for step by step execution in this process.
    • **Run in Application process**: Runs the method in standard mode in the context of the Application process (in other words, the record display window).
    • **Run and debug in Application process**: Displays the method in the Debugger window for step by step execution in the context of the Application process (in other words, the record display window).
    For more information on method execution, see [Calling Project Methods](../Concepts/methods.md#calling-project-methods). | -| **Buscar en el método** | ![search-icon](../assets/en/code-editor/search.png) | Muestra el [*Área de búsqueda*](#find-and-replace). | -| **Macros** | ![macros-button](../assets/en/code-editor/macros.png) | Inserta una macro en la selección. Haga clic en la flecha desplegable para mostrar una lista de macros disponibles. Para obtener más información sobre como crear e instanciar macros, consulte [Macros](#macros). | -| **Expandir todo/Contraer todo** | ![expand-collapse-button](../assets/en/code-editor/expand-collapse-all.png) | Estos botones permiten expandir o contraer todas las estructuras de flujo de control del código. | -| **Información del método** | ![method-information-icon](../assets/en/code-editor/method-information.png) | Muestra el diálogo [Propiedades del método](../Project/code-overview.md#project-method-properties) (sólo métodos proyecto). | -| **Últimos valores del portapapeles** | ![last-clipboard-values-icon](../assets/en/code-editor/last-clipboard-values.png) | Muestra los últimos valores almacenados en el portapapeles. | -| **Portapapeles** | ![clipboard icons](../assets/en/code-editor/clipboards.png) | Nueve portapapeles disponibles en el editor de código. Puede [utilizar estos portapapeles](#clipboards) haciendo clic directamente en ellos o utilizando los atajos de teclado. Puede utilizar la opción [Preferencias](Preferences/methods.md#options-1) para ocultarlas. | -| **Menú desplegable de navegación** | ![code-navigation-icons](../assets/en/code-editor/tags.png) | Le permite navegar dentro de métodos y clases con contenido etiquetado automáticamente o marcadores declarados manualmente. Ver abajo | +| Elemento | Icono | Descripción | +| ------------------------------------ | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Ejecución del método** | ![execute-method](../assets/en/code-editor/execute-method.png) | Cuando se trabaja con métodos, cada ventana del Editor de Código tiene un botón que puede utilizarse para ejecutar el método actual. Using the menu associated with this button, you can choose the type of execution:
    • **Run new process**: Creates a process and runs the method in standard mode in this process.
    • **Run and debug new process**: Creates a new process and displays the method in the Debugger window for step by step execution in this process.
    • **Run in Application process**: Runs the method in standard mode in the context of the Application process (in other words, the record display window).
    • **Run and debug in Application process**: Displays the method in the Debugger window for step by step execution in the context of the Application process (in other words, the record display window).
    Para más información sobre la ejecución de métodos, ver [Llamada a métodos proyecto](../Concepts/methods.md#calling-project-methods). | +| **Buscar en el método** | ![search-icon](../assets/en/code-editor/search.png) | Muestra el [*Área de búsqueda*](#find-and-replace). | +| **Macros** | ![macros-button](../assets/en/code-editor/macros.png) | Inserta una macro en la selección. Haga clic en la flecha desplegable para mostrar una lista de macros disponibles. Para obtener más información sobre como crear e instanciar macros, consulte [Macros](#macros). | +| **Expandir todo/Contraer todo** | ![expand-collapse-button](../assets/en/code-editor/expand-collapse-all.png) | Estos botones permiten expandir o contraer todas las estructuras de flujo de control del código. | +| **Información del método** | ![method-information-icon](../assets/en/code-editor/method-information.png) | Muestra el diálogo [Propiedades del método](../Project/code-overview.md#project-method-properties) (sólo métodos proyecto). | +| **Últimos valores del portapapeles** | ![last-clipboard-values-icon](../assets/en/code-editor/last-clipboard-values.png) | Muestra los últimos valores almacenados en el portapapeles. | +| **Portapapeles** | ![clipboard icons](../assets/en/code-editor/clipboards.png) | Nueve portapapeles disponibles en el editor de código. Puede [utilizar estos portapapeles](#clipboards) haciendo clic directamente en ellos o utilizando los atajos de teclado. Puede utilizar la opción [Preferencias](Preferences/methods.md#options-1) para ocultarlas. | +| **Menú desplegable de navegación** | ![code-navigation-icons](../assets/en/code-editor/tags.png) | Le permite navegar dentro de métodos y clases con contenido etiquetado automáticamente o marcadores declarados manualmente. Ver abajo | ### Área de edición diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md index 08c1237eb694d5..8198b5151245b1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md @@ -28,7 +28,7 @@ displayed_sidebar: docs ## Descripción -The **Command name** command returns the name as well as (optionally) the properties of the command whose command number you pass in *command*.The number of each command is indicated in the Explorer as well as in the Properties area of this documentation. +The **Command name** command returns the name as well as (optionally) the properties of the command whose command number you pass in *command*.El número de cada comando se indica tanto en el explorador como en el área Propiedades de esta documentación. **Compatibility note:** A command name may vary from one 4D version to the next (commands renamed), this command was used in previous versions to designate a command directly by means of its number, especially in non-tokenized portions of code. This need has diminished over time as 4D continues to evolve because, for non-tokenized statements (formulas), 4D now provides a token syntax. This syntax allows you to avoid potential problems due to variations in command names as well as other elements such as tables, while still being able to type these names in a legible manner (for more information, refer to the *Using tokens in formulas* section). Tenga en cuenta también que la opción \*[Usar parámetros del sistema regional\* de las Preferencias](../Preferences/methods.md#4d-programming-language-use-regional-system-settings) le permite seguir usando el idioma francés en una versión francesa de 4D. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/license-info.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/license-info.md index 0831a61bd841cc..8a4db22e4f7d89 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/license-info.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/license-info.md @@ -20,7 +20,12 @@ displayed_sidebar: docs Si el comando se ejecuta en una aplicación 4D que no utiliza localmente una licencia (por ejemplo, 4D remote), el comando devuelve un objeto Null. -El objeto devuelto contiene las siguientes propiedades: +:::note + +Este comando recarga los archivos de licencia desde el disco y actualiza los derechos asociados si han sido modificados. + +::: +The returned object contains the following properties: ```json { diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/new-log-file.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/new-log-file.md index a3a706e3623201..cd29afa0fbc333 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/new-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/new-log-file.md @@ -25,7 +25,7 @@ caja de diálogo. The file is renamed with the current backup numbers of the database and of the log file, as shown in the following example: DatabaseName\[BackupNum-LogBackupNum\].journal. Por ejemplo: -- If the MyDatabase.4DD database has been saved 4 times, the last backup file will be named MyDatabase\[0004\].4BK. El nombre del primer “segment” del archivo de registro será, por lo tanto, MyDatabase\[0004-0001\].journal. +- Si la base de datos MyDatabase.4DD ha sido guardada 4 veces, el último archivo de copia de seguridad se llamará MyDatabase\[0004\].4BK. El nombre del primer “segment” del archivo de registro será, por lo tanto, MyDatabase\[0004-0001\].journal. - If the MyDatabase.4DD database has been saved 3 times and the log file has been saved 5 times since, the name of the 6th backup of the log file will be MyDatabase\[0003-0006\].journal. :::warning diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md b/i18n/fr/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md index 9b1a1926dd45f3..fc7a54853bda6f 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md @@ -1036,12 +1036,12 @@ Exemples : ```4d ARRAY TEXT($RequiredList;0) - APPEND TO ARRAY($RequiredList; "Open") - APPEND TO ARRAY($RequiredList; "Closed") + APPEND TO ARRAY($RequiredList;"Open") + APPEND TO ARRAY($RequiredList;"Closed") var $ob : Object - OB SET($ob; "valueType" ; "text") - OB SET($ob; "value" ; "Closed") - OB SET ARRAY($ob; "requiredList" ;$RequiredList) + OB SET($ob;"valueType";"text") + OB SET($ob;"value";"Closed") + OB SET ARRAY($ob;"requiredList";$RequiredList) ``` ![](../assets/en/FormObjects/listbox_column_objectArray_helloWorld_openClosed.png) @@ -1103,9 +1103,7 @@ Exemples : OB SET($ob; "requiredListReference";<>List) ``` -``` ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) -``` #### choiceListName et choiceListReference diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index 70eae325782082..7fb6510a6a45ff 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -312,7 +312,7 @@ The 4D Write Pro interface uses OpenAI, for which you need to provide your own k ::: -### Limitations (Developer Preview) +### Limitations In the current implementation, the feature has the following limitations: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands/license-info.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands/license-info.md index 5f63d1446493b8..8765ced21a1c9f 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands/license-info.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands/license-info.md @@ -20,6 +20,12 @@ displayed_sidebar: docs Si la commande est exécutée sur une application 4D qui n'utilise pas de licence localement (par exemple 4D remote), la commande renvoie un objet Null. +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: + L'objet retourné contient les propriétés suivantes : ```json diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md index 02263c1dc93bbc..a666ab352b654b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md @@ -1105,9 +1105,7 @@ Exemples : OB SET($ob;"requiredListReference";<>List) ``` - ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) - ``` +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName et choiceListReference diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md index 70eae325782082..7fb6510a6a45ff 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md @@ -312,7 +312,7 @@ The 4D Write Pro interface uses OpenAI, for which you need to provide your own k ::: -### Limitations (Developer Preview) +### Limitations In the current implementation, the feature has the following limitations: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md index 87c974d2cb08bb..f85ef8794fd123 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md @@ -20,7 +20,12 @@ displayed_sidebar: docs Si la commande est exécutée sur une application 4D qui n'utilise pas de licence localement (par exemple 4D remote), la commande renvoie un objet Null. -L'objet retourné contient les propriétés suivantes : +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: +The returned object contains the following properties: ```json { diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md index 394e709944227b..eb3dfeee01cdd0 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md @@ -1110,9 +1110,7 @@ Exemples : OB SET($ob;"value";2) //affiche London par défaut OB SET($ob;"requiredListReference";<>List) ``` - - - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName et choiceListReference diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md index 75bc8ba7bb479c..0810196fdcbd2c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -15,6 +15,8 @@ Lisez [**Les nouveautés de 4D 20**](https://blog.4d.com/fr-whats-new-in-4d-v20/ #### Points forts +- 4D 20.8 LTS is certified on Windows 11 25H2. +- 4D 20.8 LTS is certified on macOS Tahoe (macOS 26). - [**Fixed bugs list**](https://bugs.4d.com/fixes?version=20.8): list of all bugs that have been fixed in 4D 20.8 LTS. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md index 02263c1dc93bbc..a666ab352b654b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md @@ -1105,9 +1105,7 @@ Exemples : OB SET($ob;"requiredListReference";<>List) ``` - ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) - ``` +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName et choiceListReference diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index 70eae325782082..7fb6510a6a45ff 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -312,7 +312,7 @@ The 4D Write Pro interface uses OpenAI, for which you need to provide your own k ::: -### Limitations (Developer Preview) +### Limitations In the current implementation, the feature has the following limitations: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/license-info.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/license-info.md index 87c974d2cb08bb..f85ef8794fd123 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/license-info.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/license-info.md @@ -20,7 +20,12 @@ displayed_sidebar: docs Si la commande est exécutée sur une application 4D qui n'utilise pas de licence localement (par exemple 4D remote), la commande renvoie un objet Null. -L'objet retourné contient les propriétés suivantes : +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: +The returned object contains the following properties: ```json { diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md b/i18n/ja/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md index 72a2d184bd9830..a59b0ea2ab43b9 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md @@ -1081,7 +1081,7 @@ behavior 属性は、値の通常の表示とは異なる表示方法を提供 ARRAY TEXT($RequiredList;0) APPEND TO ARRAY($RequiredList;"Open") APPEND TO ARRAY($RequiredList;"Closed") - var $ob Object + var $ob : Object OB SET($ob;"valueType";"text") OB SET($ob;"value";"Closed") OB SET ARRAY($ob;"requiredList";$RequiredList) @@ -1146,9 +1146,7 @@ behavior 属性は、値の通常の表示とは異なる表示方法を提供 OB SET($ob;"requiredListReference";<>List) ``` -``` ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) -``` #### choiceListName と choiceListReference diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index c73338891c9f16..bb283a6e73ffb8 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -315,7 +315,7 @@ AI 機能を有効化すると、4D Write Pro ドキュメント上にチャッ ::: -### 制約(デベロッパープレビュー) +### Limitations 現在の実装では、この機能では以下のような制約があります: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands/license-info.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands/license-info.md index e941a40a934dfd..4614125fb186e7 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands/license-info.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands/license-info.md @@ -20,6 +20,12 @@ displayed_sidebar: docs コマンドが、ローカルではライセンスを使用しない4D アプリケーション上で実行された場合(例: 4D リモートなど)、コマンドはNull オブジェクトを返します。 +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: + 戻り値のオブジェクトには、以下のプロパティが格納されています: ```json diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md index fd76d9a03e9ff3..efd8bdd7db642b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md @@ -1148,9 +1148,7 @@ behavior 属性は、値の通常の表示とは異なる表示方法を提供 OB SET($ob;"requiredListReference";<>List) ``` - ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) - ``` +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName と choiceListReference diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md index c73338891c9f16..bb283a6e73ffb8 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md @@ -315,7 +315,7 @@ AI 機能を有効化すると、4D Write Pro ドキュメント上にチャッ ::: -### 制約(デベロッパープレビュー) +### Limitations 現在の実装では、この機能では以下のような制約があります: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md index cf4704451c1ecd..dcb332009dd594 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md @@ -20,7 +20,12 @@ displayed_sidebar: docs コマンドが、ローカルではライセンスを使用しない4D アプリケーション上で実行された場合(例: 4D リモートなど)、コマンドはNull オブジェクトを返します。 -戻り値のオブジェクトには、以下のプロパティが格納されています: +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: +The returned object contains the following properties: ```json { diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md index d120dbdf9f8516..37e28ccc8c9cbd 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md @@ -1109,9 +1109,7 @@ behavior 属性は、値の通常の表示とは異なる表示方法を提供 OB SET($ob;"value";2) // デフォルトでLondonを表示 OB SET($ob;"requiredListReference";<>List) ``` - - - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName と choiceListReference diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md index b218f9699528f3..84208fa427b2af 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -15,6 +15,8 @@ title: リリースノート #### ハイライト +- 4D 20.8 LTS is certified on Windows 11 25H2. +- 4D 20.8 LTS is certified on macOS Tahoe (macOS 26). - [**修正リスト**](https://bugs.4d.com/fixes?version=20.8): 4D 20.8 LTS で修正されたバグのリストです ([日本語版はこちら](https://4d-jp.github.io/2024/276/release-note-version-20/))。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md index fd76d9a03e9ff3..efd8bdd7db642b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md @@ -1148,9 +1148,7 @@ behavior 属性は、値の通常の表示とは異なる表示方法を提供 OB SET($ob;"requiredListReference";<>List) ``` - ``` - ![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) - ``` +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName と choiceListReference diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index c73338891c9f16..bb283a6e73ffb8 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -315,7 +315,7 @@ AI 機能を有効化すると、4D Write Pro ドキュメント上にチャッ ::: -### 制約(デベロッパープレビュー) +### Limitations 現在の実装では、この機能では以下のような制約があります: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/license-info.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/license-info.md index cf4704451c1ecd..dcb332009dd594 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/license-info.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/license-info.md @@ -20,7 +20,12 @@ displayed_sidebar: docs コマンドが、ローカルではライセンスを使用しない4D アプリケーション上で実行された場合(例: 4D リモートなど)、コマンドはNull オブジェクトを返します。 -戻り値のオブジェクトには、以下のプロパティが格納されています: +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: +The returned object contains the following properties: ```json { diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md b/i18n/pt/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md index bac61a61d9c4f0..2f2fe29570a44a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/FormObjects/listbox_overview.md @@ -1037,7 +1037,7 @@ Exemplos: ARRAY TEXT($RequiredList;0) APPEND TO ARRAY($RequiredList;"Open") APPEND TO ARRAY($RequiredList;"Closed") - var $ob Object + var $ob : Object OB SET($ob;"valueType";"text") OB SET($ob;"value";"Closed") OB SET ARRAY($ob;"requiredList";$RequiredList) @@ -1102,9 +1102,7 @@ Exemplos: OB SET($ob;"requiredListReference";<>List) ``` -``` ../assets/en/FormObjects/listbox_column_objectArray_cities.png -``` #### choiceListName e choiceListReference diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index 047732e945b38b..5ae4f2aa2bddbc 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -312,7 +312,7 @@ The 4D Write Pro interface uses OpenAI, for which you need to provide your own k ::: -### Limitações (Developer Preview) +### Limitations In the current implementation, the feature has the following limitations: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/commands/license-info.md b/i18n/pt/docusaurus-plugin-content-docs/current/commands/license-info.md index 8ed810a2a705a8..aa1fa0dadc9098 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/commands/license-info.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/commands/license-info.md @@ -20,6 +20,12 @@ displayed_sidebar: docs If the command is executed on a 4D application that does not use locally a license (e.g. 4D remote), the command returns a Null object. +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: + O objeto retornado contém as propriedades abaixo: ```json diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md index 82fe558bbce2d9..cd53f484214038 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md @@ -1106,9 +1106,7 @@ Exemplos: OB SET($ob;"requiredListReference";<>List) ``` - ``` - ../assets/en/FormObjects/listbox_column_objectArray_cities.png - ``` +../assets/en/FormObjects/listbox_column_objectArray_cities.png #### choiceListName e choiceListReference diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md index 047732e945b38b..5ae4f2aa2bddbc 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md @@ -312,7 +312,7 @@ The 4D Write Pro interface uses OpenAI, for which you need to provide your own k ::: -### Limitações (Developer Preview) +### Limitations In the current implementation, the feature has the following limitations: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md index 72f55ce056d295..425413649a3176 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md @@ -20,7 +20,12 @@ displayed_sidebar: docs If the command is executed on a 4D application that does not use locally a license (e.g. 4D remote), the command returns a Null object. -O objeto retornado contém as propriedades abaixo: +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: +The returned object contains the following properties: ```json { diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md index 8ef7e23a8b5e2b..0b3dcfe0cab861 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/FormObjects/listbox_overview.md @@ -1110,9 +1110,7 @@ Exemplos: OB SET($ob;"value";2) //displays London by default OB SET($ob;"requiredListReference";<>List) ``` - - - ../assets/en/FormObjects/listbox_column_objectArray_cities.png +![](../assets/en/FormObjects/listbox_column_objectArray_cities.png) #### choiceListName e choiceListReference diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md index 9f8a14853cafd3..fa68ba87d715f9 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -15,6 +15,8 @@ Leia [**O que há de novo no 4D 20**](https://blog.4d.com/en-whats-new-in-4d-v20 #### Destaques +- 4D 20.8 LTS is certified on Windows 11 25H2. +- 4D 20.8 LTS is certified on macOS Tahoe (macOS 26). - [**Lista de bugs corrigidos**](https://bugs.4d.com/fixes?version=20.8): lista de todos os erros corrigidos no 4D 20.8 LTS. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md index 82fe558bbce2d9..cd53f484214038 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md @@ -1106,9 +1106,7 @@ Exemplos: OB SET($ob;"requiredListReference";<>List) ``` - ``` - ../assets/en/FormObjects/listbox_column_objectArray_cities.png - ``` +../assets/en/FormObjects/listbox_column_objectArray_cities.png #### choiceListName e choiceListReference diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index 047732e945b38b..5ae4f2aa2bddbc 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -312,7 +312,7 @@ The 4D Write Pro interface uses OpenAI, for which you need to provide your own k ::: -### Limitações (Developer Preview) +### Limitations In the current implementation, the feature has the following limitations: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/license-info.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/license-info.md index 72f55ce056d295..425413649a3176 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/license-info.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/license-info.md @@ -20,7 +20,12 @@ displayed_sidebar: docs If the command is executed on a 4D application that does not use locally a license (e.g. 4D remote), the command returns a Null object. -O objeto retornado contém as propriedades abaixo: +:::note + +This command reloads the license files from the disk and updates the associated rights if they have been modified. + +::: +The returned object contains the following properties: ```json { From 65a89481853e84431a49265677a807c0120948e0 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 14 Nov 2025 10:30:44 +0100 Subject: [PATCH 15/75] Write Pro interface --- docs/WritePro/writeprointerface.md | 8 +++++--- .../version-20-R10/WritePro/writeprointerface.md | 2 +- versioned_docs/version-21/WritePro/writeprointerface.md | 8 +++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/docs/WritePro/writeprointerface.md b/docs/WritePro/writeprointerface.md index 180464b5c76159..3d2ea53d183948 100644 --- a/docs/WritePro/writeprointerface.md +++ b/docs/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: 4D Write Pro Interface slug: /WritePro/write-pro-interface --- -4D WritePro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. A 4D developer can easily implement these palettes in their application. Thus, end users can manage all 4D Write Pro properties, such as fonts, text alignment, bookmarks, table layout, and frames. -The main [4D Write Pro Interface documentation](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) can be found in the *4D Design Reference manual*. +## Installation & documentation -You will find below: +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +The main [4D Write Pro Interface documentation](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) can be found in the *4D Design Reference manual*. You will find below: - the Table Wizard configuration documentation, - the integrated A.I. documentation. diff --git a/versioned_docs/version-20-R10/WritePro/writeprointerface.md b/versioned_docs/version-20-R10/WritePro/writeprointerface.md index 180464b5c76159..7e8aced6d31848 100644 --- a/versioned_docs/version-20-R10/WritePro/writeprointerface.md +++ b/versioned_docs/version-20-R10/WritePro/writeprointerface.md @@ -4,7 +4,7 @@ title: 4D Write Pro Interface slug: /WritePro/write-pro-interface --- -4D WritePro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. +The 4D Write Pro Interface component offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. A 4D developer can easily implement these palettes in their application. Thus, end users can manage all 4D Write Pro properties, such as fonts, text alignment, bookmarks, table layout, and frames. diff --git a/versioned_docs/version-21/WritePro/writeprointerface.md b/versioned_docs/version-21/WritePro/writeprointerface.md index 180464b5c76159..3d2ea53d183948 100644 --- a/versioned_docs/version-21/WritePro/writeprointerface.md +++ b/versioned_docs/version-21/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: 4D Write Pro Interface slug: /WritePro/write-pro-interface --- -4D WritePro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. A 4D developer can easily implement these palettes in their application. Thus, end users can manage all 4D Write Pro properties, such as fonts, text alignment, bookmarks, table layout, and frames. -The main [4D Write Pro Interface documentation](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) can be found in the *4D Design Reference manual*. +## Installation & documentation -You will find below: +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +The main [4D Write Pro Interface documentation](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) can be found in the *4D Design Reference manual*. You will find below: - the Table Wizard configuration documentation, - the integrated A.I. documentation. From ca54667db3e096b6a6df3d9543f57f5282790d23 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 14 Nov 2025 14:46:47 +0100 Subject: [PATCH 16/75] more consistent release notes --- docs/Notes/updates.md | 10 ---------- versioned_docs/version-20-R10/Notes/updates.md | 5 ----- versioned_docs/version-20/Notes/updates.md | 6 ------ versioned_docs/version-21/Notes/updates.md | 8 +------- 4 files changed, 1 insertion(+), 28 deletions(-) diff --git a/docs/Notes/updates.md b/docs/Notes/updates.md index 488aaad002fca7..e4838f0d200ee4 100644 --- a/docs/Notes/updates.md +++ b/docs/Notes/updates.md @@ -16,16 +16,6 @@ Read [**What’s new in 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2 #### Behavior changes -## 4D 21.x LTS - -See [**Release Notes for 4D 21.x LTS**](../../21/Notes/updates). - - -## 4D 20.x LTS - - -See [**Release Notes for 4D 20.x LTS**](../../20/Notes/updates). - ## Library table diff --git a/versioned_docs/version-20-R10/Notes/updates.md b/versioned_docs/version-20-R10/Notes/updates.md index e15e1725a42550..74cf219915111c 100644 --- a/versioned_docs/version-20-R10/Notes/updates.md +++ b/versioned_docs/version-20-R10/Notes/updates.md @@ -261,11 +261,6 @@ If your 4D applications use TLS connections, it is recommended that you upgrade - **Warning**: The starting [`offset`](../API/FileHandleClass.md#offset) value of [4D.FileHandle](../API/FileHandleClass.md) objects was incorrectly set to 1 instead of 0. A fix has been made in 4D as of versions **20.1 HF1** and **20 R2** and the value is now 0. -## 4D 20.x LTS - - -See [**Release Notes for 4D 20.x LTS**](../../version-20/Notes/updates.md). - ## Library table diff --git a/versioned_docs/version-20/Notes/updates.md b/versioned_docs/version-20/Notes/updates.md index 3bc47a3fd312df..928c7ddbaec494 100644 --- a/versioned_docs/version-20/Notes/updates.md +++ b/versioned_docs/version-20/Notes/updates.md @@ -355,12 +355,6 @@ For detailed information, please refer to [this blog post](https://blog.4d.com/s - `no-bom` support and new default end-of-line characters in [`.setText()`](../API/FileClass.md#settext) -## 4D 19.x LTS - - -See [**Release Notes for 4D 19.x LTS**](../../version-19/Notes/updates.md). - - ## Library table (4D 20 LTS) diff --git a/versioned_docs/version-21/Notes/updates.md b/versioned_docs/version-21/Notes/updates.md index fdd46fed9c627e..8448ddca6575b1 100644 --- a/versioned_docs/version-21/Notes/updates.md +++ b/versioned_docs/version-21/Notes/updates.md @@ -318,14 +318,8 @@ If your 4D applications use TLS connections, it is recommended that you upgrade - **Warning**: The starting [`offset`](../API/FileHandleClass.md#offset) value of [4D.FileHandle](../API/FileHandleClass.md) objects was incorrectly set to 1 instead of 0. A fix has been made in 4D as of versions **20.1 HF1** and **20 R2** and the value is now 0. -## 4D 20.x LTS - -See [**Release Notes for 4D 20.x LTS**](../20/Notes/updates). - - - -## Library table +## Library table (4D 21 LTS) From 7d0e42f71fa689a66c7846590035d35996661e81 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 14 Nov 2025 17:19:47 +0100 Subject: [PATCH 17/75] exposed available to singletons --- docs/Concepts/classes.md | 7 +++-- docs/ORDA/ordaClasses.md | 31 ++++++++++++++++--- .../version-20-R10/Concepts/classes.md | 7 +++-- .../version-20-R10/ORDA/ordaClasses.md | 31 ++++++++++++++++--- versioned_docs/version-21/Concepts/classes.md | 7 +++-- versioned_docs/version-21/ORDA/ordaClasses.md | 31 ++++++++++++++++--- 6 files changed, 93 insertions(+), 21 deletions(-) diff --git a/docs/Concepts/classes.md b/docs/Concepts/classes.md index c4bb72df691e31..bfd377faa713d0 100644 --- a/docs/Concepts/classes.md +++ b/docs/Concepts/classes.md @@ -768,13 +768,14 @@ A **singleton class** is a user class that only produces a single instance. For ### Singletons types +Singletons are useful to define values that need to be available from anywhere in an application, a session, or a process. + 4D supports three types of singletons: - a **process singleton** has a unique instance for the process in which it is instantiated, - a **shared singleton** has a unique instance for all processes on the machine. -- a **session singleton** is a shared singleton but with a unique instance for all processes in the [session](../API/SessionClass.md). Session singletons are shared within an entire session but vary between sessions. In the context of a client-server or a web application, session singletons make it possible to create and use a different instance for each session, and therefore for each user. +- a **session singleton** is a shared singleton but with a unique instance for all processes in the [session](../API/SessionClass.md). Session singletons are shared within an entire session but vary between sessions. In the context of a client-server or a web application, session singletons make it possible to create and use a different instance for each session, and therefore for each user. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). -Singletons are useful to define values that need to be available from anywhere in an application, a session, or a process. :::info @@ -817,7 +818,9 @@ The [`.isSingleton`](../API/ClassClass.md#issingleton) property of Class objects The [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) property of Class objects allows to know if the class is a session singleton. +### Exposed singleton functions +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). ### Examples diff --git a/docs/ORDA/ordaClasses.md b/docs/ORDA/ordaClasses.md index 15c101bccce2f2..02040f0bf2d512 100644 --- a/docs/ORDA/ordaClasses.md +++ b/docs/ORDA/ordaClasses.md @@ -972,25 +972,46 @@ $arch.save() //courseName and name are "Archaeology II" ## Exposed vs non-exposed functions -For security reasons, all of your data model class functions and alias attributes are **not exposed** (i.e., private) by default to remote requests. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Remote requests include: +Remote requests are: - Requests sent by remote 4D applications connected through `Open datastore` -- REST requests +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Regular 4D client/server requests are not impacted. Data model class functions are always available in this architecture. A function that is not exposed is not available on remote applications and cannot be called on any object instance from a REST request. If a remote application tries to access a non-exposed function, the "-10729 - Unknown member method" error is returned. -To allow a data model class function to be called by a remote request, you must explicitly declare it using the `exposed` keyword. The formal syntax is: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. The formal syntax is: ```4d // declare an exposed function exposed Function ``` -> The `exposed` keyword can only be used with Data model class functions. If used with a [regular user class](Concepts/classes.md) function, it is ignored and an error is returned by the compiler. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + + +:::note + +The `exposed` keyword can only be used with the objects decribed above. If used with a [regular user class](Concepts/classes.md) function, it is ignored and an error is returned by the compiler. + +::: ### Example diff --git a/versioned_docs/version-20-R10/Concepts/classes.md b/versioned_docs/version-20-R10/Concepts/classes.md index c4bb72df691e31..bfd377faa713d0 100644 --- a/versioned_docs/version-20-R10/Concepts/classes.md +++ b/versioned_docs/version-20-R10/Concepts/classes.md @@ -768,13 +768,14 @@ A **singleton class** is a user class that only produces a single instance. For ### Singletons types +Singletons are useful to define values that need to be available from anywhere in an application, a session, or a process. + 4D supports three types of singletons: - a **process singleton** has a unique instance for the process in which it is instantiated, - a **shared singleton** has a unique instance for all processes on the machine. -- a **session singleton** is a shared singleton but with a unique instance for all processes in the [session](../API/SessionClass.md). Session singletons are shared within an entire session but vary between sessions. In the context of a client-server or a web application, session singletons make it possible to create and use a different instance for each session, and therefore for each user. +- a **session singleton** is a shared singleton but with a unique instance for all processes in the [session](../API/SessionClass.md). Session singletons are shared within an entire session but vary between sessions. In the context of a client-server or a web application, session singletons make it possible to create and use a different instance for each session, and therefore for each user. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). -Singletons are useful to define values that need to be available from anywhere in an application, a session, or a process. :::info @@ -817,7 +818,9 @@ The [`.isSingleton`](../API/ClassClass.md#issingleton) property of Class objects The [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) property of Class objects allows to know if the class is a session singleton. +### Exposed singleton functions +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). ### Examples diff --git a/versioned_docs/version-20-R10/ORDA/ordaClasses.md b/versioned_docs/version-20-R10/ORDA/ordaClasses.md index 15c101bccce2f2..02040f0bf2d512 100644 --- a/versioned_docs/version-20-R10/ORDA/ordaClasses.md +++ b/versioned_docs/version-20-R10/ORDA/ordaClasses.md @@ -972,25 +972,46 @@ $arch.save() //courseName and name are "Archaeology II" ## Exposed vs non-exposed functions -For security reasons, all of your data model class functions and alias attributes are **not exposed** (i.e., private) by default to remote requests. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Remote requests include: +Remote requests are: - Requests sent by remote 4D applications connected through `Open datastore` -- REST requests +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Regular 4D client/server requests are not impacted. Data model class functions are always available in this architecture. A function that is not exposed is not available on remote applications and cannot be called on any object instance from a REST request. If a remote application tries to access a non-exposed function, the "-10729 - Unknown member method" error is returned. -To allow a data model class function to be called by a remote request, you must explicitly declare it using the `exposed` keyword. The formal syntax is: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. The formal syntax is: ```4d // declare an exposed function exposed Function ``` -> The `exposed` keyword can only be used with Data model class functions. If used with a [regular user class](Concepts/classes.md) function, it is ignored and an error is returned by the compiler. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + + +:::note + +The `exposed` keyword can only be used with the objects decribed above. If used with a [regular user class](Concepts/classes.md) function, it is ignored and an error is returned by the compiler. + +::: ### Example diff --git a/versioned_docs/version-21/Concepts/classes.md b/versioned_docs/version-21/Concepts/classes.md index c4bb72df691e31..bfd377faa713d0 100644 --- a/versioned_docs/version-21/Concepts/classes.md +++ b/versioned_docs/version-21/Concepts/classes.md @@ -768,13 +768,14 @@ A **singleton class** is a user class that only produces a single instance. For ### Singletons types +Singletons are useful to define values that need to be available from anywhere in an application, a session, or a process. + 4D supports three types of singletons: - a **process singleton** has a unique instance for the process in which it is instantiated, - a **shared singleton** has a unique instance for all processes on the machine. -- a **session singleton** is a shared singleton but with a unique instance for all processes in the [session](../API/SessionClass.md). Session singletons are shared within an entire session but vary between sessions. In the context of a client-server or a web application, session singletons make it possible to create and use a different instance for each session, and therefore for each user. +- a **session singleton** is a shared singleton but with a unique instance for all processes in the [session](../API/SessionClass.md). Session singletons are shared within an entire session but vary between sessions. In the context of a client-server or a web application, session singletons make it possible to create and use a different instance for each session, and therefore for each user. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). -Singletons are useful to define values that need to be available from anywhere in an application, a session, or a process. :::info @@ -817,7 +818,9 @@ The [`.isSingleton`](../API/ClassClass.md#issingleton) property of Class objects The [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) property of Class objects allows to know if the class is a session singleton. +### Exposed singleton functions +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). ### Examples diff --git a/versioned_docs/version-21/ORDA/ordaClasses.md b/versioned_docs/version-21/ORDA/ordaClasses.md index 15c101bccce2f2..02040f0bf2d512 100644 --- a/versioned_docs/version-21/ORDA/ordaClasses.md +++ b/versioned_docs/version-21/ORDA/ordaClasses.md @@ -972,25 +972,46 @@ $arch.save() //courseName and name are "Archaeology II" ## Exposed vs non-exposed functions -For security reasons, all of your data model class functions and alias attributes are **not exposed** (i.e., private) by default to remote requests. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Remote requests include: +Remote requests are: - Requests sent by remote 4D applications connected through `Open datastore` -- REST requests +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Regular 4D client/server requests are not impacted. Data model class functions are always available in this architecture. A function that is not exposed is not available on remote applications and cannot be called on any object instance from a REST request. If a remote application tries to access a non-exposed function, the "-10729 - Unknown member method" error is returned. -To allow a data model class function to be called by a remote request, you must explicitly declare it using the `exposed` keyword. The formal syntax is: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. The formal syntax is: ```4d // declare an exposed function exposed Function ``` -> The `exposed` keyword can only be used with Data model class functions. If used with a [regular user class](Concepts/classes.md) function, it is ignored and an error is returned by the compiler. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + + +:::note + +The `exposed` keyword can only be used with the objects decribed above. If used with a [regular user class](Concepts/classes.md) function, it is ignored and an error is returned by the compiler. + +::: ### Example From 49709d85f151667489bb56dfa60314c67de1cc04 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 17 Nov 2025 11:49:02 +0100 Subject: [PATCH 18/75] fix parameters vs variables confusion --- docs/Concepts/parameters.md | 23 +++++++++++-------- .../version-19/Concepts/parameters.md | 8 ++++++- .../version-20-R10/Concepts/parameters.md | 16 +++++++++++-- .../version-20/Concepts/parameters.md | 8 ++++++- .../version-21/Concepts/parameters.md | 16 +++++++++++-- 5 files changed, 56 insertions(+), 15 deletions(-) diff --git a/docs/Concepts/parameters.md b/docs/Concepts/parameters.md index 163b6f2017e26f..49f202a83cea54 100644 --- a/docs/Concepts/parameters.md +++ b/docs/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Parameters You'll often find that you need to pass data to your methods and functions. This is easily done with parameters. -## Overview +## Passing parameters **Parameters** (or **arguments**) are pieces of data that a method or a class function needs in order to perform its task. The terms *parameter* and *argument* are used interchangeably throughout this manual. Parameters are also passed to built-in 4D commands. In this example, the string “Hello” is an argument to the `ALERT` built-in command: @@ -47,20 +47,19 @@ Any subroutine can return a value. Only one single output parameter can be decla Input and output values are [evaluated](#values-or-references) at the moment of the call and copied into or from local variables within the called class function or method. Variable parameters must be [declared](#declaring-parameters) in the called code. -:::info Compatibility - -The legacy declaration syntax, where parameters are automatically copied in sequentially numbered local variables $0, $1, etc. and declared using compiler directives such as `C_TEXT($1;$2)`, is **deprecated** as of 4D 20 R7. - -::: - - ## Declaring parameters -Inside called methods or class functions, parameter values are assigned to local variables. You declare parameters using a **parameter name** along with a **parameter type**, separated by colon. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - For class functions, parameters are declared along with the function prototype, i.e. when using the `Function` or `Class constructor` keywords. - For methods (project methods, form object methods, database methods, and triggers), parameters are declared using the **`#DECLARE`** keyword at the beginning of the method code. +:::info Compatibility + +The legacy declaration syntax, where parameters are automatically copied in sequentially numbered local variables $0, $1, etc. and declared using compiler directives such as `C_TEXT($1;$2)`, is **deprecated** as of 4D 20 R7. + +::: + Examples: ```4d @@ -109,6 +108,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Check hash password... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Returned value You declare the return parameter of a function by adding an arrow (->) and the parameter definition after the input parameter(s) list. For example: diff --git a/versioned_docs/version-19/Concepts/parameters.md b/versioned_docs/version-19/Concepts/parameters.md index 560dc7f28582be..602606f667efaa 100644 --- a/versioned_docs/version-19/Concepts/parameters.md +++ b/versioned_docs/version-19/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Parameters You'll often find that you need to pass data to your methods and functions. This is easily done with parameters. -## Overview +## Passing parameters **Parameters** (or **arguments**) are pieces of data that a method or a class function needs in order to perform its task. The terms *parameter* and *argument* are used interchangeably throughout this manual. Parameters are also passed to built-in 4D commands. In this example, the string “Hello” is an argument to the `ALERT` built-in command: @@ -119,6 +119,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Check hash password... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Returned value You declare the return parameter of a function by adding an arrow (->) and the parameter definition after the input parameter(s) list. For example: diff --git a/versioned_docs/version-20-R10/Concepts/parameters.md b/versioned_docs/version-20-R10/Concepts/parameters.md index b4064c48667cb3..fd5b033166f832 100644 --- a/versioned_docs/version-20-R10/Concepts/parameters.md +++ b/versioned_docs/version-20-R10/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Parameters You'll often find that you need to pass data to your methods and functions. This is easily done with parameters. -## Overview +## Passing parameters **Parameters** (or **arguments**) are pieces of data that a method or a class function needs in order to perform its task. The terms *parameter* and *argument* are used interchangeably throughout this manual. Parameters are also passed to built-in 4D commands. In this example, the string “Hello” is an argument to the `ALERT` built-in command: @@ -56,11 +56,17 @@ The legacy declaration syntax, where parameters are automatically copied in sequ ## Declaring parameters -Inside called methods or class functions, parameter values are assigned to local variables. You declare parameters using a **parameter name** along with a **parameter type**, separated by colon. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - For class functions, parameters are declared along with the function prototype, i.e. when using the `Function` or `Class constructor` keywords. - For methods (project methods, form object methods, database methods, and triggers), parameters are declared using the **`#DECLARE`** keyword at the beginning of the method code. +:::info Compatibility + +The legacy declaration syntax, where parameters are automatically copied in sequentially numbered local variables $0, $1, etc. and declared using compiler directives such as `C_TEXT($1;$2)`, is **deprecated** as of 4D 20 R7. + +::: + Examples: ```4d @@ -109,6 +115,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Check hash password... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Returned value You declare the return parameter of a function by adding an arrow (->) and the parameter definition after the input parameter(s) list. For example: diff --git a/versioned_docs/version-20/Concepts/parameters.md b/versioned_docs/version-20/Concepts/parameters.md index 9915df60c264e6..bd56b647e5df6c 100644 --- a/versioned_docs/version-20/Concepts/parameters.md +++ b/versioned_docs/version-20/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Parameters You'll often find that you need to pass data to your methods and functions. This is easily done with parameters. -## Overview +## Passing parameters **Parameters** (or **arguments**) are pieces of data that a method or a class function needs in order to perform its task. The terms *parameter* and *argument* are used interchangeably throughout this manual. Parameters are also passed to built-in 4D commands. In this example, the string “Hello” is an argument to the `ALERT` built-in command: @@ -109,6 +109,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Check hash password... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Returned value You declare the return parameter of a function by adding an arrow (->) and the parameter definition after the input parameter(s) list. For example: diff --git a/versioned_docs/version-21/Concepts/parameters.md b/versioned_docs/version-21/Concepts/parameters.md index b4064c48667cb3..fd5b033166f832 100644 --- a/versioned_docs/version-21/Concepts/parameters.md +++ b/versioned_docs/version-21/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Parameters You'll often find that you need to pass data to your methods and functions. This is easily done with parameters. -## Overview +## Passing parameters **Parameters** (or **arguments**) are pieces of data that a method or a class function needs in order to perform its task. The terms *parameter* and *argument* are used interchangeably throughout this manual. Parameters are also passed to built-in 4D commands. In this example, the string “Hello” is an argument to the `ALERT` built-in command: @@ -56,11 +56,17 @@ The legacy declaration syntax, where parameters are automatically copied in sequ ## Declaring parameters -Inside called methods or class functions, parameter values are assigned to local variables. You declare parameters using a **parameter name** along with a **parameter type**, separated by colon. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - For class functions, parameters are declared along with the function prototype, i.e. when using the `Function` or `Class constructor` keywords. - For methods (project methods, form object methods, database methods, and triggers), parameters are declared using the **`#DECLARE`** keyword at the beginning of the method code. +:::info Compatibility + +The legacy declaration syntax, where parameters are automatically copied in sequentially numbered local variables $0, $1, etc. and declared using compiler directives such as `C_TEXT($1;$2)`, is **deprecated** as of 4D 20 R7. + +::: + Examples: ```4d @@ -109,6 +115,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Check hash password... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Returned value You declare the return parameter of a function by adding an arrow (->) and the parameter definition after the input parameter(s) list. For example: From bb3681046bf2b008972c854b21a58b0eed80965e Mon Sep 17 00:00:00 2001 From: sandritica <136651682+sandritica@users.noreply.github.com> Date: Mon, 17 Nov 2025 05:52:23 -0500 Subject: [PATCH 19/75] ES Edit in blob to print settings and SET/Get database parameter (#2996) * Update new-process.md * Update new-process.md * Update register-client.md * Update register-client.md * Update register-client.md * Update 4d-write-pro-attributes.md * Update 4d-write-pro-attributes.md * Update 4d-write-pro-attributes.md * Update wp-new-style-sheet.md * Update wp-new-style-sheet.md * Update wp-new-style-sheet.md * Update get-database-parameter.md * Update set-database-parameter.md * Update set-database-parameter.md * Update set-database-parameter.md * Update get-database-parameter.md * Update get-database-parameter.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md --- .../commands-legacy/blob-to-print-settings.md | 11 +- .../commands-legacy/get-database-parameter.md | 256 +++++++-------- .../commands-legacy/set-database-parameter.md | 296 ++++++++--------- .../commands-legacy/blob-to-print-settings.md | 11 +- .../commands-legacy/get-database-parameter.md | 259 ++++++++------- .../commands-legacy/set-database-parameter.md | 300 +++++++++--------- .../commands-legacy/blob-to-print-settings.md | 11 +- .../commands-legacy/get-database-parameter.md | 256 +++++++-------- .../commands-legacy/set-database-parameter.md | 296 ++++++++--------- 9 files changed, 763 insertions(+), 933 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md index 7b5a31d53f367d..41a06864f9d2f0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md @@ -17,14 +17,14 @@ displayed_sidebar: docs ## Descripción -El comando **BLOB to print settings** reemplaza los parámetros de impresión actuales de 4D por los parámetros almacenados en el BLOB *confImpr*. Este BLOB debe haber sido generado por el comando [Print settings to BLOB](print-settings-to-blob.md) o por el comando 4D Pack 4D Pack (ver abajo). +El comando **BLOB to print settings** reemplaza los parámetros de impresión actuales de 4D por los parámetros almacenados en el BLOB *confImpr*. Este BLOB debe haber sido generado por el comando [Print settings to BLOB](print-settings-to-blob.md). El parámetro *params* le permite definir cómo manejar los parámetros básicos para el "número de copias" y el "intervalo de impresión": * Si pasa 0 u omite este parámetro, los valores almacenados en el BLOB se utilizan para la impresión. * Si pasa 1, los valores se restablecen a los valores predeterminados: el número de copias se establece en 1 y el intervalo de páginas se establece en "todas las páginas". -Los parámetros se aplican a los [parámetros actuales de impresión 4D](../settings/compatibility.md) siempre y cuando ningún comando como *\_o\_PAGE SETUP*, [SET PRINT OPTION](set-print-option.md) o [PRINT SELECTION](print-selection.md) sin el parámetro > los modifique. Los parámetros definidos se utiliza particularmente para los comandos [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) y [QR REPORT](qr-report.md), así como también para los comandos de impresión en los menú de 4D, incluyendo los del entorno Diseño. +Los parámetros se aplican a los [parámetros actuales de impresión 4D](../settings/compatibility.md) siempre y cuando ningún comando como [SET PRINT OPTION](set-print-option.md) o [PRINT SELECTION](print-selection.md) sin el parámetro > los modifique. Los parámetros definidos se utiliza particularmente para los comandos [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) y [QR REPORT](qr-report.md), así como también para los comandos de impresión en los menú de 4D, incluyendo los del entorno Diseño. Los comandos [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md) y [PRINT RECORD](print-record.md) deben ser llamados con el parámetro *\>* (si aplica) para que los parámetros definidos por **BLOB to print settings** se mantengan. @@ -41,13 +41,8 @@ El comando devuelve uno de los siguientes códigos de estado: ### Windows / macOS El BLOB *confImp* se puede guardar y leer en ambas plataformas. Sin embargo, incluso si ciertos parámetros de impresión son comunes, algunos otros son específicos de la plataforma y dependen de los controladores de impresión y de las versiones del sistema operativo. Si el mismo BLOB *confImp* se comparte entre ambas plataformas, es posible que pierda partes de información. - Cuando se utiliza en un entorno heterogéneo, con el fin de restaurar el máximo de parámetros de impresión disponibles para cada plataforma (y no sólo la parte común), se recomienda que maneje dos BLOBs *confImp*, uno para cada plataforma. -### Compatibilidad con los comandos 4D Pack - -Los BLOBs de parámetros de impresión generados con el comando 4D Pack \[#cmd id="61955"/\] pueden ser cargados y utilizados por el comando **BLOB to print settings**. Tenga en cuenta sin embargo, que si son guardados con \[#cmd id="1433"/\], se convierten y no se abrirán más con . El comando **BLOB to print settings** permite almacenar más información que el comando . - ## Ejemplo Usted desea aplicar la configuración de impresión guardada en el disco para el contexto de impresión 4D actual: @@ -82,5 +77,3 @@ Usted desea aplicar la configuración de impresión guardada en el disco para el | --- | --- | | Número de comando | 1434 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md index 2550c0af3456b0..67e32715374ec9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md @@ -26,7 +26,7 @@ El parámetro *selector* designa el parámetro a obtener. 4D ofrece las siguient **Alcance**: aplicación 4D si *valor* positivo -Se conserva entre dos **sesiones**: sí si *valor* positivo +**Se conserva entre dos sesiones**: sí si *valor* positivo **Valores posibles**: 0 -> 32 767 @@ -34,8 +34,6 @@ Se conserva entre dos **sesiones**: sí si *valor* positivo El timeout del servidor define el periodo máximo de no respuesta del cliente "autorizado", por ejemplo si realiza una operación de bloqueo. Al terminar esta periodo, 4D Server desconecta al cliente. El selector 4D Server Timeout le permite asignar en el parámetro *valor*un nuevo timeout, expresado en minutos. Esta funcionalidad es particularmente útil para aumentar el valor del timeout antes de la ejecución en el equipo cliente de una operación de larga duración, tal como la impresión de un gran número de páginas, la cual puede causar un timeout inesperado. - - Tiene dos opciones: Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global y permanente: el nuevo valor se aplica a todos los procesos y se almacena en las Preferencias de la aplicación 4D (equivalente a cambiar en el diálogo Preferencias).Si pasa un valor **negativo** en el parámetro *valor*, define un timeout lobal y temporal: el nuevo valor se aplica únicamente a los procesos llamantes (los otros procesos conservan los valores por defecto) y se restaura al valor por defecto tan pronto como el servidor recibe una señal de actividad del cliente, por ejemplo, cuando la operación termina. Esta opción es muy útil para administrar operaciones largas iniciadas por plug-ins 4D. Para definir una conexión "Sin timeout", pase 0 en *valor*. Ver el ejemplo 1. @@ -44,7 +42,7 @@ Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global ### 4D Remote mode timeout (14) -**Alcance** (antigua capa de red únicamente): aplicación 4D si valor positivo +**Alcance** (antigua capa de red únicamente): aplicación 4D si *valor* positivo **Se conserva entre dos sesiones**: sí si *valor* positivo @@ -58,27 +56,21 @@ El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: no - -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. Por defecto, el valor es 80. +**Se conserva entre dos sesiones**: no -El número de puerto TCP está definido en la página "Web/Configuración" de la caja de diálogo de las Propiedades de la base. Puede utilizar las constantes del tema para el parámetro *valor*. +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, puede definirse en la página "Web/Configuración" de la caja de diálogo de Preferencias es 80\. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* - - ### Character set (17) **Alcance:** 4D local, 4D Server** -Se conserva entre dos sesiones:** sí** - -Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. - +**Se conserva entre dos sesiones:** sí** +**Descripción:** *constante obsoleta (se conserva por compatibilidad únicamente).* Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -86,11 +78,9 @@ Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Valores**: todo valor entre 10 y 32 000\. El valor por defecto es 100. - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -98,7 +88,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 15 @@ -110,7 +100,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 17 @@ -122,51 +112,45 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -Valores posibles: ver selector 18 +**Valores posibles**: ver selector 18 **Descripción**: permite especificar esta parámetro para las máquinas 4D remotas utilizadas como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir este valor sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. - - ### Maximum Web requests size (27) **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí - -**Valores posibles**: 500 000 a 2 147 483 648. +**Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. ### 4D Server log recording (28) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D Server, 4D remoto* -* Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores** **posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). **Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). -4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. - +4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. - ### Client Web log recording (30) **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 = No grabar (por defecto), 1 = Registrar en formato CLF, 2 = Registrar en formato DLF, 3 = Registrar en formato ELF, 4 = Registrar en formato WLF. @@ -178,9 +162,9 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, ### Table sequence number (31) -**Alcance**: *a*plicación 4D +**Alcance**: aplicación 4D - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: todo valor de tipo entero largo. @@ -190,19 +174,19 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr +### Debug log recording (34) +**Hilo seguro**: sí +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Debug log recording (34) +**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo y *Server* se añade al nombre del archivo cuando se genera en el servidor). Hay dos modos disponibles: -**Thread-safe** : Yes +- El modo estándar ofrece una vista básica de los eventos y el archivo se coloca automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Los tiempos de ejecución se expresan en milisegundos y se muestra el valor "< ms" cuando una operación dura menos de un milisegundo. -**Alcance**: Aplicación 4D - -**Se conserva entre dos sesiones**: No - -**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo). +- El modo con pestañas ofrece información adicional y utiliza un formato más compacto con pestañas en el archivo. Los tiempos de ejecución se expresan en microsegundos. **Valores posibles**: Entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). @@ -232,7 +216,15 @@ SET DATABASE PARAMETER (34;0) // desactiva el archivo Para todo tipo de aplicaci - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. **Nota:** este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. + + +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. + +Este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. + + + + @@ -240,9 +232,9 @@ Para más información sobre este formato y sobre el uso del archivo *4DDebugLog **Alcance**: base de datos -Se conserva entre dos **sesiones**: sí** +**Se conserva entre dos sesiones**: sí -Valores posibles**: 0 a 65535 +**Valores posibles**: 0 a 65535 **Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. @@ -258,17 +250,17 @@ Cuando modifica este valor, es necesario reiniciar el equipo servidor para que e **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. ### Client HTTPS port ID (40) -**Alcance**:todos los equipos 4D remotos +**Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 a 65535 @@ -280,13 +272,11 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica - - ### SQL Autocommit (43) **Alcance**:base de datos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Posibles valores**: 0 (desactivación) o 1 (activación) @@ -298,9 +288,9 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica ### SQL Engine case sensitivity (44) -**Alcance**:base de datos +**Alcance**: base de datos - Se conserva entre dos sesiones: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) @@ -308,13 +298,13 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). -Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subform-container.md) de las Preferencias de la base. +**Atención:* como esta opción Modifica el archivo de estructura de la base de datos y todos los procesos. Por motivos de rendimiento, se recomienda encarecidamente configurarlo solo al iniciar la base de datos.* Esta opción también se puede configurar en los ajustes de la base de datos. ### Client log recording (45) -**Alcance**:equipo 4D remoto +**Alcance**: equipo 4D remoto Se conserva entre dos **sesiones**: no @@ -332,7 +322,7 @@ Estos archivos texto almacenan en formato tabulado simple diferente información **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) @@ -342,9 +332,11 @@ Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda " en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. Consulte el ejemplo 2. +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. + +Consulte el ejemplo 2. - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. @@ -352,7 +344,7 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) @@ -360,19 +352,17 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. - - - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. ### Auto synchro resources folder (48) -**Alcance**:equipo 4D remoto +**Alcance**: equipo 4D remoto - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no - **Valores p** **osibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). **Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. @@ -386,7 +376,7 @@ Tres modos de sincronización son posibles del lado del cliente. El selector Aut ### Query by formula joins (49) -**Alcance**:Proceso actual +**Alcance**: proceso actual Se conserva entre dos **sesiones**: no @@ -418,9 +408,7 @@ Se conserva entre dos **sesiones**: no Se conserva entre dos **sesiones**: no -Valores posibles: todo valor de tipo entero largo - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -428,7 +416,7 @@ Valores posibles: todo valor de tipo entero largo **Alcance**: 4D Server - Se conserva entre dos sesiones: no + Se conserva entre dos **sesiones**: no **Valores posibles**: entero largo positivo. @@ -442,8 +430,6 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv - - ### Idle connections timeout (54) **Alcance**: aplicación 4D a menos que valor sea negativo @@ -452,7 +438,7 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv **Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D y al motor SQL, así como también en modo *ServerNet* (nueva capa de red), al servidor de la aplicación 4D. Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. +**Descripción**: máximo periodo de inactividad para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. @@ -464,7 +450,7 @@ Este parámetro puede definirse del lado del cliente. Por lo general, no necesit ### PHP interpreter IP address (55) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D Se conserva entre dos **sesiones**: no @@ -478,9 +464,9 @@ Para mayor información sobre el intérprete PHP, por favor consulte el manual d ### PHP interpreter port (56) -**Alcance**:Aplicación 4D +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: No + **Se conserva entre dos sesiones**: no **Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. @@ -496,9 +482,7 @@ Se conserva entre dos sesiones: No **Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Description:** **Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". - -Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). @@ -512,9 +496,9 @@ Para reinicializar la lista de cifrado a su valor por defecto (guardado permanen ### Cache unload minimum size (66) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: Entero largo positivo > 1. @@ -522,16 +506,6 @@ Para reinicializar la lista de cifrado a su valor por defecto (guardado permanen El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D - -Se conserva entre dos sesiones: No - -Valores posibles: Entero largo positivo > 1. - -Descripción: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). - -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. - Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio. @@ -540,7 +514,7 @@ Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la cach **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: modo de activación de Direct2D bajo Windows. @@ -578,7 +552,7 @@ Por ejemplo, si ejecuta: ### Diagnostic log recording (79) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: Aplicación 4D @@ -596,17 +570,19 @@ Note que es posible incluir la información personalizada en este archivo con ay ### Log command list (80) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. **Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. -Este selector permite guardar la cantidad de información almacenada en el archivo de depuración limitando los comandos 4D donde quiera guardar la ejecución. - +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: + SET DATABASE PARAMETER(Log command list;"277;341") //Grabar solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluir SET USER ALIAS y DELAY PROCESS commands from being recorded + + ### Spellchecker (81) @@ -622,11 +598,11 @@ Este selector permite guardar la cantidad de información almacenada en el archi ### Dates inside objects (85) -**Alcance**: Proceso actual +**Alcance**: proceso actual - **Se conserva entre dos sesiones:** No** + **Se conserva entre dos sesiones**: no - Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) + **Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) **Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. @@ -636,15 +612,13 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e - - ### Diagnostic log level (86) -**Thread-safe** : Yes +**Hilo seguro**: sí -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. @@ -656,15 +630,11 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e **Alcance:** 4D en modo local, 4D Server** -Se conserva entre dos sesiones:** sí** - -** **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. - -La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). +**Se conserva entre dos sesiones:** sí** -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. + **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). **Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) @@ -676,7 +646,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. **Alcance**: 4D modo local y 4D Server. -: Sí +**Se conserva entre dos sesiones:** sí** **Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. @@ -688,7 +658,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Circular log limitation (90) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server. @@ -726,7 +696,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Cache flush periodicity (95) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server @@ -753,13 +723,11 @@ El tiempo de espera de la conexión remota se aplica después de que una máquin - - ### Tips enabled (101) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) @@ -811,10 +779,6 @@ Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los - - - - ### User param value (108) **Alcance**: 4D local, 4D Server @@ -833,7 +797,7 @@ Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), defin Alcance: 4D local, 4D Server (todos los procesos) - Se conserva entre dos sesiones: No + Se conserva entre dos **sesiones**: No **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) @@ -847,11 +811,11 @@ En versiones anteriores, los valores de tiempo se convertían y almacenaban como ### SMTP Log (110) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server* -* **Se conserva entre dos sesiones**: No +* **Se conserva entre dos sesiones**: no **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). @@ -867,7 +831,11 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Se conserva entre dos sesiones:** No -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. **Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. + +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. + +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. @@ -913,7 +881,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la ### POP3 Log (116) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance:** 4D local, 4D Server @@ -921,7 +889,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -: iInicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. @@ -939,7 +907,7 @@ Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección ### IMAP Log (119) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server @@ -965,7 +933,7 @@ Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección ### Pause logging (121) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: aplicación 4D @@ -979,25 +947,27 @@ Este selector permite suspender/reanudar todas las operaciones de registro inici ### TCPUDP log recording (131) -**Scope:** 4D application. +**Alcance**: aplicación 4D + +**Se mantiene entre dos sesiones**: no + +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. -**Kept between two sessions:** No. +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para los eventos logging TCP. -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. +### RDP optimization +**Alcance**: aplicación 4D -### RDP optimization (133) +**Se mantiene entre dos sesiones**: no -**Scope:** 4D application. +**Valores posibles:** `0`: Disabled (default), `1`: Enabled. -**Kept between two sessions:** No. +**Descripción:** Activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). -**Possible values:** `0`: Disabled (default), `1`: Enabled. -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). ## Selectores hilo seguro @@ -1053,5 +1023,3 @@ En el [Método base On Startup](metodo-base-on-startup.md), usted escribe: | --- | --- | | Número de comando | 643 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md index 2aa47763c6f437..b2223dee64a5c1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md @@ -25,7 +25,7 @@ El *selector* designa el parámetro a modificar. 4D ofrece constantes predefinid **Alcance**: aplicación 4D si *valor* positivo -Se conserva entre dos **sesiones**: sí si *valor* positivo +**Se conserva entre dos sesiones**: sí si *valor* positivo **Valores posibles**: 0 -> 32 767 @@ -33,8 +33,6 @@ Se conserva entre dos **sesiones**: sí si *valor* positivo El timeout del servidor define el periodo máximo de no respuesta del cliente "autorizado", por ejemplo si realiza una operación de bloqueo. Al terminar esta periodo, 4D Server desconecta al cliente. El selector 4D Server Timeout le permite asignar en el parámetro *valor*un nuevo timeout, expresado en minutos. Esta funcionalidad es particularmente útil para aumentar el valor del timeout antes de la ejecución en el equipo cliente de una operación de larga duración, tal como la impresión de un gran número de páginas, la cual puede causar un timeout inesperado. - - Tiene dos opciones: Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global y permanente: el nuevo valor se aplica a todos los procesos y se almacena en las Preferencias de la aplicación 4D (equivalente a cambiar en el diálogo Preferencias).Si pasa un valor **negativo** en el parámetro *valor*, define un timeout lobal y temporal: el nuevo valor se aplica únicamente a los procesos llamantes (los otros procesos conservan los valores por defecto) y se restaura al valor por defecto tan pronto como el servidor recibe una señal de actividad del cliente, por ejemplo, cuando la operación termina. Esta opción es muy útil para administrar operaciones largas iniciadas por plug-ins 4D. Para definir una conexión "Sin timeout", pase 0 en *valor*. Ver el ejemplo 1. @@ -57,27 +55,21 @@ El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: no - -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. Por defecto, el valor es 80. +**Se conserva entre dos sesiones**: no -El número de puerto TCP está definido en la página "Web/Configuración" de la caja de diálogo de las Propiedades de la base. Puede utilizar las constantes del tema para el parámetro *valor*. +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, que puede ser definido en la página "Web/Configuración" de la caja de diálogo Preferencias, es 80. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* - - ### Character set (17) -**Alcance:** 4D local, 4D Server** - -Se conserva entre dos sesiones:** sí** - -Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Alcance:** 4D local, 4D Server +**Se conserva entre dos sesiones**: sí +**Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -85,11 +77,9 @@ Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Valores**: todo valor entre 10 y 32 000\. El valor por defecto es 100. - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -97,7 +87,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 15 @@ -109,7 +99,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 17 @@ -121,23 +111,19 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -Valores posibles: ver selector 18 +**Valores posibles**: ver selector 18 **Descripción**: permite especificar esta parámetro para las máquinas 4D remotas utilizadas como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir este valor sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. - - ### Maximum Web requests size (27) **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí - -**Valores posibles**: 500 000 a 2 147 483 648. +**Se conserva entre dos sesiones**: sí **Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -145,13 +131,13 @@ Se conserva entre dos **sesiones**: sí ### 4D Server log recording (28) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D Server, 4D remoto* -* Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores** **posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). **Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). @@ -159,13 +145,11 @@ Se conserva entre dos **sesiones**: sí Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. - - ### Client Web log recording (30) **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 = No grabar (por defecto), 1 = Registrar en formato CLF, 2 = Registrar en formato DLF, 3 = Registrar en formato ELF, 4 = Registrar en formato WLF. @@ -177,9 +161,9 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, ### Table sequence number (31) -**Alcance**: *a*plicación 4D +**Alcance**: aplicación 4D - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: todo valor de tipo entero largo. @@ -189,21 +173,21 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr +### Debug log recording (34) +**Hilo seguro**: sí +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Debug log recording (34) - -**Thread-safe** : Yes - -**Alcance**: Aplicación 4D +**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo y *Server* se añade al nombre del archivo cuando se genera en el servidor). Hay dos modos disponibles: -**Se conserva entre dos sesiones**: No +- El modo estándar ofrece una vista básica de los eventos y el archivo se coloca automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Los tiempos de ejecución se expresan en milisegundos y se muestra el valor "< ms" cuando una operación dura menos de un milisegundo. -**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo). +- El modo con pestañas ofrece información adicional y utiliza un formato más compacto con pestañas en el archivo. Los tiempos de ejecución se expresan en microsegundos. -**Valores posibles**: Entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +**Valores posibles**: entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (valor 1) permite activar el archivo (note que cualquier otro valor no nulo también lo activará) @@ -225,13 +209,21 @@ SET DATABASE PARAMETER (34;2) // activa el modo estándar con los parámetros y SET DATABASE PARAMETER (34;2+4) // activa el modo tabulado con los parámetros y las duraciones -SET DATABASE PARAMETER (34;0) // desactiva el archivo Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: +SET DATABASE PARAMETER (34;0) // desactiva el archivo + +Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: - restringiendo los comandos 4D que se examinan utilizando Log command list (selector 80), o - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. **Nota:** este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. +*Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. + +Este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. + + + + @@ -239,9 +231,9 @@ Para más información sobre este formato y sobre el uso del archivo *4DDebugLog **Alcance**: base de datos -Se conserva entre dos **sesiones**: sí** +**Se conserva entre dos sesiones**: sí -Valores posibles**: 0 a 65535 +**Valores posibles**: 0 a 65535 **Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. @@ -257,17 +249,17 @@ Cuando modifica este valor, es necesario reiniciar el equipo servidor para que e **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. ### Client HTTPS port ID (40) -**Alcance**:todos los equipos 4D remotos +**Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 a 65535 @@ -279,13 +271,11 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica - - ### SQL Autocommit (43) -**Alcance**:base de datos +**Alcance**: base de datos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Posibles valores**: 0 (desactivación) o 1 (activación) @@ -297,9 +287,9 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica ### SQL Engine case sensitivity (44) -**Alcance**:base de datos +**Alcance**: base de datos - Se conserva entre dos sesiones: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) @@ -315,7 +305,7 @@ Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subfor **Alcance**:equipo 4D remoto - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). @@ -331,7 +321,7 @@ Estos archivos texto almacenan en formato tabulado simple diferente información **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) @@ -341,9 +331,11 @@ Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda " en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. Consulte el ejemplo 2. +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +Consulte el ejemplo 2. + +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. @@ -351,7 +343,7 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) @@ -359,9 +351,7 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. - - - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. @@ -369,9 +359,9 @@ Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](ord **Alcance**:equipo 4D remoto - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no - **Valores p** **osibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). **Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. @@ -385,9 +375,9 @@ Tres modos de sincronización son posibles del lado del cliente. El selector Aut ### Query by formula joins (49) -**Alcance**:Proceso actual +**Alcance**: proceso actual - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). @@ -405,9 +395,9 @@ El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de **Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -415,11 +405,9 @@ Se conserva entre dos **sesiones**: no **Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no -Valores posibles: todo valor de tipo entero largo - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -427,7 +415,7 @@ Valores posibles: todo valor de tipo entero largo **Alcance**: 4D Server - Se conserva entre dos sesiones: no + **Se conserva entre dos sesiones**: no **Valores posibles**: entero largo positivo. @@ -441,8 +429,6 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv - - ### Idle connections timeout (54) **Alcance**: aplicación 4D a menos que valor sea negativo @@ -451,7 +437,7 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv **Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D y al motor SQL, así como también en modo *ServerNet* (nueva capa de red), al servidor de la aplicación 4D. Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. +**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. @@ -465,7 +451,7 @@ Este parámetro puede definirse del lado del cliente. Por lo general, no necesit **Alcance**: Aplicación 4D -Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no **Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). @@ -477,9 +463,9 @@ Para mayor información sobre el intérprete PHP, por favor consulte el manual d ### PHP interpreter port (56) -**Alcance**:Aplicación 4D +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: No + **Se conserva entre dos sesiones**: no **Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. @@ -495,7 +481,7 @@ Se conserva entre dos sesiones: No **Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Description:** **Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. @@ -507,15 +493,13 @@ Para reinicializar la lista de cifrado a su valor por defecto (guardado permanen **Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. - - ### Cache unload minimum size (66) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no -**Valores posibles**: Entero largo positivo > 1. +**Valores posibles**: entero largo positivo > 1. **Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). @@ -523,23 +507,13 @@ El propósito de este selector es reducir el número de liberaciones de datos de Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D -Se conserva entre dos sesiones: No - -Valores posibles: Entero largo positivo > 1. - -Descripción: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). - -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. - -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio. - ### Direct2D status (69) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: modo de activación de Direct2D bajo Windows. @@ -551,7 +525,7 @@ Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos p Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. -***Advertencia* : este selector se proporciona solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* +***Advertencia*: este selector se ofrece solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* @@ -577,13 +551,13 @@ Por ejemplo, si ejecuta: ### Diagnostic log recording (79) -**Thread-safe** : Yes +**Hilo seguro**: sí -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no -**Valores posibles**: 0 ó 1 (0 = no guardar,1 = guardar) +**Valores posibles**: 0 ó 1 (0 = no guardar, 1 = guardar) **Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). @@ -595,23 +569,25 @@ Note que es posible incluir la información personalizada en este archivo con ay ### Log command list (80) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. **Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. -Este selector permite guardar la cantidad de información almacenada en el archivo de depuración limitando los comandos 4D donde quiera guardar la ejecución. +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: + SET DATABASE PARAMETER(Log command list;"277;341") //Graba solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluye los comandos SET USER ALIAS y DELAY PROCESS de ser grabados + ### Spellchecker (81) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: No + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. @@ -621,11 +597,11 @@ Este selector permite guardar la cantidad de información almacenada en el archi ### Dates inside objects (85) -**Alcance**: Proceso actual +**Alcance**: proceso actual - **Se conserva entre dos sesiones:** No** + **Se conserva entre dos sesiones:** no - Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) + **Valores posibles**: Tipo cadena sin zona horaria (0), tipo cadena con zona horaria (1), tipo fecha (2) (por defecto) **Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. @@ -635,15 +611,13 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e - - ### Diagnostic log level (86) -**Thread-safe** : Yes +**Hilo seguro**: sí -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. @@ -655,15 +629,11 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e **Alcance:** 4D en modo local, 4D Server** -Se conserva entre dos sesiones:** sí** - -** **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. +**Se conserva entre dos sesiones:** sí -La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). +**Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. - -Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). **Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) @@ -687,7 +657,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Circular log limitation (90) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server. @@ -725,7 +695,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Cache flush periodicity (95) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server @@ -752,13 +722,11 @@ El tiempo de espera de la conexión remota se aplica después de que una máquin - - ### Tips enabled (101) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) @@ -796,7 +764,7 @@ Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los **Alcance**: 4D Server, 4D Web Server y 4D SQL Server -**Conservar entre dos sesiones**: No +**Conservar entre dos sesiones**: no **Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. @@ -810,10 +778,6 @@ Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los - - - - ### User param value (108) **Alcance**: 4D local, 4D Server @@ -830,9 +794,9 @@ Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), defin ### Times inside objects (109) -Alcance: 4D local, 4D Server (todos los procesos) +**Alcance**: 4D local, 4D Server (todos los procesos) - Se conserva entre dos sesiones: No + **Se conserva entre dos sesiones**: no **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) @@ -846,11 +810,11 @@ En versiones anteriores, los valores de tiempo se convertían y almacenaban como ### SMTP Log (110) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server* -* **Se conserva entre dos sesiones**: No +* **Se conserva entre dos sesiones**: no **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). @@ -864,9 +828,13 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Alcance:** Aplicación 4D -**Se conserva entre dos sesiones:** No +**Se conserva entre dos sesiones:** no + +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. **Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. + +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. @@ -912,7 +880,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la ### POP3 Log (116) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance:** 4D local, 4D Server @@ -920,7 +888,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -: iInicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. @@ -938,11 +906,11 @@ Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección ### IMAP Log (119) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). @@ -964,7 +932,7 @@ Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección ### Pause logging (121) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: aplicación 4D @@ -975,34 +943,36 @@ Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. + ### TCPUDP log recording (131) -**Scope:** 4D application. +**Alcance:** aplicación 4D -**Kept between two sessions:** No. +**Se mantiene entre dos sesiones**: no -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para registrar eventos TCP. ### RDP optimization (133) -**Scope:** 4D application. +**Alcance:** aplicación 4D -**Kept between two sessions:** No. +**Se mantiene entre dos sesiones**: no -**Possible values:** `0`: Disabled (default), `1`: Enabled. +**Valores posibles:** `0`: activado (por defecto), `1`: desactivado. -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). +**Descripción:** activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). - - -**Nota**: el parámetro *tabla* sólo es utilizado por los selectores 31, 46 y 47\. En todos los demás casos, se ignora si se pasa. +:::nota + +* El parámetro *tabla* sólo es utilizado por los selectores 31, 46 y 47\. En todos los demás casos, se ignora si se pasa. +* Si no se mantiene una configuración constante entre sesiones, pero desea asegurarse de que se aplique, debe ejecutarla en o [Método base On Server Startup](metodo-base-on-server-startup.md). -Si no se mantiene una configuración constante entre sesiones, pero desea asegurarse de que se aplique, debe ejecutarla en o [Método base On Server Startup](metodo-base-on-server-startup.md). +::: #### Selectores hilo seguro @@ -1019,7 +989,6 @@ El comando **SET DATABASE PARAMETER** puede utilizarse en procesos apropiativos * [IMAP Log](#imap-log-119) * [Pause logging](#pause-logging-121) - #### Ejemplo 1 La siguiente instrucción evitará un posible problema de timeout: @@ -1033,14 +1002,15 @@ La siguiente instrucción evitará un posible problema de timeout:  ... ``` - #### Ejemplo 2 Este ejemplo forza temporalmente la ejecución de un comando búsqueda por fórmula en el equipo cliente: ```4d - curVal:=Get database parameter([tabla1];Query By Formula On Server) //Almacena la configuración actual - SET DATABASE PARAMETER([tabla1];Query By Formula On Server;1) //Fuerza la ejecución en el equipo cliente + curVal:=Get database parameter([table1];Query By Formula On Server) //Almacena la configuración actual + SET DATABASE PARAMETER([table1];Query By Formula On Server;1) //Fuerza la ejecución en el equipo cliente + QUERY BY FORMULA([table1];myformula) + SET DATABASE PARAMETER([table1];Query By Formula On Server;curVal) //Reestablece la configuración actual ``` #### Ejemplo 3 @@ -1055,7 +1025,7 @@ Usted quiere exportar datos en JSON que contienen una fecha 4D convertida. Note  SET DATABASE PARAMETER(Dates inside objects;1) ``` -#### Ver también +#### Ver también [Get database parameter](get-database-parameter.md) [LOG EVENT](log-event.md) @@ -1067,5 +1037,3 @@ Usted quiere exportar datos en JSON que contienen una fecha 4D convertida. Note | --- | --- | | Número de comando | 642 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md index 7b5a31d53f367d..41a06864f9d2f0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md @@ -17,14 +17,14 @@ displayed_sidebar: docs ## Descripción -El comando **BLOB to print settings** reemplaza los parámetros de impresión actuales de 4D por los parámetros almacenados en el BLOB *confImpr*. Este BLOB debe haber sido generado por el comando [Print settings to BLOB](print-settings-to-blob.md) o por el comando 4D Pack 4D Pack (ver abajo). +El comando **BLOB to print settings** reemplaza los parámetros de impresión actuales de 4D por los parámetros almacenados en el BLOB *confImpr*. Este BLOB debe haber sido generado por el comando [Print settings to BLOB](print-settings-to-blob.md). El parámetro *params* le permite definir cómo manejar los parámetros básicos para el "número de copias" y el "intervalo de impresión": * Si pasa 0 u omite este parámetro, los valores almacenados en el BLOB se utilizan para la impresión. * Si pasa 1, los valores se restablecen a los valores predeterminados: el número de copias se establece en 1 y el intervalo de páginas se establece en "todas las páginas". -Los parámetros se aplican a los [parámetros actuales de impresión 4D](../settings/compatibility.md) siempre y cuando ningún comando como *\_o\_PAGE SETUP*, [SET PRINT OPTION](set-print-option.md) o [PRINT SELECTION](print-selection.md) sin el parámetro > los modifique. Los parámetros definidos se utiliza particularmente para los comandos [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) y [QR REPORT](qr-report.md), así como también para los comandos de impresión en los menú de 4D, incluyendo los del entorno Diseño. +Los parámetros se aplican a los [parámetros actuales de impresión 4D](../settings/compatibility.md) siempre y cuando ningún comando como [SET PRINT OPTION](set-print-option.md) o [PRINT SELECTION](print-selection.md) sin el parámetro > los modifique. Los parámetros definidos se utiliza particularmente para los comandos [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) y [QR REPORT](qr-report.md), así como también para los comandos de impresión en los menú de 4D, incluyendo los del entorno Diseño. Los comandos [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md) y [PRINT RECORD](print-record.md) deben ser llamados con el parámetro *\>* (si aplica) para que los parámetros definidos por **BLOB to print settings** se mantengan. @@ -41,13 +41,8 @@ El comando devuelve uno de los siguientes códigos de estado: ### Windows / macOS El BLOB *confImp* se puede guardar y leer en ambas plataformas. Sin embargo, incluso si ciertos parámetros de impresión son comunes, algunos otros son específicos de la plataforma y dependen de los controladores de impresión y de las versiones del sistema operativo. Si el mismo BLOB *confImp* se comparte entre ambas plataformas, es posible que pierda partes de información. - Cuando se utiliza en un entorno heterogéneo, con el fin de restaurar el máximo de parámetros de impresión disponibles para cada plataforma (y no sólo la parte común), se recomienda que maneje dos BLOBs *confImp*, uno para cada plataforma. -### Compatibilidad con los comandos 4D Pack - -Los BLOBs de parámetros de impresión generados con el comando 4D Pack \[#cmd id="61955"/\] pueden ser cargados y utilizados por el comando **BLOB to print settings**. Tenga en cuenta sin embargo, que si son guardados con \[#cmd id="1433"/\], se convierten y no se abrirán más con . El comando **BLOB to print settings** permite almacenar más información que el comando . - ## Ejemplo Usted desea aplicar la configuración de impresión guardada en el disco para el contexto de impresión 4D actual: @@ -82,5 +77,3 @@ Usted desea aplicar la configuración de impresión guardada en el disco para el | --- | --- | | Número de comando | 1434 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/get-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/get-database-parameter.md index 2c262c04c94815..67e32715374ec9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/get-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/get-database-parameter.md @@ -26,7 +26,7 @@ El parámetro *selector* designa el parámetro a obtener. 4D ofrece las siguient **Alcance**: aplicación 4D si *valor* positivo -Se conserva entre dos **sesiones**: sí si *valor* positivo +**Se conserva entre dos sesiones**: sí si *valor* positivo **Valores posibles**: 0 -> 32 767 @@ -34,8 +34,6 @@ Se conserva entre dos **sesiones**: sí si *valor* positivo El timeout del servidor define el periodo máximo de no respuesta del cliente "autorizado", por ejemplo si realiza una operación de bloqueo. Al terminar esta periodo, 4D Server desconecta al cliente. El selector 4D Server Timeout le permite asignar en el parámetro *valor*un nuevo timeout, expresado en minutos. Esta funcionalidad es particularmente útil para aumentar el valor del timeout antes de la ejecución en el equipo cliente de una operación de larga duración, tal como la impresión de un gran número de páginas, la cual puede causar un timeout inesperado. - - Tiene dos opciones: Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global y permanente: el nuevo valor se aplica a todos los procesos y se almacena en las Preferencias de la aplicación 4D (equivalente a cambiar en el diálogo Preferencias).Si pasa un valor **negativo** en el parámetro *valor*, define un timeout lobal y temporal: el nuevo valor se aplica únicamente a los procesos llamantes (los otros procesos conservan los valores por defecto) y se restaura al valor por defecto tan pronto como el servidor recibe una señal de actividad del cliente, por ejemplo, cuando la operación termina. Esta opción es muy útil para administrar operaciones largas iniciadas por plug-ins 4D. Para definir una conexión "Sin timeout", pase 0 en *valor*. Ver el ejemplo 1. @@ -44,7 +42,7 @@ Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global ### 4D Remote mode timeout (14) -**Alcance** (antigua capa de red únicamente): aplicación 4D si valor positivo +**Alcance** (antigua capa de red únicamente): aplicación 4D si *valor* positivo **Se conserva entre dos sesiones**: sí si *valor* positivo @@ -58,27 +56,21 @@ El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: no - -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. Por defecto, el valor es 80. +**Se conserva entre dos sesiones**: no -El número de puerto TCP está definido en la página "Web/Configuración" de la caja de diálogo de las Propiedades de la base. Puede utilizar las constantes del tema para el parámetro *valor*. +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, puede definirse en la página "Web/Configuración" de la caja de diálogo de Preferencias es 80\. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* - - ### Character set (17) **Alcance:** 4D local, 4D Server** -Se conserva entre dos sesiones:** sí** - -Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. - +**Se conserva entre dos sesiones:** sí** +**Descripción:** *constante obsoleta (se conserva por compatibilidad únicamente).* Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -86,11 +78,9 @@ Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Valores**: todo valor entre 10 y 32 000\. El valor por defecto es 100. - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -98,7 +88,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 15 @@ -110,7 +100,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 17 @@ -122,51 +112,45 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -Valores posibles: ver selector 18 +**Valores posibles**: ver selector 18 **Descripción**: permite especificar esta parámetro para las máquinas 4D remotas utilizadas como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir este valor sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. - - ### Maximum Web requests size (27) **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Valores posibles**: 500 000 a 2 147 483 648. - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. ### 4D Server log recording (28) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D Server, 4D remoto* -* Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores** **posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). **Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). -4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. - +4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. - ### Client Web log recording (30) **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 = No grabar (por defecto), 1 = Registrar en formato CLF, 2 = Registrar en formato DLF, 3 = Registrar en formato ELF, 4 = Registrar en formato WLF. @@ -178,9 +162,9 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, ### Table sequence number (31) -**Alcance**: *a*plicación 4D +**Alcance**: aplicación 4D - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: todo valor de tipo entero largo. @@ -190,19 +174,19 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr +### Debug log recording (34) +**Hilo seguro**: sí +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Debug log recording (34) - -**Thread-safe** : Yes - -**Alcance**: Aplicación 4D +**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo y *Server* se añade al nombre del archivo cuando se genera en el servidor). Hay dos modos disponibles: -**Se conserva entre dos sesiones**: No +- El modo estándar ofrece una vista básica de los eventos y el archivo se coloca automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Los tiempos de ejecución se expresan en milisegundos y se muestra el valor "< ms" cuando una operación dura menos de un milisegundo. -**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo). +- El modo con pestañas ofrece información adicional y utiliza un formato más compacto con pestañas en el archivo. Los tiempos de ejecución se expresan en microsegundos. **Valores posibles**: Entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). @@ -232,7 +216,15 @@ SET DATABASE PARAMETER (34;0) // desactiva el archivo Para todo tipo de aplicaci - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. **Nota:** este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. + + +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. + +Este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. + + + + @@ -240,9 +232,9 @@ Para más información sobre este formato y sobre el uso del archivo *4DDebugLog **Alcance**: base de datos -Se conserva entre dos **sesiones**: sí** +**Se conserva entre dos sesiones**: sí -Valores posibles**: 0 a 65535 +**Valores posibles**: 0 a 65535 **Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. @@ -258,17 +250,17 @@ Cuando modifica este valor, es necesario reiniciar el equipo servidor para que e **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. ### Client HTTPS port ID (40) -**Alcance**:todos los equipos 4D remotos +**Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 a 65535 @@ -280,13 +272,11 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica - - ### SQL Autocommit (43) **Alcance**:base de datos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Posibles valores**: 0 (desactivación) o 1 (activación) @@ -298,9 +288,9 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica ### SQL Engine case sensitivity (44) -**Alcance**:base de datos +**Alcance**: base de datos - Se conserva entre dos sesiones: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) @@ -308,13 +298,13 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). -Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subform-container.md) de las Preferencias de la base. +**Atención:* como esta opción Modifica el archivo de estructura de la base de datos y todos los procesos. Por motivos de rendimiento, se recomienda encarecidamente configurarlo solo al iniciar la base de datos.* Esta opción también se puede configurar en los ajustes de la base de datos. ### Client log recording (45) -**Alcance**:equipo 4D remoto +**Alcance**: equipo 4D remoto Se conserva entre dos **sesiones**: no @@ -332,7 +322,7 @@ Estos archivos texto almacenan en formato tabulado simple diferente información **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) @@ -342,9 +332,11 @@ Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda " en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. Consulte el ejemplo 2. +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. + +Consulte el ejemplo 2. - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. @@ -352,7 +344,7 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) @@ -360,19 +352,17 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. - - - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. ### Auto synchro resources folder (48) -**Alcance**:equipo 4D remoto +**Alcance**: equipo 4D remoto - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no - **Valores p** **osibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). **Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. @@ -386,7 +376,7 @@ Tres modos de sincronización son posibles del lado del cliente. El selector Aut ### Query by formula joins (49) -**Alcance**:Proceso actual +**Alcance**: proceso actual Se conserva entre dos **sesiones**: no @@ -418,9 +408,7 @@ Se conserva entre dos **sesiones**: no Se conserva entre dos **sesiones**: no -Valores posibles: todo valor de tipo entero largo - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -428,7 +416,7 @@ Valores posibles: todo valor de tipo entero largo **Alcance**: 4D Server - Se conserva entre dos sesiones: no + Se conserva entre dos **sesiones**: no **Valores posibles**: entero largo positivo. @@ -442,8 +430,6 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv - - ### Idle connections timeout (54) **Alcance**: aplicación 4D a menos que valor sea negativo @@ -452,7 +438,7 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv **Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D y al motor SQL, así como también en modo *ServerNet* (nueva capa de red), al servidor de la aplicación 4D. Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. +**Descripción**: máximo periodo de inactividad para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. @@ -464,7 +450,7 @@ Este parámetro puede definirse del lado del cliente. Por lo general, no necesit ### PHP interpreter IP address (55) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D Se conserva entre dos **sesiones**: no @@ -478,9 +464,9 @@ Para mayor información sobre el intérprete PHP, por favor consulte el manual d ### PHP interpreter port (56) -**Alcance**:Aplicación 4D +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: No + **Se conserva entre dos sesiones**: no **Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. @@ -496,9 +482,7 @@ Se conserva entre dos sesiones: No **Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Description:** **Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". - -Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). @@ -512,9 +496,9 @@ Para reinicializar la lista de cifrado a su valor por defecto (guardado permanen ### Cache unload minimum size (66) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: Entero largo positivo > 1. @@ -522,16 +506,6 @@ Para reinicializar la lista de cifrado a su valor por defecto (guardado permanen El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D - -Se conserva entre dos sesiones: No - -Valores posibles: Entero largo positivo > 1. - -Descripción: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). - -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. - Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio. @@ -540,7 +514,7 @@ Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la cach **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: modo de activación de Direct2D bajo Windows. @@ -578,7 +552,7 @@ Por ejemplo, si ejecuta: ### Diagnostic log recording (79) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: Aplicación 4D @@ -596,17 +570,19 @@ Note que es posible incluir la información personalizada en este archivo con ay ### Log command list (80) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. **Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. -Este selector permite guardar la cantidad de información almacenada en el archivo de depuración limitando los comandos 4D donde quiera guardar la ejecución. - +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: + SET DATABASE PARAMETER(Log command list;"277;341") //Grabar solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluir SET USER ALIAS y DELAY PROCESS commands from being recorded + + ### Spellchecker (81) @@ -622,11 +598,11 @@ Este selector permite guardar la cantidad de información almacenada en el archi ### Dates inside objects (85) -**Alcance**: Proceso actual +**Alcance**: proceso actual - **Se conserva entre dos sesiones:** No** + **Se conserva entre dos sesiones**: no - Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) + **Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) **Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. @@ -636,15 +612,13 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e - - ### Diagnostic log level (86) -**Thread-safe** : Yes +**Hilo seguro**: sí -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. @@ -656,15 +630,11 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e **Alcance:** 4D en modo local, 4D Server** -Se conserva entre dos sesiones:** sí** +**Se conserva entre dos sesiones:** sí** -** **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. + **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). - -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. - -Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). **Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) @@ -676,7 +646,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. **Alcance**: 4D modo local y 4D Server. -: Sí +**Se conserva entre dos sesiones:** sí** **Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. @@ -688,7 +658,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Circular log limitation (90) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server. @@ -726,7 +696,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Cache flush periodicity (95) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server @@ -753,13 +723,11 @@ El tiempo de espera de la conexión remota se aplica después de que una máquin - - ### Tips enabled (101) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) @@ -811,10 +779,6 @@ Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los - - - - ### User param value (108) **Alcance**: 4D local, 4D Server @@ -833,7 +797,7 @@ Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), defin Alcance: 4D local, 4D Server (todos los procesos) - Se conserva entre dos sesiones: No + Se conserva entre dos **sesiones**: No **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) @@ -847,11 +811,11 @@ En versiones anteriores, los valores de tiempo se convertían y almacenaban como ### SMTP Log (110) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server* -* **Se conserva entre dos sesiones**: No +* **Se conserva entre dos sesiones**: no **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). @@ -867,7 +831,11 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Se conserva entre dos sesiones:** No -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. **Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. + +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. + +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. @@ -913,7 +881,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la ### POP3 Log (116) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance:** 4D local, 4D Server @@ -921,7 +889,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -: iInicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. @@ -939,7 +907,7 @@ Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección ### IMAP Log (119) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server @@ -965,7 +933,7 @@ Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección ### Pause logging (121) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: aplicación 4D @@ -977,6 +945,29 @@ Este selector permite suspender/reanudar todas las operaciones de registro inici +### TCPUDP log recording (131) + +**Alcance**: aplicación 4D + +**Se mantiene entre dos sesiones**: no + +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. + +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para los eventos logging TCP. + + + +### RDP optimization + +**Alcance**: aplicación 4D + +**Se mantiene entre dos sesiones**: no + +**Valores posibles:** `0`: Disabled (default), `1`: Enabled. + +**Descripción:** Activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). + + ## Selectores hilo seguro @@ -1032,5 +1023,3 @@ En el [Método base On Startup](metodo-base-on-startup.md), usted escribe: | --- | --- | | Número de comando | 643 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/set-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/set-database-parameter.md index 90f91fef5be0e4..b2223dee64a5c1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/set-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/set-database-parameter.md @@ -25,7 +25,7 @@ El *selector* designa el parámetro a modificar. 4D ofrece constantes predefinid **Alcance**: aplicación 4D si *valor* positivo -Se conserva entre dos **sesiones**: sí si *valor* positivo +**Se conserva entre dos sesiones**: sí si *valor* positivo **Valores posibles**: 0 -> 32 767 @@ -33,8 +33,6 @@ Se conserva entre dos **sesiones**: sí si *valor* positivo El timeout del servidor define el periodo máximo de no respuesta del cliente "autorizado", por ejemplo si realiza una operación de bloqueo. Al terminar esta periodo, 4D Server desconecta al cliente. El selector 4D Server Timeout le permite asignar en el parámetro *valor*un nuevo timeout, expresado en minutos. Esta funcionalidad es particularmente útil para aumentar el valor del timeout antes de la ejecución en el equipo cliente de una operación de larga duración, tal como la impresión de un gran número de páginas, la cual puede causar un timeout inesperado. - - Tiene dos opciones: Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global y permanente: el nuevo valor se aplica a todos los procesos y se almacena en las Preferencias de la aplicación 4D (equivalente a cambiar en el diálogo Preferencias).Si pasa un valor **negativo** en el parámetro *valor*, define un timeout lobal y temporal: el nuevo valor se aplica únicamente a los procesos llamantes (los otros procesos conservan los valores por defecto) y se restaura al valor por defecto tan pronto como el servidor recibe una señal de actividad del cliente, por ejemplo, cuando la operación termina. Esta opción es muy útil para administrar operaciones largas iniciadas por plug-ins 4D. Para definir una conexión "Sin timeout", pase 0 en *valor*. Ver el ejemplo 1. @@ -57,27 +55,21 @@ El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: no - -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. Por defecto, el valor es 80. +**Se conserva entre dos sesiones**: no -El número de puerto TCP está definido en la página "Web/Configuración" de la caja de diálogo de las Propiedades de la base. Puede utilizar las constantes del tema para el parámetro *valor*. +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, que puede ser definido en la página "Web/Configuración" de la caja de diálogo Preferencias, es 80. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* - - ### Character set (17) -**Alcance:** 4D local, 4D Server** - -Se conserva entre dos sesiones:** sí** - -Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Alcance:** 4D local, 4D Server +**Se conserva entre dos sesiones**: sí +**Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -85,11 +77,9 @@ Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Valores**: todo valor entre 10 y 32 000\. El valor por defecto es 100. - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -97,7 +87,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 15 @@ -109,7 +99,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 17 @@ -121,23 +111,19 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -Valores posibles: ver selector 18 +**Valores posibles**: ver selector 18 **Descripción**: permite especificar esta parámetro para las máquinas 4D remotas utilizadas como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir este valor sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. - - ### Maximum Web requests size (27) **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí - -**Valores posibles**: 500 000 a 2 147 483 648. +**Se conserva entre dos sesiones**: sí **Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -145,13 +131,13 @@ Se conserva entre dos **sesiones**: sí ### 4D Server log recording (28) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D Server, 4D remoto* -* Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores** **posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). **Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). @@ -159,13 +145,11 @@ Se conserva entre dos **sesiones**: sí Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. - - ### Client Web log recording (30) **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 = No grabar (por defecto), 1 = Registrar en formato CLF, 2 = Registrar en formato DLF, 3 = Registrar en formato ELF, 4 = Registrar en formato WLF. @@ -177,9 +161,9 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, ### Table sequence number (31) -**Alcance**: *a*plicación 4D +**Alcance**: aplicación 4D - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: todo valor de tipo entero largo. @@ -189,21 +173,21 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr +### Debug log recording (34) +**Hilo seguro**: sí +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Debug log recording (34) - -**Thread-safe** : Yes - -**Alcance**: Aplicación 4D +**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo y *Server* se añade al nombre del archivo cuando se genera en el servidor). Hay dos modos disponibles: -**Se conserva entre dos sesiones**: No +- El modo estándar ofrece una vista básica de los eventos y el archivo se coloca automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Los tiempos de ejecución se expresan en milisegundos y se muestra el valor "< ms" cuando una operación dura menos de un milisegundo. -**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo). +- El modo con pestañas ofrece información adicional y utiliza un formato más compacto con pestañas en el archivo. Los tiempos de ejecución se expresan en microsegundos. -**Valores posibles**: Entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +**Valores posibles**: entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (valor 1) permite activar el archivo (note que cualquier otro valor no nulo también lo activará) @@ -225,13 +209,21 @@ SET DATABASE PARAMETER (34;2) // activa el modo estándar con los parámetros y SET DATABASE PARAMETER (34;2+4) // activa el modo tabulado con los parámetros y las duraciones -SET DATABASE PARAMETER (34;0) // desactiva el archivo Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: +SET DATABASE PARAMETER (34;0) // desactiva el archivo + +Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: - restringiendo los comandos 4D que se examinan utilizando Log command list (selector 80), o - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. **Nota:** este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. +*Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. + +Este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. + + + + @@ -239,9 +231,9 @@ Para más información sobre este formato y sobre el uso del archivo *4DDebugLog **Alcance**: base de datos -Se conserva entre dos **sesiones**: sí** +**Se conserva entre dos sesiones**: sí -Valores posibles**: 0 a 65535 +**Valores posibles**: 0 a 65535 **Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. @@ -257,17 +249,17 @@ Cuando modifica este valor, es necesario reiniciar el equipo servidor para que e **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. ### Client HTTPS port ID (40) -**Alcance**:todos los equipos 4D remotos +**Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 a 65535 @@ -279,13 +271,11 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica - - ### SQL Autocommit (43) -**Alcance**:base de datos +**Alcance**: base de datos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Posibles valores**: 0 (desactivación) o 1 (activación) @@ -297,9 +287,9 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica ### SQL Engine case sensitivity (44) -**Alcance**:base de datos +**Alcance**: base de datos - Se conserva entre dos sesiones: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) @@ -315,7 +305,7 @@ Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subfor **Alcance**:equipo 4D remoto - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). @@ -331,7 +321,7 @@ Estos archivos texto almacenan en formato tabulado simple diferente información **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) @@ -341,9 +331,11 @@ Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda " en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. Consulte el ejemplo 2. +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +Consulte el ejemplo 2. + +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. @@ -351,7 +343,7 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) @@ -359,9 +351,7 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. - - - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. @@ -369,9 +359,9 @@ Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](ord **Alcance**:equipo 4D remoto - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no - **Valores p** **osibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). **Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. @@ -385,9 +375,9 @@ Tres modos de sincronización son posibles del lado del cliente. El selector Aut ### Query by formula joins (49) -**Alcance**:Proceso actual +**Alcance**: proceso actual - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). @@ -405,9 +395,9 @@ El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de **Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -415,11 +405,9 @@ Se conserva entre dos **sesiones**: no **Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no -Valores posibles: todo valor de tipo entero largo - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -427,7 +415,7 @@ Valores posibles: todo valor de tipo entero largo **Alcance**: 4D Server - Se conserva entre dos sesiones: no + **Se conserva entre dos sesiones**: no **Valores posibles**: entero largo positivo. @@ -441,8 +429,6 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv - - ### Idle connections timeout (54) **Alcance**: aplicación 4D a menos que valor sea negativo @@ -451,7 +437,7 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv **Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D y al motor SQL, así como también en modo *ServerNet* (nueva capa de red), al servidor de la aplicación 4D. Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. +**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. @@ -465,7 +451,7 @@ Este parámetro puede definirse del lado del cliente. Por lo general, no necesit **Alcance**: Aplicación 4D -Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no **Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). @@ -477,9 +463,9 @@ Para mayor información sobre el intérprete PHP, por favor consulte el manual d ### PHP interpreter port (56) -**Alcance**:Aplicación 4D +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: No + **Se conserva entre dos sesiones**: no **Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. @@ -495,7 +481,7 @@ Se conserva entre dos sesiones: No **Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Description:** **Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. @@ -507,15 +493,13 @@ Para reinicializar la lista de cifrado a su valor por defecto (guardado permanen **Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. - - ### Cache unload minimum size (66) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no -**Valores posibles**: Entero largo positivo > 1. +**Valores posibles**: entero largo positivo > 1. **Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). @@ -523,23 +507,13 @@ El propósito de este selector es reducir el número de liberaciones de datos de Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D -Se conserva entre dos sesiones: No - -Valores posibles: Entero largo positivo > 1. - -Descripción: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). - -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. - -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio. - ### Direct2D status (69) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: modo de activación de Direct2D bajo Windows. @@ -551,7 +525,7 @@ Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos p Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. -***Advertencia* : este selector se proporciona solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* +***Advertencia*: este selector se ofrece solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* @@ -577,13 +551,13 @@ Por ejemplo, si ejecuta: ### Diagnostic log recording (79) -**Thread-safe** : Yes +**Hilo seguro**: sí -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no -**Valores posibles**: 0 ó 1 (0 = no guardar,1 = guardar) +**Valores posibles**: 0 ó 1 (0 = no guardar, 1 = guardar) **Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). @@ -595,23 +569,25 @@ Note que es posible incluir la información personalizada en este archivo con ay ### Log command list (80) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. **Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. -Este selector permite guardar la cantidad de información almacenada en el archivo de depuración limitando los comandos 4D donde quiera guardar la ejecución. +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: + SET DATABASE PARAMETER(Log command list;"277;341") //Graba solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluye los comandos SET USER ALIAS y DELAY PROCESS de ser grabados + ### Spellchecker (81) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: No + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. @@ -621,11 +597,11 @@ Este selector permite guardar la cantidad de información almacenada en el archi ### Dates inside objects (85) -**Alcance**: Proceso actual +**Alcance**: proceso actual - **Se conserva entre dos sesiones:** No** + **Se conserva entre dos sesiones:** no - Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) + **Valores posibles**: Tipo cadena sin zona horaria (0), tipo cadena con zona horaria (1), tipo fecha (2) (por defecto) **Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. @@ -635,15 +611,13 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e - - ### Diagnostic log level (86) -**Thread-safe** : Yes +**Hilo seguro**: sí -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. @@ -655,15 +629,11 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e **Alcance:** 4D en modo local, 4D Server** -Se conserva entre dos sesiones:** sí** +**Se conserva entre dos sesiones:** sí -** **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. +**Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). - -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. - -Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). **Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) @@ -687,7 +657,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Circular log limitation (90) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server. @@ -725,7 +695,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Cache flush periodicity (95) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server @@ -752,13 +722,11 @@ El tiempo de espera de la conexión remota se aplica después de que una máquin - - ### Tips enabled (101) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) @@ -796,7 +764,7 @@ Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los **Alcance**: 4D Server, 4D Web Server y 4D SQL Server -**Conservar entre dos sesiones**: No +**Conservar entre dos sesiones**: no **Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. @@ -810,10 +778,6 @@ Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los - - - - ### User param value (108) **Alcance**: 4D local, 4D Server @@ -830,9 +794,9 @@ Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), defin ### Times inside objects (109) -Alcance: 4D local, 4D Server (todos los procesos) +**Alcance**: 4D local, 4D Server (todos los procesos) - Se conserva entre dos sesiones: No + **Se conserva entre dos sesiones**: no **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) @@ -846,11 +810,11 @@ En versiones anteriores, los valores de tiempo se convertían y almacenaban como ### SMTP Log (110) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server* -* **Se conserva entre dos sesiones**: No +* **Se conserva entre dos sesiones**: no **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). @@ -864,9 +828,13 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Alcance:** Aplicación 4D -**Se conserva entre dos sesiones:** No +**Se conserva entre dos sesiones:** no -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. **Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. + +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. + +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. @@ -912,7 +880,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la ### POP3 Log (116) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance:** 4D local, 4D Server @@ -920,7 +888,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -: iInicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. @@ -938,11 +906,11 @@ Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección ### IMAP Log (119) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). @@ -964,7 +932,7 @@ Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección ### Pause logging (121) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: aplicación 4D @@ -976,12 +944,35 @@ Este selector permite suspender/reanudar todas las operaciones de registro inici +### TCPUDP log recording (131) - - -**Nota**: el parámetro *tabla* sólo es utilizado por los selectores 31, 46 y 47\. En todos los demás casos, se ignora si se pasa. +**Alcance:** aplicación 4D + +**Se mantiene entre dos sesiones**: no + +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. + +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para registrar eventos TCP. -Si no se mantiene una configuración constante entre sesiones, pero desea asegurarse de que se aplique, debe ejecutarla en o [Método base On Server Startup](metodo-base-on-server-startup.md). + + +### RDP optimization (133) + +**Alcance:** aplicación 4D + +**Se mantiene entre dos sesiones**: no + +**Valores posibles:** `0`: activado (por defecto), `1`: desactivado. + +**Descripción:** activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). + + +:::nota + +* El parámetro *tabla* sólo es utilizado por los selectores 31, 46 y 47\. En todos los demás casos, se ignora si se pasa. +* Si no se mantiene una configuración constante entre sesiones, pero desea asegurarse de que se aplique, debe ejecutarla en o [Método base On Server Startup](metodo-base-on-server-startup.md). + +::: #### Selectores hilo seguro @@ -998,7 +989,6 @@ El comando **SET DATABASE PARAMETER** puede utilizarse en procesos apropiativos * [IMAP Log](#imap-log-119) * [Pause logging](#pause-logging-121) - #### Ejemplo 1 La siguiente instrucción evitará un posible problema de timeout: @@ -1017,8 +1007,10 @@ La siguiente instrucción evitará un posible problema de timeout: Este ejemplo forza temporalmente la ejecución de un comando búsqueda por fórmula en el equipo cliente: ```4d - curVal:=Get database parameter([tabla1];Query By Formula On Server) //Almacena la configuración actual - SET DATABASE PARAMETER([tabla1];Query By Formula On Server;1) //Fuerza la ejecución en el equipo cliente + curVal:=Get database parameter([table1];Query By Formula On Server) //Almacena la configuración actual + SET DATABASE PARAMETER([table1];Query By Formula On Server;1) //Fuerza la ejecución en el equipo cliente + QUERY BY FORMULA([table1];myformula) + SET DATABASE PARAMETER([table1];Query By Formula On Server;curVal) //Reestablece la configuración actual ``` #### Ejemplo 3 @@ -1033,7 +1025,7 @@ Usted quiere exportar datos en JSON que contienen una fecha 4D convertida. Note  SET DATABASE PARAMETER(Dates inside objects;1) ``` -#### Ver también +#### Ver también [Get database parameter](get-database-parameter.md) [LOG EVENT](log-event.md) @@ -1045,5 +1037,3 @@ Usted quiere exportar datos en JSON que contienen una fecha 4D convertida. Note | --- | --- | | Número de comando | 642 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md index 7b5a31d53f367d..41a06864f9d2f0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md @@ -17,14 +17,14 @@ displayed_sidebar: docs ## Descripción -El comando **BLOB to print settings** reemplaza los parámetros de impresión actuales de 4D por los parámetros almacenados en el BLOB *confImpr*. Este BLOB debe haber sido generado por el comando [Print settings to BLOB](print-settings-to-blob.md) o por el comando 4D Pack 4D Pack (ver abajo). +El comando **BLOB to print settings** reemplaza los parámetros de impresión actuales de 4D por los parámetros almacenados en el BLOB *confImpr*. Este BLOB debe haber sido generado por el comando [Print settings to BLOB](print-settings-to-blob.md). El parámetro *params* le permite definir cómo manejar los parámetros básicos para el "número de copias" y el "intervalo de impresión": * Si pasa 0 u omite este parámetro, los valores almacenados en el BLOB se utilizan para la impresión. * Si pasa 1, los valores se restablecen a los valores predeterminados: el número de copias se establece en 1 y el intervalo de páginas se establece en "todas las páginas". -Los parámetros se aplican a los [parámetros actuales de impresión 4D](../settings/compatibility.md) siempre y cuando ningún comando como *\_o\_PAGE SETUP*, [SET PRINT OPTION](set-print-option.md) o [PRINT SELECTION](print-selection.md) sin el parámetro > los modifique. Los parámetros definidos se utiliza particularmente para los comandos [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) y [QR REPORT](qr-report.md), así como también para los comandos de impresión en los menú de 4D, incluyendo los del entorno Diseño. +Los parámetros se aplican a los [parámetros actuales de impresión 4D](../settings/compatibility.md) siempre y cuando ningún comando como [SET PRINT OPTION](set-print-option.md) o [PRINT SELECTION](print-selection.md) sin el parámetro > los modifique. Los parámetros definidos se utiliza particularmente para los comandos [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) y [QR REPORT](qr-report.md), así como también para los comandos de impresión en los menú de 4D, incluyendo los del entorno Diseño. Los comandos [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md) y [PRINT RECORD](print-record.md) deben ser llamados con el parámetro *\>* (si aplica) para que los parámetros definidos por **BLOB to print settings** se mantengan. @@ -41,13 +41,8 @@ El comando devuelve uno de los siguientes códigos de estado: ### Windows / macOS El BLOB *confImp* se puede guardar y leer en ambas plataformas. Sin embargo, incluso si ciertos parámetros de impresión son comunes, algunos otros son específicos de la plataforma y dependen de los controladores de impresión y de las versiones del sistema operativo. Si el mismo BLOB *confImp* se comparte entre ambas plataformas, es posible que pierda partes de información. - Cuando se utiliza en un entorno heterogéneo, con el fin de restaurar el máximo de parámetros de impresión disponibles para cada plataforma (y no sólo la parte común), se recomienda que maneje dos BLOBs *confImp*, uno para cada plataforma. -### Compatibilidad con los comandos 4D Pack - -Los BLOBs de parámetros de impresión generados con el comando 4D Pack \[#cmd id="61955"/\] pueden ser cargados y utilizados por el comando **BLOB to print settings**. Tenga en cuenta sin embargo, que si son guardados con \[#cmd id="1433"/\], se convierten y no se abrirán más con . El comando **BLOB to print settings** permite almacenar más información que el comando . - ## Ejemplo Usted desea aplicar la configuración de impresión guardada en el disco para el contexto de impresión 4D actual: @@ -82,5 +77,3 @@ Usted desea aplicar la configuración de impresión guardada en el disco para el | --- | --- | | Número de comando | 1434 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md index 2550c0af3456b0..67e32715374ec9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md @@ -26,7 +26,7 @@ El parámetro *selector* designa el parámetro a obtener. 4D ofrece las siguient **Alcance**: aplicación 4D si *valor* positivo -Se conserva entre dos **sesiones**: sí si *valor* positivo +**Se conserva entre dos sesiones**: sí si *valor* positivo **Valores posibles**: 0 -> 32 767 @@ -34,8 +34,6 @@ Se conserva entre dos **sesiones**: sí si *valor* positivo El timeout del servidor define el periodo máximo de no respuesta del cliente "autorizado", por ejemplo si realiza una operación de bloqueo. Al terminar esta periodo, 4D Server desconecta al cliente. El selector 4D Server Timeout le permite asignar en el parámetro *valor*un nuevo timeout, expresado en minutos. Esta funcionalidad es particularmente útil para aumentar el valor del timeout antes de la ejecución en el equipo cliente de una operación de larga duración, tal como la impresión de un gran número de páginas, la cual puede causar un timeout inesperado. - - Tiene dos opciones: Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global y permanente: el nuevo valor se aplica a todos los procesos y se almacena en las Preferencias de la aplicación 4D (equivalente a cambiar en el diálogo Preferencias).Si pasa un valor **negativo** en el parámetro *valor*, define un timeout lobal y temporal: el nuevo valor se aplica únicamente a los procesos llamantes (los otros procesos conservan los valores por defecto) y se restaura al valor por defecto tan pronto como el servidor recibe una señal de actividad del cliente, por ejemplo, cuando la operación termina. Esta opción es muy útil para administrar operaciones largas iniciadas por plug-ins 4D. Para definir una conexión "Sin timeout", pase 0 en *valor*. Ver el ejemplo 1. @@ -44,7 +42,7 @@ Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global ### 4D Remote mode timeout (14) -**Alcance** (antigua capa de red únicamente): aplicación 4D si valor positivo +**Alcance** (antigua capa de red únicamente): aplicación 4D si *valor* positivo **Se conserva entre dos sesiones**: sí si *valor* positivo @@ -58,27 +56,21 @@ El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: no - -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. Por defecto, el valor es 80. +**Se conserva entre dos sesiones**: no -El número de puerto TCP está definido en la página "Web/Configuración" de la caja de diálogo de las Propiedades de la base. Puede utilizar las constantes del tema para el parámetro *valor*. +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, puede definirse en la página "Web/Configuración" de la caja de diálogo de Preferencias es 80\. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* - - ### Character set (17) **Alcance:** 4D local, 4D Server** -Se conserva entre dos sesiones:** sí** - -Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. - +**Se conserva entre dos sesiones:** sí** +**Descripción:** *constante obsoleta (se conserva por compatibilidad únicamente).* Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -86,11 +78,9 @@ Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Valores**: todo valor entre 10 y 32 000\. El valor por defecto es 100. - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -98,7 +88,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 15 @@ -110,7 +100,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 17 @@ -122,51 +112,45 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -Valores posibles: ver selector 18 +**Valores posibles**: ver selector 18 **Descripción**: permite especificar esta parámetro para las máquinas 4D remotas utilizadas como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir este valor sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. - - ### Maximum Web requests size (27) **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí - -**Valores posibles**: 500 000 a 2 147 483 648. +**Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. ### 4D Server log recording (28) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D Server, 4D remoto* -* Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores** **posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). **Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). -4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. - +4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. - ### Client Web log recording (30) **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 = No grabar (por defecto), 1 = Registrar en formato CLF, 2 = Registrar en formato DLF, 3 = Registrar en formato ELF, 4 = Registrar en formato WLF. @@ -178,9 +162,9 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, ### Table sequence number (31) -**Alcance**: *a*plicación 4D +**Alcance**: aplicación 4D - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: todo valor de tipo entero largo. @@ -190,19 +174,19 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr +### Debug log recording (34) +**Hilo seguro**: sí +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Debug log recording (34) +**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo y *Server* se añade al nombre del archivo cuando se genera en el servidor). Hay dos modos disponibles: -**Thread-safe** : Yes +- El modo estándar ofrece una vista básica de los eventos y el archivo se coloca automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Los tiempos de ejecución se expresan en milisegundos y se muestra el valor "< ms" cuando una operación dura menos de un milisegundo. -**Alcance**: Aplicación 4D - -**Se conserva entre dos sesiones**: No - -**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo). +- El modo con pestañas ofrece información adicional y utiliza un formato más compacto con pestañas en el archivo. Los tiempos de ejecución se expresan en microsegundos. **Valores posibles**: Entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). @@ -232,7 +216,15 @@ SET DATABASE PARAMETER (34;0) // desactiva el archivo Para todo tipo de aplicaci - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. **Nota:** este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. + + +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. + +Este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. + + + + @@ -240,9 +232,9 @@ Para más información sobre este formato y sobre el uso del archivo *4DDebugLog **Alcance**: base de datos -Se conserva entre dos **sesiones**: sí** +**Se conserva entre dos sesiones**: sí -Valores posibles**: 0 a 65535 +**Valores posibles**: 0 a 65535 **Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. @@ -258,17 +250,17 @@ Cuando modifica este valor, es necesario reiniciar el equipo servidor para que e **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. ### Client HTTPS port ID (40) -**Alcance**:todos los equipos 4D remotos +**Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 a 65535 @@ -280,13 +272,11 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica - - ### SQL Autocommit (43) **Alcance**:base de datos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Posibles valores**: 0 (desactivación) o 1 (activación) @@ -298,9 +288,9 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica ### SQL Engine case sensitivity (44) -**Alcance**:base de datos +**Alcance**: base de datos - Se conserva entre dos sesiones: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) @@ -308,13 +298,13 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). -Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subform-container.md) de las Preferencias de la base. +**Atención:* como esta opción Modifica el archivo de estructura de la base de datos y todos los procesos. Por motivos de rendimiento, se recomienda encarecidamente configurarlo solo al iniciar la base de datos.* Esta opción también se puede configurar en los ajustes de la base de datos. ### Client log recording (45) -**Alcance**:equipo 4D remoto +**Alcance**: equipo 4D remoto Se conserva entre dos **sesiones**: no @@ -332,7 +322,7 @@ Estos archivos texto almacenan en formato tabulado simple diferente información **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) @@ -342,9 +332,11 @@ Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda " en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. Consulte el ejemplo 2. +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. + +Consulte el ejemplo 2. - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. @@ -352,7 +344,7 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) @@ -360,19 +352,17 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. - - - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. ### Auto synchro resources folder (48) -**Alcance**:equipo 4D remoto +**Alcance**: equipo 4D remoto - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no - **Valores p** **osibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). **Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. @@ -386,7 +376,7 @@ Tres modos de sincronización son posibles del lado del cliente. El selector Aut ### Query by formula joins (49) -**Alcance**:Proceso actual +**Alcance**: proceso actual Se conserva entre dos **sesiones**: no @@ -418,9 +408,7 @@ Se conserva entre dos **sesiones**: no Se conserva entre dos **sesiones**: no -Valores posibles: todo valor de tipo entero largo - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -428,7 +416,7 @@ Valores posibles: todo valor de tipo entero largo **Alcance**: 4D Server - Se conserva entre dos sesiones: no + Se conserva entre dos **sesiones**: no **Valores posibles**: entero largo positivo. @@ -442,8 +430,6 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv - - ### Idle connections timeout (54) **Alcance**: aplicación 4D a menos que valor sea negativo @@ -452,7 +438,7 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv **Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D y al motor SQL, así como también en modo *ServerNet* (nueva capa de red), al servidor de la aplicación 4D. Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. +**Descripción**: máximo periodo de inactividad para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. @@ -464,7 +450,7 @@ Este parámetro puede definirse del lado del cliente. Por lo general, no necesit ### PHP interpreter IP address (55) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D Se conserva entre dos **sesiones**: no @@ -478,9 +464,9 @@ Para mayor información sobre el intérprete PHP, por favor consulte el manual d ### PHP interpreter port (56) -**Alcance**:Aplicación 4D +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: No + **Se conserva entre dos sesiones**: no **Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. @@ -496,9 +482,7 @@ Se conserva entre dos sesiones: No **Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Description:** **Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". - -Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). @@ -512,9 +496,9 @@ Para reinicializar la lista de cifrado a su valor por defecto (guardado permanen ### Cache unload minimum size (66) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: Entero largo positivo > 1. @@ -522,16 +506,6 @@ Para reinicializar la lista de cifrado a su valor por defecto (guardado permanen El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D - -Se conserva entre dos sesiones: No - -Valores posibles: Entero largo positivo > 1. - -Descripción: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). - -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. - Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio. @@ -540,7 +514,7 @@ Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la cach **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: modo de activación de Direct2D bajo Windows. @@ -578,7 +552,7 @@ Por ejemplo, si ejecuta: ### Diagnostic log recording (79) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: Aplicación 4D @@ -596,17 +570,19 @@ Note que es posible incluir la información personalizada en este archivo con ay ### Log command list (80) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. **Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. -Este selector permite guardar la cantidad de información almacenada en el archivo de depuración limitando los comandos 4D donde quiera guardar la ejecución. - +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: + SET DATABASE PARAMETER(Log command list;"277;341") //Grabar solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluir SET USER ALIAS y DELAY PROCESS commands from being recorded + + ### Spellchecker (81) @@ -622,11 +598,11 @@ Este selector permite guardar la cantidad de información almacenada en el archi ### Dates inside objects (85) -**Alcance**: Proceso actual +**Alcance**: proceso actual - **Se conserva entre dos sesiones:** No** + **Se conserva entre dos sesiones**: no - Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) + **Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) **Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. @@ -636,15 +612,13 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e - - ### Diagnostic log level (86) -**Thread-safe** : Yes +**Hilo seguro**: sí -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. @@ -656,15 +630,11 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e **Alcance:** 4D en modo local, 4D Server** -Se conserva entre dos sesiones:** sí** - -** **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. - -La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). +**Se conserva entre dos sesiones:** sí** -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. + **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). **Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) @@ -676,7 +646,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. **Alcance**: 4D modo local y 4D Server. -: Sí +**Se conserva entre dos sesiones:** sí** **Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. @@ -688,7 +658,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Circular log limitation (90) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server. @@ -726,7 +696,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Cache flush periodicity (95) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server @@ -753,13 +723,11 @@ El tiempo de espera de la conexión remota se aplica después de que una máquin - - ### Tips enabled (101) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) @@ -811,10 +779,6 @@ Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los - - - - ### User param value (108) **Alcance**: 4D local, 4D Server @@ -833,7 +797,7 @@ Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), defin Alcance: 4D local, 4D Server (todos los procesos) - Se conserva entre dos sesiones: No + Se conserva entre dos **sesiones**: No **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) @@ -847,11 +811,11 @@ En versiones anteriores, los valores de tiempo se convertían y almacenaban como ### SMTP Log (110) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server* -* **Se conserva entre dos sesiones**: No +* **Se conserva entre dos sesiones**: no **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). @@ -867,7 +831,11 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Se conserva entre dos sesiones:** No -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. **Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. + +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. + +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. @@ -913,7 +881,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la ### POP3 Log (116) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance:** 4D local, 4D Server @@ -921,7 +889,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -: iInicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. @@ -939,7 +907,7 @@ Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección ### IMAP Log (119) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server @@ -965,7 +933,7 @@ Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección ### Pause logging (121) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: aplicación 4D @@ -979,25 +947,27 @@ Este selector permite suspender/reanudar todas las operaciones de registro inici ### TCPUDP log recording (131) -**Scope:** 4D application. +**Alcance**: aplicación 4D + +**Se mantiene entre dos sesiones**: no + +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. -**Kept between two sessions:** No. +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para los eventos logging TCP. -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. +### RDP optimization +**Alcance**: aplicación 4D -### RDP optimization (133) +**Se mantiene entre dos sesiones**: no -**Scope:** 4D application. +**Valores posibles:** `0`: Disabled (default), `1`: Enabled. -**Kept between two sessions:** No. +**Descripción:** Activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). -**Possible values:** `0`: Disabled (default), `1`: Enabled. -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). ## Selectores hilo seguro @@ -1053,5 +1023,3 @@ En el [Método base On Startup](metodo-base-on-startup.md), usted escribe: | --- | --- | | Número de comando | 643 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md index 2aa47763c6f437..b2223dee64a5c1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md @@ -25,7 +25,7 @@ El *selector* designa el parámetro a modificar. 4D ofrece constantes predefinid **Alcance**: aplicación 4D si *valor* positivo -Se conserva entre dos **sesiones**: sí si *valor* positivo +**Se conserva entre dos sesiones**: sí si *valor* positivo **Valores posibles**: 0 -> 32 767 @@ -33,8 +33,6 @@ Se conserva entre dos **sesiones**: sí si *valor* positivo El timeout del servidor define el periodo máximo de no respuesta del cliente "autorizado", por ejemplo si realiza una operación de bloqueo. Al terminar esta periodo, 4D Server desconecta al cliente. El selector 4D Server Timeout le permite asignar en el parámetro *valor*un nuevo timeout, expresado en minutos. Esta funcionalidad es particularmente útil para aumentar el valor del timeout antes de la ejecución en el equipo cliente de una operación de larga duración, tal como la impresión de un gran número de páginas, la cual puede causar un timeout inesperado. - - Tiene dos opciones: Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global y permanente: el nuevo valor se aplica a todos los procesos y se almacena en las Preferencias de la aplicación 4D (equivalente a cambiar en el diálogo Preferencias).Si pasa un valor **negativo** en el parámetro *valor*, define un timeout lobal y temporal: el nuevo valor se aplica únicamente a los procesos llamantes (los otros procesos conservan los valores por defecto) y se restaura al valor por defecto tan pronto como el servidor recibe una señal de actividad del cliente, por ejemplo, cuando la operación termina. Esta opción es muy útil para administrar operaciones largas iniciadas por plug-ins 4D. Para definir una conexión "Sin timeout", pase 0 en *valor*. Ver el ejemplo 1. @@ -57,27 +55,21 @@ El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: no - -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. Por defecto, el valor es 80. +**Se conserva entre dos sesiones**: no -El número de puerto TCP está definido en la página "Web/Configuración" de la caja de diálogo de las Propiedades de la base. Puede utilizar las constantes del tema para el parámetro *valor*. +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, que puede ser definido en la página "Web/Configuración" de la caja de diálogo Preferencias, es 80. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* - - ### Character set (17) -**Alcance:** 4D local, 4D Server** - -Se conserva entre dos sesiones:** sí** - -Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Alcance:** 4D local, 4D Server +**Se conserva entre dos sesiones**: sí +**Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -85,11 +77,9 @@ Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Valores**: todo valor entre 10 y 32 000\. El valor por defecto es 100. - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -97,7 +87,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 15 @@ -109,7 +99,7 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: ver selector 17 @@ -121,23 +111,19 @@ Se conserva entre dos **sesiones**: sí **Alcance**: todos los equipos 4D remotos -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -Valores posibles: ver selector 18 +**Valores posibles**: ver selector 18 **Descripción**: permite especificar esta parámetro para las máquinas 4D remotas utilizadas como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir este valor sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. - - ### Maximum Web requests size (27) **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí - -**Valores posibles**: 500 000 a 2 147 483 648. +**Se conserva entre dos sesiones**: sí **Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -145,13 +131,13 @@ Se conserva entre dos **sesiones**: sí ### 4D Server log recording (28) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D Server, 4D remoto* -* Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores** **posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). **Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). @@ -159,13 +145,11 @@ Se conserva entre dos **sesiones**: sí Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. - - ### Client Web log recording (30) **Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 = No grabar (por defecto), 1 = Registrar en formato CLF, 2 = Registrar en formato DLF, 3 = Registrar en formato ELF, 4 = Registrar en formato WLF. @@ -177,9 +161,9 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, ### Table sequence number (31) -**Alcance**: *a*plicación 4D +**Alcance**: aplicación 4D - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: todo valor de tipo entero largo. @@ -189,21 +173,21 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr +### Debug log recording (34) +**Hilo seguro**: sí +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Debug log recording (34) - -**Thread-safe** : Yes - -**Alcance**: Aplicación 4D +**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo y *Server* se añade al nombre del archivo cuando se genera en el servidor). Hay dos modos disponibles: -**Se conserva entre dos sesiones**: No +- El modo estándar ofrece una vista básica de los eventos y el archivo se coloca automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Los tiempos de ejecución se expresan en milisegundos y se muestra el valor "< ms" cuando una operación dura menos de un milisegundo. -**Descripción**: inicia o detiene la grabación secuencial de los eventos a nivel de programación de 4D en el archivo 4DDebugLog, que se ubica automáticamente en la subcarpeta Logs de la base de datos, junto al archivo de estructura. Un nuevo formato texto tabulado, más compacto se utiliza en el archivo de registro de eventos "4DDebugLog \[\_n\].txt" a partir de 4D v14 (donde \_n es el número de segmento del archivo). +- El modo con pestañas ofrece información adicional y utiliza un formato más compacto con pestañas en el archivo. Los tiempos de ejecución se expresan en microsegundos. -**Valores posibles**: Entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +**Valores posibles**: entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (valor 1) permite activar el archivo (note que cualquier otro valor no nulo también lo activará) @@ -225,13 +209,21 @@ SET DATABASE PARAMETER (34;2) // activa el modo estándar con los parámetros y SET DATABASE PARAMETER (34;2+4) // activa el modo tabulado con los parámetros y las duraciones -SET DATABASE PARAMETER (34;0) // desactiva el archivo Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: +SET DATABASE PARAMETER (34;0) // desactiva el archivo + +Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: - restringiendo los comandos 4D que se examinan utilizando Log command list (selector 80), o - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. **Nota:** este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. +*Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. + +Este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. + + + + @@ -239,9 +231,9 @@ Para más información sobre este formato y sobre el uso del archivo *4DDebugLog **Alcance**: base de datos -Se conserva entre dos **sesiones**: sí** +**Se conserva entre dos sesiones**: sí -Valores posibles**: 0 a 65535 +**Valores posibles**: 0 a 65535 **Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. @@ -257,17 +249,17 @@ Cuando modifica este valor, es necesario reiniciar el equipo servidor para que e **Alcance**: 4D local, 4D Server -Se conserva entre dos **sesiones**: sí +**Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. ### Client HTTPS port ID (40) -**Alcance**:todos los equipos 4D remotos +**Alcance**: todos los equipos 4D remotos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 a 65535 @@ -279,13 +271,11 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica - - ### SQL Autocommit (43) -**Alcance**:base de datos +**Alcance**: base de datos - Se conserva entre dos **sesiones**: sí + **Se conserva entre dos sesiones**: sí **Posibles valores**: 0 (desactivación) o 1 (activación) @@ -297,9 +287,9 @@ Este selector funciona exactamente igual que el selector 39; sin embargo, aplica ### SQL Engine case sensitivity (44) -**Alcance**:base de datos +**Alcance**: base de datos - Se conserva entre dos sesiones: sí + **Se conserva entre dos sesiones**: sí **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) @@ -315,7 +305,7 @@ Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subfor **Alcance**:equipo 4D remoto - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). @@ -331,7 +321,7 @@ Estos archivos texto almacenan en formato tabulado simple diferente información **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) @@ -341,9 +331,11 @@ Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda " en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. Consulte el ejemplo 2. +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +Consulte el ejemplo 2. + +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. @@ -351,7 +343,7 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos **Alcance**: tabla y procesos actuales - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) @@ -359,9 +351,7 @@ Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. - - - si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. @@ -369,9 +359,9 @@ Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](ord **Alcance**:equipo 4D remoto - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no - **Valores p** **osibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). **Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. @@ -385,9 +375,9 @@ Tres modos de sincronización son posibles del lado del cliente. El selector Aut ### Query by formula joins (49) -**Alcance**:Proceso actual +**Alcance**: proceso actual - Se conserva entre dos **sesiones**: no + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). @@ -405,9 +395,9 @@ El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de **Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -415,11 +405,9 @@ Se conserva entre dos **sesiones**: no **Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no -Valores posibles: todo valor de tipo entero largo - -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. @@ -427,7 +415,7 @@ Valores posibles: todo valor de tipo entero largo **Alcance**: 4D Server - Se conserva entre dos sesiones: no + **Se conserva entre dos sesiones**: no **Valores posibles**: entero largo positivo. @@ -441,8 +429,6 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv - - ### Idle connections timeout (54) **Alcance**: aplicación 4D a menos que valor sea negativo @@ -451,7 +437,7 @@ Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo serv **Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D y al motor SQL, así como también en modo *ServerNet* (nueva capa de red), al servidor de la aplicación 4D. Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. +**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. @@ -465,7 +451,7 @@ Este parámetro puede definirse del lado del cliente. Por lo general, no necesit **Alcance**: Aplicación 4D -Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no **Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). @@ -477,9 +463,9 @@ Para mayor información sobre el intérprete PHP, por favor consulte el manual d ### PHP interpreter port (56) -**Alcance**:Aplicación 4D +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: No + **Se conserva entre dos sesiones**: no **Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. @@ -495,7 +481,7 @@ Se conserva entre dos sesiones: No **Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Description:** **Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. @@ -507,15 +493,13 @@ Para reinicializar la lista de cifrado a su valor por defecto (guardado permanen **Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. - - ### Cache unload minimum size (66) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no -**Valores posibles**: Entero largo positivo > 1. +**Valores posibles**: entero largo positivo > 1. **Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). @@ -523,23 +507,13 @@ El propósito de este selector es reducir el número de liberaciones de datos de Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D -Se conserva entre dos sesiones: No - -Valores posibles: Entero largo positivo > 1. - -Descripción: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). - -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. - -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio. - ### Direct2D status (69) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: modo de activación de Direct2D bajo Windows. @@ -551,7 +525,7 @@ Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos p Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. -***Advertencia* : este selector se proporciona solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* +***Advertencia*: este selector se ofrece solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* @@ -577,13 +551,13 @@ Por ejemplo, si ejecuta: ### Diagnostic log recording (79) -**Thread-safe** : Yes +**Hilo seguro**: sí -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no -**Valores posibles**: 0 ó 1 (0 = no guardar,1 = guardar) +**Valores posibles**: 0 ó 1 (0 = no guardar, 1 = guardar) **Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). @@ -595,23 +569,25 @@ Note que es posible incluir la información personalizada en este archivo con ay ### Log command list (80) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. **Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. -Este selector permite guardar la cantidad de información almacenada en el archivo de depuración limitando los comandos 4D donde quiera guardar la ejecución. +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: + SET DATABASE PARAMETER(Log command list;"277;341") //Graba solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluye los comandos SET USER ALIAS y DELAY PROCESS de ser grabados + ### Spellchecker (81) -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: No + **Se conserva entre dos sesiones**: no **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. @@ -621,11 +597,11 @@ Este selector permite guardar la cantidad de información almacenada en el archi ### Dates inside objects (85) -**Alcance**: Proceso actual +**Alcance**: proceso actual - **Se conserva entre dos sesiones:** No** + **Se conserva entre dos sesiones:** no - Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) + **Valores posibles**: Tipo cadena sin zona horaria (0), tipo cadena con zona horaria (1), tipo fecha (2) (por defecto) **Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. @@ -635,15 +611,13 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e - - ### Diagnostic log level (86) -**Thread-safe** : Yes +**Hilo seguro**: sí -**Alcance**: Aplicación 4D +**Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. @@ -655,15 +629,11 @@ Si pasa String type with time zone en este selector, convertirá las fechas 4D e **Alcance:** 4D en modo local, 4D Server** -Se conserva entre dos sesiones:** sí** - -** **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. +**Se conserva entre dos sesiones:** sí -La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). +**Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. - -Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). **Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) @@ -687,7 +657,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Circular log limitation (90) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server. @@ -725,7 +695,7 @@ Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. ### Cache flush periodicity (95) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server @@ -752,13 +722,11 @@ El tiempo de espera de la conexión remota se aplica después de que una máquin - - ### Tips enabled (101) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) @@ -796,7 +764,7 @@ Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los **Alcance**: 4D Server, 4D Web Server y 4D SQL Server -**Conservar entre dos sesiones**: No +**Conservar entre dos sesiones**: no **Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. @@ -810,10 +778,6 @@ Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los - - - - ### User param value (108) **Alcance**: 4D local, 4D Server @@ -830,9 +794,9 @@ Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), defin ### Times inside objects (109) -Alcance: 4D local, 4D Server (todos los procesos) +**Alcance**: 4D local, 4D Server (todos los procesos) - Se conserva entre dos sesiones: No + **Se conserva entre dos sesiones**: no **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) @@ -846,11 +810,11 @@ En versiones anteriores, los valores de tiempo se convertían y almacenaban como ### SMTP Log (110) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server* -* **Se conserva entre dos sesiones**: No +* **Se conserva entre dos sesiones**: no **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). @@ -864,9 +828,13 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Alcance:** Aplicación 4D -**Se conserva entre dos sesiones:** No +**Se conserva entre dos sesiones:** no + +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. **Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. + +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. @@ -912,7 +880,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la ### POP3 Log (116) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance:** 4D local, 4D Server @@ -920,7 +888,7 @@ Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la **Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -: iInicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. @@ -938,11 +906,11 @@ Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección ### IMAP Log (119) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: 4D local, 4D Server -**Se conserva entre dos sesiones**: No +**Se conserva entre dos sesiones**: no **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). @@ -964,7 +932,7 @@ Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección ### Pause logging (121) -**Thread-safe** : Yes +**Hilo seguro**: sí **Alcance**: aplicación 4D @@ -975,34 +943,36 @@ Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. + ### TCPUDP log recording (131) -**Scope:** 4D application. +**Alcance:** aplicación 4D -**Kept between two sessions:** No. +**Se mantiene entre dos sesiones**: no -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para registrar eventos TCP. ### RDP optimization (133) -**Scope:** 4D application. +**Alcance:** aplicación 4D -**Kept between two sessions:** No. +**Se mantiene entre dos sesiones**: no -**Possible values:** `0`: Disabled (default), `1`: Enabled. +**Valores posibles:** `0`: activado (por defecto), `1`: desactivado. -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). +**Descripción:** activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). - - -**Nota**: el parámetro *tabla* sólo es utilizado por los selectores 31, 46 y 47\. En todos los demás casos, se ignora si se pasa. +:::nota + +* El parámetro *tabla* sólo es utilizado por los selectores 31, 46 y 47\. En todos los demás casos, se ignora si se pasa. +* Si no se mantiene una configuración constante entre sesiones, pero desea asegurarse de que se aplique, debe ejecutarla en o [Método base On Server Startup](metodo-base-on-server-startup.md). -Si no se mantiene una configuración constante entre sesiones, pero desea asegurarse de que se aplique, debe ejecutarla en o [Método base On Server Startup](metodo-base-on-server-startup.md). +::: #### Selectores hilo seguro @@ -1019,7 +989,6 @@ El comando **SET DATABASE PARAMETER** puede utilizarse en procesos apropiativos * [IMAP Log](#imap-log-119) * [Pause logging](#pause-logging-121) - #### Ejemplo 1 La siguiente instrucción evitará un posible problema de timeout: @@ -1033,14 +1002,15 @@ La siguiente instrucción evitará un posible problema de timeout:  ... ``` - #### Ejemplo 2 Este ejemplo forza temporalmente la ejecución de un comando búsqueda por fórmula en el equipo cliente: ```4d - curVal:=Get database parameter([tabla1];Query By Formula On Server) //Almacena la configuración actual - SET DATABASE PARAMETER([tabla1];Query By Formula On Server;1) //Fuerza la ejecución en el equipo cliente + curVal:=Get database parameter([table1];Query By Formula On Server) //Almacena la configuración actual + SET DATABASE PARAMETER([table1];Query By Formula On Server;1) //Fuerza la ejecución en el equipo cliente + QUERY BY FORMULA([table1];myformula) + SET DATABASE PARAMETER([table1];Query By Formula On Server;curVal) //Reestablece la configuración actual ``` #### Ejemplo 3 @@ -1055,7 +1025,7 @@ Usted quiere exportar datos en JSON que contienen una fecha 4D convertida. Note  SET DATABASE PARAMETER(Dates inside objects;1) ``` -#### Ver también +#### Ver también [Get database parameter](get-database-parameter.md) [LOG EVENT](log-event.md) @@ -1067,5 +1037,3 @@ Usted quiere exportar datos en JSON que contienen una fecha 4D convertida. Note | --- | --- | | Número de comando | 642 | | Hilo seguro | ✗ | - - From e4e5805536d0bf84a0b063026f8dd5e5b352100b Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 17 Nov 2025 11:52:37 +0100 Subject: [PATCH 20/75] New Crowdin updates (#2997) * New translations updates.md (French) * New translations classes.md (French) * New translations properties.md (French) * New translations updates.md (French) * New translations ordaclasses.md (French) * New translations writeprointerface.md (French) * New translations wp-set-attributes.md (French) * New translations wp-table-append-row.md (French) * New translations classes.md (French) * New translations properties.md (French) * New translations updates.md (French) * New translations ordaclasses.md (French) * New translations wp-set-attributes.md (French) * New translations wp-table-append-row.md (French) * New translations writeprointerface.md (French) * New translations classes.md (French) * New translations properties.md (French) * New translations updates.md (French) * New translations ordaclasses.md (French) * New translations wp-set-attributes.md (French) * New translations wp-table-append-row.md (French) * New translations writeprointerface.md (French) * New translations updates.md (Spanish) * New translations classes.md (Spanish) * New translations updates.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations classes.md (Spanish) * New translations updates.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations classes.md (Spanish) * New translations updates.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations updates.md (Japanese) * New translations classes.md (Japanese) * New translations updates.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations writeprointerface.md (Japanese) * New translations classes.md (Japanese) * New translations updates.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations writeprointerface.md (Japanese) * New translations classes.md (Japanese) * New translations updates.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations writeprointerface.md (Japanese) * New translations updates.md (Portuguese, Brazilian) * New translations classes.md (Portuguese, Brazilian) * New translations updates.md (Portuguese, Brazilian) * New translations ordaclasses.md (Portuguese, Brazilian) * New translations writeprointerface.md (Portuguese, Brazilian) * New translations classes.md (Portuguese, Brazilian) * New translations updates.md (Portuguese, Brazilian) * New translations ordaclasses.md (Portuguese, Brazilian) * New translations writeprointerface.md (Portuguese, Brazilian) * New translations classes.md (Portuguese, Brazilian) * New translations updates.md (Portuguese, Brazilian) * New translations ordaclasses.md (Portuguese, Brazilian) * New translations writeprointerface.md (Portuguese, Brazilian) * New translations updates.md (Japanese) --- .../current/Concepts/classes.md | 10 +++++-- .../current/Notes/updates.md | 8 ----- .../current/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../current/WritePro/writeprointerface.md | 8 +++-- .../version-20-R10/Concepts/classes.md | 10 +++++-- .../version-20-R10/Notes/updates.md | 4 --- .../version-20-R10/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../WritePro/writeprointerface.md | 2 +- .../version-20/Notes/updates.md | 6 ---- .../version-21/Concepts/classes.md | 10 +++++-- .../version-21/Notes/updates.md | 6 +--- .../version-21/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../version-21/WritePro/writeprointerface.md | 8 +++-- .../current/Concepts/classes.md | 10 +++++-- .../current/Menus/properties.md | 18 +++++------ .../current/Notes/updates.md | 12 ++------ .../current/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../WritePro/commands/wp-set-attributes.md | 2 +- .../WritePro/commands/wp-table-append-row.md | 8 ++--- .../current/WritePro/writeprointerface.md | 8 +++-- .../version-20-R10/Concepts/classes.md | 10 +++++-- .../version-20-R10/Menus/properties.md | 16 +++++----- .../version-20-R10/Notes/updates.md | 4 --- .../version-20-R10/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../WritePro/commands/wp-set-attributes.md | 2 +- .../WritePro/commands/wp-table-append-row.md | 8 ++--- .../WritePro/writeprointerface.md | 2 +- .../version-20/Notes/updates.md | 10 ++----- .../version-21/Concepts/classes.md | 10 +++++-- .../version-21/Menus/properties.md | 16 +++++----- .../version-21/Notes/updates.md | 8 ++--- .../version-21/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../WritePro/commands/wp-set-attributes.md | 2 +- .../WritePro/commands/wp-table-append-row.md | 8 ++--- .../version-21/WritePro/writeprointerface.md | 8 +++-- .../current/Concepts/classes.md | 10 +++++-- .../current/Notes/updates.md | 12 ++------ .../current/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../current/WritePro/writeprointerface.md | 8 +++-- .../version-20-R10/Concepts/classes.md | 10 +++++-- .../version-20-R10/Notes/updates.md | 4 --- .../version-20-R10/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../WritePro/writeprointerface.md | 2 +- .../version-20/Notes/updates.md | 6 ---- .../version-21/Concepts/classes.md | 10 +++++-- .../version-21/Notes/updates.md | 6 +--- .../version-21/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../version-21/WritePro/writeprointerface.md | 8 +++-- .../current/Concepts/classes.md | 10 +++++-- .../current/Notes/updates.md | 8 ----- .../current/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../current/WritePro/writeprointerface.md | 8 +++-- .../version-20-R10/Concepts/classes.md | 10 +++++-- .../version-20-R10/Notes/updates.md | 4 --- .../version-20-R10/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../WritePro/writeprointerface.md | 2 +- .../version-20/Notes/updates.md | 6 ---- .../version-21/Concepts/classes.md | 10 +++++-- .../version-21/Notes/updates.md | 6 +--- .../version-21/ORDA/ordaClasses.md | 30 +++++++++++++++---- .../version-21/WritePro/writeprointerface.md | 8 +++-- 61 files changed, 479 insertions(+), 263 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md index 5ef65ef9f96a6d..176c4206089fcc 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md @@ -735,13 +735,13 @@ Una **clase singleton** es una clase usuario que sólo produce una única instan ### Tipos de Singletons +Los singletons son útiles para definir los valores que necesitan estar disponibles desde cualquier parte de una aplicación, una sesión o un proceso. + 4D soporta tres tipos de singletons: - un **singleton proceso** tiene una instancia única para el proceso en el que se instancia, - un **singleton compartido** tiene una instancia única para todos los procesos en la máquina. -- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. - -Los singletons son útiles para definir los valores que necesitan estar disponibles desde cualquier parte de una aplicación, una sesión o un proceso. +- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -782,6 +782,10 @@ La propiedad [`isSingleton`](../API/ClassClass.md#issingleton) de los objetos Cl La propiedad [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) de los objetos Class permite saber si la clase es un singleton de sesión. +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### Ejemplos #### Singleton Proceso diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md index 3ea552996cb404..c1947d49e3cb20 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -14,14 +14,6 @@ Lea [**Novedades en 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2/), #### Cambios de comportamiento -## 4D 21.x LTS - -Ver [**Notas de lanzamiento para LTS 4D 21.x**](../../21/Notes/updates). - -## 4D 20.x LTS - -Ver [**Notas de lanzamiento para LTS 4D 20.x**](../../20/Notes/updates). - ## Tabla de la librería | Librería | Versión actual | Actualizado en 4D | Comentario | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index 8d48e8c9c0f133..1889c583ab40d8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -928,25 +928,45 @@ $arch.save() //courseName y name son "Archaeology II" ## Funciones expuestas y no expuestas -Por razones de seguridad, todas sus funciones de clase de modelo de datos y atributos de alias son **no expuestas** (es decir, privadas) por defecto a peticiones remotas. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Las peticiones remotas incluyen: +Remote requests are: - Las peticiones enviadas por las aplicaciones 4D remotas conectadas a través de `Open datastore` -- Peticiones REST +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Las peticiones cliente/servidor 4D estándar no se ven afectadas. Las funciones de clase del modelo de datos están siempre disponibles en esta arquitectura. Una función que no está expuesta no está disponible en aplicaciones remotas y no se puede llamar a ninguna instancia de objeto desde una petición REST. Si una aplicación remota intenta acceder a una función no expuesta, se devuelve el error "-10729 - Método miembro desconocido". -Para permitir que una función de clase de modelo de datos sea llamada por una petición remota, debe declararla explícitamente utilizando la palabra clave `exposed`. La sintaxis formal es: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. La sintaxis formal es: ```4d // declarar una función expuesta exposed Function ``` -> La palabra clave `exposed` sólo puede utilizarse con las funciones de clase del modelo de datos. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. + +::: ### Ejemplo diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index b5c8070174f4d1..72146ab7f99e17 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: Interfaz 4D Write Pro slug: /WritePro/write-pro-interface --- -4D WritePro Interface ofrece un conjunto de paletas, que permiten a los usuarios finales personalizar fácilmente un documento 4D Write Pro. +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. Un desarrollador 4D puede implementar fácilmente estas paletas en su aplicación. Así, los usuarios finales pueden gestionar todas las propiedades de 4D Write Pro, como las fuentes, la alineación del texto, los marcadores, la disposición de las tablas y los marcos. -La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. +## Installation & documentation -Encontrará a continuación: +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. Encontrará a continuación: - la documentación de configuración del Asistente para tablas, - la I.A. integrada. documentation. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md index cc4dcb07b55793..cb42354faf3714 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md @@ -735,13 +735,13 @@ Una **clase singleton** es una clase usuario que sólo produce una única instan ### Tipos de Singletons +Los singletons son útiles para definir los valores que necesitan estar disponibles desde cualquier parte de una aplicación, una sesión o un proceso. + 4D soporta tres tipos de singletons: - un **singleton proceso** tiene una instancia única para el proceso en el que se instancia, - un **singleton compartido** tiene una instancia única para todos los procesos en la máquina. -- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. - -Los singletons son útiles para definir los valores que necesitan estar disponibles desde cualquier parte de una aplicación, una sesión o un proceso. +- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -782,6 +782,10 @@ La propiedad [`isSingleton`](../API/ClassClass.md#issingleton) de los objetos Cl La propiedad [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) de los objetos Class permite saber si la clase es un singleton de sesión. +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### Ejemplos #### Singleton Proceso diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md index eb35d72cdb9ffe..70314d25d54083 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md @@ -232,10 +232,6 @@ Si sus aplicaciones 4D utilizan conexiones TLS, se recomienda actualizar a 4D 20 - **Atención**: el valor inicial [`offset`](../API/FileHandleClass.md#offset) de los objetos [4D.FileHandle](../API/FileHandleClass.md) estaba incorrectamente definido en 1 en lugar de 0. Se ha hecho una corrección en 4D a partir de las versiones **20.1 HF1** y **20 R2** y el valor ahora es 0. -## 4D 20.x LTS - -Consulte [**Notas de la versión 4D 20.x LTS**](../../version-20/Notes/updates.md). - ## Tabla de la librería | Librería | Versión actual | Actualizado en 4D | Comentario | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index 8d48e8c9c0f133..1889c583ab40d8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -928,25 +928,45 @@ $arch.save() //courseName y name son "Archaeology II" ## Funciones expuestas y no expuestas -Por razones de seguridad, todas sus funciones de clase de modelo de datos y atributos de alias son **no expuestas** (es decir, privadas) por defecto a peticiones remotas. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Las peticiones remotas incluyen: +Remote requests are: - Las peticiones enviadas por las aplicaciones 4D remotas conectadas a través de `Open datastore` -- Peticiones REST +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Las peticiones cliente/servidor 4D estándar no se ven afectadas. Las funciones de clase del modelo de datos están siempre disponibles en esta arquitectura. Una función que no está expuesta no está disponible en aplicaciones remotas y no se puede llamar a ninguna instancia de objeto desde una petición REST. Si una aplicación remota intenta acceder a una función no expuesta, se devuelve el error "-10729 - Método miembro desconocido". -Para permitir que una función de clase de modelo de datos sea llamada por una petición remota, debe declararla explícitamente utilizando la palabra clave `exposed`. La sintaxis formal es: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. La sintaxis formal es: ```4d // declarar una función expuesta exposed Function ``` -> La palabra clave `exposed` sólo puede utilizarse con las funciones de clase del modelo de datos. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. + +::: ### Ejemplo diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md index b5c8070174f4d1..fc3d7963014709 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md @@ -4,7 +4,7 @@ title: Interfaz 4D Write Pro slug: /WritePro/write-pro-interface --- -4D WritePro Interface ofrece un conjunto de paletas, que permiten a los usuarios finales personalizar fácilmente un documento 4D Write Pro. +The 4D Write Pro Interface component offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. Un desarrollador 4D puede implementar fácilmente estas paletas en su aplicación. Así, los usuarios finales pueden gestionar todas las propiedades de 4D Write Pro, como las fuentes, la alineación del texto, los marcadores, la disposición de las tablas y los marcos. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md index 843be639654a7d..6d72dac749055a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -356,12 +356,6 @@ Para obtener información detallada, consulte [esta entrada del blog](https://bl - Soporte de `no-bom` y nuevos caracteres de fin de línea por defecto en [`.setText()`](../API/FileClass.md#settext) -## 4D 19.x LTS - - -Ver [**Notas de la versión de 4D 19.x LTS**](../../version-19/Notes/updates.md). - - ## Tabla de librerías (4D v20 LTS) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md index cc4dcb07b55793..cb42354faf3714 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md @@ -735,13 +735,13 @@ Una **clase singleton** es una clase usuario que sólo produce una única instan ### Tipos de Singletons +Los singletons son útiles para definir los valores que necesitan estar disponibles desde cualquier parte de una aplicación, una sesión o un proceso. + 4D soporta tres tipos de singletons: - un **singleton proceso** tiene una instancia única para el proceso en el que se instancia, - un **singleton compartido** tiene una instancia única para todos los procesos en la máquina. -- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. - -Los singletons son útiles para definir los valores que necesitan estar disponibles desde cualquier parte de una aplicación, una sesión o un proceso. +- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -782,6 +782,10 @@ La propiedad [`isSingleton`](../API/ClassClass.md#issingleton) de los objetos Cl La propiedad [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) de los objetos Class permite saber si la clase es un singleton de sesión. +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### Ejemplos #### Singleton Proceso diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md index b5ccc8c652538b..4b55c00588c4d4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -288,11 +288,7 @@ Si sus aplicaciones 4D utilizan conexiones TLS, se recomienda actualizar a 4D 20 - **Atención**: el valor inicial [`offset`](../API/FileHandleClass.md#offset) de los objetos [4D.FileHandle](../API/FileHandleClass.md) estaba incorrectamente definido en 1 en lugar de 0. Se ha hecho una corrección en 4D a partir de las versiones **20.1 HF1** y **20 R2** y el valor ahora es 0. -## 4D 20.x LTS - -Ver [**Notas de lanzamiento para LTS 4D 20.x**](../20/Notes/updates). - -## Tabla de la librería +## Tabla de librerías (4D v21 LTS) | Librería | Versión actual | Actualizado en 4D | Comentario | | --------- | -------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index fced235a8d45cd..b7e892e9b05080 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -928,25 +928,45 @@ $arch.save() //courseName y name son "Archaeology II" ## Funciones expuestas y no expuestas -Por razones de seguridad, todas sus funciones de clase de modelo de datos y atributos de alias son **no expuestas** (es decir, privadas) por defecto a peticiones remotas. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Las peticiones remotas incluyen: +Remote requests are: - Las peticiones enviadas por las aplicaciones 4D remotas conectadas a través de `Open datastore` -- Peticiones REST +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Las peticiones cliente/servidor 4D estándar no se ven afectadas. Las funciones de clase del modelo de datos están siempre disponibles en esta arquitectura. Una función que no está expuesta no está disponible en aplicaciones remotas y no se puede llamar a ninguna instancia de objeto desde una petición REST. Si una aplicación remota intenta acceder a una función no expuesta, se devuelve el error "-10729 - Método miembro desconocido". -Para permitir que una función de clase de modelo de datos sea llamada por una petición remota, debe declararla explícitamente utilizando la palabra clave `exposed`. La sintaxis formal es: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. La sintaxis formal es: ```4d // declarar una función expuesta exposed Function ``` -> La palabra clave `exposed` sólo puede utilizarse con las funciones de clase del modelo de datos. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. + +::: ### Ejemplo diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index b5c8070174f4d1..72146ab7f99e17 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: Interfaz 4D Write Pro slug: /WritePro/write-pro-interface --- -4D WritePro Interface ofrece un conjunto de paletas, que permiten a los usuarios finales personalizar fácilmente un documento 4D Write Pro. +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. Un desarrollador 4D puede implementar fácilmente estas paletas en su aplicación. Así, los usuarios finales pueden gestionar todas las propiedades de 4D Write Pro, como las fuentes, la alineación del texto, los marcadores, la disposición de las tablas y los marcos. -La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. +## Installation & documentation -Encontrará a continuación: +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. Encontrará a continuación: - la documentación de configuración del Asistente para tablas, - la I.A. integrada. documentation. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md index 8d535e2cacc8ca..798a8fe4178877 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md @@ -735,13 +735,13 @@ Une **classe singleton** est une classe utilisateur qui ne produit qu'une seule ### Types de singletons +Les singletons sont utiles pour définir des valeurs qui doivent être disponibles partout dans une application, une session ou un process. + 4D prend en charge trois types de singletons : - un **singleton process** a une instance unique pour le process dans lequel il est instancié, - un **singleton partagé** a une instance unique pour tous les process sur la machine. -- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. - -Les singletons sont utiles pour définir des valeurs qui doivent être disponibles partout dans une application, une session ou un process. +- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -782,6 +782,10 @@ La propriété [`.isSingleton`](../API/ClassClass.md#issingleton) des objets de La propriété [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) des objets de classe permet de savoir si la classe est un singleton de session. +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### Exemples #### Singleton process diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Menus/properties.md b/i18n/fr/docusaurus-plugin-content-docs/current/Menus/properties.md index c20d88a22abb1a..27a5c94ef58462 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Menus/properties.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Menus/properties.md @@ -12,9 +12,9 @@ La propriété **Titre** contient le libellé d'un menu ou d'une ligne de menu, Dans l'éditeur de menus, vous pouvez saisir directement le libellé "en dur". Vous pouvez également saisir une référence pour une variable ou un élément XLIFF, ce qui facilitera la mise à jour et la traduction des applications. Vous pouvez utiliser les types de références suivants : - Une référence à une ressource XLIFF, du type :xliff:MonLibellé. Pour plus d’informations sur les références XLIFF, reportez-vous à la section *Annexe B : Architecture XLIFF* du *Mode Développement 4D*. -- (**Deprecated**) An interprocess variable name followed by a number, for example: `:<>vlang,3`. Il suffit de changer le contenu de cette variable pour modifier le libellé du menu lors de son affichage. Dans ce cas, le libellé fera appel à une ressource XLIFF. La valeur contenue dans la variable `<>vlang` correspond à l’attribut *id* de l’élément *group*. La seconde valeur (3 dans cet exemple) désigne l’attribut *id* de l’élément *trans-unit*. +- (**Obsolète**) Un nom de variable interprocess suivi d'un nombre, par exemple : `:<>vlang,3`. Il suffit de changer le contenu de cette variable pour modifier le libellé du menu lors de son affichage. Dans ce cas, le libellé fera appel à une ressource XLIFF. La valeur contenue dans la variable `<>vlang` correspond à l’attribut *id* de l’élément *group*. La seconde valeur (3 dans cet exemple) désigne l’attribut *id* de l’élément *trans-unit*. -Using the 4D language, you set the title property through the *itemText* parameter of the [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), and [`SET MENU ITEM`](../commands/set-menu-item) commands. +En utilisant le langage 4D, vous définissez la propriété du titre par le biais du paramètre *itemText* des commandes [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item) et [`SET MENU ITEM`](../commands/set-menu-item). ### Caractères de contrôle @@ -33,9 +33,9 @@ Les caractères de contrôle n’apparaissent pas dans les libellés des command ## Paramètres -Il est possible d’associer un paramètre personnalisé à chaque ligne de menu. Un paramètre de ligne de menu est une chaîne de caractères dont le contenu est libre. It can be set in the Menu editor, or through the [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter) command. +Il est possible d’associer un paramètre personnalisé à chaque ligne de menu. Un paramètre de ligne de menu est une chaîne de caractères dont le contenu est libre. Il peut être défini dans l'éditeur de menus ou à l'aide de la commande [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter). -Menu item parameters are useful with programmed management of menus, in particular when using the [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) and [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter) commands. +Les paramètres des éléments de menus sont utiles pour la gestion programmée des menus, en particulier lors de l'utilisation des commandes [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) et [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter). ## Action @@ -57,7 +57,7 @@ Pour associer une méthode projet et/ou une action standard à une commande de m - **Action standard associée** : Choisissez ou saisissez le nom de l’action que vous souhaitez associer dans la combo box "Action standard associée". Vous pouvez saisir toute action prise en charge et (optionnellement) tout paramètre dans la zone. Pour la liste complète des actions standard, veuillez vous reporter à la section **Actions standard** dans le *Mode Développement*. **Note macOS :** Sous macOS, les commandes de menus créés associées à l'action *Quitter* sont automatiquement placées dans le menu de l’application, conformément aux normes d’interface de cette plate-forme. -Using the 4D language, you can associate a project method using the [`SET MENU ITEM METHOD`](../commands/set-menu-item-method) command, and a standard action using the [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property) command. +En utilisant le langage 4D, vous pouvez associer une méthode projet en utilisant la commande [`SET MENU ITEM METHOD`](../commands/set-menu-item-method) et une action standard en utilisant la commande [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property). ### Démarrer un process @@ -93,7 +93,7 @@ Vous ajoutez un filet de séparation en créant une commande de menu. Dans l'éditeur de menus, au lieu de saisir le nom de la commande de menu, il suffit de cocher l’option **Ligne de séparation**. La ligne apparaît alors dans la zone de la commande courante. La ligne apparaît alors dans la zone de la commande courante. Lorsque cette option est cochée, les autres propriétés sont sans effet. **Note :** Sous macOS, il est possible de procéder en faisant commencer le nom de la commande par un tiret “-”. Cette commande sera alors affichée comme une ligne de séparation. -In the 4D language, you insert a separator line by entering `-` or `(-` as itemText for [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), or [`SET MENU ITEM`](../commands/set-menu-item) commands. +Dans le langage 4D, vous insérez une ligne de séparation en entrant `-` ou `(-` comme *itemText* pour les commandes [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item) ou [`SET MENU ITEM`](../commands/set-menu-item). ### Raccourcis clavier @@ -153,13 +153,13 @@ Par défaut, 4D active automatiquement toute commande de menu ajoutée à un men ### Coche -Cette option de l'éditeur de menus permet d’associer par défaut une coche système à la ligne de menu. You can then manage the display of the check mark using language commands ([`SET MENU ITEM MARK`](../commands/set-menu-item-mark) and [`Get menu item mark`](../commands/get-menu-item-mark)). +Cette option de l'éditeur de menus permet d’associer par défaut une coche système à la ligne de menu. Vous pouvez ensuite gérer l'affichage de la coche à l'aide des commandes de langage ([`SET MENU ITEM MARK`](../commands/set-menu-item-mark) et [`Get menu item mark`](../commands/get-menu-item-mark)). Les coches sont généralement utilisées pour des menus à action permanente et indiquent que l’action est en cours. ### Styles des polices -4D vous permet de personnaliser les menus en appliquant différents styles de caractères aux commandes de menus. You can customize your menus with the Bold, Italic or Underline styles through options in the Menu editor, or using the [`SET MENU ITEM STYLE`](../commands/set-menu-item-style) language command. +4D vous permet de personnaliser les menus en appliquant différents styles de caractères aux commandes de menus. Vous pouvez personnaliser vos menus avec les styles Gras, Italique ou Souligné grâce aux options de l'éditeur de menus ou en utilisant la commande de langage [`SET MENU ITEM STYLE`](../commands/set-menu-item-style). En règle générale, les styles de police doivent être appliqués à vos menus avec parcimonie, afin d’éviter de conférer une apparence confuse à votre application. @@ -177,4 +177,4 @@ Pour définir l’icône dans l'éditeur de menu, choisissez l'option **Ouvrir** Pour supprimer l’icône de ligne, choisissez l’option **Pas d’icône** dans le menu de la zone “Icône ligne”. -To define item icons using the 4D language, call the [`SET MENU ITEM ICON`](../commands/set-menu-item-icon) command. \ No newline at end of file +Pour définir les icônes des éléments à l'aide du langage 4D, appelez la commande [`SET MENU ITEM ICON`](../commands/set-menu-item-icon). \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md index 6f4a0ae9188a65..ee5699a7e5814b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -5,23 +5,15 @@ title: Release Notes ## 4D 21 R2 -Read [**What’s new in 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2/), the blog post that lists all new features and enhancements in 4D 21 R2. +Lisez [**Les nouveautés de 4D 21 R2**](https://blog.4d.com/fr-whats-new-in-4d-v21-R2/), l'article de blog qui liste toutes les nouvelles fonctionnalités et améliorations de 4D 20 R2. #### Points forts -- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection. +- Le [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) a été amélioré pour offrir une plus grande précision dans la détection des erreurs. - [**Liste des bugs corrigés**](https://bugs.4d.fr/fixedbugslist?version=21_R2) : liste de tous les bugs qui ont été corrigés dans 4D 21 R2. #### Changements de comportement -## 4D 21.x LTS - -Voir [**Release Notes pour 4D 21.x LTS**](../../21/Notes/updates). - -## 4D 20.x LTS - -Voir [**Release Notes pour 4D 20.x LTS**](../../20/Notes/updates). - ## Tableau des bibliothèques | Bibliothèque | Version courante | Mise à jour dans 4D | Commentaire | diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index d4738c0141b15f..7418c2de73301d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -928,25 +928,45 @@ $arch.save() //courseName et name sont "Archaeology II" ## Fonctions exposées et non exposées -Pour des raisons de sécurité, toutes vos fonctions de classe de modèle de données et les attributs alias ne sont **pas exposés** (c'est-à-dire privés) par défaut aux requêtes distantes. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Les requêtes distantes incluent : +Remote requests are: - Les requêtes envoyées par des applications 4D distantes connectées via `Open datastore` -- Les requêtes REST +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Les requêtes client/serveur 4D standard ne sont pas impactées. Les fonctions de classe de modèle de données sont toujours disponibles dans cette architecture. Une fonction qui n'est pas exposée n'est pas disponible sur les applications distantes et ne peut être appelée sur aucune instance d'objet à partir d'une requête REST. Si une application distante tente d'accéder à une fonction non exposée, l'erreur «-10729 - Méthode membre inconnue» est retournée. -Pour permettre à une fonction de classe de modèle de données d'être appelée par une requête distante, vous devez la déclarer explicitement à l'aide du mot-clé `exposed`. La syntaxe formelle est la suivante : +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. La syntaxe formelle est la suivante : ```4d // déclarer une fonction exposée exposed Function ``` -> Le mot-clé `exposed` ne peut être utilisé qu'avec les fonctions de classe du modèle de données. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. + +::: ### Exemple diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-set-attributes.md b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-set-attributes.md index 43b92d746dfcbe..a6e8ad5a679a15 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-set-attributes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-set-attributes.md @@ -33,7 +33,7 @@ Vous pouvez spécifier les attributs à définir pour *targetObj* d'une des deux - Utilisez le paramètre *attribObj* pour passer un seul objet contenant les noms d'attributs et leurs valeurs correspondantes en tant que propriétés d'objet. -For a comprehensive list of attributes to pass, as well as their scope and respective values, please refer to the [4D Write Pro Attributes](../4d-write-pro-attributes) section. +Pour une liste complète des attributs à passer, ainsi que leur portée et leurs valeurs respectives, veuillez vous référer à la section [Attributs 4D Write Pro](../4d-write-pro-attributes) . ## Exemple 1 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-table-append-row.md b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-table-append-row.md index 52ff6052532ecc..74766becce0d1c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-table-append-row.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-table-append-row.md @@ -21,7 +21,7 @@ displayed_sidebar: docs The **WP Table append row** command appends one row to the *tableRef* table, fills it with *value*(s) or a *valueColl* collection, and returns the corresponding row range object. -The command supports two syntaxes: +La commande supporte deux syntaxes : - **Using values as parameters:** Adds as many cells in the row as there are values provided in the *value* parameter(s). You can pass any number of values of different types. @@ -33,9 +33,9 @@ The command supports two syntaxes: The default cell alignment will depend on the value type: -- text: left aligned -- pictures: centered -- other types (numbers, date, and time): right aligned +- texte : aligné à gauche +- images : centrées +- autres types (nombres, date et heure): alignés à droite :::note Notes diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index 7fb6510a6a45ff..213b07f20f012c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: 4D Write Pro Interface slug: /WritePro/write-pro-interface --- -L'interface de 4D WritePro offre un ensemble de palettes, qui permettent aux utilisateurs de personnaliser facilement un document 4D Write Pro. +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. Un développeur 4D peut facilement implémenter ces palettes dans leur application. Ainsi, les utilisateurs finaux peuvent gérer toutes les propriétés de 4D Write Pro, telles que les polices, l'alignement du texte, les signets, la mise en page des tableaux et les cadres. -La documentation principale de l'[interface 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se trouve dans le *4D - Mode Développement*. +## Installation & documentation -Vous trouverez ci-dessous : +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +La documentation principale de l'[interface 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se trouve dans le *4D - Mode Développement*. Vous trouverez ci-dessous : - la documentation de configuration de l'assistant de table, - the integrated A.I. documentation. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md index e1452bbeb57077..7c9c753141b23c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md @@ -735,13 +735,13 @@ Une **classe singleton** est une classe utilisateur qui ne produit qu'une seule ### Types de singletons +Les singletons sont utiles pour définir des valeurs qui doivent être disponibles partout dans une application, une session ou un process. + 4D prend en charge trois types de singletons : - un **singleton process** a une instance unique pour le process dans lequel il est instancié, - un **singleton partagé** a une instance unique pour tous les process sur la machine. -- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. - -Les singletons sont utiles pour définir des valeurs qui doivent être disponibles partout dans une application, une session ou un process. +- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -782,6 +782,10 @@ La propriété [`.isSingleton`](../API/ClassClass.md#issingleton) des objets de La propriété [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) des objets de classe permet de savoir si la classe est un singleton de session. +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### Exemples #### Singleton process diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Menus/properties.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Menus/properties.md index 88503e3a2c3b87..2d579002b3c6e7 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Menus/properties.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Menus/properties.md @@ -12,9 +12,9 @@ La propriété **Titre** contient le libellé d'un menu ou d'une ligne de menu, Dans l'éditeur de menus, vous pouvez saisir directement le libellé "en dur". Vous pouvez également saisir une référence pour une variable ou un élément XLIFF, ce qui facilitera la mise à jour et la traduction des applications. Vous pouvez utiliser les types de références suivants : - Une référence à une ressource XLIFF, du type :xliff:MonLibellé. Pour plus d’informations sur les références XLIFF, reportez-vous à la section *Annexe B : Architecture XLIFF* du *Mode Développement 4D*. -- (**Deprecated**) An interprocess variable name followed by a number, for example: `:<>vlang,3`. Il suffit de changer le contenu de cette variable pour modifier le libellé du menu lors de son affichage. Dans ce cas, le libellé fera appel à une ressource XLIFF. La valeur contenue dans la variable `<>vlang` correspond à l’attribut *id* de l’élément *group*. La seconde valeur (3 dans cet exemple) désigne l’attribut *id* de l’élément *trans-unit*. +- (**Obsolète**) Un nom de variable interprocess suivi d'un nombre, par exemple : `:<>vlang,3`. Il suffit de changer le contenu de cette variable pour modifier le libellé du menu lors de son affichage. Dans ce cas, le libellé fera appel à une ressource XLIFF. La valeur contenue dans la variable `<>vlang` correspond à l’attribut *id* de l’élément *group*. La seconde valeur (3 dans cet exemple) désigne l’attribut *id* de l’élément *trans-unit*. -Using the 4D language, you set the title property through the *itemText* parameter of the [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), and [`SET MENU ITEM`](../commands/set-menu-item) commands. +En utilisant le langage 4D, vous définissez la propriété du titre par le biais du paramètre *itemText* des commandes [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item) et [`SET MENU ITEM`](../commands/set-menu-item). ### Caractères de contrôle @@ -33,9 +33,9 @@ Les caractères de contrôle n’apparaissent pas dans les libellés des command ## Paramètres -Il est possible d’associer un paramètre personnalisé à chaque ligne de menu. Un paramètre de ligne de menu est une chaîne de caractères dont le contenu est libre. It can be set in the Menu editor, or through the [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter) command. +Il est possible d’associer un paramètre personnalisé à chaque ligne de menu. Un paramètre de ligne de menu est une chaîne de caractères dont le contenu est libre. Il peut être défini dans l'éditeur de menus ou à l'aide de la commande [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter). -Menu item parameters are useful with programmed management of menus, in particular when using the [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) and [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter) commands. +Les paramètres des éléments de menus sont utiles pour la gestion programmée des menus, en particulier lors de l'utilisation des commandes [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) et [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter). ## Action @@ -57,7 +57,7 @@ Pour associer une méthode projet et/ou une action standard à une commande de m - **Action standard associée** : Choisissez ou saisissez le nom de l’action que vous souhaitez associer dans la combo box "Action standard associée". Vous pouvez saisir toute action prise en charge et (optionnellement) tout paramètre dans la zone. Pour la liste complète des actions standard, veuillez vous reporter à la section **Actions standard** dans le *Mode Développement*. **Note macOS :** Sous macOS, les commandes de menus créés associées à l'action *Quitter* sont automatiquement placées dans le menu de l’application, conformément aux normes d’interface de cette plate-forme. -Using the 4D language, you can associate a project method using the [`SET MENU ITEM METHOD`](../commands/set-menu-item-method) command, and a standard action using the [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property) command. +En utilisant le langage 4D, vous pouvez associer une méthode projet en utilisant la commande [`SET MENU ITEM METHOD`](../commands/set-menu-item-method) et une action standard en utilisant la commande [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property). ### Démarrer un process @@ -93,7 +93,7 @@ Vous ajoutez un filet de séparation en créant une commande de menu. Dans l'éditeur de menus, au lieu de saisir le nom de la commande de menu, il suffit de cocher l’option **Ligne de séparation**. La ligne apparaît alors dans la zone de la commande courante. La ligne apparaît alors dans la zone de la commande courante. Lorsque cette option est cochée, les autres propriétés sont sans effet. **Note :** Sous macOS, il est possible de procéder en faisant commencer le nom de la commande par un tiret “-”. Cette commande sera alors affichée comme une ligne de séparation. -In the 4D language, you insert a separator line by entering `-` or `(-` as itemText for [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), or [`SET MENU ITEM`](../commands/set-menu-item) commands. +Dans le langage 4D, vous insérez une ligne de séparation en entrant `-` ou `(-` comme *itemText* pour les commandes [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item) ou [`SET MENU ITEM`](../commands/set-menu-item). ### Raccourcis clavier @@ -153,7 +153,7 @@ Par défaut, 4D active automatiquement toute commande de menu ajoutée à un men ### Coche -Cette option de l'éditeur de menus permet d’associer par défaut une coche système à la ligne de menu. You can then manage the display of the check mark using language commands ([`SET MENU ITEM MARK`](../commands/set-menu-item-mark) and [`Get menu item mark`](../commands/get-menu-item-mark)). +Cette option de l'éditeur de menus permet d’associer par défaut une coche système à la ligne de menu. Vous pouvez ensuite gérer l'affichage de la coche à l'aide des commandes de langage ([`SET MENU ITEM MARK`](../commands/set-menu-item-mark) et [`Get menu item mark`](../commands/get-menu-item-mark)). Les coches sont généralement utilisées pour des menus à action permanente et indiquent que l’action est en cours. @@ -177,4 +177,4 @@ Pour définir l’icône dans l'éditeur de menu, choisissez l'option **Ouvrir** Pour supprimer l’icône de ligne, choisissez l’option **Pas d’icône** dans le menu de la zone “Icône ligne”. -To define item icons using the 4D language, call the [`SET MENU ITEM ICON`](../commands/set-menu-item-icon) command. \ No newline at end of file +Pour définir les icônes des éléments à l'aide du langage 4D, appelez la commande [`SET MENU ITEM ICON`](../commands/set-menu-item-icon). \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md index 8e2c83e3ad3b5c..869008529af28a 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md @@ -232,10 +232,6 @@ Si vos applications 4D utilisent des connexions TLS, il est recommandé de mettr - **Attention** : La valeur de départ [`offset`](../API/FileHandleClass.md#offset) des objets [4D.FileHandle](../API/FileHandleClass.md) était incorrectement fixée à 1 au lieu de 0. Une correction a été apportée dans 4D à partir des versions **20.1 HF1** et **20 R2** et la valeur est maintenant 0. -## 4D 20.x LTS - -Voir [**Release Notes pour 4D 20.x LTS**](../../version-20/Notes/updates.md). - ## Tableau des bibliothèques | Bibliothèque | Version courante | Mise à jour dans 4D | Commentaire | diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index d4738c0141b15f..7418c2de73301d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -928,25 +928,45 @@ $arch.save() //courseName et name sont "Archaeology II" ## Fonctions exposées et non exposées -Pour des raisons de sécurité, toutes vos fonctions de classe de modèle de données et les attributs alias ne sont **pas exposés** (c'est-à-dire privés) par défaut aux requêtes distantes. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Les requêtes distantes incluent : +Remote requests are: - Les requêtes envoyées par des applications 4D distantes connectées via `Open datastore` -- Les requêtes REST +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Les requêtes client/serveur 4D standard ne sont pas impactées. Les fonctions de classe de modèle de données sont toujours disponibles dans cette architecture. Une fonction qui n'est pas exposée n'est pas disponible sur les applications distantes et ne peut être appelée sur aucune instance d'objet à partir d'une requête REST. Si une application distante tente d'accéder à une fonction non exposée, l'erreur «-10729 - Méthode membre inconnue» est retournée. -Pour permettre à une fonction de classe de modèle de données d'être appelée par une requête distante, vous devez la déclarer explicitement à l'aide du mot-clé `exposed`. La syntaxe formelle est la suivante : +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. La syntaxe formelle est la suivante : ```4d // déclarer une fonction exposée exposed Function ``` -> Le mot-clé `exposed` ne peut être utilisé qu'avec les fonctions de classe du modèle de données. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. + +::: ### Exemple diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-set-attributes.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-set-attributes.md index 8c4efbe25e2be8..d3830c22a4b275 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-set-attributes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-set-attributes.md @@ -33,7 +33,7 @@ Vous pouvez spécifier les attributs à définir pour *targetObj* d'une des deux - Utilisez le paramètre *attribObj* pour passer un seul objet contenant les noms d'attributs et leurs valeurs correspondantes en tant que propriétés d'objet. -For a comprehensive list of attributes to pass, as well as their scope and respective values, please refer to the [4D Write Pro Attributes](../4d-write-pro-attributes) section. +Pour une liste complète des attributs à passer, ainsi que leur portée et leurs valeurs respectives, veuillez vous référer à la section [Attributs 4D Write Pro](../4d-write-pro-attributes) . ## Exemple 1 diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-table-append-row.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-table-append-row.md index 52ff6052532ecc..74766becce0d1c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-table-append-row.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-table-append-row.md @@ -21,7 +21,7 @@ displayed_sidebar: docs The **WP Table append row** command appends one row to the *tableRef* table, fills it with *value*(s) or a *valueColl* collection, and returns the corresponding row range object. -The command supports two syntaxes: +La commande supporte deux syntaxes : - **Using values as parameters:** Adds as many cells in the row as there are values provided in the *value* parameter(s). You can pass any number of values of different types. @@ -33,9 +33,9 @@ The command supports two syntaxes: The default cell alignment will depend on the value type: -- text: left aligned -- pictures: centered -- other types (numbers, date, and time): right aligned +- texte : aligné à gauche +- images : centrées +- autres types (nombres, date et heure): alignés à droite :::note Notes diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md index 7fb6510a6a45ff..3e929085d3790f 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md @@ -4,7 +4,7 @@ title: 4D Write Pro Interface slug: /WritePro/write-pro-interface --- -L'interface de 4D WritePro offre un ensemble de palettes, qui permettent aux utilisateurs de personnaliser facilement un document 4D Write Pro. +The 4D Write Pro Interface component offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. Un développeur 4D peut facilement implémenter ces palettes dans leur application. Ainsi, les utilisateurs finaux peuvent gérer toutes les propriétés de 4D Write Pro, telles que les polices, l'alignement du texte, les signets, la mise en page des tableaux et les cadres. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md index 0810196fdcbd2c..50d0b949135801 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -15,8 +15,8 @@ Lisez [**Les nouveautés de 4D 20**](https://blog.4d.com/fr-whats-new-in-4d-v20/ #### Points forts -- 4D 20.8 LTS is certified on Windows 11 25H2. -- 4D 20.8 LTS is certified on macOS Tahoe (macOS 26). +- 4D 20.8 LTS est certifié sur Windows 11 25H2. +- 4D 20.8 LTS est certifié sur macOS Tahoe (macOS 26). - [**Fixed bugs list**](https://bugs.4d.com/fixes?version=20.8): list of all bugs that have been fixed in 4D 20.8 LTS. @@ -356,12 +356,6 @@ Pour plus d'informations, veuillez vous référer à [ce billet de blog](https:/ - Prise en charge de `no-bom` et nouveaux caractères de fin de ligne par défaut dans [`.setText()`](../API/FileClass.md#settext) -## 4D 19.x LTS - - -Voir [**Release notes pour 4D 19.x LTS**](../../version-19/Notes/updates.md). - - ## Tableau des bibliothèques (4D 20 LTS) diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md index e1452bbeb57077..7c9c753141b23c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md @@ -735,13 +735,13 @@ Une **classe singleton** est une classe utilisateur qui ne produit qu'une seule ### Types de singletons +Les singletons sont utiles pour définir des valeurs qui doivent être disponibles partout dans une application, une session ou un process. + 4D prend en charge trois types de singletons : - un **singleton process** a une instance unique pour le process dans lequel il est instancié, - un **singleton partagé** a une instance unique pour tous les process sur la machine. -- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. - -Les singletons sont utiles pour définir des valeurs qui doivent être disponibles partout dans une application, une session ou un process. +- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -782,6 +782,10 @@ La propriété [`.isSingleton`](../API/ClassClass.md#issingleton) des objets de La propriété [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) des objets de classe permet de savoir si la classe est un singleton de session. +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### Exemples #### Singleton process diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Menus/properties.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Menus/properties.md index 88503e3a2c3b87..2d579002b3c6e7 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Menus/properties.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Menus/properties.md @@ -12,9 +12,9 @@ La propriété **Titre** contient le libellé d'un menu ou d'une ligne de menu, Dans l'éditeur de menus, vous pouvez saisir directement le libellé "en dur". Vous pouvez également saisir une référence pour une variable ou un élément XLIFF, ce qui facilitera la mise à jour et la traduction des applications. Vous pouvez utiliser les types de références suivants : - Une référence à une ressource XLIFF, du type :xliff:MonLibellé. Pour plus d’informations sur les références XLIFF, reportez-vous à la section *Annexe B : Architecture XLIFF* du *Mode Développement 4D*. -- (**Deprecated**) An interprocess variable name followed by a number, for example: `:<>vlang,3`. Il suffit de changer le contenu de cette variable pour modifier le libellé du menu lors de son affichage. Dans ce cas, le libellé fera appel à une ressource XLIFF. La valeur contenue dans la variable `<>vlang` correspond à l’attribut *id* de l’élément *group*. La seconde valeur (3 dans cet exemple) désigne l’attribut *id* de l’élément *trans-unit*. +- (**Obsolète**) Un nom de variable interprocess suivi d'un nombre, par exemple : `:<>vlang,3`. Il suffit de changer le contenu de cette variable pour modifier le libellé du menu lors de son affichage. Dans ce cas, le libellé fera appel à une ressource XLIFF. La valeur contenue dans la variable `<>vlang` correspond à l’attribut *id* de l’élément *group*. La seconde valeur (3 dans cet exemple) désigne l’attribut *id* de l’élément *trans-unit*. -Using the 4D language, you set the title property through the *itemText* parameter of the [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), and [`SET MENU ITEM`](../commands/set-menu-item) commands. +En utilisant le langage 4D, vous définissez la propriété du titre par le biais du paramètre *itemText* des commandes [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item) et [`SET MENU ITEM`](../commands/set-menu-item). ### Caractères de contrôle @@ -33,9 +33,9 @@ Les caractères de contrôle n’apparaissent pas dans les libellés des command ## Paramètres -Il est possible d’associer un paramètre personnalisé à chaque ligne de menu. Un paramètre de ligne de menu est une chaîne de caractères dont le contenu est libre. It can be set in the Menu editor, or through the [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter) command. +Il est possible d’associer un paramètre personnalisé à chaque ligne de menu. Un paramètre de ligne de menu est une chaîne de caractères dont le contenu est libre. Il peut être défini dans l'éditeur de menus ou à l'aide de la commande [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter). -Menu item parameters are useful with programmed management of menus, in particular when using the [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) and [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter) commands. +Les paramètres des éléments de menus sont utiles pour la gestion programmée des menus, en particulier lors de l'utilisation des commandes [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) et [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter). ## Action @@ -57,7 +57,7 @@ Pour associer une méthode projet et/ou une action standard à une commande de m - **Action standard associée** : Choisissez ou saisissez le nom de l’action que vous souhaitez associer dans la combo box "Action standard associée". Vous pouvez saisir toute action prise en charge et (optionnellement) tout paramètre dans la zone. Pour la liste complète des actions standard, veuillez vous reporter à la section **Actions standard** dans le *Mode Développement*. **Note macOS :** Sous macOS, les commandes de menus créés associées à l'action *Quitter* sont automatiquement placées dans le menu de l’application, conformément aux normes d’interface de cette plate-forme. -Using the 4D language, you can associate a project method using the [`SET MENU ITEM METHOD`](../commands/set-menu-item-method) command, and a standard action using the [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property) command. +En utilisant le langage 4D, vous pouvez associer une méthode projet en utilisant la commande [`SET MENU ITEM METHOD`](../commands/set-menu-item-method) et une action standard en utilisant la commande [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property). ### Démarrer un process @@ -93,7 +93,7 @@ Vous ajoutez un filet de séparation en créant une commande de menu. Dans l'éditeur de menus, au lieu de saisir le nom de la commande de menu, il suffit de cocher l’option **Ligne de séparation**. La ligne apparaît alors dans la zone de la commande courante. La ligne apparaît alors dans la zone de la commande courante. Lorsque cette option est cochée, les autres propriétés sont sans effet. **Note :** Sous macOS, il est possible de procéder en faisant commencer le nom de la commande par un tiret “-”. Cette commande sera alors affichée comme une ligne de séparation. -In the 4D language, you insert a separator line by entering `-` or `(-` as itemText for [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), or [`SET MENU ITEM`](../commands/set-menu-item) commands. +Dans le langage 4D, vous insérez une ligne de séparation en entrant `-` ou `(-` comme *itemText* pour les commandes [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item) ou [`SET MENU ITEM`](../commands/set-menu-item). ### Raccourcis clavier @@ -153,7 +153,7 @@ Par défaut, 4D active automatiquement toute commande de menu ajoutée à un men ### Coche -Cette option de l'éditeur de menus permet d’associer par défaut une coche système à la ligne de menu. You can then manage the display of the check mark using language commands ([`SET MENU ITEM MARK`](../commands/set-menu-item-mark) and [`Get menu item mark`](../commands/get-menu-item-mark)). +Cette option de l'éditeur de menus permet d’associer par défaut une coche système à la ligne de menu. Vous pouvez ensuite gérer l'affichage de la coche à l'aide des commandes de langage ([`SET MENU ITEM MARK`](../commands/set-menu-item-mark) et [`Get menu item mark`](../commands/get-menu-item-mark)). Les coches sont généralement utilisées pour des menus à action permanente et indiquent que l’action est en cours. @@ -177,4 +177,4 @@ Pour définir l’icône dans l'éditeur de menu, choisissez l'option **Ouvrir** Pour supprimer l’icône de ligne, choisissez l’option **Pas d’icône** dans le menu de la zone “Icône ligne”. -To define item icons using the 4D language, call the [`SET MENU ITEM ICON`](../commands/set-menu-item-icon) command. \ No newline at end of file +Pour définir les icônes des éléments à l'aide du langage 4D, appelez la commande [`SET MENU ITEM ICON`](../commands/set-menu-item-icon). \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md index 8c81601b612bfb..e9ad2cdebdf87d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -16,7 +16,7 @@ Lisez [**Les nouveautés de 4D 21**](https://blog.4d.com/fe-whats-new-in-4d-v21/ - possibilité de définir des [gestionnaires de requêtes HTTP](../WebServer/http-request-handler.md) en utilisant une propriété `handlers` dans le paramètre *settings* de la fonction [`start()`](../API/WebServerClass.md#start) du serveur Web, - l'objet serveur Web contient de nouvelles propriétés [`rules`](../API/WebServerClass.md#rules) et [`handlers`](../API/WebServerClass.md#handlers). - Nouveaux [événements ORDA sur les données](../ORDA/orda-events.md) : validateSave, saving, afterSave, validateDrop, dropping, afterDrop. -- Support of the new [`restrictedByDefault` property](../ORDA/privileges.md#restriction-modes) in the `roles.json` file to block access by default to all resources without explicit permission. +- Prise en charge de la nouvelle propriété [`restrictedByDefault`](../ORDA/privileges.md#restriction-modes) dans le fichier `roles.json` pour bloquer l'accès par défaut à toutes les ressources sans permission explicite. - Nouvelle option permettant d'utiliser les certificats du Windows Certificate Store au lieu d'un dossier de certificats locaux dans les classes [`HTTPRequest`](../API/HTTPRequestClass.md#4dhttprequestnew) et [`HTTPAgent`](../API/HTTPAgentClass.md#4dhttpagentnew). - Client/serveur : - Vous pouvez afficher des pages Qodly dans des zones Web et [partager la session du client distant](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas). @@ -288,11 +288,7 @@ Si vos applications 4D utilisent des connexions TLS, il est recommandé de mettr - **Attention** : La valeur de départ [`offset`](../API/FileHandleClass.md#offset) des objets [4D.FileHandle](../API/FileHandleClass.md) était incorrectement fixée à 1 au lieu de 0. Une correction a été apportée dans 4D à partir des versions **20.1 HF1** et **20 R2** et la valeur est maintenant 0. -## 4D 20.x LTS - -Voir [**Release Notes pour 4D 20.x LTS**](../20/Notes/updates). - -## Tableau des bibliothèques +## Tableau des bibliothèques (4D 21 LTS) | Bibliothèque | Version courante | Mise à jour dans 4D | Commentaire | | ------------ | -------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index d4738c0141b15f..7418c2de73301d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -928,25 +928,45 @@ $arch.save() //courseName et name sont "Archaeology II" ## Fonctions exposées et non exposées -Pour des raisons de sécurité, toutes vos fonctions de classe de modèle de données et les attributs alias ne sont **pas exposés** (c'est-à-dire privés) par défaut aux requêtes distantes. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Les requêtes distantes incluent : +Remote requests are: - Les requêtes envoyées par des applications 4D distantes connectées via `Open datastore` -- Les requêtes REST +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Les requêtes client/serveur 4D standard ne sont pas impactées. Les fonctions de classe de modèle de données sont toujours disponibles dans cette architecture. Une fonction qui n'est pas exposée n'est pas disponible sur les applications distantes et ne peut être appelée sur aucune instance d'objet à partir d'une requête REST. Si une application distante tente d'accéder à une fonction non exposée, l'erreur «-10729 - Méthode membre inconnue» est retournée. -Pour permettre à une fonction de classe de modèle de données d'être appelée par une requête distante, vous devez la déclarer explicitement à l'aide du mot-clé `exposed`. La syntaxe formelle est la suivante : +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. La syntaxe formelle est la suivante : ```4d // déclarer une fonction exposée exposed Function ``` -> Le mot-clé `exposed` ne peut être utilisé qu'avec les fonctions de classe du modèle de données. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. + +::: ### Exemple diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-set-attributes.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-set-attributes.md index 8c4efbe25e2be8..d3830c22a4b275 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-set-attributes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-set-attributes.md @@ -33,7 +33,7 @@ Vous pouvez spécifier les attributs à définir pour *targetObj* d'une des deux - Utilisez le paramètre *attribObj* pour passer un seul objet contenant les noms d'attributs et leurs valeurs correspondantes en tant que propriétés d'objet. -For a comprehensive list of attributes to pass, as well as their scope and respective values, please refer to the [4D Write Pro Attributes](../4d-write-pro-attributes) section. +Pour une liste complète des attributs à passer, ainsi que leur portée et leurs valeurs respectives, veuillez vous référer à la section [Attributs 4D Write Pro](../4d-write-pro-attributes) . ## Exemple 1 diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-table-append-row.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-table-append-row.md index 52ff6052532ecc..74766becce0d1c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-table-append-row.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-table-append-row.md @@ -21,7 +21,7 @@ displayed_sidebar: docs The **WP Table append row** command appends one row to the *tableRef* table, fills it with *value*(s) or a *valueColl* collection, and returns the corresponding row range object. -The command supports two syntaxes: +La commande supporte deux syntaxes : - **Using values as parameters:** Adds as many cells in the row as there are values provided in the *value* parameter(s). You can pass any number of values of different types. @@ -33,9 +33,9 @@ The command supports two syntaxes: The default cell alignment will depend on the value type: -- text: left aligned -- pictures: centered -- other types (numbers, date, and time): right aligned +- texte : aligné à gauche +- images : centrées +- autres types (nombres, date et heure): alignés à droite :::note Notes diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index 7fb6510a6a45ff..213b07f20f012c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: 4D Write Pro Interface slug: /WritePro/write-pro-interface --- -L'interface de 4D WritePro offre un ensemble de palettes, qui permettent aux utilisateurs de personnaliser facilement un document 4D Write Pro. +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. Un développeur 4D peut facilement implémenter ces palettes dans leur application. Ainsi, les utilisateurs finaux peuvent gérer toutes les propriétés de 4D Write Pro, telles que les polices, l'alignement du texte, les signets, la mise en page des tableaux et les cadres. -La documentation principale de l'[interface 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se trouve dans le *4D - Mode Développement*. +## Installation & documentation -Vous trouverez ci-dessous : +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +La documentation principale de l'[interface 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se trouve dans le *4D - Mode Développement*. Vous trouverez ci-dessous : - la documentation de configuration de l'assistant de table, - the integrated A.I. documentation. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/classes.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/classes.md index 3f7c8e9eb46272..525f05e5150afa 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/classes.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/classes.md @@ -736,13 +736,13 @@ shared Function Bar($value : Integer) ### シングルトンの種類 +アプリケーションやセッション、プロセス内のどこからでも利用可能な値を定義するのにシングルトンは便利です。 + 4D は 3種類のシングルトンをサポートしています: - **プロセスシングルトン** は、自身がインスタンス化されたプロセス内において、インスタンスを一つのみ持つことができます。 - **共有シングルトン** は、マシン上のすべてのプロセスにおいて、共通のインスタンスを一つのみ持つことができます。 -- **セッションシングルトン** も共有シングルトンですが、特定の [セッション](../API/SessionClass.md) 内のすべてのプロセスにおいて、共通のインスタンスを一つのみ持つことができます。 セッションシングルトンは、セッション内で全体的に共有されますが、セッションごとに異なります。 クライアントサーバーまたは Webアプリケーションのコンテキストで セッションシングルトンを使用すると、各セッションごと (つまり各ユーザーごと) に異なるインスタンスを作成して使用することができます。 - -アプリケーションやセッション、プロセス内のどこからでも利用可能な値を定義するのにシングルトンは便利です。 +- **セッションシングルトン** も共有シングルトンですが、特定の [セッション](../API/SessionClass.md) 内のすべてのプロセスにおいて、共通のインスタンスを一つのみ持つことができます。 セッションシングルトンは、セッション内で全体的に共有されますが、セッションごとに異なります。 クライアントサーバーまたは Webアプリケーションのコンテキストで セッションシングルトンを使用すると、各セッションごと (つまり各ユーザーごと) に異なるインスタンスを作成して使用することができます。 Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -783,6 +783,10 @@ shared Function Bar($value : Integer) クラスがセッションシングルトンかどうかは、Classオブジェクトの .[`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) プロパティで確認できます。 +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### 例題 #### プロセスシングルトン diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md index 792bedf98778fe..423bc1e6bbafe9 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -5,23 +5,15 @@ title: リリースノート ## 4D 21 R2 -Read [**What’s new in 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2/), the blog post that lists all new features and enhancements in 4D 21 R2. +[**4D 21 R2 の新機能**](https://blog.4d.com/en-whats-new-in-4d-21-r2/): 4D 21 R2 の新機能と拡張機能をすべてリストアップしたブログ記事です。 #### ハイライト -- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection. +- [コードライブチェッカー](../code-editor/write-class-method.md#警告とエラー) はエラー検知の面における正確性が大幅に向上しました。 - [**修正リスト**](https://bugs.4d.fr/fixedbugslist?version=21_R2): 4D 21 R2 で修正されたバグのリストです ([日本語版はこちら](https://4d-jp.github.io/2023/178/release-note-version-20r2/))。 #### 動作の変更 -## 4D 21.x LTS - -[**4D 21.x LTS のリリースノート**](../../21/Notes/updates) を参照して下さい。 - -## 4D 20.x LTS - -[**4D 20.x LTS のリリースノート**](../../20/Notes/updates) を参照して下さい。 - ## ライブラリの一覧 | ライブラリ | 現在のバージョン | 更新された 4D バージョン | 説明 | diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index d06def3e344611..a49e8ce5d07ead 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -936,18 +936,18 @@ $arch.save() //courseName と name は "Archaeology II" に変更されます ## 公開vs非公開関数 -セキュリティ上の理由により、データモデルクラス関数およびエイリアス属性はデフォルトですべて、リモートリクエストに対し **非公開** (つまりプライベート) に設定されています。 +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -リモートリクエストには次のものが含まれます: +Remote requests are: - `Open datastore` によって接続されたリモートの 4Dアプリケーションが送信するリクエスト -- RESTリクエスト +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > 通常の 4Dクライアント/サーバーリクエストは影響されません。 このアーキテクチャーにおいては、データモデルクラス関数は常に利用可能です。 公開されていない関数はリモートアプリケーションで利用することができず、RESTリクエストによるオブジェクトインスタンスに対して呼び出すこともできません。 リモートアプリケーションが非公開関数をアクセスしようとすると、"-10729 (未知のメンバー機能です)" エラーが返されます。 -リモートリクエストによる呼び出しを許可するには、`exposed` キーワードを使ってデータモデルクラス関数を明示的に宣言する必要があります。 シンタックスは次の通りです: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. シンタックスは次の通りです: ```4d // 公開関数の宣言 @@ -955,7 +955,27 @@ exposed Function ``` -> `exposed` キーワードは、データモデルクラス関数に対してのみ利用可能です。 [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 + +::: ### 例題 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index bb283a6e73ffb8..b273ac1f017f53 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: 4D WritePro インターフェース slug: /WritePro/write-pro-interface --- -4D WritePro インターフェースは、エンドユーザーが 4D Write Proドキュメントを簡単にカスタマイズできるパレットを提供します。 +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. 4D のデベロッパーは、これらのパレットをアプリケーションに簡単に実装することができます。 それにより、エンドユーザーは、フォントやテキストの揃え方向、ブックマーク、表レイアウト、フレームなど、4D Write Pro のプロパティをすべて管理することができます。 -インターフェースのマニュアルについては、*4D デザインリファレンス* の [4D Write Pro エリアのドキュメント](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.ja.html) を参照ください。 +## Installation & documentation -ここには以下のような情報があります: +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +インターフェースのマニュアルについては、*4D デザインリファレンス* の [4D Write Pro エリアのドキュメント](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.ja.html) を参照ください。 ここには以下のような情報があります: - 表ウィザード設定ドキュメンテーション - 統合されたAIについての ドキュメント. diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md index 91e9cedd7a064f..ff014a4a2e7838 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md @@ -736,13 +736,13 @@ shared Function Bar($value : Integer) ### シングルトンの種類 +アプリケーションやセッション、プロセス内のどこからでも利用可能な値を定義するのにシングルトンは便利です。 + 4D は 3種類のシングルトンをサポートしています: - **プロセスシングルトン** は、自身がインスタンス化されたプロセス内において、インスタンスを一つのみ持つことができます。 - **共有シングルトン** は、マシン上のすべてのプロセスにおいて、共通のインスタンスを一つのみ持つことができます。 -- **セッションシングルトン** も共有シングルトンですが、特定の [セッション](../API/SessionClass.md) 内のすべてのプロセスにおいて、共通のインスタンスを一つのみ持つことができます。 セッションシングルトンは、セッション内で全体的に共有されますが、セッションごとに異なります。 クライアントサーバーまたは Webアプリケーションのコンテキストで セッションシングルトンを使用すると、各セッションごと (つまり各ユーザーごと) に異なるインスタンスを作成して使用することができます。 - -アプリケーションやセッション、プロセス内のどこからでも利用可能な値を定義するのにシングルトンは便利です。 +- **セッションシングルトン** も共有シングルトンですが、特定の [セッション](../API/SessionClass.md) 内のすべてのプロセスにおいて、共通のインスタンスを一つのみ持つことができます。 セッションシングルトンは、セッション内で全体的に共有されますが、セッションごとに異なります。 クライアントサーバーまたは Webアプリケーションのコンテキストで セッションシングルトンを使用すると、各セッションごと (つまり各ユーザーごと) に異なるインスタンスを作成して使用することができます。 Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -783,6 +783,10 @@ shared Function Bar($value : Integer) クラスがセッションシングルトンかどうかは、Classオブジェクトの .[`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) プロパティで確認できます。 +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### 例題 #### プロセスシングルトン diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md index ff2eefe13f6d7d..b3db37de349b19 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md @@ -233,10 +233,6 @@ title: リリースノート - **警告**: [4D.FileHandle](../API/FileHandleClass.md) オブジェクトの [`offset`](../API/FileHandleClass.md#offset) の開始値が誤って 0 ではなく 1 に設定されていました。 **20.1 HF1** および **20 R2** のバージョンで 4D が修正され、この値が 0 になりました。 **20.1 HF1** および **20 R2** のバージョンで 4D が修正され、この値が 0 になりました。 -## 4D 20.x LTS - -[**4D 20.x LTS のリリースノート**](../../version-20/Notes/updates.md) 参照。 - ## ライブラリの一覧 | ライブラリ | 現在のバージョン | 更新された 4D バージョン | 説明 | diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index d06def3e344611..a49e8ce5d07ead 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -936,18 +936,18 @@ $arch.save() //courseName と name は "Archaeology II" に変更されます ## 公開vs非公開関数 -セキュリティ上の理由により、データモデルクラス関数およびエイリアス属性はデフォルトですべて、リモートリクエストに対し **非公開** (つまりプライベート) に設定されています。 +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -リモートリクエストには次のものが含まれます: +Remote requests are: - `Open datastore` によって接続されたリモートの 4Dアプリケーションが送信するリクエスト -- RESTリクエスト +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > 通常の 4Dクライアント/サーバーリクエストは影響されません。 このアーキテクチャーにおいては、データモデルクラス関数は常に利用可能です。 公開されていない関数はリモートアプリケーションで利用することができず、RESTリクエストによるオブジェクトインスタンスに対して呼び出すこともできません。 リモートアプリケーションが非公開関数をアクセスしようとすると、"-10729 (未知のメンバー機能です)" エラーが返されます。 -リモートリクエストによる呼び出しを許可するには、`exposed` キーワードを使ってデータモデルクラス関数を明示的に宣言する必要があります。 シンタックスは次の通りです: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. シンタックスは次の通りです: ```4d // 公開関数の宣言 @@ -955,7 +955,27 @@ exposed Function ``` -> `exposed` キーワードは、データモデルクラス関数に対してのみ利用可能です。 [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 + +::: ### 例題 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md index bb283a6e73ffb8..e27fbf2dc368a0 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md @@ -4,7 +4,7 @@ title: 4D WritePro インターフェース slug: /WritePro/write-pro-interface --- -4D WritePro インターフェースは、エンドユーザーが 4D Write Proドキュメントを簡単にカスタマイズできるパレットを提供します。 +The 4D Write Pro Interface component offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. 4D のデベロッパーは、これらのパレットをアプリケーションに簡単に実装することができます。 それにより、エンドユーザーは、フォントやテキストの揃え方向、ブックマーク、表レイアウト、フレームなど、4D Write Pro のプロパティをすべて管理することができます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md index 84208fa427b2af..eee7fc232f1ef1 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -356,12 +356,6 @@ ALERT($param1+" "+$param2) - [`.setText()`](../API/FileClass.md#settext) におけるデフォルトの改行コード (EOL) の指定と `no-bom` のサポート -## 4D 19.x LTS - - -[**4D 19.x LTS のリリースノート**](../../version-19/Notes/updates.md) 参照。 - - ## ライブラリの一覧 (4D 20 LTS) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/classes.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/classes.md index 91e9cedd7a064f..ff014a4a2e7838 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/classes.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/classes.md @@ -736,13 +736,13 @@ shared Function Bar($value : Integer) ### シングルトンの種類 +アプリケーションやセッション、プロセス内のどこからでも利用可能な値を定義するのにシングルトンは便利です。 + 4D は 3種類のシングルトンをサポートしています: - **プロセスシングルトン** は、自身がインスタンス化されたプロセス内において、インスタンスを一つのみ持つことができます。 - **共有シングルトン** は、マシン上のすべてのプロセスにおいて、共通のインスタンスを一つのみ持つことができます。 -- **セッションシングルトン** も共有シングルトンですが、特定の [セッション](../API/SessionClass.md) 内のすべてのプロセスにおいて、共通のインスタンスを一つのみ持つことができます。 セッションシングルトンは、セッション内で全体的に共有されますが、セッションごとに異なります。 クライアントサーバーまたは Webアプリケーションのコンテキストで セッションシングルトンを使用すると、各セッションごと (つまり各ユーザーごと) に異なるインスタンスを作成して使用することができます。 - -アプリケーションやセッション、プロセス内のどこからでも利用可能な値を定義するのにシングルトンは便利です。 +- **セッションシングルトン** も共有シングルトンですが、特定の [セッション](../API/SessionClass.md) 内のすべてのプロセスにおいて、共通のインスタンスを一つのみ持つことができます。 セッションシングルトンは、セッション内で全体的に共有されますが、セッションごとに異なります。 クライアントサーバーまたは Webアプリケーションのコンテキストで セッションシングルトンを使用すると、各セッションごと (つまり各ユーザーごと) に異なるインスタンスを作成して使用することができます。 Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -783,6 +783,10 @@ shared Function Bar($value : Integer) クラスがセッションシングルトンかどうかは、Classオブジェクトの .[`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) プロパティで確認できます。 +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### 例題 #### プロセスシングルトン diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md index 7bdb8b1d9fa45c..870bffddeb4e47 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -289,11 +289,7 @@ title: リリースノート - **警告**: [4D.FileHandle](../API/FileHandleClass.md) オブジェクトの [`offset`](../API/FileHandleClass.md#offset) の開始値が誤って 0 ではなく 1 に設定されていました。 **20.1 HF1** および **20 R2** のバージョンで 4D が修正され、この値が 0 になりました。 **20.1 HF1** および **20 R2** のバージョンで 4D が修正され、この値が 0 になりました。 -## 4D 20.x LTS - -[**4D 20.x LTS のリリースノート**](../20/Notes/updates) を参照して下さい。 - -## ライブラリの一覧 +## ライブラリの一覧 (4D 21 LTS) | ライブラリ | 現在のバージョン | 更新された 4D バージョン | 説明 | | --------- | -------------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index d06def3e344611..a49e8ce5d07ead 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -936,18 +936,18 @@ $arch.save() //courseName と name は "Archaeology II" に変更されます ## 公開vs非公開関数 -セキュリティ上の理由により、データモデルクラス関数およびエイリアス属性はデフォルトですべて、リモートリクエストに対し **非公開** (つまりプライベート) に設定されています。 +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -リモートリクエストには次のものが含まれます: +Remote requests are: - `Open datastore` によって接続されたリモートの 4Dアプリケーションが送信するリクエスト -- RESTリクエスト +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > 通常の 4Dクライアント/サーバーリクエストは影響されません。 このアーキテクチャーにおいては、データモデルクラス関数は常に利用可能です。 公開されていない関数はリモートアプリケーションで利用することができず、RESTリクエストによるオブジェクトインスタンスに対して呼び出すこともできません。 リモートアプリケーションが非公開関数をアクセスしようとすると、"-10729 (未知のメンバー機能です)" エラーが返されます。 -リモートリクエストによる呼び出しを許可するには、`exposed` キーワードを使ってデータモデルクラス関数を明示的に宣言する必要があります。 シンタックスは次の通りです: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. シンタックスは次の通りです: ```4d // 公開関数の宣言 @@ -955,7 +955,27 @@ exposed Function ``` -> `exposed` キーワードは、データモデルクラス関数に対してのみ利用可能です。 [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 + +::: ### 例題 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index bb283a6e73ffb8..b273ac1f017f53 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: 4D WritePro インターフェース slug: /WritePro/write-pro-interface --- -4D WritePro インターフェースは、エンドユーザーが 4D Write Proドキュメントを簡単にカスタマイズできるパレットを提供します。 +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. 4D のデベロッパーは、これらのパレットをアプリケーションに簡単に実装することができます。 それにより、エンドユーザーは、フォントやテキストの揃え方向、ブックマーク、表レイアウト、フレームなど、4D Write Pro のプロパティをすべて管理することができます。 -インターフェースのマニュアルについては、*4D デザインリファレンス* の [4D Write Pro エリアのドキュメント](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.ja.html) を参照ください。 +## Installation & documentation -ここには以下のような情報があります: +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +インターフェースのマニュアルについては、*4D デザインリファレンス* の [4D Write Pro エリアのドキュメント](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.ja.html) を参照ください。 ここには以下のような情報があります: - 表ウィザード設定ドキュメンテーション - 統合されたAIについての ドキュメント. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/classes.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/classes.md index 6fd515c79cb59c..8dedd37ac8dd39 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/classes.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/classes.md @@ -733,13 +733,13 @@ Uma **classe singleton** é uma classe de usuário que produz apenas uma única ### Tipos de singletons +Singletons são úteis para definir valores que precisam estar disponíveis em qualquer lugar em um aplicativo, uma sessão ou um processo. + 4D suporta três tipos de singletons: - um **processo singleton** tem uma instância única para o processo no qual ele é instanciado, - um **singleton compartilhado** tem uma instância única para todos os processos na máquina. -- uma **sessão singleton** é um singleton compartilhado, mas com uma instância única para todos os processos na [sessão](../API/SessionClass.md). Os singletons de sessão são compartilhados em uma sessão inteira, mas variam entre as sessões. No contexto de um cliente-servidor ou de um aplicativo Web, os singletons de sessão possibilitam a criação e o uso de uma instância diferente para cada sessão, portanto, para cada usuário. - -Singletons são úteis para definir valores que precisam estar disponíveis em qualquer lugar em um aplicativo, uma sessão ou um processo. +- uma **sessão singleton** é um singleton compartilhado, mas com uma instância única para todos os processos na [sessão](../API/SessionClass.md). Os singletons de sessão são compartilhados em uma sessão inteira, mas variam entre as sessões. No contexto de um cliente-servidor ou de um aplicativo Web, os singletons de sessão possibilitam a criação e o uso de uma instância diferente para cada sessão, portanto, para cada usuário. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -780,6 +780,10 @@ O [`.isSingleton`](../API/ClassClass.md#issingleton) propriedade de objetos de c A propriedade [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) dos objetos Class permite saber se a classe é um singleton de sessão. +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### Exemplos #### Singleton process diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md index 121bd6e949d332..94c3b9caa7f773 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -14,14 +14,6 @@ Leia [**O que há de novo no 4D v21 R2**](https://blog.4d.com/en-whats-new-in-4d #### Mudanças de comportamento -## 4D 21.x LTS - -Veja [**Notas de lançamento 4D 21.x LTS**](../../21/Notes/updates). - -## 4D 20.x LTS - -Veja [**Notas de lançamento 4D 20.x LTS**](../../20/Notes/updates). - ## Tabela da biblioteca | Biblioteca | Versão atual | Atualizado em 4D | Comentário | diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index 66862732f2350b..b7f38db3d69de6 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -920,25 +920,45 @@ $arch.save() //courseName and name are "Archaeology II" ## Funções expostas vs não expostas -Por razões de segurança, todas as funções de classe de modelo de dados e atributos de alias **não são** (por exemplo, privado) por padrão para solicitações remotas. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Os pedidos remotos incluem: +Remote requests are: - Pedidos enviados por aplicações 4D remotas ligadas através de `Open datastore` -- Pedidos REST +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Os pedidos regulares de cliente/servidor 4D não são afetados. As funções de classe do modelo de dados estão sempre disponíveis nesta arquitetura. Uma função que não esteja exposta não está disponível em aplicações remotas e não pode ser chamada em qualquer instância de objeto a partir de um pedido REST. Se uma aplicação remota tentar aceder a uma função não exposta, é devolvido o erro "-10729 - Método de membro desconhecido". -Para permitir que uma função de classe de modelo de dados seja chamada por um pedido remoto, você deve declará-la explicitamente usando a palavra-chave `exposed`. A sintaxe formal é: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. A sintaxe formal é: ```4d // declara uma função exposta exposed Function ``` -> A palavra-chave `exposed` só pode ser utilizada com funções de classe de modelo de dados. Se usado com uma [classe de usuário regular](Concepts/classes.md) função, ela é ignorada e um erro é retornado pelo compilador. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. Se usado com uma [classe de usuário regular](Concepts/classes.md) função, ela é ignorada e um erro é retornado pelo compilador. + +::: ### Exemplo diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index 5ae4f2aa2bddbc..e2f9f7c9aa33df 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: Interface 4D Write Pro slug: /WritePro/write-pro-interface --- -4D WritePro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. Um desenvolvedor 4D pode facilmente implementar essas paletas em sua aplicação. Thus, end users can manage all 4D Write Pro properties, such as fonts, text alignment, bookmarks, table layout, and frames. -La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. +## Installation & documentation -Você encontrará abaixo: +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. Você encontrará abaixo: - the Table Wizard configuration documentation, - a I.A. integrada. documentation. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md index 5800a6fa6465d5..b526a3bfa74e1b 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md @@ -733,13 +733,13 @@ Uma **classe singleton** é uma classe de usuário que produz apenas uma única ### Tipos de singletons +Singletons são úteis para definir valores que precisam estar disponíveis em qualquer lugar em um aplicativo, uma sessão ou um processo. + 4D suporta três tipos de singletons: - um **processo singleton** tem uma instância única para o processo no qual ele é instanciado, - um **singleton compartilhado** tem uma instância única para todos os processos na máquina. -- uma **sessão singleton** é um singleton compartilhado, mas com uma instância única para todos os processos na [sessão](../API/SessionClass.md). Os singletons de sessão são compartilhados em uma sessão inteira, mas variam entre as sessões. No contexto de um cliente-servidor ou de um aplicativo Web, os singletons de sessão possibilitam a criação e o uso de uma instância diferente para cada sessão, portanto, para cada usuário. - -Singletons são úteis para definir valores que precisam estar disponíveis em qualquer lugar em um aplicativo, uma sessão ou um processo. +- uma **sessão singleton** é um singleton compartilhado, mas com uma instância única para todos os processos na [sessão](../API/SessionClass.md). Os singletons de sessão são compartilhados em uma sessão inteira, mas variam entre as sessões. No contexto de um cliente-servidor ou de um aplicativo Web, os singletons de sessão possibilitam a criação e o uso de uma instância diferente para cada sessão, portanto, para cada usuário. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -780,6 +780,10 @@ O [`.isSingleton`](../API/ClassClass.md#issingleton) propriedade de objetos de c A propriedade [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) dos objetos Class permite saber se a classe é um singleton de sessão. +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### Exemplos #### Singleton process diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md index 4406f1744cd649..5f6fa17c665db4 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Notes/updates.md @@ -232,10 +232,6 @@ Se suas aplicações 4D utilizam conexões TLS, é recomendado que você faça a - **Aviso**: o valor inicial dos objetos [`offset`](../API/FileHandleClass.md#offset) de [4D.FileHandle](../API/FileHandleClass.md) era configurado incorretamente para 1 ao invés de 0. Foi feita uma correção no 4D a partir das versões **20.1 HF1** e **20 R2** e o valor agora é 0. -## 4D 20.x LTS - -Veja [**Notas de lançamento 4D 20.x LTS**](../../version-20/Notes/updates.md). - ## Tabela da biblioteca | Biblioteca | Versão atual | Atualizado em 4D | Comentário | diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index 66862732f2350b..b7f38db3d69de6 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -920,25 +920,45 @@ $arch.save() //courseName and name are "Archaeology II" ## Funções expostas vs não expostas -Por razões de segurança, todas as funções de classe de modelo de dados e atributos de alias **não são** (por exemplo, privado) por padrão para solicitações remotas. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Os pedidos remotos incluem: +Remote requests are: - Pedidos enviados por aplicações 4D remotas ligadas através de `Open datastore` -- Pedidos REST +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Os pedidos regulares de cliente/servidor 4D não são afetados. As funções de classe do modelo de dados estão sempre disponíveis nesta arquitetura. Uma função que não esteja exposta não está disponível em aplicações remotas e não pode ser chamada em qualquer instância de objeto a partir de um pedido REST. Se uma aplicação remota tentar aceder a uma função não exposta, é devolvido o erro "-10729 - Método de membro desconhecido". -Para permitir que uma função de classe de modelo de dados seja chamada por um pedido remoto, você deve declará-la explicitamente usando a palavra-chave `exposed`. A sintaxe formal é: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. A sintaxe formal é: ```4d // declara uma função exposta exposed Function ``` -> A palavra-chave `exposed` só pode ser utilizada com funções de classe de modelo de dados. Se usado com uma [classe de usuário regular](Concepts/classes.md) função, ela é ignorada e um erro é retornado pelo compilador. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. Se usado com uma [classe de usuário regular](Concepts/classes.md) função, ela é ignorada e um erro é retornado pelo compilador. + +::: ### Exemplo diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md index 5ae4f2aa2bddbc..39ab81aae54bdc 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WritePro/writeprointerface.md @@ -4,7 +4,7 @@ title: Interface 4D Write Pro slug: /WritePro/write-pro-interface --- -4D WritePro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. +The 4D Write Pro Interface component offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. Um desenvolvedor 4D pode facilmente implementar essas paletas em sua aplicação. Thus, end users can manage all 4D Write Pro properties, such as fonts, text alignment, bookmarks, table layout, and frames. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md index fa68ba87d715f9..5bfde34030fec3 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -356,12 +356,6 @@ Para obter informações pormenorizadas, consulte [esta publicação do blogue]( - `Suporte a no-bom` e novos caracteres de fim de linha padrão em [`.setText()`](../API/FileClass.md#settext) -## 4D 19.x LTS - - -Veja [**Notas de lançamento para 4D 19.x LTS**](../../version-19/Notes/updates.md). - - ## Tabela das bibliotecas (4D 20 LTS) diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/classes.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/classes.md index 5800a6fa6465d5..b526a3bfa74e1b 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/classes.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/classes.md @@ -733,13 +733,13 @@ Uma **classe singleton** é uma classe de usuário que produz apenas uma única ### Tipos de singletons +Singletons são úteis para definir valores que precisam estar disponíveis em qualquer lugar em um aplicativo, uma sessão ou um processo. + 4D suporta três tipos de singletons: - um **processo singleton** tem uma instância única para o processo no qual ele é instanciado, - um **singleton compartilhado** tem uma instância única para todos os processos na máquina. -- uma **sessão singleton** é um singleton compartilhado, mas com uma instância única para todos os processos na [sessão](../API/SessionClass.md). Os singletons de sessão são compartilhados em uma sessão inteira, mas variam entre as sessões. No contexto de um cliente-servidor ou de um aplicativo Web, os singletons de sessão possibilitam a criação e o uso de uma instância diferente para cada sessão, portanto, para cada usuário. - -Singletons são úteis para definir valores que precisam estar disponíveis em qualquer lugar em um aplicativo, uma sessão ou um processo. +- uma **sessão singleton** é um singleton compartilhado, mas com uma instância única para todos os processos na [sessão](../API/SessionClass.md). Os singletons de sessão são compartilhados em uma sessão inteira, mas variam entre as sessões. No contexto de um cliente-servidor ou de um aplicativo Web, os singletons de sessão possibilitam a criação e o uso de uma instância diferente para cada sessão, portanto, para cada usuário. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). :::info @@ -780,6 +780,10 @@ O [`.isSingleton`](../API/ClassClass.md#issingleton) propriedade de objetos de c A propriedade [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) dos objetos Class permite saber se a classe é um singleton de sessão. +### Exposed singleton functions + +Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). + ### Exemplos #### Singleton process diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md index aaa5ca6daaf843..7e4e7c23aa2954 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -288,11 +288,7 @@ Se suas aplicações 4D utilizam conexões TLS, é recomendado que você faça a - **Aviso**: o valor inicial dos objetos [`offset`](../API/FileHandleClass.md#offset) de [4D.FileHandle](../API/FileHandleClass.md) era configurado incorretamente para 1 ao invés de 0. Foi feita uma correção no 4D a partir das versões **20.1 HF1** e **20 R2** e o valor agora é 0. -## 4D 20.x LTS - -Veja [**Notas de lançamento 4D 20.x LTS**](../20/Notes/updates). - -## Tabela da biblioteca +## Tabela das bibliotecas (4D 21 LTS) | Biblioteca | Versão atual | Atualizado em 4D | Comentário | | ---------- | -------------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index 66862732f2350b..b7f38db3d69de6 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -920,25 +920,45 @@ $arch.save() //courseName and name are "Archaeology II" ## Funções expostas vs não expostas -Por razões de segurança, todas as funções de classe de modelo de dados e atributos de alias **não são** (por exemplo, privado) por padrão para solicitações remotas. +For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Os pedidos remotos incluem: +Remote requests are: - Pedidos enviados por aplicações 4D remotas ligadas através de `Open datastore` -- Pedidos REST +- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) > Os pedidos regulares de cliente/servidor 4D não são afetados. As funções de classe do modelo de dados estão sempre disponíveis nesta arquitetura. Uma função que não esteja exposta não está disponível em aplicações remotas e não pode ser chamada em qualquer instância de objeto a partir de um pedido REST. Se uma aplicação remota tentar aceder a uma função não exposta, é devolvido o erro "-10729 - Método de membro desconhecido". -Para permitir que uma função de classe de modelo de dados seja chamada por um pedido remoto, você deve declará-la explicitamente usando a palavra-chave `exposed`. A sintaxe formal é: +To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. A sintaxe formal é: ```4d // declara uma função exposta exposed Function ``` -> A palavra-chave `exposed` só pode ser utilizada com funções de classe de modelo de dados. Se usado com uma [classe de usuário regular](Concepts/classes.md) função, ela é ignorada e um erro é retornado pelo compilador. +```4d +// declare an exposed alias +exposed Alias +``` + +```4d +// declare an exposed computed attribute +exposed Function get +``` + +```4d +// declare a shared singleton function +shared singleton Class constructor() +exposed Function +``` + +:::note + +The `exposed` keyword can only be used with the objects decribed above. Se usado com uma [classe de usuário regular](Concepts/classes.md) função, ela é ignorada e um erro é retornado pelo compilador. + +::: ### Exemplo diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index 5ae4f2aa2bddbc..e2f9f7c9aa33df 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -4,13 +4,15 @@ title: Interface 4D Write Pro slug: /WritePro/write-pro-interface --- -4D WritePro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. +4D Write Pro Interface offers a set of palettes, which allow end users to easily customize a 4D Write Pro document. Um desenvolvedor 4D pode facilmente implementar essas paletas em sua aplicação. Thus, end users can manage all 4D Write Pro properties, such as fonts, text alignment, bookmarks, table layout, and frames. -La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. +## Installation & documentation -Você encontrará abaixo: +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). + +La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. Você encontrará abaixo: - the Table Wizard configuration documentation, - a I.A. integrada. documentation. From a08bbe5cbab8fba54ddb106234cacf0d85e75359 Mon Sep 17 00:00:00 2001 From: Eric Marchand <129385512+e-marchand@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:04:30 +0100 Subject: [PATCH 21/75] ViewPro: Fix capitalization of foreColor and add borderTop section --- docs/ViewPro/classes.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/ViewPro/classes.md b/docs/ViewPro/classes.md index b43b8a50a3fdae..9a69bb4c8c8272 100644 --- a/docs/ViewPro/classes.md +++ b/docs/ViewPro/classes.md @@ -151,12 +151,12 @@ The `.useFooterDropDownList` property [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - -**.forecolor** : Text + +**.foreColor** : Text -The `.forecolor` property is the [foreground color](configuring.md#background--foreground) of the table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. @@ -200,7 +200,12 @@ The `.borderRight` property is the r The `.borderBottom` property is the bottom border line of the table . +### .borderTop + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . ### .borderHorizontal From e2de028a1b9a4abaecb0f04f537ee6d8f86b4a3c Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 17 Nov 2025 14:30:33 +0100 Subject: [PATCH 22/75] report fixes 4DVP --- .../version-20-R10/ViewPro/classes.md | 14 +++++++++---- versioned_docs/version-20/ViewPro/classes.md | 20 ++++++++++++------- versioned_docs/version-21/ViewPro/classes.md | 14 +++++++++---- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/versioned_docs/version-20-R10/ViewPro/classes.md b/versioned_docs/version-20-R10/ViewPro/classes.md index b43b8a50a3fdae..abd8ef98c449c6 100644 --- a/versioned_docs/version-20-R10/ViewPro/classes.md +++ b/versioned_docs/version-20-R10/ViewPro/classes.md @@ -151,12 +151,12 @@ The `.useFooterDropDownList` property [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - -**.forecolor** : Text + +**.foreColor** : Text -The `.forecolor` property is the [foreground color](configuring.md#background--foreground) of the table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. @@ -201,6 +201,12 @@ The `.borderRight` property is the r The `.borderBottom` property is the bottom border line of the table . +### .borderTop + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . ### .borderHorizontal diff --git a/versioned_docs/version-20/ViewPro/classes.md b/versioned_docs/version-20/ViewPro/classes.md index ade09ffdc81a3d..abd8ef98c449c6 100644 --- a/versioned_docs/version-20/ViewPro/classes.md +++ b/versioned_docs/version-20/ViewPro/classes.md @@ -129,7 +129,7 @@ The `.tableColumns` property is a The `.theme` property defines a table theme. Can also be a text (name of a native SpreadJS theme). -See the [native SpreadJS themes](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +See the [native SpreadJS themes](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). ### .useFooterDropDownList @@ -151,12 +151,12 @@ The `.useFooterDropDownList` property [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - -**.forecolor** : Text + +**.foreColor** : Text -The `.forecolor` property is the [foreground color](configuring.md#background--foreground) of the table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. @@ -201,6 +201,12 @@ The `.borderRight` property is the r The `.borderBottom` property is the bottom border line of the table . +### .borderTop + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . ### .borderHorizontal @@ -261,7 +267,7 @@ The `.highlightFirstColumn` property defines a table theme. -If Text: name of a [native SpreadJS theme](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +If Text: name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). @@ -357,7 +363,7 @@ The `.lastHeaderCellStyle` property is the **.name** : Text -The `.name` property is the name of a [native SpreadJS theme](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +The `.name` property is the name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). ### .secondColumnStripSize diff --git a/versioned_docs/version-21/ViewPro/classes.md b/versioned_docs/version-21/ViewPro/classes.md index b43b8a50a3fdae..abd8ef98c449c6 100644 --- a/versioned_docs/version-21/ViewPro/classes.md +++ b/versioned_docs/version-21/ViewPro/classes.md @@ -151,12 +151,12 @@ The `.useFooterDropDownList` property [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - -**.forecolor** : Text + +**.foreColor** : Text -The `.forecolor` property is the [foreground color](configuring.md#background--foreground) of the table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. @@ -201,6 +201,12 @@ The `.borderRight` property is the r The `.borderBottom` property is the bottom border line of the table . +### .borderTop + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . ### .borderHorizontal From e1d12eb73e287aeb8a1b0bf81ef7a401c6d1d04f Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 17 Nov 2025 14:46:46 +0100 Subject: [PATCH 23/75] added link to blog post for code live checker --- docs/Notes/updates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Notes/updates.md b/docs/Notes/updates.md index e4838f0d200ee4..b06a597a3b4f0e 100644 --- a/docs/Notes/updates.md +++ b/docs/Notes/updates.md @@ -9,7 +9,7 @@ Read [**What’s new in 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2 #### Highlights -- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection. +- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). - [**Fixed bug list**](https://bugs.4d.fr/fixedbugslist?version=21_R2): list of all bugs that have been fixed in 4D 21 R2. From 347c5814abad78553e6d9753ba65ab64f5ebac2a Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 17 Nov 2025 16:04:13 +0100 Subject: [PATCH 24/75] link to SpreadJS release --- docs/ViewPro/getting-started.md | 6 ++++++ versioned_docs/version-20-R10/ViewPro/getting-started.md | 6 ++++++ versioned_docs/version-20/ViewPro/getting-started.md | 6 ++++++ versioned_docs/version-21/ViewPro/getting-started.md | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/docs/ViewPro/getting-started.md b/docs/ViewPro/getting-started.md index b706eec8867a4d..d60bf44e2e4c18 100644 --- a/docs/ViewPro/getting-started.md +++ b/docs/ViewPro/getting-started.md @@ -11,6 +11,12 @@ title: Getting Started A spreadsheet is an application containing a grid of cells into which you can enter information, execute calculations, or display pictures. 4D View Pro is powered by the [SpreadJS spreadsheet solution](https://developer.mescius.com/spreadjs) integrated in 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + Embedding 4D View Pro areas in your forms allows you to import and export spreadsheets documents using the 4D View Pro commands. diff --git a/versioned_docs/version-20-R10/ViewPro/getting-started.md b/versioned_docs/version-20-R10/ViewPro/getting-started.md index 56f1a5c80a5b62..8ced5620021ad0 100644 --- a/versioned_docs/version-20-R10/ViewPro/getting-started.md +++ b/versioned_docs/version-20-R10/ViewPro/getting-started.md @@ -11,6 +11,12 @@ title: Getting Started A spreadsheet is an application containing a grid of cells into which you can enter information, execute calculations, or display pictures. 4D View Pro is powered by the [SpreadJS spreadsheet solution](https://developer.mescius.com/spreadjs) integrated in 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + Embedding 4D View Pro areas in your forms allows you to import and export spreadsheets documents using the 4D View Pro commands. diff --git a/versioned_docs/version-20/ViewPro/getting-started.md b/versioned_docs/version-20/ViewPro/getting-started.md index 3a1af0b6ccb3f3..a503dfe4d7184d 100644 --- a/versioned_docs/version-20/ViewPro/getting-started.md +++ b/versioned_docs/version-20/ViewPro/getting-started.md @@ -11,6 +11,12 @@ title: Getting Started A spreadsheet is an application containing a grid of cells into which you can enter information, execute calculations, or display pictures. 4D View Pro is powered by the [SpreadJS spreadsheet solution](https://www.grapecity.com/spreadjs/docs/versions/v14/online/overview.html) integrated in 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + Embedding 4D View Pro areas in your forms allows you to import and export spreadsheets documents using the 4D View Pro commands. diff --git a/versioned_docs/version-21/ViewPro/getting-started.md b/versioned_docs/version-21/ViewPro/getting-started.md index b706eec8867a4d..d60bf44e2e4c18 100644 --- a/versioned_docs/version-21/ViewPro/getting-started.md +++ b/versioned_docs/version-21/ViewPro/getting-started.md @@ -11,6 +11,12 @@ title: Getting Started A spreadsheet is an application containing a grid of cells into which you can enter information, execute calculations, or display pictures. 4D View Pro is powered by the [SpreadJS spreadsheet solution](https://developer.mescius.com/spreadjs) integrated in 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + Embedding 4D View Pro areas in your forms allows you to import and export spreadsheets documents using the 4D View Pro commands. From 47d2c8e8a9c36c872539a9b2f5af94598c9ee1ab Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Tue, 18 Nov 2025 09:51:56 +0100 Subject: [PATCH 25/75] New Crowdin updates (#2998) * New translations parameters.md (French) * New translations parameters.md (French) * New translations classes.md (French) * New translations getting-started.md (French) * New translations parameters.md (French) * New translations updates.md (French) * New translations classes.md (French) * New translations getting-started.md (French) * New translations wp-get-attributes.md (French) * New translations parameters.md (French) * New translations classes.md (French) * New translations getting-started.md (French) * New translations wp-get-attributes.md (French) * New translations parameters.md (French) * New translations classes.md (French) * New translations getting-started.md (French) * New translations wp-get-attributes.md (French) * New translations parameters.md (Spanish) * New translations parameters.md (Spanish) * New translations classes.md (Spanish) * New translations getting-started.md (Spanish) * New translations parameters.md (Spanish) * New translations updates.md (Spanish) * New translations classes.md (Spanish) * New translations getting-started.md (Spanish) * New translations parameters.md (Spanish) * New translations classes.md (Spanish) * New translations getting-started.md (Spanish) * New translations parameters.md (Spanish) * New translations classes.md (Spanish) * New translations getting-started.md (Spanish) * New translations parameters.md (Japanese) * New translations parameters.md (Japanese) * New translations classes.md (Japanese) * New translations getting-started.md (Japanese) * New translations parameters.md (Japanese) * New translations updates.md (Japanese) * New translations dsmapping.md (Japanese) * New translations entities.md (Japanese) * New translations glossary.md (Japanese) * New translations classes.md (Japanese) * New translations getting-started.md (Japanese) * New translations license-info.md (Japanese) * New translations parameters.md (Japanese) * New translations dsmapping.md (Japanese) * New translations entities.md (Japanese) * New translations glossary.md (Japanese) * New translations classes.md (Japanese) * New translations getting-started.md (Japanese) * New translations license-info.md (Japanese) * New translations parameters.md (Japanese) * New translations license-info.md (Japanese) * New translations updates.md (Japanese) * New translations dsmapping.md (Japanese) * New translations entities.md (Japanese) * New translations glossary.md (Japanese) * New translations classes.md (Japanese) * New translations getting-started.md (Japanese) * New translations parameters.md (Portuguese, Brazilian) * New translations parameters.md (Portuguese, Brazilian) * New translations classes.md (Portuguese, Brazilian) * New translations getting-started.md (Portuguese, Brazilian) * New translations parameters.md (Portuguese, Brazilian) * New translations updates.md (Portuguese, Brazilian) * New translations classes.md (Portuguese, Brazilian) * New translations getting-started.md (Portuguese, Brazilian) * New translations parameters.md (Portuguese, Brazilian) * New translations classes.md (Portuguese, Brazilian) * New translations getting-started.md (Portuguese, Brazilian) * New translations parameters.md (Portuguese, Brazilian) * New translations classes.md (Portuguese, Brazilian) * New translations getting-started.md (Portuguese, Brazilian) --- .../current/Concepts/parameters.md | 22 ++++++---- .../current/Notes/updates.md | 2 +- .../current/ViewPro/classes.md | 16 +++++-- .../current/ViewPro/getting-started.md | 6 +++ .../version-19/Concepts/parameters.md | 8 +++- .../version-20-R10/Concepts/parameters.md | 16 ++++++- .../version-20-R10/ViewPro/classes.md | 16 +++++-- .../version-20-R10/ViewPro/getting-started.md | 6 +++ .../version-20/Concepts/parameters.md | 8 +++- .../version-20/ViewPro/classes.md | 20 +++++---- .../version-20/ViewPro/getting-started.md | 6 +++ .../version-21/Concepts/parameters.md | 16 ++++++- .../version-21/ViewPro/classes.md | 16 +++++-- .../version-21/ViewPro/getting-started.md | 6 +++ .../current/Concepts/parameters.md | 22 ++++++---- .../current/Notes/updates.md | 2 +- .../current/ViewPro/classes.md | 16 +++++-- .../current/ViewPro/getting-started.md | 6 +++ .../WritePro/commands/wp-get-attributes.md | 2 +- .../version-19/Concepts/parameters.md | 8 +++- .../version-20-R10/Concepts/parameters.md | 16 ++++++- .../version-20-R10/ViewPro/classes.md | 16 +++++-- .../version-20-R10/ViewPro/getting-started.md | 6 +++ .../WritePro/commands/wp-get-attributes.md | 2 +- .../version-20/Concepts/parameters.md | 8 +++- .../version-20/ViewPro/classes.md | 20 +++++---- .../version-20/ViewPro/getting-started.md | 6 +++ .../version-21/Concepts/parameters.md | 16 ++++++- .../version-21/ViewPro/classes.md | 16 +++++-- .../version-21/ViewPro/getting-started.md | 6 +++ .../WritePro/commands/wp-get-attributes.md | 2 +- .../current/Concepts/parameters.md | 22 ++++++---- .../current/Notes/updates.md | 42 +++++++++---------- .../current/ORDA/dsMapping.md | 20 ++++----- .../current/ORDA/entities.md | 4 +- .../current/ORDA/glossary.md | 2 +- .../current/ViewPro/classes.md | 16 +++++-- .../current/ViewPro/getting-started.md | 6 +++ .../current/commands/license-info.md | 2 +- .../version-19/Concepts/parameters.md | 8 +++- .../version-20-R10/Concepts/parameters.md | 16 ++++++- .../version-20-R10/ORDA/dsMapping.md | 20 ++++----- .../version-20-R10/ORDA/entities.md | 4 +- .../version-20-R10/ORDA/glossary.md | 2 +- .../version-20-R10/ViewPro/classes.md | 16 +++++-- .../version-20-R10/ViewPro/getting-started.md | 6 +++ .../version-20-R10/commands/license-info.md | 2 +- .../version-20/Concepts/parameters.md | 8 +++- .../version-20/ViewPro/classes.md | 20 +++++---- .../version-20/ViewPro/getting-started.md | 6 +++ .../version-21/Concepts/parameters.md | 16 ++++++- .../version-21/Notes/updates.md | 40 +++++++++--------- .../version-21/ORDA/dsMapping.md | 20 ++++----- .../version-21/ORDA/entities.md | 4 +- .../version-21/ORDA/glossary.md | 2 +- .../version-21/ViewPro/classes.md | 16 +++++-- .../version-21/ViewPro/getting-started.md | 6 +++ .../version-21/commands/license-info.md | 2 +- .../current/Concepts/parameters.md | 22 ++++++---- .../current/Notes/updates.md | 2 +- .../current/ViewPro/classes.md | 16 +++++-- .../current/ViewPro/getting-started.md | 6 +++ .../version-19/Concepts/parameters.md | 8 +++- .../version-20-R10/Concepts/parameters.md | 16 ++++++- .../version-20-R10/ViewPro/classes.md | 16 +++++-- .../version-20-R10/ViewPro/getting-started.md | 6 +++ .../version-20/Concepts/parameters.md | 8 +++- .../version-20/ViewPro/classes.md | 20 +++++---- .../version-20/ViewPro/getting-started.md | 6 +++ .../version-21/Concepts/parameters.md | 16 ++++++- .../version-21/ViewPro/classes.md | 16 +++++-- .../version-21/ViewPro/getting-started.md | 6 +++ 72 files changed, 605 insertions(+), 221 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md index 8f1aa078d11999..d0c3ffa3b0f90e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md @@ -5,7 +5,7 @@ title: Parámetros A menudo encontrará que necesita pasar datos a sus métodos y funciones. Esto se hace fácilmente con parámetros. -## Generalidades +## Paso de parámetros **Los parámetros** (o **argumentos**) son piezas de datos que un método o una función de clase necesita para realizar su tarea. Los términos *parámetros* y *argumentos* se utilizan indistintamente en este manual. Los parámetros también se pasan a los comandos integrados de 4D. En este ejemplo, la cadena "Hello" es un argumento para el comando integrado `ALERT`: @@ -45,19 +45,19 @@ Toda subrutina puede devolver un valor. Sólo se puede declarar un único parám Los valores de entrada y salida son [evaluados](#values-or-references) en el momento de la llamada y copiados en o desde variables locales dentro de la función o método de la clase llamada. Los parámetros variables deben ser [declarados](#declaring-parameters) en el código llamado. -:::info Compatibilidad - -La sintaxis de declaración heredada, donde los parámetros se copian automáticamente en variables locales numeradas secuencialmente $0, $1, etc. y declarado usando directivas de compilador como `C_TEXT($1;$2)`, es **obsoleto** a partir de 4D 20 R7. - -::: - ## Declaración de parámetros -En los métodos llamados o en las funciones de clase, los valores de los parámetros se asignan a las variables locales. Se declararan los parámetros utilizando un **nombre de parámetro** con un **tipo de parámetro**, separados por dos puntos. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - Para funciones de clase, los parámetros se declaran junto con el prototipo de función, por ejemplo, cuando se utilizan las palabras clave `Function` o `Class constructor`. - Para los métodos (métodos proyecto, métodos objeto formulario, métodos base y triggers), los parámetros se declaran utilizando la palabra clave **`#DECLARE`** al principio del código del método. +:::info Compatibilidad + +La sintaxis de declaración heredada, donde los parámetros se copian automáticamente en variables locales numeradas secuencialmente $0, $1, etc. y declarado usando directivas de compilador como `C_TEXT($1;$2)`, es **obsoleto** a partir de 4D 20 R7. + +::: + Ejemplos: ```4d @@ -104,6 +104,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Verificar la contraseña hash... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor devuelto El parámetro de retorno de una función se declara añadiendo una flecha (->) y la definición del parámetro después de la lista de parámetros de entrada. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md index c1947d49e3cb20..6eeebff3e41b72 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -9,7 +9,7 @@ Lea [**Novedades en 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2/), #### Lo más destacado -- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection. +- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). - [**Lista de bugs corregidos**](https://bugs.4d.fr/fixedbugslist?version=21_R2): lista de todos los bugs que se han corregido en 4D 21 R2. #### Cambios de comportamiento diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/classes.md b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/classes.md index 05c1b59c809b33..09aab72cb82cf9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/classes.md @@ -151,13 +151,13 @@ La propiedad `.useFooterDropDownList` [color de fondo](configuring.md#background--foreground) de la tabla. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -La propiedad `.forecolor` es el [color de primer plano](configuring.md#background--foreground) de la tabla. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ La propiedad `.borderrightt` es la La propiedad `.borderBottom` es la línea del borde inferior de la tabla. +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderHorizontal diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md index 97732b237a5018..cb7917af53d61e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md @@ -9,6 +9,12 @@ title: Comencemos Una hoja de cálculo es una aplicación que contiene una cuadrícula de celdas en las que se puede introducir información, ejecutar cálculos o mostrar imágenes. 4D View Pro es alimentado por la [solución de hoja de cálculo SpreadJS](https://developer.mescius.com/spreadjs) integrada en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + La integración de áreas de 4D View Pro en sus formularios le permite importar y exportar documentos de hojas de cálculo utilizando los comandos 4D View Pro. ## Instalación y activación diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md index dc19bbd94f7d55..5d1d394fdd7e25 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Parámetros A menudo encontrará que necesita pasar datos a sus métodos y funciones. Esto se hace fácilmente con parámetros. -## Generalidades +## Paso de parámetros **Los parámetros** (o **argumentos**) son piezas de datos que un método o una función de clase necesita para realizar su tarea. Los términos *parámetros* y *argumentos* se utilizan indistintamente en este manual. Los parámetros también se pasan a los comandos integrados de 4D. En este ejemplo, la cadena "Hello" es un argumento para el comando integrado `ALERT`: @@ -121,6 +121,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Verificar la contraseña hash... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor devuelto El parámetro de retorno de una función se declara añadiendo una flecha (->) y la definición del parámetro después de la lista de parámetros de entrada. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md index 3a78e87c6b82f8..df4ff6da8665ad 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md @@ -5,7 +5,7 @@ title: Parámetros A menudo encontrará que necesita pasar datos a sus métodos y funciones. Esto se hace fácilmente con parámetros. -## Generalidades +## Paso de parámetros **Los parámetros** (o **argumentos**) son piezas de datos que un método o una función de clase necesita para realizar su tarea. Los términos *parámetros* y *argumentos* se utilizan indistintamente en este manual. Los parámetros también se pasan a los comandos integrados de 4D. En este ejemplo, la cadena "Hello" es un argumento para el comando integrado `ALERT`: @@ -53,11 +53,17 @@ La sintaxis de declaración heredada, donde los parámetros se copian automátic ## Declaración de parámetros -En los métodos llamados o en las funciones de clase, los valores de los parámetros se asignan a las variables locales. Se declararan los parámetros utilizando un **nombre de parámetro** con un **tipo de parámetro**, separados por dos puntos. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - Para funciones de clase, los parámetros se declaran junto con el prototipo de función, por ejemplo, cuando se utilizan las palabras clave `Function` o `Class constructor`. - Para los métodos (métodos proyecto, métodos objeto formulario, métodos base y triggers), los parámetros se declaran utilizando la palabra clave **`#DECLARE`** al principio del código del método. +:::info Compatibilidad + +La sintaxis de declaración heredada, donde los parámetros se copian automáticamente en variables locales numeradas secuencialmente $0, $1, etc. y declarado usando directivas de compilador como `C_TEXT($1;$2)`, es **obsoleto** a partir de 4D 20 R7. + +::: + Ejemplos: ```4d @@ -104,6 +110,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Verificar la contraseña hash... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor devuelto El parámetro de retorno de una función se declara añadiendo una flecha (->) y la definición del parámetro después de la lista de parámetros de entrada. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md index 05c1b59c809b33..09aab72cb82cf9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md @@ -151,13 +151,13 @@ La propiedad `.useFooterDropDownList` [color de fondo](configuring.md#background--foreground) de la tabla. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -La propiedad `.forecolor` es el [color de primer plano](configuring.md#background--foreground) de la tabla. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ La propiedad `.borderrightt` es la La propiedad `.borderBottom` es la línea del borde inferior de la tabla. +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderHorizontal diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md index 41a1b586494a9d..5dd8d5535bf700 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md @@ -9,6 +9,12 @@ title: Comencemos Una hoja de cálculo es una aplicación que contiene una cuadrícula de celdas en las que se puede introducir información, ejecutar cálculos o mostrar imágenes. 4D View Pro es alimentado por la [solución de hoja de cálculo SpreadJS](https://developer.mescius.com/spreadjs) integrada en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + La integración de áreas de 4D View Pro en sus formularios le permite importar y exportar documentos de hojas de cálculo utilizando los comandos 4D View Pro. ## Instalación y activación diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md index 4fc390ebfe901b..fbb615743b4ad9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Parámetros A menudo encontrará que necesita pasar datos a sus métodos y funciones. Esto se hace fácilmente con parámetros. -## Generalidades +## Paso de parámetros **Los parámetros** (o **argumentos**) son piezas de datos que un método o una función de clase necesita para realizar su tarea. Los términos *parámetros* y *argumentos* se utilizan indistintamente en este manual. Los parámetros también se pasan a los comandos integrados de 4D. En este ejemplo, la cadena "Hello" es un argumento para el comando integrado `ALERT`: @@ -110,6 +110,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Verificar la contraseña hash... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor devuelto El parámetro de retorno de una función se declara añadiendo una flecha (->) y la definición del parámetro después de la lista de parámetros de entrada. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md index 95d595e292df82..40eadc8c41f98b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md @@ -129,7 +129,7 @@ La propiedad `.tableColumns` es u La propiedad `.theme` define el tema de una tabla. También puede ser un texto (nombre de un tema nativo SpreadJS). -Consulte los[ temas nativos de SpreadJS](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +See the [native SpreadJS themes](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). ### .useFooterDropDownList @@ -151,12 +151,12 @@ La propiedad `.useFooterDropDownList` [color de fondo](configuring.md#background--foreground) de la tabla. -### .forecolor +### .foreColor - -**.forecolor**: Text + +**.foreColor** : Text -La propiedad `.forecolor` es el [color de primer plano](configuring.md#background--foreground) de la tabla. +The `.foreColor` property is the [color de primer plano](configuring.md#background--foreground) de la tabla. @@ -201,6 +201,12 @@ La propiedad `.borderRight` es la l La propiedad `.borderBottom` es el límite inferior de la tabla . +### .borderTop + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . ### .borderHorizontal @@ -260,7 +266,7 @@ La propiedad `.highlightFirstColumn` -La propiedad `.theme` define el tema de una tabla. Si Text: nombre de un [tema nativo SpreadJS](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +La propiedad `.theme` define el tema de una tabla. If Text: name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). @@ -356,7 +362,7 @@ La propiedad `.lastHeaderCellStyle` es la **.name** : Text -La propiedad `.name` es el nombre de un [tema SpreadJS nativo ](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +La propiedad `.name` es el name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). ### .secondColumnStripSize diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md b/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md index b7dd87100221fd..916089052d471b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md @@ -11,6 +11,12 @@ title: Comencemos Una hoja de cálculo es una aplicación que contiene una cuadrícula de celdas en las que se puede introducir información, ejecutar cálculos o mostrar imágenes. 4D View Pro es alimentado por la [solución de hoja de cálculo SpreadJS](https://www.grapecity.com/spreadjs/docs/versions/v14/online/overview.html) integrada en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + La integración de áreas de 4D View Pro en sus formularios le permite importar y exportar documentos de hojas de cálculo utilizando los comandos 4D View Pro. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md index 3a78e87c6b82f8..df4ff6da8665ad 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md @@ -5,7 +5,7 @@ title: Parámetros A menudo encontrará que necesita pasar datos a sus métodos y funciones. Esto se hace fácilmente con parámetros. -## Generalidades +## Paso de parámetros **Los parámetros** (o **argumentos**) son piezas de datos que un método o una función de clase necesita para realizar su tarea. Los términos *parámetros* y *argumentos* se utilizan indistintamente en este manual. Los parámetros también se pasan a los comandos integrados de 4D. En este ejemplo, la cadena "Hello" es un argumento para el comando integrado `ALERT`: @@ -53,11 +53,17 @@ La sintaxis de declaración heredada, donde los parámetros se copian automátic ## Declaración de parámetros -En los métodos llamados o en las funciones de clase, los valores de los parámetros se asignan a las variables locales. Se declararan los parámetros utilizando un **nombre de parámetro** con un **tipo de parámetro**, separados por dos puntos. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - Para funciones de clase, los parámetros se declaran junto con el prototipo de función, por ejemplo, cuando se utilizan las palabras clave `Function` o `Class constructor`. - Para los métodos (métodos proyecto, métodos objeto formulario, métodos base y triggers), los parámetros se declaran utilizando la palabra clave **`#DECLARE`** al principio del código del método. +:::info Compatibilidad + +La sintaxis de declaración heredada, donde los parámetros se copian automáticamente en variables locales numeradas secuencialmente $0, $1, etc. y declarado usando directivas de compilador como `C_TEXT($1;$2)`, es **obsoleto** a partir de 4D 20 R7. + +::: + Ejemplos: ```4d @@ -104,6 +110,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Verificar la contraseña hash... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor devuelto El parámetro de retorno de una función se declara añadiendo una flecha (->) y la definición del parámetro después de la lista de parámetros de entrada. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md index 05c1b59c809b33..09aab72cb82cf9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md @@ -151,13 +151,13 @@ La propiedad `.useFooterDropDownList` [color de fondo](configuring.md#background--foreground) de la tabla. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -La propiedad `.forecolor` es el [color de primer plano](configuring.md#background--foreground) de la tabla. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ La propiedad `.borderrightt` es la La propiedad `.borderBottom` es la línea del borde inferior de la tabla. +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderHorizontal diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md index 97732b237a5018..cb7917af53d61e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md @@ -9,6 +9,12 @@ title: Comencemos Una hoja de cálculo es una aplicación que contiene una cuadrícula de celdas en las que se puede introducir información, ejecutar cálculos o mostrar imágenes. 4D View Pro es alimentado por la [solución de hoja de cálculo SpreadJS](https://developer.mescius.com/spreadjs) integrada en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + La integración de áreas de 4D View Pro en sus formularios le permite importar y exportar documentos de hojas de cálculo utilizando los comandos 4D View Pro. ## Instalación y activación diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/parameters.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/parameters.md index 126ca42643bd67..c65821c9f8a628 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/parameters.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/parameters.md @@ -5,7 +5,7 @@ title: Paramètres Vous aurez souvent besoin de fournir des valeurs à vos méthodes et fonctions. Vous pouvez facilement effectuer cette opération grâce aux paramètres. -## Vue d’ensemble +## Passer des paramètres **Les paramètres** (ou **arguments**) sont des données dont une méthode ou une fonction de classe a besoin pour s’exécuter. Le terme *paramètres* ou *arguments* est utilisé indifféremment dans ce manuel. Des paramètres sont également passés aux commandes intégrées de 4D. Dans l’exemple ci-dessous, la chaîne “Bonjour” est un paramètre de la commande `ALERT` : @@ -45,19 +45,19 @@ Toute sous-routine peut retourner une valeur. Un seul paramètre de sortie peut Les valeurs d'entrée et de sortie sont [évaluées](#values-or-references) au moment de l'appel et copiées dans ou à partir de variables locales au sein de la fonction ou de la méthode appelée. Les variables de paramètres doivent être [déclarées](#declaring-parameters) dans le code appelé. -:::info Compatibilité - -L'ancienne syntaxe de déclaration, où les paramètres sont automatiquement copiés dans des variables locales numérotées séquentiellement $0, $1, etc. et déclarés en utilisant des directives du compilateur telles que `C_TEXT($1;$2)`, est **dépréciée** à partir de 4D 20 R7. - -::: - ## Déclaration des paramètres -Dans les méthodes et fonctions de classe qui sont appelées, les valeurs des paramètres sont assignées aux variables locales. Vous déclarez des paramètres en utilisant un **nom de paramètre** et un **type de paramètre**, séparés par deux points. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - For class functions, parameters are declared along with the function prototype, i.e. when using the `Function` or `Class Constructor` keywords. - Pour les méthodes (méthodes projet, méthodes d'objets de formulaire, méthodes de base de données et triggers), les paramètres sont déclarés à l'aide du mot-clé **`#DECLARE`** au début du code de la méthode. +:::info Compatibilité + +L'ancienne syntaxe de déclaration, où les paramètres sont automatiquement copiés dans des variables locales numérotées séquentiellement $0, $1, etc. et déclarés en utilisant des directives du compilateur telles que `C_TEXT($1;$2)`, est **dépréciée** à partir de 4D 20 R7. + +::: + Exemples : ```4d @@ -104,6 +104,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Vérifier le hash du mot passe... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valeur retournée Vous déclarez le paramètre de retour d'une fonction en ajoutant une flèche (->) et la définition du paramètre après la liste des paramètres d'entrée. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md index ee5699a7e5814b..9f34bdb1d64094 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -9,7 +9,7 @@ Lisez [**Les nouveautés de 4D 21 R2**](https://blog.4d.com/fr-whats-new-in-4d-v #### Points forts -- Le [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) a été amélioré pour offrir une plus grande précision dans la détection des erreurs. +- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). - [**Liste des bugs corrigés**](https://bugs.4d.fr/fixedbugslist?version=21_R2) : liste de tous les bugs qui ont été corrigés dans 4D 21 R2. #### Changements de comportement diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/ViewPro/classes.md b/i18n/fr/docusaurus-plugin-content-docs/current/ViewPro/classes.md index 4b523b27f9e257..6672381ffb3ebd 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/ViewPro/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/ViewPro/classes.md @@ -151,13 +151,13 @@ La propriété `.useFooterDropDownList` [couleur de fond](configuring.md#background--foreground) de la table. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -La propriété `.forecolor` est la [couleur de premier plan](configuring.md#background--foreground) de la table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ La propriété `.borderRight` est la ligne de bordure inférieure de la table. +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderhorizontale diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md b/i18n/fr/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md index 6f2082fb5b6660..e928eaca96ff21 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md @@ -9,6 +9,12 @@ title: Prise en main Une tableur est une application contenant une grille de cellules dans lesquelles vous pouvez saisir des informations, effectuer des calculs ou afficher des images. 4D View Pro est alimenté par la [solution de feuille de calcul SpreadJS](https://developer.mescius.com/spreadjs) intégrée en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + L'intégration de zones 4D View Pro dans vos formulaires vous permet d'importer et d'exporter des documents de type tableur à l'aide des commandes 4D View Pro. ## Installation et activation diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-get-attributes.md b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-get-attributes.md index 3541af254aa8e2..b4303c7732501e 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-get-attributes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/commands/wp-get-attributes.md @@ -28,7 +28,7 @@ In *targetObj*, you can pass: - un élément (en-tête / pied de page / corps / tableau / paragraphe / image ancrée ou en ligne / section / sous-section / feuille de style), ou - un document 4D Write Pro -In *attribName*, pass the name of the attribute you want to retrieve. +Dans *attribName*, passez le nom de l'attribut que vous souhaitez récupérer. You can also pass a collection of attribute names in *attribColl*, in which case the command will return an object containing the attribute names passed in *attribColl* along with their corresponding values. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md b/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md index 59f2e19a40419c..83c1f38dae2e39 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Paramètres Vous aurez souvent besoin de fournir des valeurs à vos méthodes et fonctions. Vous pouvez facilement effectuer cette opération grâce aux paramètres. -## Vue d’ensemble +## Passer des paramètres **Les paramètres** (ou **arguments**) sont des données dont une méthode ou une fonction de classe a besoin pour s’exécuter. Le terme *paramètres* ou *arguments* est utilisé indifféremment dans ce manuel. Des paramètres sont également passés aux commandes intégrées de 4D. Dans l’exemple ci-dessous, la chaîne “Bonjour” est un paramètre de la commande `ALERT` : @@ -118,6 +118,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // vérifier le hash du mot de passe... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valeur retournée Vous déclarez le paramètre de retour d'une fonction en ajoutant une flèche (->) et la définition du paramètre après la liste des paramètres d'entrée. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md index 3e106c0ff30907..9838e143ea8cae 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md @@ -5,7 +5,7 @@ title: Paramètres Vous aurez souvent besoin de fournir des valeurs à vos méthodes et fonctions. Vous pouvez facilement effectuer cette opération grâce aux paramètres. -## Vue d’ensemble +## Passer des paramètres **Les paramètres** (ou **arguments**) sont des données dont une méthode ou une fonction de classe a besoin pour s’exécuter. Le terme *paramètres* ou *arguments* est utilisé indifféremment dans ce manuel. Des paramètres sont également passés aux commandes intégrées de 4D. Dans l’exemple ci-dessous, la chaîne “Bonjour” est un paramètre de la commande `ALERT` : @@ -53,11 +53,17 @@ L'ancienne syntaxe de déclaration, où les paramètres sont automatiquement cop ## Déclaration des paramètres -Dans les méthodes et fonctions de classe qui sont appelées, les valeurs des paramètres sont assignées aux variables locales. Vous déclarez des paramètres en utilisant un **nom de paramètre** et un **type de paramètre**, séparés par deux points. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - For class functions, parameters are declared along with the function prototype, i.e. when using the `Function` or `Class Constructor` keywords. - Pour les méthodes (méthodes projet, méthodes d'objets de formulaire, méthodes de base de données et triggers), les paramètres sont déclarés à l'aide du mot-clé **`#DECLARE`** au début du code de la méthode. +:::info Compatibilité + +L'ancienne syntaxe de déclaration, où les paramètres sont automatiquement copiés dans des variables locales numérotées séquentiellement $0, $1, etc. et déclarés en utilisant des directives du compilateur telles que `C_TEXT($1;$2)`, est **dépréciée** à partir de 4D 20 R7. + +::: + Exemples : ```4d @@ -104,6 +110,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Vérifier le hash du mot passe... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valeur retournée Vous déclarez le paramètre de retour d'une fonction en ajoutant une flèche (->) et la définition du paramètre après la liste des paramètres d'entrée. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md index 4b523b27f9e257..6672381ffb3ebd 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md @@ -151,13 +151,13 @@ La propriété `.useFooterDropDownList` [couleur de fond](configuring.md#background--foreground) de la table. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -La propriété `.forecolor` est la [couleur de premier plan](configuring.md#background--foreground) de la table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ La propriété `.borderRight` est la ligne de bordure inférieure de la table. +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderhorizontale diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md index d24a5ac2255b1c..9336bb3e69a34d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md @@ -9,6 +9,12 @@ title: Prise en main Une tableur est une application contenant une grille de cellules dans lesquelles vous pouvez saisir des informations, effectuer des calculs ou afficher des images. 4D View Pro est alimenté par la [solution de feuille de calcul SpreadJS](https://developer.mescius.com/spreadjs) intégrée en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + L'intégration de zones 4D View Pro dans vos formulaires vous permet d'importer et d'exporter des documents de type tableur à l'aide des commandes 4D View Pro. ## Installation et activation diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-get-attributes.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-get-attributes.md index 6dc3b884b3c359..8699db2a90d1e2 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-get-attributes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-get-attributes.md @@ -28,7 +28,7 @@ In *targetObj*, you can pass: - un élément (en-tête / pied de page / corps / tableau / paragraphe / image ancrée ou en ligne / section / sous-section / feuille de style), ou - un document 4D Write Pro -In *attribName*, pass the name of the attribute you want to retrieve. +Dans *attribName*, passez le nom de l'attribut que vous souhaitez récupérer. You can also pass a collection of attribute names in *attribColl*, in which case the command will return an object containing the attribute names passed in *attribColl* along with their corresponding values. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md index db3d2158e1f74e..7545867404beea 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Paramètres Vous aurez souvent besoin de fournir des valeurs à vos méthodes et fonctions. Vous pouvez facilement effectuer cette opération grâce aux paramètres. -## Vue d’ensemble +## Passer des paramètres **Les paramètres** (ou **arguments**) sont des données dont une méthode ou une fonction de classe a besoin pour s’exécuter. Le terme *paramètres* ou *arguments* est utilisé indifféremment dans ce manuel. Des paramètres sont également passés aux commandes intégrées de 4D. Dans l’exemple ci-dessous, la chaîne “Bonjour” est un paramètre de la commande `ALERT` : @@ -108,6 +108,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // vérifier le hash du mot de passe... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valeur retournée Vous déclarez le paramètre de retour d'une fonction en ajoutant une flèche (->) et la définition du paramètre après la liste des paramètres d'entrée. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md index 805a0cac20f943..2fd48280d1d994 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md @@ -129,7 +129,7 @@ La propriété `.tableColumns` es La propriété `.theme` définit un thème de table. Peut également être un texte (nom d'un thème SpreadJS natif). -Voir les [thèmes natifs SpreadJS](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +See the [native SpreadJS themes](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). ### .useFooterDropDownList @@ -151,12 +151,12 @@ La propriété `.useFooterDropDownList` [couleur d'arrière-plan](configuring.md#background--foreground) du tableau. -### .forecolor +### .foreColor - -**.forecolor** : Text + +**.foreColor** : Text -La propriété `.forecolor` est la [couleur de premier plan](configuring.md#background--foreground) du tableau. +The `.foreColor` property is the [couleur de premier plan](configuring.md#background--foreground) du tableau. @@ -201,6 +201,12 @@ La propriété `.borderRight` est la ligne de bordure inférieure de la table . +### .borderTop + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . ### .borderhorizontale @@ -260,7 +266,7 @@ La propriété `.highlightFirstColumn` -La propriété `.theme` définit un thème de table. Si Text : nom d'un [theme SpreadJS natif](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +La propriété `.theme` définit un thème de table. If Text: name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). @@ -356,7 +362,7 @@ La propriété `.lastHeaderCellStyle` est le **.name** : Text -La propriété `.name` est le nom d'un [thème natif SpreadJS](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +La propriété `.name` est le name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). ### .secondColumnStripSize diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md index 493fe9a6df31be..290e4cce6e344b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md @@ -11,6 +11,12 @@ title: Prise en main Une tableur est une application contenant une grille de cellules dans lesquelles vous pouvez saisir des informations, effectuer des calculs ou afficher des images. 4D View Pro est alimenté par la [solution de tableur SpreadJS](https://www.grapecity.com/spreadjs/docs/versions/v14/online/overview.html) intégrée à 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + L'intégration de zones 4D View Pro dans vos formulaires vous permet d'importer et d'exporter des documents de type tableur à l'aide des commandes 4D View Pro. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md index 3e106c0ff30907..9838e143ea8cae 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md @@ -5,7 +5,7 @@ title: Paramètres Vous aurez souvent besoin de fournir des valeurs à vos méthodes et fonctions. Vous pouvez facilement effectuer cette opération grâce aux paramètres. -## Vue d’ensemble +## Passer des paramètres **Les paramètres** (ou **arguments**) sont des données dont une méthode ou une fonction de classe a besoin pour s’exécuter. Le terme *paramètres* ou *arguments* est utilisé indifféremment dans ce manuel. Des paramètres sont également passés aux commandes intégrées de 4D. Dans l’exemple ci-dessous, la chaîne “Bonjour” est un paramètre de la commande `ALERT` : @@ -53,11 +53,17 @@ L'ancienne syntaxe de déclaration, où les paramètres sont automatiquement cop ## Déclaration des paramètres -Dans les méthodes et fonctions de classe qui sont appelées, les valeurs des paramètres sont assignées aux variables locales. Vous déclarez des paramètres en utilisant un **nom de paramètre** et un **type de paramètre**, séparés par deux points. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - For class functions, parameters are declared along with the function prototype, i.e. when using the `Function` or `Class Constructor` keywords. - Pour les méthodes (méthodes projet, méthodes d'objets de formulaire, méthodes de base de données et triggers), les paramètres sont déclarés à l'aide du mot-clé **`#DECLARE`** au début du code de la méthode. +:::info Compatibilité + +L'ancienne syntaxe de déclaration, où les paramètres sont automatiquement copiés dans des variables locales numérotées séquentiellement $0, $1, etc. et déclarés en utilisant des directives du compilateur telles que `C_TEXT($1;$2)`, est **dépréciée** à partir de 4D 20 R7. + +::: + Exemples : ```4d @@ -104,6 +110,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Vérifier le hash du mot passe... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valeur retournée Vous déclarez le paramètre de retour d'une fonction en ajoutant une flèche (->) et la définition du paramètre après la liste des paramètres d'entrée. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md index 4b523b27f9e257..6672381ffb3ebd 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md @@ -151,13 +151,13 @@ La propriété `.useFooterDropDownList` [couleur de fond](configuring.md#background--foreground) de la table. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -La propriété `.forecolor` est la [couleur de premier plan](configuring.md#background--foreground) de la table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ La propriété `.borderRight` est la ligne de bordure inférieure de la table. +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderhorizontale diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md index 6f2082fb5b6660..e928eaca96ff21 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md @@ -9,6 +9,12 @@ title: Prise en main Une tableur est une application contenant une grille de cellules dans lesquelles vous pouvez saisir des informations, effectuer des calculs ou afficher des images. 4D View Pro est alimenté par la [solution de feuille de calcul SpreadJS](https://developer.mescius.com/spreadjs) intégrée en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + L'intégration de zones 4D View Pro dans vos formulaires vous permet d'importer et d'exporter des documents de type tableur à l'aide des commandes 4D View Pro. ## Installation et activation diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-get-attributes.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-get-attributes.md index 6dc3b884b3c359..8699db2a90d1e2 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-get-attributes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-get-attributes.md @@ -28,7 +28,7 @@ In *targetObj*, you can pass: - un élément (en-tête / pied de page / corps / tableau / paragraphe / image ancrée ou en ligne / section / sous-section / feuille de style), ou - un document 4D Write Pro -In *attribName*, pass the name of the attribute you want to retrieve. +Dans *attribName*, passez le nom de l'attribut que vous souhaitez récupérer. You can also pass a collection of attribute names in *attribColl*, in which case the command will return an object containing the attribute names passed in *attribColl* along with their corresponding values. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/parameters.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/parameters.md index 7d8c30b7a7a56f..9183cd58323986 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/parameters.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/parameters.md @@ -5,7 +5,7 @@ title: 引数 メソッドや関数にデータを渡す必要がしばしば発生します。 これは引数によって容易にできます。 -## 概要 +## 引数の受け渡し **引数** (または **パラメーター**) とは、メソッドや関数が処理に必要とするデータのことです。 *引数* と *パラメーター* は厳密には違うものですが、このマニュアルでは同義語として使用されています。 引数は、ビルトインの 4Dコマンドにも渡されます。 以下の例は、“Hello” という文字列を引数としてビルトインの `ALERT` コマンドへ渡します: @@ -45,19 +45,19 @@ MyLength:=Length("How did I get here?") 入力および出力値は呼び出し時に [評価](#引数の渡し方-値か参照か) され、その値はそれぞれ自動的にサブルーチン (呼び出されたメソッドまたはクラス関数) 内のローカル変数に格納されます。 パラメーターは、呼び出されるコード内で [宣言](#パラメーターの宣言) する必要があります。 -:::info 互換性 - -引数が連番のローカル変数 ($0、$1 など) に自動的にコピーされ、`C_TEXT($1;$2)` のようなコンパイラー指示子を使って宣言される従来のシンタックスは、4D 20 R7 より **非推奨** となりました。 - -::: - ## パラメーターの宣言 -呼び出されたメソッドやクラス関数において、引数の値はローカル変数に代入されます。 引数は **パラメーター名** とその **データ型** をコロン (:) で区切って宣言します。 +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - クラス関数の場合、引数は関数のプロトタイプとともに宣言されます。つまり、`Function` あるいは `Class constructor` キーワードを使用して宣言されます。 - メソッドの場合 (プロジェクトメソッド、フォームオブジェクトメソッド、データベースメソッド、トリガー)、引数はメソッドコード先頭の **`#DECLARE`** キーワードを使って宣言されます。 +:::info 互換性 + +引数が連番のローカル変数 ($0、$1 など) に自動的にコピーされ、`C_TEXT($1;$2)` のようなコンパイラー指示子を使って宣言される従来のシンタックスは、4D 20 R7 より **非推奨** となりました。 + +::: + 例: ```4d @@ -104,6 +104,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // ハッシュパスワードを確認... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### 戻り値 関数の戻り値は、入力パラメーターリストに矢印 (->) を追加し、それに続けて宣言します。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md index 423bc1e6bbafe9..ce361cd5f3dab8 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -9,30 +9,30 @@ title: リリースノート #### ハイライト -- [コードライブチェッカー](../code-editor/write-class-method.md#警告とエラー) はエラー検知の面における正確性が大幅に向上しました。 +- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). - [**修正リスト**](https://bugs.4d.fr/fixedbugslist?version=21_R2): 4D 21 R2 で修正されたバグのリストです ([日本語版はこちら](https://4d-jp.github.io/2023/178/release-note-version-20r2/))。 #### 動作の変更 ## ライブラリの一覧 -| ライブラリ | 現在のバージョン | 更新された 4D バージョン | 説明 | -| --------- | -------------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| BoringSSL | fa47b1d | **21** | QUIC に使用 | -| CEF | 7258 | **21** | Chromium 139 | -| Hunspell | 1.7.2 | 20 | 4D フォームと 4D Write Pro でスペルチェックに使用されます。 | -| ICU | 77.1 | **21** | This upgrade forces an automatic rebuild of alphanumeric, text and object indexes. | -| libldap | 2.6.10 | **21** | | -| libsasl | 2.1.28 | 20 | | -| Liblsquic | 4.2.0 | 20 R10 | QUIC に使用 | -| Libuv | 1.51.0 | **21** | QUIC に使用 | -| libZip | 1.11.4 | **21** | Zip クラス、4D Write Pro、svg および serverNet コンポーネントによって使用。 | -| LZMA | 5.8.1 | **21** | | -| ngtcp2 | 1.16.0 | **21** | QUIC に使用 | -| OpenSSL | 3.5.2 | **21** | | -| PDFWriter | 4.7.0 | **21** | Used for [`WP Export document`](../WritePro/commands/wp-export-document.md) and [`WP Export variable`](../WritePro/commands/wp-export-variable.md) | -| PHP | 8.2.4 | 20 | | -| SpreadJS | 17.1.0 | 20 R7 | 新機能の概要については、[このブログ記事](https://blog.4d.com/ja/4d-view-pro-whats-new-in-4d-20-r7/) を参照ください。 | -| webKit | WKWebView | 19 | | -| Xerces | 3.3.0 | **21** | Used for XML commands | -| Zlib | 1.3.1 | **21** | | +| ライブラリ | 現在のバージョン | 更新された 4D バージョン | 説明 | +| --------- | -------------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| BoringSSL | fa47b1d | **21** | QUIC に使用 | +| CEF | 7258 | **21** | Chromium 139 | +| Hunspell | 1.7.2 | 20 | 4D フォームと 4D Write Pro でスペルチェックに使用されます。 | +| ICU | 77.1 | **21** | このアップグレードにより、英数字とテキスト、オブジェクトのインデックスが自動的に再構築されます。 | +| libldap | 2.6.10 | **21** | | +| libsasl | 2.1.28 | 20 | | +| Liblsquic | 4.2.0 | 20 R10 | QUIC に使用 | +| Libuv | 1.51.0 | **21** | QUIC に使用 | +| libZip | 1.11.4 | **21** | Zip クラス、4D Write Pro、svg および serverNet コンポーネントによって使用。 | +| LZMA | 5.8.1 | **21** | | +| ngtcp2 | 1.16.0 | **21** | QUIC に使用 | +| OpenSSL | 3.5.2 | **21** | | +| PDFWriter | 4.7.0 | **21** | [`WP Export document`](../WritePro/commands/wp-export-document.md) および [`WP Export variable`](../WritePro/commands/wp-export-variable.md) において使用されます | +| PHP | 8.2.4 | 20 | | +| SpreadJS | 17.1.0 | 20 R7 | 新機能の概要については、[このブログ記事](https://blog.4d.com/ja/4d-view-pro-whats-new-in-4d-20-r7/) を参照ください。 | +| webKit | WKWebView | 19 | | +| Xerces | 3.3.0 | **21** | XML コマンドにおいて使用されます | +| Zlib | 1.3.1 | **21** | | diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/dsMapping.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/dsMapping.md index 3bdc9f702a8db5..17c1094ad3af14 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/dsMapping.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/dsMapping.md @@ -3,15 +3,15 @@ id: dsmapping title: データモデルオブジェクト --- -The ORDA technology is based upon an automatic mapping of an underlying [database structure](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.en.html). ORDA は、エンティティやエンティティセレクションオブジェクトを介してデータへのアクセスも提供します。 結果的に ORDA は、データモデルオブジェクト一式の形でデータベース全体を公開します。 +ORDA テクノロジーは、その下地となる[データベースストラクチャー](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.ja.html) の自動マッピングに基づいています。 ORDA は、エンティティやエンティティセレクションオブジェクトを介してデータへのアクセスも提供します。 結果的に ORDA は、データモデルオブジェクト一式の形でデータベース全体を公開します。 ## ストラクチャーマッピング [`ds`](commands/ds.md) および [`Open datastore`](commands/open-datastore.md) コマンドを使ってデータストアを呼び出すと、戻り値の [データストア](#データストア) オブジェクトには、対応する 4D ストラクチャーのテーブルとフィールドへの参照が属性として格納されています: -- Tables are mapped to [dataclasses](#dataclass). -- Fields are mapped to [storage attributes](#storage-and-relation-attributes). -- Relations are mapped to [relation attributes](#storage-and-relation-attributes) - relation names, defined in the [Structure editor](https://doc.4d.com/4Dv20/4D/20.2/Creating-and-modifying-relations.300-6750296.en.html), are used as relation attribute names. +- テーブルは [データクラス](#データクラス) へとマッピングされます。 +- フィールドは [ストレージ属性](#ストレージ属性とリレーション属性) へとマッピングされます。 +- リレーションは [リレーション属性](#ストレージ属性とリレーション属性) へとマッピングされます - [ストラクチャーエディター](https://doc.4d.com/4Dv20/4D/20.2/Creating-and-modifying-relations.300-6750296.ja.html)で定義されたリレーション名は、リレーション属性の名前として使用されます。 ![](../assets/en/ORDA/datastoreMapping.png) @@ -28,7 +28,7 @@ The ORDA technology is based upon an automatic mapping of an underlying [databas > ORDA のデータストアマッピングでは、次のものは考慮されません: > > - テーブルあるいはフィールドの "非表示" オプション -> - the virtual structure defined through [`SET TABLE TITLES`](../commands-legacy/set-table-titles.md) or [`SET FIELD TITLES`](../commands-legacy/set-field-titles.md), +> - [`SET TABLE TITLES`](../commands-legacy/set-table-titles.md) あるいは [`SET FIELD TITLES`](../commands-legacy/set-field-titles.md) を通して定義されたバーチャルストラクチャー > - リレーションの "手動" あるいは "自動" プロパティ ### リモートデータストアの利用 @@ -63,7 +63,7 @@ The ORDA technology is based upon an automatic mapping of an underlying [databas - モデルにはデータストアを構成するすべてのデータクラスが格納され、その詳細な情報も含まれます。 これはその下地にあるデータベース自体からは独立した存在です。 - データとは、そのモデル内で使用・保存される情報を指します。 たとえば、従業員の名前、住所、生年月日などはデータストア内で扱うことができるデータに含まれます。 -A datastore object is handled through functions and properties of the [**DataStore**](../API/DataStoreClass.md) class. +データストア型オブジェクトは、[**データストア**](../API/DataStoreClass.md) クラスの関数とプロパティを介して扱うことができます。 コード内で扱うにあたっては、データストアはオブジェクトであり、公開されているすべての [データクラス](#dataclass) をプロパティとして持ちます。 @@ -94,7 +94,7 @@ $mydatastore:=OB Copy(ds) // null を返します データクラスとは、テーブルに相当するものです。 オブジェクトモデルとして使用され、リレーショナル属性 (データクラス間のリレーションに基づいてビルドされた属性) を含めてすべてのフィールドを属性として参照します。 リレーショナル属性はクエリにおいて通常の属性のように使用することができます。 -A dataclass object is handled through functions and properties of the [**DataClass**](../API/DataClassClass.md) class. +データクラス型オブジェクトは、[**データクラス**](../API/DataClassClass.md) クラスの関数とプロパティを介して扱うことができます。 4D プロジェクト内のすべてのデータクラスは、`ds` データストアのプロパティとして利用可能です。 `Open datastore` コマンドまたは [REST リクエスト](REST/gettingStarted.md) によってアクセスするリモートデータストアの場合、データストアのデータクラスとして公開したい各テーブルについて 4D ストラクチャーのレベルで **RESTリソースとして公開** プロパティを設定する必要があります。 @@ -139,7 +139,7 @@ OB GET PROPERTY NAMES(ds.Employee;$prop) $revenuesAttribute:=ds.Company["revenues"] // 別の書き方 ``` -このコードは、`$nameAttribute` および `$revenuesAttribute` に、`Company` クラスの name および revenues 属性の参照をそれぞれ代入します。 This syntax does NOT return values held inside of the attribute, but instead returns references to the attributes themselves [with their **attribute properties**](../API/DataClassClass.md#attributename). +このコードは、`$nameAttribute` および `$revenuesAttribute` に、`Company` クラスの name および revenues 属性の参照をそれぞれ代入します。 このシンタックスで返されるのは、属性内に保管されている値ではなく、[**属性のプロパティ** を含む](../API/DataClassClass.md#属性名)、属性自身の参照である点に留意してください。 値を管理するためには、[エンティティ](#エンティティ) を使用する必要があります。 テーブル内の適格なフィールドはすべて、親 [データクラス](#データクラス) の属性として利用可能です。 `Open datastore` コマンドまたは [REST リクエスト](REST/gettingStarted.md) によってアクセスするリモートデータストアの場合、データクラスの属性として公開したい各フィールドについて 4D ストラクチャーのレベルで **RESTリソースとして公開** プロパティを設定する必要があります。 @@ -183,7 +183,7 @@ OB GET PROPERTY NAMES(ds.Employee;$prop) エンティティの目的はデータの管理 (作成、更新、削除) です。 エンティティセレクションを用いてエンティティ参照を取得した場合、その参照にはエンティティセレクションについての情報も保持されるため、セレクションを走査することが可能です。 -An entity object is handled through functions and properties of the [**Entity**](../API/EntityClass.md) class. +エンティティ型オブジェクトは、 [**エンティティ**](../API/EntityClass.md) クラスの関数とプロパティを介して扱うことができます。 エンティティオブジェクト自身は、オブジェクトとしてコピーすることはできません: @@ -203,7 +203,7 @@ An entity object is handled through functions and properties of the [**Entity**] エンティティセレクションとは、同じデータクラスに所属する一つ以上のエンティティへの参照を格納しているオブジェクトのことです。 通常、クエリの結果として、あるいはリレーション属性の戻り値として作成されます。 エンティティセレクションは、データクラスから 0個、1個、あるいは X個のエンティティを格納することができます (X はデータクラスに格納されているエンティティの総数です)。 -An entity selection object is handled through functions and properties of the [**EntitySelection**](../API/EntitySelectionClass.md) class. +エンティティセレクション型オブジェクトは [**EntitySelection**](../API/EntitySelectionClass.md) クラスの関数とプロパティを介して扱うことができます。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/entities.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/entities.md index eb60ae72c2ff5e..4d0a801dc366da 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/entities.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/entities.md @@ -120,7 +120,7 @@ $myEntity.save() // エンティティを保存します :::note 注記 -- Database Object fields can be [associated with classes](../Develop/field-properties.md), in which case only objects of the defined class can be assigned to the entity attribute. +- データベースのオブジェクト型フィールドは、[クラスを割り当てる](../Develop/field-properties.md) ことができます。この場合、定義されたクラスのオブジェクトのみをエンティティ属性に割り当てることができます。 - データベースの BLOBフィールド ([スカラーBLOB](Concepts/dt_blob.md)) は、ORDAで扱われるにあたって、BLOBオブジェクト属性 ([`4D.Blob`](Concepts/dt_blob.md)) に自動変換されます。 BLOBオブジェクト属性を保存する際には、(利用可能なメモリによってのみサイズ制限される BLOBオブジェクトとは異なり) BLOBフィールドのサイズが 2GB に制限されることに注意してください。 ::: @@ -469,7 +469,7 @@ Function event restrict() -> $result : cs.*DataClassName*Selection この関数は、データクラスのエンティティセレクションまたはエンティティが要求されるたびに呼び出されます。 フィルターは、エンティティセレクションが作成されたときに一度だけ実行されます。 -フィルターは、データクラスのエンティティセレクションを返さなければなりません。 It can be an entity selection built upon a query, stored in the [`Storage`](../API/SessionClass.md#storage), etc. +フィルターは、データクラスのエンティティセレクションを返さなければなりません。 戻り値のエンティティセレクションには、クエリの結果や、[`Storage`](../API/SessionClass.md#storage) に格納されているものなどが使えます。 :::note diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/glossary.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/glossary.md index 9e69a338056776..ce31a26ca023c4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/glossary.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/glossary.md @@ -89,7 +89,7 @@ ORDA データモデルクラスの関数。 エンティティは、データクラスのインスタンスとも解釈可能なオブジェクトです。 しかしながら、エンティティはリレートされたデータも格納しています。 エンティティの目的はデータの管理 (作成、更新、削除) です。 -For more information, see [entities](entities.md). +詳細な情報については、 [エンティティ](entities.md) を参照して下さい。 ## エンティティセレクション diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ViewPro/classes.md b/i18n/ja/docusaurus-plugin-content-docs/current/ViewPro/classes.md index 1aecdeba006d55..3d679c193ce86d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ViewPro/classes.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ViewPro/classes.md @@ -151,13 +151,13 @@ title: クラス The `.backColor` property is the [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -The `.forecolor` property is the [foreground color](configuring.md#background--foreground) of the table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ The `.font` property is the font name (see `.borderBottom` プロパティは、 表の下の外枠線を定義します 。 +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderHorizontal diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md b/i18n/ja/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md index b68bcfc3a991bc..c229052608bda4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md @@ -10,6 +10,12 @@ title: はじめに スプレッドシートとは、セルのグリッドを格納したアプリケーションのことで、これらのセルに情報を入力したり、計算を実行させたり、あるいはピクチャーを表示したりすることができます。 4D View Proは、4Dに統合された [SpreadJS スプレッドシートソリューション](https://developer.mescius.com/spreadjs) に基づいて動作します。
    (4D View Pro のツールバー等のインターフェースは SpreadJS 提供のものです。インターフェース上で "テーブル" という用語が使用されますが、4D でテーブルといえばデータベーステーブルを指すため、当マニュアルではこれを便宜上 "表組み" あるいは "表" と呼んで区別します) +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + フォームに 4D View Pro エリアを埋め込むことで、4D View Pro コマンドを使ってスプレッドシートドキュメントを読み込んだり書き出したりすることができます。 ## インストールとアクティベーション diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands/license-info.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands/license-info.md index 4614125fb186e7..0f164098da6858 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands/license-info.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands/license-info.md @@ -22,7 +22,7 @@ displayed_sidebar: docs :::note -This command reloads the license files from the disk and updates the associated rights if they have been modified. +このコマンドはライセンスファイルをディスクからリロードし、それらが変更されていた場合には、関連する権限を更新します。 ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md b/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md index 3a390de71d2c2d..8a5ead63b78a3f 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md @@ -6,7 +6,7 @@ title: 引数 メソッドや関数にデータを渡す必要がしばしば発生します。 これは引数によって容易にできます。 -## 概要 +## 引数の受け渡し **引数** (または **パラメーター**) とは、メソッドや関数が処理に必要とするデータのことです。 *引数* と *パラメーター* は厳密には違うものですが、このマニュアルでは同義語として使用されています。 引数は、ビルトインの 4Dコマンドにも渡されます。 以下の例は、“Hello” という文字列を引数としてビルトインの `ALERT` コマンドへ渡します: @@ -118,6 +118,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // ハッシュパスワードを確認... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### 戻り値 関数の戻り値は、入力パラメーターリストに矢印 (->) を追加し、それに続けて宣言します。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md index a9acfddec12d2b..8572a4e57d86cb 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md @@ -5,7 +5,7 @@ title: 引数 メソッドや関数にデータを渡す必要がしばしば発生します。 これは引数によって容易にできます。 -## 概要 +## 引数の受け渡し **引数** (または **パラメーター**) とは、メソッドや関数が処理に必要とするデータのことです。 *引数* と *パラメーター* は厳密には違うものですが、このマニュアルでは同義語として使用されています。 引数は、ビルトインの 4Dコマンドにも渡されます。 以下の例は、“Hello” という文字列を引数としてビルトインの `ALERT` コマンドへ渡します: @@ -53,11 +53,17 @@ MyLength:=Length("How did I get here?") ## パラメーターの宣言 -呼び出されたメソッドやクラス関数において、引数の値はローカル変数に代入されます。 引数は **パラメーター名** とその **データ型** をコロン (:) で区切って宣言します。 +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - クラス関数の場合、引数は関数のプロトタイプとともに宣言されます。つまり、`Function` あるいは `Class constructor` キーワードを使用して宣言されます。 - メソッドの場合 (プロジェクトメソッド、フォームオブジェクトメソッド、データベースメソッド、トリガー)、引数はメソッドコード先頭の **`#DECLARE`** キーワードを使って宣言されます。 +:::info 互換性 + +引数が連番のローカル変数 ($0、$1 など) に自動的にコピーされ、`C_TEXT($1;$2)` のようなコンパイラー指示子を使って宣言される従来のシンタックスは、4D 20 R7 より **非推奨** となりました。 + +::: + 例: ```4d @@ -104,6 +110,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // ハッシュパスワードを確認... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### 戻り値 関数の戻り値は、入力パラメーターリストに矢印 (->) を追加し、それに続けて宣言します。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/dsMapping.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/dsMapping.md index 3bdc9f702a8db5..17c1094ad3af14 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/dsMapping.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/dsMapping.md @@ -3,15 +3,15 @@ id: dsmapping title: データモデルオブジェクト --- -The ORDA technology is based upon an automatic mapping of an underlying [database structure](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.en.html). ORDA は、エンティティやエンティティセレクションオブジェクトを介してデータへのアクセスも提供します。 結果的に ORDA は、データモデルオブジェクト一式の形でデータベース全体を公開します。 +ORDA テクノロジーは、その下地となる[データベースストラクチャー](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.ja.html) の自動マッピングに基づいています。 ORDA は、エンティティやエンティティセレクションオブジェクトを介してデータへのアクセスも提供します。 結果的に ORDA は、データモデルオブジェクト一式の形でデータベース全体を公開します。 ## ストラクチャーマッピング [`ds`](commands/ds.md) および [`Open datastore`](commands/open-datastore.md) コマンドを使ってデータストアを呼び出すと、戻り値の [データストア](#データストア) オブジェクトには、対応する 4D ストラクチャーのテーブルとフィールドへの参照が属性として格納されています: -- Tables are mapped to [dataclasses](#dataclass). -- Fields are mapped to [storage attributes](#storage-and-relation-attributes). -- Relations are mapped to [relation attributes](#storage-and-relation-attributes) - relation names, defined in the [Structure editor](https://doc.4d.com/4Dv20/4D/20.2/Creating-and-modifying-relations.300-6750296.en.html), are used as relation attribute names. +- テーブルは [データクラス](#データクラス) へとマッピングされます。 +- フィールドは [ストレージ属性](#ストレージ属性とリレーション属性) へとマッピングされます。 +- リレーションは [リレーション属性](#ストレージ属性とリレーション属性) へとマッピングされます - [ストラクチャーエディター](https://doc.4d.com/4Dv20/4D/20.2/Creating-and-modifying-relations.300-6750296.ja.html)で定義されたリレーション名は、リレーション属性の名前として使用されます。 ![](../assets/en/ORDA/datastoreMapping.png) @@ -28,7 +28,7 @@ The ORDA technology is based upon an automatic mapping of an underlying [databas > ORDA のデータストアマッピングでは、次のものは考慮されません: > > - テーブルあるいはフィールドの "非表示" オプション -> - the virtual structure defined through [`SET TABLE TITLES`](../commands-legacy/set-table-titles.md) or [`SET FIELD TITLES`](../commands-legacy/set-field-titles.md), +> - [`SET TABLE TITLES`](../commands-legacy/set-table-titles.md) あるいは [`SET FIELD TITLES`](../commands-legacy/set-field-titles.md) を通して定義されたバーチャルストラクチャー > - リレーションの "手動" あるいは "自動" プロパティ ### リモートデータストアの利用 @@ -63,7 +63,7 @@ The ORDA technology is based upon an automatic mapping of an underlying [databas - モデルにはデータストアを構成するすべてのデータクラスが格納され、その詳細な情報も含まれます。 これはその下地にあるデータベース自体からは独立した存在です。 - データとは、そのモデル内で使用・保存される情報を指します。 たとえば、従業員の名前、住所、生年月日などはデータストア内で扱うことができるデータに含まれます。 -A datastore object is handled through functions and properties of the [**DataStore**](../API/DataStoreClass.md) class. +データストア型オブジェクトは、[**データストア**](../API/DataStoreClass.md) クラスの関数とプロパティを介して扱うことができます。 コード内で扱うにあたっては、データストアはオブジェクトであり、公開されているすべての [データクラス](#dataclass) をプロパティとして持ちます。 @@ -94,7 +94,7 @@ $mydatastore:=OB Copy(ds) // null を返します データクラスとは、テーブルに相当するものです。 オブジェクトモデルとして使用され、リレーショナル属性 (データクラス間のリレーションに基づいてビルドされた属性) を含めてすべてのフィールドを属性として参照します。 リレーショナル属性はクエリにおいて通常の属性のように使用することができます。 -A dataclass object is handled through functions and properties of the [**DataClass**](../API/DataClassClass.md) class. +データクラス型オブジェクトは、[**データクラス**](../API/DataClassClass.md) クラスの関数とプロパティを介して扱うことができます。 4D プロジェクト内のすべてのデータクラスは、`ds` データストアのプロパティとして利用可能です。 `Open datastore` コマンドまたは [REST リクエスト](REST/gettingStarted.md) によってアクセスするリモートデータストアの場合、データストアのデータクラスとして公開したい各テーブルについて 4D ストラクチャーのレベルで **RESTリソースとして公開** プロパティを設定する必要があります。 @@ -139,7 +139,7 @@ OB GET PROPERTY NAMES(ds.Employee;$prop) $revenuesAttribute:=ds.Company["revenues"] // 別の書き方 ``` -このコードは、`$nameAttribute` および `$revenuesAttribute` に、`Company` クラスの name および revenues 属性の参照をそれぞれ代入します。 This syntax does NOT return values held inside of the attribute, but instead returns references to the attributes themselves [with their **attribute properties**](../API/DataClassClass.md#attributename). +このコードは、`$nameAttribute` および `$revenuesAttribute` に、`Company` クラスの name および revenues 属性の参照をそれぞれ代入します。 このシンタックスで返されるのは、属性内に保管されている値ではなく、[**属性のプロパティ** を含む](../API/DataClassClass.md#属性名)、属性自身の参照である点に留意してください。 値を管理するためには、[エンティティ](#エンティティ) を使用する必要があります。 テーブル内の適格なフィールドはすべて、親 [データクラス](#データクラス) の属性として利用可能です。 `Open datastore` コマンドまたは [REST リクエスト](REST/gettingStarted.md) によってアクセスするリモートデータストアの場合、データクラスの属性として公開したい各フィールドについて 4D ストラクチャーのレベルで **RESTリソースとして公開** プロパティを設定する必要があります。 @@ -183,7 +183,7 @@ OB GET PROPERTY NAMES(ds.Employee;$prop) エンティティの目的はデータの管理 (作成、更新、削除) です。 エンティティセレクションを用いてエンティティ参照を取得した場合、その参照にはエンティティセレクションについての情報も保持されるため、セレクションを走査することが可能です。 -An entity object is handled through functions and properties of the [**Entity**](../API/EntityClass.md) class. +エンティティ型オブジェクトは、 [**エンティティ**](../API/EntityClass.md) クラスの関数とプロパティを介して扱うことができます。 エンティティオブジェクト自身は、オブジェクトとしてコピーすることはできません: @@ -203,7 +203,7 @@ An entity object is handled through functions and properties of the [**Entity**] エンティティセレクションとは、同じデータクラスに所属する一つ以上のエンティティへの参照を格納しているオブジェクトのことです。 通常、クエリの結果として、あるいはリレーション属性の戻り値として作成されます。 エンティティセレクションは、データクラスから 0個、1個、あるいは X個のエンティティを格納することができます (X はデータクラスに格納されているエンティティの総数です)。 -An entity selection object is handled through functions and properties of the [**EntitySelection**](../API/EntitySelectionClass.md) class. +エンティティセレクション型オブジェクトは [**EntitySelection**](../API/EntitySelectionClass.md) クラスの関数とプロパティを介して扱うことができます。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md index eb60ae72c2ff5e..4d0a801dc366da 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/entities.md @@ -120,7 +120,7 @@ $myEntity.save() // エンティティを保存します :::note 注記 -- Database Object fields can be [associated with classes](../Develop/field-properties.md), in which case only objects of the defined class can be assigned to the entity attribute. +- データベースのオブジェクト型フィールドは、[クラスを割り当てる](../Develop/field-properties.md) ことができます。この場合、定義されたクラスのオブジェクトのみをエンティティ属性に割り当てることができます。 - データベースの BLOBフィールド ([スカラーBLOB](Concepts/dt_blob.md)) は、ORDAで扱われるにあたって、BLOBオブジェクト属性 ([`4D.Blob`](Concepts/dt_blob.md)) に自動変換されます。 BLOBオブジェクト属性を保存する際には、(利用可能なメモリによってのみサイズ制限される BLOBオブジェクトとは異なり) BLOBフィールドのサイズが 2GB に制限されることに注意してください。 ::: @@ -469,7 +469,7 @@ Function event restrict() -> $result : cs.*DataClassName*Selection この関数は、データクラスのエンティティセレクションまたはエンティティが要求されるたびに呼び出されます。 フィルターは、エンティティセレクションが作成されたときに一度だけ実行されます。 -フィルターは、データクラスのエンティティセレクションを返さなければなりません。 It can be an entity selection built upon a query, stored in the [`Storage`](../API/SessionClass.md#storage), etc. +フィルターは、データクラスのエンティティセレクションを返さなければなりません。 戻り値のエンティティセレクションには、クエリの結果や、[`Storage`](../API/SessionClass.md#storage) に格納されているものなどが使えます。 :::note diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md index 9e69a338056776..ce31a26ca023c4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md @@ -89,7 +89,7 @@ ORDA データモデルクラスの関数。 エンティティは、データクラスのインスタンスとも解釈可能なオブジェクトです。 しかしながら、エンティティはリレートされたデータも格納しています。 エンティティの目的はデータの管理 (作成、更新、削除) です。 -For more information, see [entities](entities.md). +詳細な情報については、 [エンティティ](entities.md) を参照して下さい。 ## エンティティセレクション diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md index 1aecdeba006d55..3d679c193ce86d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md @@ -151,13 +151,13 @@ title: クラス The `.backColor` property is the [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -The `.forecolor` property is the [foreground color](configuring.md#background--foreground) of the table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ The `.font` property is the font name (see `.borderBottom` プロパティは、 表の下の外枠線を定義します 。 +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderHorizontal diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md index d7df59f12047f0..6e08d96648ff1c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md @@ -10,6 +10,12 @@ title: はじめに スプレッドシートとは、セルのグリッドを格納したアプリケーションのことで、これらのセルに情報を入力したり、計算を実行させたり、あるいはピクチャーを表示したりすることができます。 4D View Proは、4Dに統合された [SpreadJS スプレッドシートソリューション](https://developer.mescius.com/spreadjs) に基づいて動作します。
    (4D View Pro のツールバー等のインターフェースは SpreadJS 提供のものです。インターフェース上で "テーブル" という用語が使用されますが、4D でテーブルといえばデータベーステーブルを指すため、当マニュアルではこれを便宜上 "表組み" あるいは "表" と呼んで区別します) +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + フォームに 4D View Pro エリアを埋め込むことで、4D View Pro コマンドを使ってスプレッドシートドキュメントを読み込んだり書き出したりすることができます。 ## インストールとアクティベーション diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md index dcb332009dd594..d97f6136e3f2aa 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md @@ -22,7 +22,7 @@ displayed_sidebar: docs :::note -This command reloads the license files from the disk and updates the associated rights if they have been modified. +このコマンドはライセンスファイルをディスクからリロードし、それらが変更されていた場合には、関連する権限を更新します。 ::: The returned object contains the following properties: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md index 81c51bfa8fbed9..d6b8609dd1cd3e 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md @@ -6,7 +6,7 @@ title: 引数 メソッドや関数にデータを渡す必要がしばしば発生します。 これは引数によって容易にできます。 -## 概要 +## 引数の受け渡し **引数** (または **パラメーター**) とは、メソッドや関数が処理に必要とするデータのことです。 *引数* と *パラメーター* は厳密には違うものですが、このマニュアルでは同義語として使用されています。 引数は、ビルトインの 4Dコマンドにも渡されます。 以下の例は、“Hello” という文字列を引数としてビルトインの `ALERT` コマンドへ渡します: @@ -108,6 +108,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // ハッシュパスワードを確認... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### 戻り値 関数の戻り値は、入力パラメーターリストに矢印 (->) を追加し、それに続けて宣言します。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md index 2e745bd99bd02f..4ef05748d3500b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md @@ -129,7 +129,7 @@ title: クラス `.theme` プロパティは、 表のテーマを定義します (SpreadJS のネイティブテーマ名のテキスト値も可)。 -[ネイティブSpreadJSテーマ](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes) を参照ください。 +See the [native SpreadJS themes](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). ### .useFooterDropDownList @@ -151,12 +151,12 @@ title: クラス `.backColor` プロパティは、 表の[背景色](configuring.md#background--foreground)を定義します。。 -### .forecolor +### .foreColor - -**.forecolor** : Text + +**.foreColor** : Text -`.forecolor` プロパティは、 表の[前景色](configuring.md#background--foreground)を定義します。。 +The `.foreColor` property is the 表の[前景色](configuring.md#background--foreground)を定義します。。 @@ -201,6 +201,12 @@ title: クラス `.borderBottom` プロパティは、 表の下の外枠線を定義します 。 +### .borderTop + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table 。 ### .borderHorizontal @@ -260,7 +266,7 @@ title: クラス **.theme** : [cs.ViewPro.TableThemeOptions](#tablethemeoptions)
    **.theme** : Text -`.theme` プロパティは、 表のテーマを定義します。 テキスト値の場合は、[ネイティブSpreadJSテーマ](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes) の名前を使用します。 +`.theme` プロパティは、 表のテーマを定義します。 If Text: name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). @@ -356,7 +362,7 @@ title: クラス **.name** : Text -`.name` プロパティは、 [ネイティブSpreadJSテーマの名前](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes) を指定します。 +`.name` プロパティは、 name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes)。 ### .secondColumnStripSize diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md index d8e68f672b1d69..a05c73b8cdc45f 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md @@ -11,6 +11,12 @@ title: はじめに スプレッドシートとは、セルのグリッドを格納したアプリケーションのことで、これらのセルに情報を入力したり、計算を実行させたり、あるいはピクチャーを表示したりすることができます。 4D View Proは、4Dに統合された [SpreadJS スプレッドシートソリューション](https://www.grapecity.com/spreadjs/docs/versions/v14/online/overview.html) に基づいて動作します。
    (4D View Pro のツールバー等のインターフェースは SpreadJS 提供のものです。インターフェース上で "テーブル" という用語が使用されますが、4D でテーブルといえばデータベーステーブルを指すため、当マニュアルではこれを便宜上 "表組み" あるいは "表" と呼んで区別します) +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + フォームに 4D View Pro エリアを埋め込むことで、4D View Pro コマンドを使ってスプレッドシートドキュメントを読み込んだり書き出したりすることができます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md index a9acfddec12d2b..8572a4e57d86cb 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md @@ -5,7 +5,7 @@ title: 引数 メソッドや関数にデータを渡す必要がしばしば発生します。 これは引数によって容易にできます。 -## 概要 +## 引数の受け渡し **引数** (または **パラメーター**) とは、メソッドや関数が処理に必要とするデータのことです。 *引数* と *パラメーター* は厳密には違うものですが、このマニュアルでは同義語として使用されています。 引数は、ビルトインの 4Dコマンドにも渡されます。 以下の例は、“Hello” という文字列を引数としてビルトインの `ALERT` コマンドへ渡します: @@ -53,11 +53,17 @@ MyLength:=Length("How did I get here?") ## パラメーターの宣言 -呼び出されたメソッドやクラス関数において、引数の値はローカル変数に代入されます。 引数は **パラメーター名** とその **データ型** をコロン (:) で区切って宣言します。 +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - クラス関数の場合、引数は関数のプロトタイプとともに宣言されます。つまり、`Function` あるいは `Class constructor` キーワードを使用して宣言されます。 - メソッドの場合 (プロジェクトメソッド、フォームオブジェクトメソッド、データベースメソッド、トリガー)、引数はメソッドコード先頭の **`#DECLARE`** キーワードを使って宣言されます。 +:::info 互換性 + +引数が連番のローカル変数 ($0、$1 など) に自動的にコピーされ、`C_TEXT($1;$2)` のようなコンパイラー指示子を使って宣言される従来のシンタックスは、4D 20 R7 より **非推奨** となりました。 + +::: + 例: ```4d @@ -104,6 +110,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // ハッシュパスワードを確認... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### 戻り値 関数の戻り値は、入力パラメーターリストに矢印 (->) を追加し、それに続けて宣言します。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md index 870bffddeb4e47..dab2be14dac5fd 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -291,23 +291,23 @@ title: リリースノート ## ライブラリの一覧 (4D 21 LTS) -| ライブラリ | 現在のバージョン | 更新された 4D バージョン | 説明 | -| --------- | -------------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| BoringSSL | fa47b1d | **21** | QUIC に使用 | -| CEF | 7258 | **21** | Chromium 139 | -| Hunspell | 1.7.2 | 20 | 4D フォームと 4D Write Pro でスペルチェックに使用されます。 | -| ICU | 77.1 | **21** | This upgrade forces an automatic rebuild of alphanumeric, text and object indexes. | -| libldap | 2.6.10 | **21** | | -| libsasl | 2.1.28 | 20 | | -| Liblsquic | 4.2.0 | 20 R10 | QUIC に使用 | -| Libuv | 1.51.0 | **21** | QUIC に使用 | -| libZip | 1.11.4 | **21** | Zip クラス、4D Write Pro、svg および serverNet コンポーネントによって使用。 | -| LZMA | 5.8.1 | **21** | | -| ngtcp2 | 1.16.0 | **21** | QUIC に使用 | -| OpenSSL | 3.5.2 | **21** | | -| PDFWriter | 4.7.0 | **21** | Used for [`WP Export document`](../WritePro/commands/wp-export-document.md) and [`WP Export variable`](../WritePro/commands/wp-export-variable.md) | -| PHP | 8.2.4 | 20 | | -| SpreadJS | 17.1.0 | 20 R7 | 新機能の概要については、[このブログ記事](https://blog.4d.com/ja/4d-view-pro-whats-new-in-4d-20-r7/) を参照ください。 | -| webKit | WKWebView | 19 | | -| Xerces | 3.3.0 | **21** | Used for XML commands | -| Zlib | 1.3.1 | **21** | | +| ライブラリ | 現在のバージョン | 更新された 4D バージョン | 説明 | +| --------- | -------------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| BoringSSL | fa47b1d | **21** | QUIC に使用 | +| CEF | 7258 | **21** | Chromium 139 | +| Hunspell | 1.7.2 | 20 | 4D フォームと 4D Write Pro でスペルチェックに使用されます。 | +| ICU | 77.1 | **21** | このアップグレードにより、英数字とテキスト、オブジェクトのインデックスが自動的に再構築されます。 | +| libldap | 2.6.10 | **21** | | +| libsasl | 2.1.28 | 20 | | +| Liblsquic | 4.2.0 | 20 R10 | QUIC に使用 | +| Libuv | 1.51.0 | **21** | QUIC に使用 | +| libZip | 1.11.4 | **21** | Zip クラス、4D Write Pro、svg および serverNet コンポーネントによって使用。 | +| LZMA | 5.8.1 | **21** | | +| ngtcp2 | 1.16.0 | **21** | QUIC に使用 | +| OpenSSL | 3.5.2 | **21** | | +| PDFWriter | 4.7.0 | **21** | [`WP Export document`](../WritePro/commands/wp-export-document.md) および [`WP Export variable`](../WritePro/commands/wp-export-variable.md) において使用されます | +| PHP | 8.2.4 | 20 | | +| SpreadJS | 17.1.0 | 20 R7 | 新機能の概要については、[このブログ記事](https://blog.4d.com/ja/4d-view-pro-whats-new-in-4d-20-r7/) を参照ください。 | +| webKit | WKWebView | 19 | | +| Xerces | 3.3.0 | **21** | XML コマンドにおいて使用されます | +| Zlib | 1.3.1 | **21** | | diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/dsMapping.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/dsMapping.md index 3bdc9f702a8db5..17c1094ad3af14 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/dsMapping.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/dsMapping.md @@ -3,15 +3,15 @@ id: dsmapping title: データモデルオブジェクト --- -The ORDA technology is based upon an automatic mapping of an underlying [database structure](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.en.html). ORDA は、エンティティやエンティティセレクションオブジェクトを介してデータへのアクセスも提供します。 結果的に ORDA は、データモデルオブジェクト一式の形でデータベース全体を公開します。 +ORDA テクノロジーは、その下地となる[データベースストラクチャー](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.ja.html) の自動マッピングに基づいています。 ORDA は、エンティティやエンティティセレクションオブジェクトを介してデータへのアクセスも提供します。 結果的に ORDA は、データモデルオブジェクト一式の形でデータベース全体を公開します。 ## ストラクチャーマッピング [`ds`](commands/ds.md) および [`Open datastore`](commands/open-datastore.md) コマンドを使ってデータストアを呼び出すと、戻り値の [データストア](#データストア) オブジェクトには、対応する 4D ストラクチャーのテーブルとフィールドへの参照が属性として格納されています: -- Tables are mapped to [dataclasses](#dataclass). -- Fields are mapped to [storage attributes](#storage-and-relation-attributes). -- Relations are mapped to [relation attributes](#storage-and-relation-attributes) - relation names, defined in the [Structure editor](https://doc.4d.com/4Dv20/4D/20.2/Creating-and-modifying-relations.300-6750296.en.html), are used as relation attribute names. +- テーブルは [データクラス](#データクラス) へとマッピングされます。 +- フィールドは [ストレージ属性](#ストレージ属性とリレーション属性) へとマッピングされます。 +- リレーションは [リレーション属性](#ストレージ属性とリレーション属性) へとマッピングされます - [ストラクチャーエディター](https://doc.4d.com/4Dv20/4D/20.2/Creating-and-modifying-relations.300-6750296.ja.html)で定義されたリレーション名は、リレーション属性の名前として使用されます。 ![](../assets/en/ORDA/datastoreMapping.png) @@ -28,7 +28,7 @@ The ORDA technology is based upon an automatic mapping of an underlying [databas > ORDA のデータストアマッピングでは、次のものは考慮されません: > > - テーブルあるいはフィールドの "非表示" オプション -> - the virtual structure defined through [`SET TABLE TITLES`](../commands-legacy/set-table-titles.md) or [`SET FIELD TITLES`](../commands-legacy/set-field-titles.md), +> - [`SET TABLE TITLES`](../commands-legacy/set-table-titles.md) あるいは [`SET FIELD TITLES`](../commands-legacy/set-field-titles.md) を通して定義されたバーチャルストラクチャー > - リレーションの "手動" あるいは "自動" プロパティ ### リモートデータストアの利用 @@ -63,7 +63,7 @@ The ORDA technology is based upon an automatic mapping of an underlying [databas - モデルにはデータストアを構成するすべてのデータクラスが格納され、その詳細な情報も含まれます。 これはその下地にあるデータベース自体からは独立した存在です。 - データとは、そのモデル内で使用・保存される情報を指します。 たとえば、従業員の名前、住所、生年月日などはデータストア内で扱うことができるデータに含まれます。 -A datastore object is handled through functions and properties of the [**DataStore**](../API/DataStoreClass.md) class. +データストア型オブジェクトは、[**データストア**](../API/DataStoreClass.md) クラスの関数とプロパティを介して扱うことができます。 コード内で扱うにあたっては、データストアはオブジェクトであり、公開されているすべての [データクラス](#dataclass) をプロパティとして持ちます。 @@ -94,7 +94,7 @@ $mydatastore:=OB Copy(ds) // null を返します データクラスとは、テーブルに相当するものです。 オブジェクトモデルとして使用され、リレーショナル属性 (データクラス間のリレーションに基づいてビルドされた属性) を含めてすべてのフィールドを属性として参照します。 リレーショナル属性はクエリにおいて通常の属性のように使用することができます。 -A dataclass object is handled through functions and properties of the [**DataClass**](../API/DataClassClass.md) class. +データクラス型オブジェクトは、[**データクラス**](../API/DataClassClass.md) クラスの関数とプロパティを介して扱うことができます。 4D プロジェクト内のすべてのデータクラスは、`ds` データストアのプロパティとして利用可能です。 `Open datastore` コマンドまたは [REST リクエスト](REST/gettingStarted.md) によってアクセスするリモートデータストアの場合、データストアのデータクラスとして公開したい各テーブルについて 4D ストラクチャーのレベルで **RESTリソースとして公開** プロパティを設定する必要があります。 @@ -139,7 +139,7 @@ OB GET PROPERTY NAMES(ds.Employee;$prop) $revenuesAttribute:=ds.Company["revenues"] // 別の書き方 ``` -このコードは、`$nameAttribute` および `$revenuesAttribute` に、`Company` クラスの name および revenues 属性の参照をそれぞれ代入します。 This syntax does NOT return values held inside of the attribute, but instead returns references to the attributes themselves [with their **attribute properties**](../API/DataClassClass.md#attributename). +このコードは、`$nameAttribute` および `$revenuesAttribute` に、`Company` クラスの name および revenues 属性の参照をそれぞれ代入します。 このシンタックスで返されるのは、属性内に保管されている値ではなく、[**属性のプロパティ** を含む](../API/DataClassClass.md#属性名)、属性自身の参照である点に留意してください。 値を管理するためには、[エンティティ](#エンティティ) を使用する必要があります。 テーブル内の適格なフィールドはすべて、親 [データクラス](#データクラス) の属性として利用可能です。 `Open datastore` コマンドまたは [REST リクエスト](REST/gettingStarted.md) によってアクセスするリモートデータストアの場合、データクラスの属性として公開したい各フィールドについて 4D ストラクチャーのレベルで **RESTリソースとして公開** プロパティを設定する必要があります。 @@ -183,7 +183,7 @@ OB GET PROPERTY NAMES(ds.Employee;$prop) エンティティの目的はデータの管理 (作成、更新、削除) です。 エンティティセレクションを用いてエンティティ参照を取得した場合、その参照にはエンティティセレクションについての情報も保持されるため、セレクションを走査することが可能です。 -An entity object is handled through functions and properties of the [**Entity**](../API/EntityClass.md) class. +エンティティ型オブジェクトは、 [**エンティティ**](../API/EntityClass.md) クラスの関数とプロパティを介して扱うことができます。 エンティティオブジェクト自身は、オブジェクトとしてコピーすることはできません: @@ -203,7 +203,7 @@ An entity object is handled through functions and properties of the [**Entity**] エンティティセレクションとは、同じデータクラスに所属する一つ以上のエンティティへの参照を格納しているオブジェクトのことです。 通常、クエリの結果として、あるいはリレーション属性の戻り値として作成されます。 エンティティセレクションは、データクラスから 0個、1個、あるいは X個のエンティティを格納することができます (X はデータクラスに格納されているエンティティの総数です)。 -An entity selection object is handled through functions and properties of the [**EntitySelection**](../API/EntitySelectionClass.md) class. +エンティティセレクション型オブジェクトは [**EntitySelection**](../API/EntitySelectionClass.md) クラスの関数とプロパティを介して扱うことができます。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/entities.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/entities.md index eb60ae72c2ff5e..4d0a801dc366da 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/entities.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/entities.md @@ -120,7 +120,7 @@ $myEntity.save() // エンティティを保存します :::note 注記 -- Database Object fields can be [associated with classes](../Develop/field-properties.md), in which case only objects of the defined class can be assigned to the entity attribute. +- データベースのオブジェクト型フィールドは、[クラスを割り当てる](../Develop/field-properties.md) ことができます。この場合、定義されたクラスのオブジェクトのみをエンティティ属性に割り当てることができます。 - データベースの BLOBフィールド ([スカラーBLOB](Concepts/dt_blob.md)) は、ORDAで扱われるにあたって、BLOBオブジェクト属性 ([`4D.Blob`](Concepts/dt_blob.md)) に自動変換されます。 BLOBオブジェクト属性を保存する際には、(利用可能なメモリによってのみサイズ制限される BLOBオブジェクトとは異なり) BLOBフィールドのサイズが 2GB に制限されることに注意してください。 ::: @@ -469,7 +469,7 @@ Function event restrict() -> $result : cs.*DataClassName*Selection この関数は、データクラスのエンティティセレクションまたはエンティティが要求されるたびに呼び出されます。 フィルターは、エンティティセレクションが作成されたときに一度だけ実行されます。 -フィルターは、データクラスのエンティティセレクションを返さなければなりません。 It can be an entity selection built upon a query, stored in the [`Storage`](../API/SessionClass.md#storage), etc. +フィルターは、データクラスのエンティティセレクションを返さなければなりません。 戻り値のエンティティセレクションには、クエリの結果や、[`Storage`](../API/SessionClass.md#storage) に格納されているものなどが使えます。 :::note diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md index 9e69a338056776..ce31a26ca023c4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md @@ -89,7 +89,7 @@ ORDA データモデルクラスの関数。 エンティティは、データクラスのインスタンスとも解釈可能なオブジェクトです。 しかしながら、エンティティはリレートされたデータも格納しています。 エンティティの目的はデータの管理 (作成、更新、削除) です。 -For more information, see [entities](entities.md). +詳細な情報については、 [エンティティ](entities.md) を参照して下さい。 ## エンティティセレクション diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md index 1aecdeba006d55..3d679c193ce86d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md @@ -151,13 +151,13 @@ title: クラス The `.backColor` property is the [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -The `.forecolor` property is the [foreground color](configuring.md#background--foreground) of the table. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ The `.font` property is the font name (see `.borderBottom` プロパティは、 表の下の外枠線を定義します 。 +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderHorizontal diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md index b68bcfc3a991bc..c229052608bda4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md @@ -10,6 +10,12 @@ title: はじめに スプレッドシートとは、セルのグリッドを格納したアプリケーションのことで、これらのセルに情報を入力したり、計算を実行させたり、あるいはピクチャーを表示したりすることができます。 4D View Proは、4Dに統合された [SpreadJS スプレッドシートソリューション](https://developer.mescius.com/spreadjs) に基づいて動作します。
    (4D View Pro のツールバー等のインターフェースは SpreadJS 提供のものです。インターフェース上で "テーブル" という用語が使用されますが、4D でテーブルといえばデータベーステーブルを指すため、当マニュアルではこれを便宜上 "表組み" あるいは "表" と呼んで区別します) +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + フォームに 4D View Pro エリアを埋め込むことで、4D View Pro コマンドを使ってスプレッドシートドキュメントを読み込んだり書き出したりすることができます。 ## インストールとアクティベーション diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/license-info.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/license-info.md index dcb332009dd594..d97f6136e3f2aa 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/license-info.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/license-info.md @@ -22,7 +22,7 @@ displayed_sidebar: docs :::note -This command reloads the license files from the disk and updates the associated rights if they have been modified. +このコマンドはライセンスファイルをディスクからリロードし、それらが変更されていた場合には、関連する権限を更新します。 ::: The returned object contains the following properties: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/parameters.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/parameters.md index 1a932939fb4e6c..c39e4ae70b26a5 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/parameters.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/parameters.md @@ -5,7 +5,7 @@ title: Parâmetros Frequentemente será preciso passar dados para seus métodos. Isso é facilmente feito com parâmetros. -## Visão Geral +## Utilização de parâmetros Os **parâmetros** (ou **argumentos**) são partes de dados que um método ou uma função de classe precisa para executar sua tarefa. Os termos *parâmetro* e *argumento* são usados de forma intercambiável ao longo deste manual. Parâmetros também são passados para comandos integrados 4D. Neste exemplo, a cadeia de caracteres "Hello" é um argumento para o comando interno `ALERT`: @@ -45,19 +45,19 @@ Qualquer subrotina pode retornar um valor. Só se pode declarar um único parám Os valores de entrada e saída são [avaliados](#valores-ou-referências) no momento da chamada e copiados para ou de variáveis locais dentro da função ou método da classe chamada. Os parâmetros das variáveis devem ser [declarados](#declaring-parameters) no código chamado. -:::info Compatibidade - -A sintaxe de declaração herdada, em que os parâmetros são automaticamente copiados em variáveis locais numeradas sequencialmente $0, $1, etc. e declarados usando diretivas do compilador, como `C_TEXT($1;$2)`, é **depreciada** a partir de 4D 20 R7. - -::: - ## Declaração de parâmetros -Dentro de métodos ou funções de classe chamados, valores parâmetros são atribuidos à variáveis locais. You declare parameters using a **parameter name** along with a **parameter type**, separated by colon. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - For class functions, parameters are declared along with the function prototype, i.e. when using the `Function` or `Class constructor` keywords. - For methods (project methods, form object methods, database methods, and triggers), parameters are declared using the **`#DECLARE`** keyword at the beginning of the method code. +:::info Compatibidade + +A sintaxe de declaração herdada, em que os parâmetros são automaticamente copiados em variáveis locais numeradas sequencialmente $0, $1, etc. e declarados usando diretivas do compilador, como `C_TEXT($1;$2)`, é **depreciada** a partir de 4D 20 R7. + +::: + Exemplos: ```4d @@ -104,6 +104,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Verificar a senha hash... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor retornado Você declara o parâmetro de retorno de uma função adicionando uma seta (->) e a definição do parâmetro após a lista de parâmetros de entrada. Por exemplo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md index 94c3b9caa7f773..f8acd086a9328e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -9,7 +9,7 @@ Leia [**O que há de novo no 4D v21 R2**](https://blog.4d.com/en-whats-new-in-4d #### Destaques -- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection. +- [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). - [**Lista de erros corrigida**](https://bugs.4d.fr/fixedbugslist?version=21_R2): lista de todos os bugs corrigidos em 4D 21 R2. #### Mudanças de comportamento diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/ViewPro/classes.md b/i18n/pt/docusaurus-plugin-content-docs/current/ViewPro/classes.md index 6dc8beff3f2787..2bd5b5e2a92ac7 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/ViewPro/classes.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/ViewPro/classes.md @@ -151,13 +151,13 @@ The `.useFooterDropDownList` property [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -A propriedade `.forecolor` é o [cor de primeiro plano](configuring.md#background--foreground) da tabela. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ A propriedade `.borderRight` é a li A propriedade `.borderBottom` é a linha inferior da borda da tabela. +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderHorizontal diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md b/i18n/pt/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md index a07d153673411c..5317d67f6bb774 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/ViewPro/getting-started.md @@ -9,6 +9,12 @@ title: Começando Uma planilha é uma aplicação que contém uma grade de células onde você pode inserir informações, executar cálculos ou exibir imagens. 4D View Pro es alimentado por la [solución de hoja de cálculo SpreadJS](https://developer.mescius.com/spreadjs) integrada en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + A incorporação de áreas do 4D View Pro em seus formulários permite importar e exportar documentos de planilhas eletrônicas usando os comandos do 4D View Pro. ## Instalação e ativação diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md b/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md index a5cc5f39af3807..13e65243380c0b 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Parâmetros Frequentemente será preciso passar dados para seus métodos. Isso é facilmente feito com parâmetros. -## Visão Geral +## Utilização de parâmetros **Os parâmetros** (ou **argumentos**) são peças de dados que um método necessita para realizar sua tarefa. Os termos *parámetros* e *argumentos* são utilizados indiferentemente neste manual. Parâmetros também são passados para comandos integrados 4D. Neste exemplo, a stirng "Hello" é um argumento para o comando integrado `ALERT`: @@ -118,6 +118,12 @@ $entitySelection:=ds. User.query("login=:1"; $user) // Check hash password... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor retornado Pode declarar o parâmetro retornado de uma função adicionado uma flecha (->) e a definição de parâmetro depois da lista de parâmetros de input. Por exemplo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md index e445ba05f5e050..7053a1ab07ef7a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md @@ -5,7 +5,7 @@ title: Parâmetros Frequentemente será preciso passar dados para seus métodos. Isso é facilmente feito com parâmetros. -## Visão Geral +## Utilização de parâmetros Os **parâmetros** (ou **argumentos**) são partes de dados que um método ou uma função de classe precisa para executar sua tarefa. Os termos *parâmetro* e *argumento* são usados de forma intercambiável ao longo deste manual. Parâmetros também são passados para comandos integrados 4D. Neste exemplo, a cadeia de caracteres "Hello" é um argumento para o comando interno `ALERT`: @@ -53,11 +53,17 @@ A sintaxe de declaração herdada, em que os parâmetros são automaticamente co ## Declaração de parâmetros -Dentro de métodos ou funções de classe chamados, valores parâmetros são atribuidos à variáveis locais. You declare parameters using a **parameter name** along with a **parameter type**, separated by colon. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - For class functions, parameters are declared along with the function prototype, i.e. when using the `Function` or `Class constructor` keywords. - For methods (project methods, form object methods, database methods, and triggers), parameters are declared using the **`#DECLARE`** keyword at the beginning of the method code. +:::info Compatibidade + +A sintaxe de declaração herdada, em que os parâmetros são automaticamente copiados em variáveis locais numeradas sequencialmente $0, $1, etc. e declarados usando diretivas do compilador, como `C_TEXT($1;$2)`, é **depreciada** a partir de 4D 20 R7. + +::: + Exemplos: ```4d @@ -104,6 +110,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Verificar a senha hash... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor retornado Você declara o parâmetro de retorno de uma função adicionando uma seta (->) e a definição do parâmetro após a lista de parâmetros de entrada. Por exemplo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md index 6dc8beff3f2787..2bd5b5e2a92ac7 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md @@ -151,13 +151,13 @@ The `.useFooterDropDownList` property [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -A propriedade `.forecolor` é o [cor de primeiro plano](configuring.md#background--foreground) da tabela. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ A propriedade `.borderRight` é a li A propriedade `.borderBottom` é a linha inferior da borda da tabela. +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderHorizontal diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md index 6bcadedbf99395..8635383e3d76a6 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ViewPro/getting-started.md @@ -9,6 +9,12 @@ title: Começando Uma planilha é uma aplicação que contém uma grade de células onde você pode inserir informações, executar cálculos ou exibir imagens. 4D View Pro es alimentado por la [solución de hoja de cálculo SpreadJS](https://developer.mescius.com/spreadjs) integrada en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + A incorporação de áreas do 4D View Pro em seus formulários permite importar e exportar documentos de planilhas eletrônicas usando os comandos do 4D View Pro. ## Instalação e ativação diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md index 8b35d7732c5993..6fb180ba5de335 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md @@ -6,7 +6,7 @@ title: Parâmetros Frequentemente será preciso passar dados para seus métodos. Isso é facilmente feito com parâmetros. -## Visão Geral +## Utilização de parâmetros **Os parâmetros** (ou **argumentos**) são peças de dados que um método necessita para realizar sua tarefa. Os termos *parámetros* e *argumentos* são utilizados indiferentemente neste manual. Parâmetros também são passados para comandos integrados 4D. Neste exemplo, a stirng "Hello" é um argumento para o comando integrado `ALERT`: @@ -108,6 +108,12 @@ $entitySelection:=ds. User.query("login=:1"; $user) // Check hash password... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor retornado Pode declarar o parâmetro retornado de uma função adicionado uma flecha (->) e a definição de parâmetro depois da lista de parâmetros de input. Por exemplo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md index dfa4088dc19fdf..08b1de13b5dc7c 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md @@ -129,7 +129,7 @@ A propriedade `tableColumns` é u A propriedade `.theme` define um tema de tabela. Pode também ser um texto (nome de um tema SpreadJS nativo). -Ver os temas [nativos do SpreadJS](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +See the [native SpreadJS themes](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). ### .useFooterDropDownList @@ -151,12 +151,12 @@ A propriedade `.useFooterDropDownList` [cor de fundo](configuring.md#background--foreground) da tabela. -### .forecolor +### .foreColor - -**.forecolor**: Text + +**.foreColor** : Text -A propriedade `.forecolor` é o [cor do primeiro plano](configuring.md#background--foreground) da tabela. +The `.foreColor` property is the [cor do primeiro plano](configuring.md#background--foreground) da tabela. @@ -201,6 +201,12 @@ A propriedade `.borderRight` é a li A propriedade `.borderBottom` é o linha de fronteira inferior da tabela . +### .borderTop + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . ### .borderHorizontal @@ -260,7 +266,7 @@ A propriedade `.highlightFirstColumn` -A propriedade `.theme` define um tema de tabela. Se Text: nome de um tema [nativo SpreadJS](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +A propriedade `.theme` define um tema de tabela. If Text: name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). @@ -356,7 +362,7 @@ A propriedade `.lastHeaderCellStyle` é o **.name** : Text -A propriedade `.name` é o nome de um [tema nativo do SpreadJS](https://www.grapecity.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). +A propriedade `.name` é o name of a [native SpreadJS theme](https://developer.mescius.com/spreadjs/api/classes/GC.Spread.Sheets.Tables.TableThemes). ### .secondColumnStripSize diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md index ccae21e3e079ea..444e6c35b7c203 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/ViewPro/getting-started.md @@ -11,6 +11,12 @@ O 4D View Pro é um [componente 4D](Concepts/components.md) que inclui uma [áre Uma planilha é uma aplicação que contém uma grade de células onde você pode inserir informações, executar cálculos ou exibir imagens. 4D View Pro é alimentado pela solução de [folha de cálculo SpreadJS](https://www.grapecity.com/spreadjs/docs/versions/v14/online/overview.html) integrada em 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + A incorporação de áreas do 4D View Pro em seus formulários permite importar e exportar documentos de planilhas eletrônicas usando os comandos do 4D View Pro. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md index e445ba05f5e050..7053a1ab07ef7a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md @@ -5,7 +5,7 @@ title: Parâmetros Frequentemente será preciso passar dados para seus métodos. Isso é facilmente feito com parâmetros. -## Visão Geral +## Utilização de parâmetros Os **parâmetros** (ou **argumentos**) são partes de dados que um método ou uma função de classe precisa para executar sua tarefa. Os termos *parâmetro* e *argumento* são usados de forma intercambiável ao longo deste manual. Parâmetros também são passados para comandos integrados 4D. Neste exemplo, a cadeia de caracteres "Hello" é um argumento para o comando interno `ALERT`: @@ -53,11 +53,17 @@ A sintaxe de declaração herdada, em que os parâmetros são automaticamente co ## Declaração de parâmetros -Dentro de métodos ou funções de classe chamados, valores parâmetros são atribuidos à variáveis locais. You declare parameters using a **parameter name** along with a **parameter type**, separated by colon. +Inside called methods or class functions, you declare parameters using a **parameter name** along with a **parameter type**, separated by colon. - For class functions, parameters are declared along with the function prototype, i.e. when using the `Function` or `Class constructor` keywords. - For methods (project methods, form object methods, database methods, and triggers), parameters are declared using the **`#DECLARE`** keyword at the beginning of the method code. +:::info Compatibidade + +A sintaxe de declaração herdada, em que os parâmetros são automaticamente copiados em variáveis locais numeradas sequencialmente $0, $1, etc. e declarados usando diretivas do compilador, como `C_TEXT($1;$2)`, é **depreciada** a partir de 4D 20 R7. + +::: + Exemplos: ```4d @@ -104,6 +110,12 @@ $entitySelection:=ds.User.query("login=:1"; $user) // Verificar a senha hash... ``` +:::note + +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. + +::: + ### Valor retornado Você declara o parâmetro de retorno de uma função adicionando uma seta (->) e a definição do parâmetro após a lista de parâmetros de entrada. Por exemplo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md index 6dc8beff3f2787..2bd5b5e2a92ac7 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md @@ -151,13 +151,13 @@ The `.useFooterDropDownList` property [background color](configuring.md#background--foreground) of the table. -### .forecolor +### .foreColor - + -**.forecolor** : Text +**.foreColor** : Text -A propriedade `.forecolor` é o [cor de primeiro plano](configuring.md#background--foreground) da tabela. +The `.foreColor` property is the [foreground color](configuring.md#background--foreground) of the table. ### .font @@ -199,6 +199,14 @@ A propriedade `.borderRight` é a li A propriedade `.borderBottom` é a linha inferior da borda da tabela. +### .borderTop + + + +**.borderTop** : [cs.ViewPro.LineBorder](#lineborder) + +The `.borderTop` property is the top border line of the table . + ### .borderHorizontal diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md index a07d153673411c..5317d67f6bb774 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/ViewPro/getting-started.md @@ -9,6 +9,12 @@ title: Começando Uma planilha é uma aplicação que contém uma grade de células onde você pode inserir informações, executar cálculos ou exibir imagens. 4D View Pro es alimentado por la [solución de hoja de cálculo SpreadJS](https://developer.mescius.com/spreadjs) integrada en 4D. +:::note + +Go to the [Library table](../Notes/updates.md#library-table) to know the SpreadJS version integrated in your 4D release. + +::: + A incorporação de áreas do 4D View Pro em seus formulários permite importar e exportar documentos de planilhas eletrônicas usando os comandos do 4D View Pro. ## Instalação e ativação From e1975eaf1d9b5d5e00614911adcafac4c5c07794 Mon Sep 17 00:00:00 2001 From: nobu teshima <44628598+nobuteshima@users.noreply.github.com> Date: Tue, 18 Nov 2025 17:52:24 +0900 Subject: [PATCH 26/75] Update wa-get-url-history.md (#2999) JA adding missing compatibility information into v21 doc --- .../version-21/commands-legacy/wa-get-url-history.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/wa-get-url-history.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/wa-get-url-history.md index f8ff556747f091..96cece1363ea0e 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/wa-get-url-history.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/wa-get-url-history.md @@ -38,7 +38,7 @@ URLは時間順に並びかえられます。 *titlesArr* 引数を渡すと、URLに関連付けられたウィンドウの名前が返されます。この配列は*urlsArr* 配列と同期しています。 -**互換性に関する注意:** **4D v19 R5 以降、このコマンドは Windows のシステムレンダリングエンジン を使用しているWeb エリアにおける urlsArr および titlesArr 配列のみを返します。* +**互換性に関する注意:** **4D v19 R5 以降、このコマンドは Windows のシステムレンダリングエンジン を使用しているWeb エリアにおいて urlsArr および titlesArr 配列にはカレントの URL のみを返します。* ## 参照 From 7e4acf926804c7713ac54b6dae26d33d43315136 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Tue, 18 Nov 2025 10:14:31 +0100 Subject: [PATCH 27/75] Licence usage for 4D Server only --- docs/commands-legacy/license-usage.md | 6 ++++++ .../version-20-R10/commands-legacy/license-usage.md | 6 ++++++ versioned_docs/version-21/commands-legacy/license-usage.md | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/docs/commands-legacy/license-usage.md b/docs/commands-legacy/license-usage.md index ada531978857ce..be95d14fe684e2 100644 --- a/docs/commands-legacy/license-usage.md +++ b/docs/commands-legacy/license-usage.md @@ -17,6 +17,12 @@ displayed_sidebar: docs The **License usage** command returns a collection of objects containing information on the retained licenses. +:::note + +This command can only be executed on 4D Server. It returns `null` when called from another context. + +::: + Each object in the returned collection has the following attributes: | **Property name** | **Type** | **Description** | diff --git a/versioned_docs/version-20-R10/commands-legacy/license-usage.md b/versioned_docs/version-20-R10/commands-legacy/license-usage.md index ada531978857ce..be95d14fe684e2 100644 --- a/versioned_docs/version-20-R10/commands-legacy/license-usage.md +++ b/versioned_docs/version-20-R10/commands-legacy/license-usage.md @@ -17,6 +17,12 @@ displayed_sidebar: docs The **License usage** command returns a collection of objects containing information on the retained licenses. +:::note + +This command can only be executed on 4D Server. It returns `null` when called from another context. + +::: + Each object in the returned collection has the following attributes: | **Property name** | **Type** | **Description** | diff --git a/versioned_docs/version-21/commands-legacy/license-usage.md b/versioned_docs/version-21/commands-legacy/license-usage.md index ada531978857ce..be95d14fe684e2 100644 --- a/versioned_docs/version-21/commands-legacy/license-usage.md +++ b/versioned_docs/version-21/commands-legacy/license-usage.md @@ -17,6 +17,12 @@ displayed_sidebar: docs The **License usage** command returns a collection of objects containing information on the retained licenses. +:::note + +This command can only be executed on 4D Server. It returns `null` when called from another context. + +::: + Each object in the returned collection has the following attributes: | **Property name** | **Type** | **Description** | From 5081c20a7d6a8720d3138a75da28a5da38347bd2 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Tue, 18 Nov 2025 11:10:47 +0100 Subject: [PATCH 28/75] fixes --- docs/Concepts/variables.md | 5 +++-- .../current/commands-legacy/blob-to-print-settings.md | 10 +++------- .../current/commands-legacy/license-usage.md | 8 +++++++- .../commands-legacy/blob-to-print-settings.md | 10 +++------- .../version-20-R10/commands-legacy/license-usage.md | 8 +++++++- .../commands-legacy/blob-to-print-settings.md | 10 +++------- .../version-21/commands-legacy/license-usage.md | 8 +++++++- versioned_docs/version-19/Concepts/variables.md | 2 +- versioned_docs/version-20-R10/Concepts/variables.md | 5 +++-- versioned_docs/version-20/Concepts/variables.md | 2 +- versioned_docs/version-21/Concepts/variables.md | 5 +++-- 11 files changed, 41 insertions(+), 32 deletions(-) diff --git a/docs/Concepts/variables.md b/docs/Concepts/variables.md index 7d1dc84eabbaec..179f975c72f322 100644 --- a/docs/Concepts/variables.md +++ b/docs/Concepts/variables.md @@ -259,8 +259,9 @@ System variables are used by [4D commands](../commands/command-index.md). Refer |---|---|---| |`OK`|Integer|Usually set to 1 after a command has displayed a dialog box and the user clicked the **OK** button, and 0 if they clicked **Cancel**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. |`Document`|Text|Contains the "long name" (full path+name) of the last file opened or created using commands such as [Open document](../commands-legacy/open-document.md) or [SELECT LOG FILE](../commands/select-log-file.md).| -|`FldDelimit`, `RecDelimit`|Text|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| -|`Error`, `Error method`, `Error line`, `Error formula`|Text, Longint|Used in an error-catching method installed by the [`ON ERR CALL`](../commands-legacy/on-err-call.md) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| +|`FldDelimit`, `RecDelimit`|Integer|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| +|`Error`, `Error line`|Integer|Used in an error-catching method installed by the [`ON ERR CALL`](../commands-legacy/on-err-call.md) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| +|`Error method`, `Error formula`|Text|Used in an error-catching method installed by the [`ON ERR CALL`](../commands-legacy/on-err-call.md) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| |`MouseDown`|Integer|Used in a method installed by the [`ON EVENT CALL`](../commands-legacy/on-event-call.md) command. Set to 1 when the mouse button is pushed, otherwise set to 0. | |`MouseX`, `MouseY`|Integer|Used in a method installed by the [`ON EVENT CALL`](../commands-legacy/on-event-call.md) command.
  • In a `MouseDown=1` event, `MouseX` and `MouseY` are respectively set to the vertical and horizontal coordinates of the click. Both values are expressed in pixels and use the local coordinate system of the window.
  • In case of a picture field or variable, `MouseX` and `MouseY` return the local coordinates of a mouse click in the [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) and [`On Mouse Up`](../Events/onMouseUp.md) form events. Local coordinates of the mouse cursor are also returned in the [`On Mouse Enter`](../Events/onMouseEnter.md) and [`On Mouse Move`](../Events/onMouseMove.md) form events. For more information, see the [Mouse Coordinates in a picture](../FormEditor/pictures.md#mouse-coordinates-in-a-picture) section.
  • | |`KeyCode`|Integer|Used in a method installed by the [`ON EVENT CALL`](../commands-legacy/on-event-call.md) command. Set to the character code of the key that was just pressed. If the key is a function key, `KeyCode` is set to a special code.| diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md index 1ca15c7f4fdbb0..b53c30a3c066d3 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md @@ -17,14 +17,14 @@ displayed_sidebar: docs ## Description -La commande **BLOB to print settings** remplace les paramètres d’impression courants de 4D par les paramètres stockés dans le BLOB *paramImpression*. Ce BLOB doit avoir été généré par la commande [Print settings to BLOB](print-settings-to-blob.md) ou par la commande de 4D Pack (voir ci-dessous). +La commande **BLOB to print settings** remplace les paramètres d’impression courants de 4D par les paramètres stockés dans le BLOB *paramImpression*. Ce BLOB doit avoir été généré par la commande [Print settings to BLOB](print-settings-to-blob.md). Le paramètre *param* permet de définir la façon de gérer les paramètres de base "nombre de copies" et "plage d'impression" : * si vous passez 0 ou omettez ce paramètre, les valeurs stockées dans le BLOB sont utilisées pour l'impression. * si vous passez 1, les valeurs sont réinitialisées aux valeurs par défaut : le nombre de copies est fixé à 1, et la plage d'impression est fixée à "toutes les pages". -Les paramètres d'impression s'appliquent aux [paramètres courants de l'impression 4D](../settings/compatibility.md) jusqu'à ce qu'une commande telle que *\_o\_PAGE SETUP*, [SET PRINT OPTION](set-print-option.md) ou [PRINT SELECTION](print-selection.md) sans le paramètre > les modifie. Les paramètres fixés sont utilisés plus particulièrement par les commandes [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) et [QR REPORT](qr-report.md), ainsi que par les commandes d'impression dans les menus de 4D, y compris ceux de l'environnement Développement. +Les paramètres d'impression s'appliquent aux [paramètres courants de l'impression 4D](../settings/compatibility.md) jusqu'à ce qu'une commande telle que [SET PRINT OPTION](set-print-option.md) ou [PRINT SELECTION](print-selection.md) sans le paramètre > les modifie. Les paramètres fixés sont utilisés plus particulièrement par les commandes [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) et [QR REPORT](qr-report.md), ainsi que par les commandes d'impression dans les menus de 4D, y compris ceux de l'environnement Développement. Les commandes [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md) et [PRINT RECORD](print-record.md) doivent être appelées avec le paramètre *\>* (si applicable) de façon à ce que les paramètres définis par **BLOB to print settings** soient gardés. @@ -34,7 +34,6 @@ La commande retourne un des codes d'état suivants : * 0 : aucune imprimante courante n'est sélectionnée (dans ce cas, la commande ne fait rien). * 1 : le BLOB a été correctement chargé. * 2 : le BLOB a été correctement chargé mais le nom de l'imprimante courante a changé (\*). -**Note :** le code (2) est toujours retourné si le BLOB a été crée avec la commande de 4D Pack , même si le nom de l'imprimante n'a pas changé, car cette information n'est pas présente dans les BLOBs de 4D Pack. (\*) Les paramètres dépendent de l'imprimante courante sélectionnée au moment où le BLOB a été stocké. Appliquer ces paramètres à une autre imprimante sera pris en charge si les deux imprimantes sont du même modèle. Si les imprimantes sont différentes, seuls les paramètres communs seront restaurés. @@ -44,9 +43,6 @@ Le BLOB *paramImpression* peut être sauvegardé et lu sur les deux plate-formes Lorsque vous utilisez un environnement hétérogène, pour restaurer le maximum de paramètres d'impression disponibles pour chaque plate-forme (et pas seulement la partie commune), il est recommandé de gérer deux BLOBs *paramImpression*, un pour chaque plate-forme. -### Compatibilité avec les commandes 4D Pack - -Les BLOBs de paramètres d'impression générés avec la commande 4D Pack peuvent être chargés et utilisés par la commande **BLOB to print settings**. Notez toutefois que s'ils sont stockés avec [Print settings to BLOB](print-settings-to-blob.md), ils sont convertis et ne pourront plus être ouvert avec . La commande **BLOB to print settings** stocke davantage d'informations que la commande . ## Exemple @@ -55,7 +51,7 @@ Vous voulez appliquer des paramètres d'impression précédemment stockés sur d ```4d  var curSettings : Blob  DOCUMENT TO BLOB(Get 4D folder(Active 4D Folder)+"current4Dsettings.blob";curSettings) -  //current4Dsettings a été créé avec la commande Paramètres impression vers BLOB +  //current4Dsettings a été créé avec la commande Print settings to BLOB  $err:=BLOB to print settings(curSettings;0)  Case of     :($err=1) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/license-usage.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/license-usage.md index 2c7fba4a19dc04..8c46f2cc56dc7d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/license-usage.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/license-usage.md @@ -15,7 +15,13 @@ displayed_sidebar: docs ## Description -La commande **License usage** retourne une collection d'objets contenant des informations sur les licences utilisées\[#/descv\]. +La commande **License usage** retourne une collection d'objets contenant des informations sur les licences utilisées. + +:::note + +Cette commande est destinée à 4D Server. Elle retourne null si elle est exécutée depuis un autre contexte. + +::: Chaque objet de la collection retournée possède les attributs suivants : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md index 1ca15c7f4fdbb0..b53c30a3c066d3 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md @@ -17,14 +17,14 @@ displayed_sidebar: docs ## Description -La commande **BLOB to print settings** remplace les paramètres d’impression courants de 4D par les paramètres stockés dans le BLOB *paramImpression*. Ce BLOB doit avoir été généré par la commande [Print settings to BLOB](print-settings-to-blob.md) ou par la commande de 4D Pack (voir ci-dessous). +La commande **BLOB to print settings** remplace les paramètres d’impression courants de 4D par les paramètres stockés dans le BLOB *paramImpression*. Ce BLOB doit avoir été généré par la commande [Print settings to BLOB](print-settings-to-blob.md). Le paramètre *param* permet de définir la façon de gérer les paramètres de base "nombre de copies" et "plage d'impression" : * si vous passez 0 ou omettez ce paramètre, les valeurs stockées dans le BLOB sont utilisées pour l'impression. * si vous passez 1, les valeurs sont réinitialisées aux valeurs par défaut : le nombre de copies est fixé à 1, et la plage d'impression est fixée à "toutes les pages". -Les paramètres d'impression s'appliquent aux [paramètres courants de l'impression 4D](../settings/compatibility.md) jusqu'à ce qu'une commande telle que *\_o\_PAGE SETUP*, [SET PRINT OPTION](set-print-option.md) ou [PRINT SELECTION](print-selection.md) sans le paramètre > les modifie. Les paramètres fixés sont utilisés plus particulièrement par les commandes [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) et [QR REPORT](qr-report.md), ainsi que par les commandes d'impression dans les menus de 4D, y compris ceux de l'environnement Développement. +Les paramètres d'impression s'appliquent aux [paramètres courants de l'impression 4D](../settings/compatibility.md) jusqu'à ce qu'une commande telle que [SET PRINT OPTION](set-print-option.md) ou [PRINT SELECTION](print-selection.md) sans le paramètre > les modifie. Les paramètres fixés sont utilisés plus particulièrement par les commandes [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) et [QR REPORT](qr-report.md), ainsi que par les commandes d'impression dans les menus de 4D, y compris ceux de l'environnement Développement. Les commandes [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md) et [PRINT RECORD](print-record.md) doivent être appelées avec le paramètre *\>* (si applicable) de façon à ce que les paramètres définis par **BLOB to print settings** soient gardés. @@ -34,7 +34,6 @@ La commande retourne un des codes d'état suivants : * 0 : aucune imprimante courante n'est sélectionnée (dans ce cas, la commande ne fait rien). * 1 : le BLOB a été correctement chargé. * 2 : le BLOB a été correctement chargé mais le nom de l'imprimante courante a changé (\*). -**Note :** le code (2) est toujours retourné si le BLOB a été crée avec la commande de 4D Pack , même si le nom de l'imprimante n'a pas changé, car cette information n'est pas présente dans les BLOBs de 4D Pack. (\*) Les paramètres dépendent de l'imprimante courante sélectionnée au moment où le BLOB a été stocké. Appliquer ces paramètres à une autre imprimante sera pris en charge si les deux imprimantes sont du même modèle. Si les imprimantes sont différentes, seuls les paramètres communs seront restaurés. @@ -44,9 +43,6 @@ Le BLOB *paramImpression* peut être sauvegardé et lu sur les deux plate-formes Lorsque vous utilisez un environnement hétérogène, pour restaurer le maximum de paramètres d'impression disponibles pour chaque plate-forme (et pas seulement la partie commune), il est recommandé de gérer deux BLOBs *paramImpression*, un pour chaque plate-forme. -### Compatibilité avec les commandes 4D Pack - -Les BLOBs de paramètres d'impression générés avec la commande 4D Pack peuvent être chargés et utilisés par la commande **BLOB to print settings**. Notez toutefois que s'ils sont stockés avec [Print settings to BLOB](print-settings-to-blob.md), ils sont convertis et ne pourront plus être ouvert avec . La commande **BLOB to print settings** stocke davantage d'informations que la commande . ## Exemple @@ -55,7 +51,7 @@ Vous voulez appliquer des paramètres d'impression précédemment stockés sur d ```4d  var curSettings : Blob  DOCUMENT TO BLOB(Get 4D folder(Active 4D Folder)+"current4Dsettings.blob";curSettings) -  //current4Dsettings a été créé avec la commande Paramètres impression vers BLOB +  //current4Dsettings a été créé avec la commande Print settings to BLOB  $err:=BLOB to print settings(curSettings;0)  Case of     :($err=1) diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/license-usage.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/license-usage.md index 2c7fba4a19dc04..8c46f2cc56dc7d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/license-usage.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/license-usage.md @@ -15,7 +15,13 @@ displayed_sidebar: docs ## Description -La commande **License usage** retourne une collection d'objets contenant des informations sur les licences utilisées\[#/descv\]. +La commande **License usage** retourne une collection d'objets contenant des informations sur les licences utilisées. + +:::note + +Cette commande est destinée à 4D Server. Elle retourne null si elle est exécutée depuis un autre contexte. + +::: Chaque objet de la collection retournée possède les attributs suivants : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md index 1ca15c7f4fdbb0..b53c30a3c066d3 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md @@ -17,14 +17,14 @@ displayed_sidebar: docs ## Description -La commande **BLOB to print settings** remplace les paramètres d’impression courants de 4D par les paramètres stockés dans le BLOB *paramImpression*. Ce BLOB doit avoir été généré par la commande [Print settings to BLOB](print-settings-to-blob.md) ou par la commande de 4D Pack (voir ci-dessous). +La commande **BLOB to print settings** remplace les paramètres d’impression courants de 4D par les paramètres stockés dans le BLOB *paramImpression*. Ce BLOB doit avoir été généré par la commande [Print settings to BLOB](print-settings-to-blob.md). Le paramètre *param* permet de définir la façon de gérer les paramètres de base "nombre de copies" et "plage d'impression" : * si vous passez 0 ou omettez ce paramètre, les valeurs stockées dans le BLOB sont utilisées pour l'impression. * si vous passez 1, les valeurs sont réinitialisées aux valeurs par défaut : le nombre de copies est fixé à 1, et la plage d'impression est fixée à "toutes les pages". -Les paramètres d'impression s'appliquent aux [paramètres courants de l'impression 4D](../settings/compatibility.md) jusqu'à ce qu'une commande telle que *\_o\_PAGE SETUP*, [SET PRINT OPTION](set-print-option.md) ou [PRINT SELECTION](print-selection.md) sans le paramètre > les modifie. Les paramètres fixés sont utilisés plus particulièrement par les commandes [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) et [QR REPORT](qr-report.md), ainsi que par les commandes d'impression dans les menus de 4D, y compris ceux de l'environnement Développement. +Les paramètres d'impression s'appliquent aux [paramètres courants de l'impression 4D](../settings/compatibility.md) jusqu'à ce qu'une commande telle que [SET PRINT OPTION](set-print-option.md) ou [PRINT SELECTION](print-selection.md) sans le paramètre > les modifie. Les paramètres fixés sont utilisés plus particulièrement par les commandes [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md), [PRINT RECORD](print-record.md), [Print form](../commands/print-form.md) et [QR REPORT](qr-report.md), ainsi que par les commandes d'impression dans les menus de 4D, y compris ceux de l'environnement Développement. Les commandes [PRINT SELECTION](print-selection.md), [PRINT LABEL](print-label.md) et [PRINT RECORD](print-record.md) doivent être appelées avec le paramètre *\>* (si applicable) de façon à ce que les paramètres définis par **BLOB to print settings** soient gardés. @@ -34,7 +34,6 @@ La commande retourne un des codes d'état suivants : * 0 : aucune imprimante courante n'est sélectionnée (dans ce cas, la commande ne fait rien). * 1 : le BLOB a été correctement chargé. * 2 : le BLOB a été correctement chargé mais le nom de l'imprimante courante a changé (\*). -**Note :** le code (2) est toujours retourné si le BLOB a été crée avec la commande de 4D Pack , même si le nom de l'imprimante n'a pas changé, car cette information n'est pas présente dans les BLOBs de 4D Pack. (\*) Les paramètres dépendent de l'imprimante courante sélectionnée au moment où le BLOB a été stocké. Appliquer ces paramètres à une autre imprimante sera pris en charge si les deux imprimantes sont du même modèle. Si les imprimantes sont différentes, seuls les paramètres communs seront restaurés. @@ -44,9 +43,6 @@ Le BLOB *paramImpression* peut être sauvegardé et lu sur les deux plate-formes Lorsque vous utilisez un environnement hétérogène, pour restaurer le maximum de paramètres d'impression disponibles pour chaque plate-forme (et pas seulement la partie commune), il est recommandé de gérer deux BLOBs *paramImpression*, un pour chaque plate-forme. -### Compatibilité avec les commandes 4D Pack - -Les BLOBs de paramètres d'impression générés avec la commande 4D Pack peuvent être chargés et utilisés par la commande **BLOB to print settings**. Notez toutefois que s'ils sont stockés avec [Print settings to BLOB](print-settings-to-blob.md), ils sont convertis et ne pourront plus être ouvert avec . La commande **BLOB to print settings** stocke davantage d'informations que la commande . ## Exemple @@ -55,7 +51,7 @@ Vous voulez appliquer des paramètres d'impression précédemment stockés sur d ```4d  var curSettings : Blob  DOCUMENT TO BLOB(Get 4D folder(Active 4D Folder)+"current4Dsettings.blob";curSettings) -  //current4Dsettings a été créé avec la commande Paramètres impression vers BLOB +  //current4Dsettings a été créé avec la commande Print settings to BLOB  $err:=BLOB to print settings(curSettings;0)  Case of     :($err=1) diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/license-usage.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/license-usage.md index 2c7fba4a19dc04..8c46f2cc56dc7d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/license-usage.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/license-usage.md @@ -15,7 +15,13 @@ displayed_sidebar: docs ## Description -La commande **License usage** retourne une collection d'objets contenant des informations sur les licences utilisées\[#/descv\]. +La commande **License usage** retourne une collection d'objets contenant des informations sur les licences utilisées. + +:::note + +Cette commande est destinée à 4D Server. Elle retourne null si elle est exécutée depuis un autre contexte. + +::: Chaque objet de la collection retournée possède les attributs suivants : diff --git a/versioned_docs/version-19/Concepts/variables.md b/versioned_docs/version-19/Concepts/variables.md index 5ca0826711f326..88879726463e7d 100644 --- a/versioned_docs/version-19/Concepts/variables.md +++ b/versioned_docs/version-19/Concepts/variables.md @@ -244,7 +244,7 @@ System variables are used by 4D commands. Refer to the "System variables and set |---|---|---| |`OK`|Integer|Usually set to 1 after a command has displayed a dialog box and the user clicked the **OK** button, and 0 if they clicked **Cancel**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. |`Document`|Text|Contains the "long name" (full path+name) of the last file opened or created using commands such as [Open document](https://doc.4d.com/4dv20/help/command/en/page264.html) or [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/en/page345.html).| -|`FldDelimit`, `RecDelimit`|Text|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| +|`FldDelimit`, `RecDelimit`|Integer|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| |`Error`, `Error method`, `Error line`, `Error formula`|Text, Longint|Used in an error-catching method installed by the [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/en/page155.html) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| |`MouseDown`|Integer|Used in a method installed by the [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html) command. Set to 1 when the mouse button is pushed, otherwise set to 0. | |`MouseX`, `MouseY`|Integer|Used in a method installed by the [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html) command.
  • In a `MouseDown=1` event, `MouseX` and `MouseY` are respectively set to the vertical and horizontal coordinates of the click. Both values are expressed in pixels and use the local coordinate system of the window.
  • In case of a picture field or variable, `MouseX` and `MouseY` return the local coordinates of a mouse click in the [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) and [`On Mouse Up`](../Events/onMouseUp.md) form events. Local coordinates of the mouse cursor are also returned in the [`On Mouse Enter`](../Events/onMouseEnter.md) and [`On Mouse Move`](../Events/onMouseMove.md) form events. For more information, see the [Mouse Coordinates in a picture](../FormEditor/pictures.md#mouse-coordinates-in-a-picture) section.
  • | diff --git a/versioned_docs/version-20-R10/Concepts/variables.md b/versioned_docs/version-20-R10/Concepts/variables.md index 7d1dc84eabbaec..179f975c72f322 100644 --- a/versioned_docs/version-20-R10/Concepts/variables.md +++ b/versioned_docs/version-20-R10/Concepts/variables.md @@ -259,8 +259,9 @@ System variables are used by [4D commands](../commands/command-index.md). Refer |---|---|---| |`OK`|Integer|Usually set to 1 after a command has displayed a dialog box and the user clicked the **OK** button, and 0 if they clicked **Cancel**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. |`Document`|Text|Contains the "long name" (full path+name) of the last file opened or created using commands such as [Open document](../commands-legacy/open-document.md) or [SELECT LOG FILE](../commands/select-log-file.md).| -|`FldDelimit`, `RecDelimit`|Text|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| -|`Error`, `Error method`, `Error line`, `Error formula`|Text, Longint|Used in an error-catching method installed by the [`ON ERR CALL`](../commands-legacy/on-err-call.md) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| +|`FldDelimit`, `RecDelimit`|Integer|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| +|`Error`, `Error line`|Integer|Used in an error-catching method installed by the [`ON ERR CALL`](../commands-legacy/on-err-call.md) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| +|`Error method`, `Error formula`|Text|Used in an error-catching method installed by the [`ON ERR CALL`](../commands-legacy/on-err-call.md) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| |`MouseDown`|Integer|Used in a method installed by the [`ON EVENT CALL`](../commands-legacy/on-event-call.md) command. Set to 1 when the mouse button is pushed, otherwise set to 0. | |`MouseX`, `MouseY`|Integer|Used in a method installed by the [`ON EVENT CALL`](../commands-legacy/on-event-call.md) command.
  • In a `MouseDown=1` event, `MouseX` and `MouseY` are respectively set to the vertical and horizontal coordinates of the click. Both values are expressed in pixels and use the local coordinate system of the window.
  • In case of a picture field or variable, `MouseX` and `MouseY` return the local coordinates of a mouse click in the [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) and [`On Mouse Up`](../Events/onMouseUp.md) form events. Local coordinates of the mouse cursor are also returned in the [`On Mouse Enter`](../Events/onMouseEnter.md) and [`On Mouse Move`](../Events/onMouseMove.md) form events. For more information, see the [Mouse Coordinates in a picture](../FormEditor/pictures.md#mouse-coordinates-in-a-picture) section.
  • | |`KeyCode`|Integer|Used in a method installed by the [`ON EVENT CALL`](../commands-legacy/on-event-call.md) command. Set to the character code of the key that was just pressed. If the key is a function key, `KeyCode` is set to a special code.| diff --git a/versioned_docs/version-20/Concepts/variables.md b/versioned_docs/version-20/Concepts/variables.md index 7515ad78f6e115..2c1c39ea3fb33a 100644 --- a/versioned_docs/version-20/Concepts/variables.md +++ b/versioned_docs/version-20/Concepts/variables.md @@ -243,7 +243,7 @@ System variables are used by [4D commands](commands.md). Refer to the "System va |---|---|---| |`OK`|Integer|Usually set to 1 after a command has displayed a dialog box and the user clicked the **OK** button, and 0 if they clicked **Cancel**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. |`Document`|Text|Contains the "long name" (full path+name) of the last file opened or created using commands such as [Open document](https://doc.4d.com/4dv20/help/command/en/page264.html) or [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/en/page345.html).| -|`FldDelimit`, `RecDelimit`|Text|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| +|`FldDelimit`, `RecDelimit`|Integer|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| |`Error`, `Error method`, `Error line`, `Error formula`|Text, Longint|Used in an error-catching method installed by the [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/en/page155.html) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| |`MouseDown`|Integer|Used in a method installed by the [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html) command. Set to 1 when the mouse button is pushed, otherwise set to 0. | |`MouseX`, `MouseY`|Integer|Used in a method installed by the [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html) command.
  • In a `MouseDown=1` event, `MouseX` and `MouseY` are respectively set to the vertical and horizontal coordinates of the click. Both values are expressed in pixels and use the local coordinate system of the window.
  • In case of a picture field or variable, `MouseX` and `MouseY` return the local coordinates of a mouse click in the [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) and [`On Mouse Up`](../Events/onMouseUp.md) form events. Local coordinates of the mouse cursor are also returned in the [`On Mouse Enter`](../Events/onMouseEnter.md) and [`On Mouse Move`](../Events/onMouseMove.md) form events. For more information, see the [Mouse Coordinates in a picture](../FormEditor/pictures.md#mouse-coordinates-in-a-picture) section.
  • | diff --git a/versioned_docs/version-21/Concepts/variables.md b/versioned_docs/version-21/Concepts/variables.md index 7d1dc84eabbaec..179f975c72f322 100644 --- a/versioned_docs/version-21/Concepts/variables.md +++ b/versioned_docs/version-21/Concepts/variables.md @@ -259,8 +259,9 @@ System variables are used by [4D commands](../commands/command-index.md). Refer |---|---|---| |`OK`|Integer|Usually set to 1 after a command has displayed a dialog box and the user clicked the **OK** button, and 0 if they clicked **Cancel**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. |`Document`|Text|Contains the "long name" (full path+name) of the last file opened or created using commands such as [Open document](../commands-legacy/open-document.md) or [SELECT LOG FILE](../commands/select-log-file.md).| -|`FldDelimit`, `RecDelimit`|Text|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| -|`Error`, `Error method`, `Error line`, `Error formula`|Text, Longint|Used in an error-catching method installed by the [`ON ERR CALL`](../commands-legacy/on-err-call.md) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| +|`FldDelimit`, `RecDelimit`|Integer|Contain the character codes that will be used respectively as a field separator (default is **Tab** (9)) and record separator (default is **carriage return** (13)) when importing or exporting text. To use a different separator, assign a new value to the system variable.| +|`Error`, `Error line`|Integer|Used in an error-catching method installed by the [`ON ERR CALL`](../commands-legacy/on-err-call.md) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| +|`Error method`, `Error formula`|Text|Used in an error-catching method installed by the [`ON ERR CALL`](../commands-legacy/on-err-call.md) command. See [Handling errors within the method](../Concepts/error-handling.md#handling-errors-within-the-method).| |`MouseDown`|Integer|Used in a method installed by the [`ON EVENT CALL`](../commands-legacy/on-event-call.md) command. Set to 1 when the mouse button is pushed, otherwise set to 0. | |`MouseX`, `MouseY`|Integer|Used in a method installed by the [`ON EVENT CALL`](../commands-legacy/on-event-call.md) command.
  • In a `MouseDown=1` event, `MouseX` and `MouseY` are respectively set to the vertical and horizontal coordinates of the click. Both values are expressed in pixels and use the local coordinate system of the window.
  • In case of a picture field or variable, `MouseX` and `MouseY` return the local coordinates of a mouse click in the [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) and [`On Mouse Up`](../Events/onMouseUp.md) form events. Local coordinates of the mouse cursor are also returned in the [`On Mouse Enter`](../Events/onMouseEnter.md) and [`On Mouse Move`](../Events/onMouseMove.md) form events. For more information, see the [Mouse Coordinates in a picture](../FormEditor/pictures.md#mouse-coordinates-in-a-picture) section.
  • | |`KeyCode`|Integer|Used in a method installed by the [`ON EVENT CALL`](../commands-legacy/on-event-call.md) command. Set to the character code of the key that was just pressed. If the key is a function key, `KeyCode` is set to a special code.| From 53d75c876d1bee1c89b503a1078f98e4dc1eacb9 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Tue, 18 Nov 2025 11:12:41 +0100 Subject: [PATCH 29/75] old note to remove --- docs/commands-legacy/blob-to-print-settings.md | 1 - .../version-20-R10/commands-legacy/blob-to-print-settings.md | 1 - .../version-21/commands-legacy/blob-to-print-settings.md | 1 - 3 files changed, 3 deletions(-) diff --git a/docs/commands-legacy/blob-to-print-settings.md b/docs/commands-legacy/blob-to-print-settings.md index a474607f73cc37..377dfb55a729d0 100644 --- a/docs/commands-legacy/blob-to-print-settings.md +++ b/docs/commands-legacy/blob-to-print-settings.md @@ -34,7 +34,6 @@ The command returns one of the following status codes: * 0: no current printer is selected (in this case the command does nothing), * 1: the BLOB has been correctly loaded, * 2: the BLOB has been correctly loaded but the current printer name has changed(\*). -**Note:** Code (2) is always returned if the BLOB was created by the 4D Pack command, even if the printer name did not actually change, since this information was not included in the 4D Pack BLOBs. (\*) Settings depend on the currently selected printer at the moment the BLOB was saved. Applying these settings to a another printer is supported if both printers are of the same model. If the printers are different, only common parameters will be restored. diff --git a/versioned_docs/version-20-R10/commands-legacy/blob-to-print-settings.md b/versioned_docs/version-20-R10/commands-legacy/blob-to-print-settings.md index a474607f73cc37..377dfb55a729d0 100644 --- a/versioned_docs/version-20-R10/commands-legacy/blob-to-print-settings.md +++ b/versioned_docs/version-20-R10/commands-legacy/blob-to-print-settings.md @@ -34,7 +34,6 @@ The command returns one of the following status codes: * 0: no current printer is selected (in this case the command does nothing), * 1: the BLOB has been correctly loaded, * 2: the BLOB has been correctly loaded but the current printer name has changed(\*). -**Note:** Code (2) is always returned if the BLOB was created by the 4D Pack command, even if the printer name did not actually change, since this information was not included in the 4D Pack BLOBs. (\*) Settings depend on the currently selected printer at the moment the BLOB was saved. Applying these settings to a another printer is supported if both printers are of the same model. If the printers are different, only common parameters will be restored. diff --git a/versioned_docs/version-21/commands-legacy/blob-to-print-settings.md b/versioned_docs/version-21/commands-legacy/blob-to-print-settings.md index a474607f73cc37..377dfb55a729d0 100644 --- a/versioned_docs/version-21/commands-legacy/blob-to-print-settings.md +++ b/versioned_docs/version-21/commands-legacy/blob-to-print-settings.md @@ -34,7 +34,6 @@ The command returns one of the following status codes: * 0: no current printer is selected (in this case the command does nothing), * 1: the BLOB has been correctly loaded, * 2: the BLOB has been correctly loaded but the current printer name has changed(\*). -**Note:** Code (2) is always returned if the BLOB was created by the 4D Pack command, even if the printer name did not actually change, since this information was not included in the 4D Pack BLOBs. (\*) Settings depend on the currently selected printer at the moment the BLOB was saved. Applying these settings to a another printer is supported if both printers are of the same model. If the printers are different, only common parameters will be restored. From 8687ca7214b899df1af04de36049c6df4f6236aa Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 19 Nov 2025 10:04:56 +0100 Subject: [PATCH 30/75] New Crowdin updates (#3000) * New translations variables.md (French) * New translations variables.md (French) * New translations variables.md (French) * New translations orda-events.md (French) * New translations variables.md (French) * New translations orda-events.md (French) * New translations variables.md (French) * New translations orda-events.md (French) * New translations variables.md (Spanish) * New translations variables.md (Spanish) * New translations formeditor.md (Spanish) * New translations webserverclass.md (Spanish) * New translations variables.md (Spanish) * New translations properties_resizingoptions.md (Spanish) * New translations properties.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations date-time-formats.md (Spanish) * New translations $filter.md (Spanish) * New translations classes.md (Spanish) * New translations preemptiveweb.md (Spanish) * New translations qodly-studio.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations tcpeventclass.md (Spanish) * New translations openai.md (Spanish) * New translations openaierror.md (Spanish) * New translations openaimessage.md (Spanish) * New translations openaiparameters.md (Spanish) * New translations asynchronous-call.md (Spanish) * New translations call-chain.md (Spanish) * New translations command-name.md (Spanish) * New translations orda-events.md (Spanish) * New translations datastoreclass.md (Spanish) * New translations tcpeventclass.md (Spanish) * New translations variables.md (Spanish) * New translations properties.md (Spanish) * New translations orda-events.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations date-time-formats.md (Spanish) * New translations classes.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations qodly-studio.md (Spanish) * New translations wp-export-document.md (Spanish) * New translations wp-export-variable.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations openai.md (Spanish) * New translations openaierror.md (Spanish) * New translations openaiparameters.md (Spanish) * New translations asynchronous-call.md (Spanish) * New translations call-chain.md (Spanish) * New translations command-name.md (Spanish) * New translations string.md (Spanish) * New translations datastoreclass.md (Spanish) * New translations entityclass.md (Spanish) * New translations tcpeventclass.md (Spanish) * New translations webserverclass.md (Spanish) * New translations variables.md (Spanish) * New translations forms.md (Spanish) * New translations call-chain.md (Spanish) * New translations command-name.md (Spanish) * New translations string.md (Spanish) * New translations properties.md (Spanish) * New translations orda-events.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations date-time-formats.md (Spanish) * New translations $filter.md (Spanish) * New translations classes.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations preemptiveweb.md (Spanish) * New translations qodly-studio.md (Spanish) * New translations wp-export-document.md (Spanish) * New translations wp-export-variable.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations openai.md (Spanish) * New translations openaierror.md (Spanish) * New translations openaimessage.md (Spanish) * New translations openaiparameters.md (Spanish) * New translations asynchronous-call.md (Spanish) * New translations variables.md (Japanese) * New translations variables.md (Japanese) * New translations variables.md (Japanese) * New translations glossary.md (Japanese) * New translations orda-events.md (Japanese) * New translations variables.md (Japanese) * New translations glossary.md (Japanese) * New translations orda-events.md (Japanese) * New translations variables.md (Japanese) * New translations glossary.md (Japanese) * New translations orda-events.md (Japanese) * New translations variables.md (Portuguese, Brazilian) * New translations variables.md (Portuguese, Brazilian) * New translations variables.md (Portuguese, Brazilian) * New translations orda-events.md (Portuguese, Brazilian) * New translations variables.md (Portuguese, Brazilian) * New translations orda-events.md (Portuguese, Brazilian) * New translations variables.md (Portuguese, Brazilian) * New translations orda-events.md (Portuguese, Brazilian) * New translations orda-events.md (Japanese) * New translations orda-events.md (Japanese) * New translations orda-events.md (Japanese) --- .../current/API/TCPEventClass.md | 2 +- .../current/API/WebServerClass.md | 4 +- .../current/Concepts/variables.md | 23 ++-- .../FormObjects/properties_ResizingOptions.md | 2 +- .../current/Menus/properties.md | 10 +- .../current/ORDA/orda-events.md | 30 ++-- .../current/ORDA/ordaClasses.md | 4 +- .../current/ORDA/privileges.md | 4 +- .../current/Project/date-time-formats.md | 2 +- .../current/REST/$filter.md | 2 +- .../current/ViewPro/classes.md | 2 +- .../current/WebServer/preemptiveWeb.md | 2 +- .../current/WebServer/qodly-studio.md | 4 +- .../WritePro/commands/wp-import-document.md | 4 +- .../current/aikit/Classes/OpenAI.md | 2 +- .../current/aikit/Classes/OpenAIError.md | 2 +- .../current/aikit/Classes/OpenAIMessage.md | 8 +- .../current/aikit/Classes/OpenAIParameters.md | 14 +- .../current/aikit/asynchronous-call.md | 2 +- .../current/commands/call-chain.md | 2 +- .../current/commands/command-name.md | 2 +- .../current/commands/string.md | 2 +- .../version-19/Concepts/variables.md | 2 +- .../version-20-R10/API/DataStoreClass.md | 2 +- .../version-20-R10/API/TCPEventClass.md | 2 +- .../version-20-R10/Concepts/variables.md | 23 ++-- .../version-20-R10/Menus/properties.md | 10 +- .../version-20-R10/ORDA/orda-events.md | 2 +- .../version-20-R10/ORDA/ordaClasses.md | 4 +- .../Project/date-time-formats.md | 2 +- .../version-20-R10/ViewPro/classes.md | 2 +- .../commands/vp-set-workbook-options.md | 8 +- .../version-20-R10/WebServer/qodly-studio.md | 2 +- .../WritePro/commands/wp-export-document.md | 38 ++--- .../WritePro/commands/wp-export-variable.md | 38 ++--- .../WritePro/commands/wp-import-document.md | 4 +- .../version-20-R10/aikit/Classes/OpenAI.md | 2 +- .../aikit/Classes/OpenAIError.md | 2 +- .../aikit/Classes/OpenAIParameters.md | 10 +- .../version-20-R10/aikit/asynchronous-call.md | 2 +- .../version-20-R10/commands/call-chain.md | 2 +- .../version-20-R10/commands/command-name.md | 2 +- .../version-20/Concepts/variables.md | 2 +- .../version-20/FormEditor/formEditor.md | 2 +- .../version-21/API/DataStoreClass.md | 2 +- .../version-21/API/EntityClass.md | 18 +-- .../version-21/API/TCPEventClass.md | 2 +- .../version-21/API/WebServerClass.md | 4 +- .../version-21/Concepts/variables.md | 23 ++-- .../version-21/FormEditor/forms.md | 2 +- .../version-21/Menus/properties.md | 10 +- .../version-21/ORDA/orda-events.md | 30 ++-- .../version-21/ORDA/ordaClasses.md | 2 +- .../version-21/ORDA/privileges.md | 6 +- .../version-21/Project/date-time-formats.md | 2 +- .../version-21/REST/$filter.md | 12 +- .../version-21/ViewPro/classes.md | 2 +- .../commands/vp-set-workbook-options.md | 8 +- .../version-21/WebServer/preemptiveWeb.md | 2 +- .../version-21/WebServer/qodly-studio.md | 2 +- .../WritePro/commands/wp-export-document.md | 38 ++--- .../WritePro/commands/wp-export-variable.md | 38 ++--- .../WritePro/commands/wp-import-document.md | 4 +- .../version-21/aikit/Classes/OpenAI.md | 2 +- .../version-21/aikit/Classes/OpenAIError.md | 2 +- .../version-21/aikit/Classes/OpenAIMessage.md | 4 +- .../aikit/Classes/OpenAIParameters.md | 14 +- .../version-21/aikit/asynchronous-call.md | 2 +- .../version-21/commands/call-chain.md | 2 +- .../version-21/commands/command-name.md | 2 +- .../version-21/commands/string.md | 2 +- .../current/Concepts/variables.md | 23 ++-- .../current/ORDA/orda-events.md | 12 +- .../version-19/Concepts/variables.md | 2 +- .../version-20-R10/Concepts/variables.md | 23 ++-- .../version-20-R10/ORDA/orda-events.md | 2 +- .../version-20/Concepts/variables.md | 2 +- .../version-21/Concepts/variables.md | 23 ++-- .../version-21/ORDA/orda-events.md | 12 +- .../current/Concepts/variables.md | 23 ++-- .../current/ORDA/glossary.md | 6 +- .../current/ORDA/orda-events.md | 130 ++++++++++-------- .../version-19/Concepts/variables.md | 2 +- .../version-20-R10/Concepts/variables.md | 23 ++-- .../version-20-R10/ORDA/glossary.md | 6 +- .../version-20-R10/ORDA/orda-events.md | 60 ++++---- .../version-20/Concepts/variables.md | 2 +- .../version-21/Concepts/variables.md | 23 ++-- .../version-21/ORDA/glossary.md | 6 +- .../version-21/ORDA/orda-events.md | 128 +++++++++-------- .../current/Concepts/variables.md | 23 ++-- .../current/ORDA/orda-events.md | 12 +- .../version-19/Concepts/variables.md | 2 +- .../version-20-R10/Concepts/variables.md | 23 ++-- .../version-20-R10/ORDA/orda-events.md | 2 +- .../version-20/Concepts/variables.md | 2 +- .../version-21/Concepts/variables.md | 23 ++-- .../version-21/ORDA/orda-events.md | 12 +- 98 files changed, 606 insertions(+), 530 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md index c5ed7c2561fabb..fb2d8d27b187e0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md @@ -3,7 +3,7 @@ id: TCPEventClass title: TCPEvent --- -The `TCPEvent` class provides information about events occurring during the lifecycle of a TCP connection. It is generated when a [TCPConnection](TCPConnectionClass.md) is opened and is typically utilized in callbacks such as `onConnection`, `onData`, `onError`, and others. +La clase `TCPEvent` ofrece información sobre los eventos que se producen durante el ciclo de vida de una conexión TCP. It is generated when a [TCPConnection](TCPConnectionClass.md) is opened and is typically utilized in callbacks such as `onConnection`, `onData`, `onError`, and others.
    Historia diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md index 9b27f3d5414da9..3f4c6a3239e5ec 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md @@ -187,7 +187,7 @@ El nombre de la página de i *Propiedad de sólo lectura* -A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. Para más información, consulte la página [HTTP Request handler](../WebServer/http-request-handler.md). +Una colección de objetos HTTP handler personalizados. Un objeto HTTP handler contiene un patrón de URL escuchado, un verbo manejado y el código a llamar. Los manejadores HTTP pueden definirse a través de un archivo HTTPHandlers.json o del parámetro *settings* de la función [`.start()`](#start). Para más información, consulte la página [HTTP Request handler](../WebServer/http-request-handler.md). @@ -495,7 +495,7 @@ La ruta de la carpeta raíz del s *Propiedad de sólo lectura* -A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. Para obtener más información, consulte la página [Reglas HTTP](../WebServer/http-rules.md). +Una colección de objetos de reglas que se manejan actualmente para personalizar los encabezados HTTP. Un objeto regla contiene una propiedad "regexPattern", así como un nombre de acción con un valor. Las reglas HTTP pueden definirse a través de un archivo HTTPRules.json o del parámetro *settings* de la función [`.start()`](#start). Para obtener más información, consulte la página [Reglas HTTP](../WebServer/http-rules.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/variables.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/variables.md index a1cc173febeb9b..e31872102c3770 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/variables.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/variables.md @@ -250,17 +250,18 @@ El lenguaje 4D maneja varias **variables sistema**, las cuales le permiten contr Las variables del sistema son utilizadas por los [comandos 4D](../commands/command-index.md). Consulte el párrafo "Variables del sistema y conjuntos" en la descripción de un comando para averiguar si afecta a una variable del sistema. -| Nombre de la variable del sistema | Tipo | Descripción | -| ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OK` | Integer | Normalmente se establece en 1 después de que un comando haya mostrado una caja de diálogo y el usuario haya hecho clic en el botón **Aceptar**, y en 0 si hizo clic en **Cancelar**. Algunos comandos también modifican el valor de la variable del sistema `OK` cuando se ejecuta una operación con éxito. | -| `Document` | Text | Contiene el "nombre largo" (ruta completa+nombre) del último archivo abierto o creado utilizando comandos como [Open document](../commands-legacy/open-document.md) o [SELECT LOG FILE](../commands/select-log-file.md). | -| `FldDelimit`, `RecDelimit` | Text | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tab** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Ver [Gestión de errores en el método](../Concepts/error-handling.md#handling-errors-within-the-method). | -| `MouseDown` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Toma el valor 1 cuando se presiona el botón del ratón, de lo contrario 0. | -| `MouseX`, `MouseY` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • En un evento `MouseDown=1`, `MouseX` y `MouseY` se establecen respectivamente en las coordenadas verticales y horizontales del clic. Ambos valores se expresan en píxeles y utilizan el sistema de coordenadas local de la ventana.
  • En el caso de un campo imagen o variable, `MouseX` y `MouseY` devuelven las coordenadas locales de un clic de ratón en los eventos de formulario [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) y [`On Mouse Up`](../Events/onMouseUp.md). Las coordenadas locales del cursor del ratón también se retornan en los eventos formulario [`On Mouse Enter`](../Events/onMouseEnter.md) y [`On Mouse Move`](../Events/onMouseMove.md). Para obtener más información, consulte la sección [Coordenadas del ratón en una imagen](../FormEditor/pictures.md#coordenadas-del-ratón-en-una-imagen).
  • | -| `KeyCode` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el código de carácter de la tecla que se acaba de presionar. Si la tecla es una tecla de función, `KeyCode` se establece como un código especial. | -| `Modifiers` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Establece las teclas modificadoras del teclado (Ctrl/Command, Alt/Option, Shift, Caps Lock). | -| `MouseProc` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el número de proceso en el que tuvo lugar el último evento | +| Nombre de la variable del sistema | Tipo | Descripción | +| --------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OK` | Integer | Normalmente se establece en 1 después de que un comando haya mostrado una caja de diálogo y el usuario haya hecho clic en el botón **Aceptar**, y en 0 si hizo clic en **Cancelar**. Algunos comandos también modifican el valor de la variable del sistema `OK` cuando se ejecuta una operación con éxito. | +| `Document` | Text | Contiene el "nombre largo" (ruta completa+nombre) del último archivo abierto o creado utilizando comandos como [Open document](../commands-legacy/open-document.md) o [SELECT LOG FILE](../commands/select-log-file.md). | +| `FldDelimit`, `RecDelimit` | Integer | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tab** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | +| `Error`, `Error line` | Integer | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Ver [Gestión de errores en el método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `Error method`, `Error formula` | Text | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Ver [Gestión de errores en el método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `MouseDown` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Toma el valor 1 cuando se presiona el botón del ratón, de lo contrario 0. | +| `MouseX`, `MouseY` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • En un evento `MouseDown=1`, `MouseX` y `MouseY` se establecen respectivamente en las coordenadas verticales y horizontales del clic. Ambos valores se expresan en píxeles y utilizan el sistema de coordenadas local de la ventana.
  • En el caso de un campo imagen o variable, `MouseX` y `MouseY` devuelven las coordenadas locales de un clic de ratón en los eventos de formulario [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) y [`On Mouse Up`](../Events/onMouseUp.md). Las coordenadas locales del cursor del ratón también se retornan en los eventos formulario [`On Mouse Enter`](../Events/onMouseEnter.md) y [`On Mouse Move`](../Events/onMouseMove.md). Para obtener más información, consulte la sección [Coordenadas del ratón en una imagen](../FormEditor/pictures.md#coordenadas-del-ratón-en-una-imagen).
  • | +| `KeyCode` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el código de carácter de la tecla que se acaba de presionar. Si la tecla es una tecla de función, `KeyCode` se establece como un código especial. | +| `Modifiers` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Establece las teclas modificadoras del teclado (Ctrl/Command, Alt/Option, Shift, Caps Lock). | +| `MouseProc` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el número de proceso en el que tuvo lugar el último evento | :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_ResizingOptions.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_ResizingOptions.md index 034b086ceeb04b..523a61b774b61c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_ResizingOptions.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_ResizingOptions.md @@ -77,7 +77,7 @@ Hay tres opciones disponibles: ## Dimensionamiento vertical -This property specifies if an object should be vertically moved or resized when a user resizes the form. It can also be set dynamically by the [`OBJECT SET RESIZING OPTIONS`](../commands-legacy/object-set-resizing-options.md) command. +Esta propiedad especifica si un objeto debe moverse o redimensionarse verticalmente cuando un usuario redimensiona el formulario. También puede establecerse dinámicamente mediante el comando [`OBJECT SET RESIZING OPTIONS`](../commands-legacy/object-set-resizing-options.md). Hay tres opciones disponibles: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Menus/properties.md b/i18n/es/docusaurus-plugin-content-docs/current/Menus/properties.md index bec5839a46f923..c8b97a59c2b5b3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Menus/properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Menus/properties.md @@ -12,9 +12,9 @@ La propiedad **Title** contiene la etiqueta de un menú o elemento de menú tal En el editor de menús, puede introducir directamente la etiqueta como "fijo". También puede introducir una referencia para una variable o un elemento XLIFF, lo que facilitará el mantenimiento y la traducción de las aplicaciones. Puede utilizar los siguientes tipos de referencias: - Una referencia a un recurso XLIFF del tipo :xliff:MyLabel. Para más información sobre las referencias XLIFF, consulte la sección *Arquitectura XLIFF* en *Referencia Diseño 4D*. -- (**Deprecated**) An interprocess variable name followed by a number, for example: `:<>vlang,3`. Si se cambia el contenido de esta variable, se modificará la etiqueta del menú cuando se muestre. En este caso, la etiqueta llamará a un recurso XLIFF. El valor contenido en la variable `<>vlang` corresponde al atributo *id* del elemento *group*. El segundo valor (3 en este ejemplo) designa el atributo *id* del elemento *trans-unit*. +- (**Obsoleto**) Un nombre de variable interproceso seguido de un número, por ejemplo: `:<>vlang,3`. Si se cambia el contenido de esta variable, se modificará la etiqueta del menú cuando se muestre. En este caso, la etiqueta llamará a un recurso XLIFF. El valor contenido en la variable `<>vlang` corresponde al atributo *id* del elemento *group*. El segundo valor (3 en este ejemplo) designa el atributo *id* del elemento *trans-unit*. -Using the 4D language, you set the title property through the *itemText* parameter of the [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), and [`SET MENU ITEM`](../commands/set-menu-item) commands. +Usando el lenguaje 4D, se define la propiedad del título a través del parámetro *itemText* de los comandos [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), y [`SET MENU ITEM`](../commands/set-menu-item). ### Caracteres de control @@ -33,9 +33,9 @@ Los caracteres de control no aparecen en las etiquetas de los comandos del menú ## Parámetros -Puede asociar un parámetro personalizado a cada elemento del menú. Un parámetro de elemento de menú es una cadena de caracteres cuyo contenido puede elegirse libremente. It can be set in the Menu editor, or through the [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter) command. +Puede asociar un parámetro personalizado a cada elemento del menú. Un parámetro de elemento de menú es una cadena de caracteres cuyo contenido puede elegirse libremente. Puede configurarse en el editor de menús o mediante el comando [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter). -Menu item parameters are useful with programmed management of menus, in particular when using the [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) and [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter) commands. +Los parámetros de los elementos de menú son útiles para la gestión programada de menús, en particular cuando se utilizan los comandos [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) y [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter). ## Acción @@ -57,7 +57,7 @@ Puede asignar un método proyecto y/o una acción estándar a un comando de men - **Acción estándar asociada**: elija o escriba la acción que desea asignar en el combo box "Acción estándar asociada". Puede introducir toda acción soportada y (opcionalmente) el parámetro que desee en el área. Para obtener una lista completa de acciones estándar, consulte la sección **Acciones estándar** en el *Modo Diseño*. **Nota para macOS:** en macOS, los comandos de menús personalizados asociados a la acción *Salir* se colocan automáticamente en el menú de la aplicación, conforme a los estándares de interfaz de la plataforma. -Using the 4D language, you can associate a project method using the [`SET MENU ITEM METHOD`](../commands/set-menu-item-method) command, and a standard action using the [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property) command. +Utilizando el lenguaje 4D, puede asociar un método de proyecto utilizando el comando [`SET MENU ITEM METHOD`](../commands/set-menu-item-method), y una acción estándar utilizando el comando [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property). ### Iniciar un proceso diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index 6b204d9893d00f..ddf8750a6c544a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -24,7 +24,7 @@ No se puede activar directamente la ejecución de la función de evento. Los eve :::info Nota de compatibilidad -Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. +Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: @@ -338,7 +338,7 @@ Este evento es activado por las siguientes funciones: This event is triggered **before** the entity is actually saved and lets you check data consistency so that you can stop the action if needed. Por ejemplo, puede comprobar en este evento que "fecha de salida" < "fecha de llegada". -To stop the action, the code of the function must return an [error object](#error-object). +Para detener la acción, el código de la función debe devolver un [objeto error](#error-object). :::note @@ -380,7 +380,7 @@ Function event saving ($event : Object) Este evento se activa cada vez que se guarda una entidad. - Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. The function is executed even if no attribute has been touched in the entity (e.g. in case of sending data to an external app each time a save is done). -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. La función **no** se ejecuta si el atributo no ha sido tocado en la entidad. +- Si definió la función en el nivel de atributo (segunda Sintaxis), solo se llama para este atributo. La función **no** se ejecuta si el atributo no ha sido tocado en la entidad. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -393,13 +393,13 @@ Este evento se activa **mientras** la entidad se guarda. If a [`validateSave()`] :::note -The business logic should raise errors which can't be detected during the `validateSave()` events, e.g. a network error +La lógica de negocio debe generar errores que no puedan detectarse durante los eventos `validateSave()`, por ejemplo, un error de red ::: Durante la acción de guardar, se pueden producir errores en el motor 4D (índice, sello ha cambiado, no hay suficiente espacio en el disco). -To stop the action, the code of the function must return an [error object](#error-object). +Para detener la acción, el código de la función debe devolver un [objeto error](#error-object). #### Ejemplo @@ -420,7 +420,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -434,6 +436,12 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: + ### `Function event afterSave` #### Sintaxis @@ -486,7 +494,7 @@ Function event validateDrop ($event : Object) Este evento se activa cada vez que una entidad está a punto de ser soltada. - Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. +- Si definió la función en el nivel de atributo (segunda Sintaxis), solo se llama para este atributo. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -498,7 +506,7 @@ Este evento se activa con las siguientes funcionalidades: This event is triggered **before** the entity is actually dropped, allowing you to check data consistency and if necessary, to stop the drop action. -To stop the action, the code of the function must return an [error object](#error-object). +Para detener la acción, el código de la función debe devolver un [objeto error](#error-object). #### Ejemplo @@ -533,7 +541,7 @@ Function event dropping ($event : Object) Este evento se activa cada vez que se elimina una entidad. - Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. +- Si definió la función en el nivel de atributo (segunda Sintaxis), solo se llama para este atributo. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -547,11 +555,11 @@ This event is triggered **while** the entity is actually dropped. If a [`validat :::note -The business logic should raise errors which cannot be detected during the `validateDrop()` events, e.g. a network error. +La lógica de negocio debe generar errores que no puedan detectarse durante los eventos `validateDrop()`, por ejemplo, un error de red. ::: -To stop the action, the code of the function must return an [error object](#error-object). +Para detener la acción, el código de la función debe devolver un [objeto error](#error-object). #### Ejemplo diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index 1889c583ab40d8..669de5f11a80eb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -338,7 +338,7 @@ La función `Class constructor` es activada por los siguientes comandos y funcio :::note Notas -- The [`entity.clone()`](../API/EntityClass.md#clone) function does not trigger the entity Class constructor. +- La función [`entity.clone()`](../API/EntityClass.md#clone) no activa el constructor de la clase de la entidad. - Los registros creados a nivel de la base de datos 4D utilizando comandos del lenguaje clásico 4D o acciones estándar no activan el Class constructor de la entidad. ::: @@ -404,7 +404,7 @@ sequenceDiagram ``` -#### Example 4 (diagram): Qodly - Standard action and update value on the newly created entity +#### Ejemplo 4 (diagrama): Qodly - Acción estándar y valor de actualización en la nueva entidad creada ```mermaid diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md index 24876efc710352..02c55b6fb10e2f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -35,7 +35,7 @@ Puede asignar acciones de permiso específicas a los siguientes recursos en su p Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma en que se acceda), 4D verifica que la sesión tenga los permisos apropiados y rechaza el acceso si no está autorizado. -## Permissions +## Permisos A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). @@ -263,7 +263,7 @@ The `restrictedByDefault` property configures how every [resource](#resources) a Depending on your environment, the recommended settings are: - **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. -- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. Esto permite un acceso más fácil durante el desarrollo y la depuración, con la posibilidad de aplicar gradualmente restricciones. +- **Desarrollo**: defina `restrictedByDefault` y [`forceLogin`](../REST/authUsers.md#force-login-mode) como **false**. Esto permite un acceso más fácil durante el desarrollo y la depuración, con la posibilidad de aplicar gradualmente restricciones. ### Archivo `Roles_Errors.json` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Project/date-time-formats.md b/i18n/es/docusaurus-plugin-content-docs/current/Project/date-time-formats.md index 1205c7f43c900d..a8bc65c4192828 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Project/date-time-formats.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Project/date-time-formats.md @@ -112,7 +112,7 @@ La siguiente tabla muestra todos los patrones soportados para formatos de fecha ### `L` (monopuesto) vs `M` -En algunos idiomas (ruso, eslovaco), el mes utilizado por sí solo es diferente al mes en una fecha. In "January 10, 2010", "January" is not spelled the same as in "*rendez-vous* in January". +En algunos idiomas (ruso, eslovaco), el mes utilizado por sí solo es diferente al mes en una fecha. En "10 de enero de 2010", "enero" no se escribe igual que en "*rendez-vous* en janvier". ### `e` vs `c` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md b/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md index c23fb41145c825..aadedb2700b5ec 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md @@ -84,7 +84,7 @@ If the attribute stores [**vector objects**](../API/VectorClass.md) (see how to For more information about vector similarity searches, please refer to [Query by vector similarity](../API/DataClassClass.md#query-by-vector-similarity) section. -Use the `params` property to provide the filter with the vector comparison parameter, using a syntax like: +Utilice la propiedad `params` para ofrecer al filtro el parámetro de comparación de vectores, utilizando una sintaxis como: **\{vectorAttribute\} \{comparator\} \{placeholder\}&$params=vectorComparison** diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/classes.md b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/classes.md index 09aab72cb82cf9..9edb4dbc3da69b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/classes.md @@ -205,7 +205,7 @@ La propiedad `.borderBottom` es la **.borderTop** : [cs.ViewPro.LineBorder](#lineborder) -The `.borderTop` property is the top border line of the table . +La propiedad `.borderTop` es la línea del borde superior de la tabla . ### .borderHorizontal diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/preemptiveWeb.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/preemptiveWeb.md index c270d197d2e68a..0e7af110758c9b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/preemptiveWeb.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/preemptiveWeb.md @@ -30,7 +30,7 @@ La siguiente tabla indica si el modo apropiativo se utiliza o está disponible, - si las sesiones escalables están activadas, el modo apropiativo se utiliza automáticamente para los procesos web y servicios web. - si las sesiones escalables no están activadas: - for web processes, the [**Use preemptive processes**](webServerConfig.md#use-preemptive-processes) option is taken into account. - - for web service processes (server or client), preemptive mode is supported at method level. + - para los procesos de servicios web (servidor o cliente), el modo preventivo está soportado a nivel de método. ## Escribir código servidor web hilo seguro diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md index 66280d9e0e24f6..b4cdda279ad007 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md @@ -116,7 +116,7 @@ Hay dos formas de acceder a Qodly Studio: The Qodly Studio documentation is available on the [Qodly documentation website](https://developer.qodly.com/docs/studio/overview). -You can rely on this documentation and its associated resources for developing web applications powered by Qodly pages. Sin embargo, dependiendo de la etapa de implementación, los desarrolladores 4D utilizarán Qodly Studio o 4D IDE (ver [Comparación de funcionalidades](#comparación-de-funcionalidades)). +Puede confiar en esta documentación y sus recursos asociados para desarrollar aplicaciones web basadas en páginas Qodly. Sin embargo, dependiendo de la etapa de implementación, los desarrolladores 4D utilizarán Qodly Studio o 4D IDE (ver [Comparación de funcionalidades](#comparación-de-funcionalidades)). Se ofrecen ejemplos de código en [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), pero como QodlyScript hereda del Lenguaje 4D, no se sentirá perdido. Se ofrecen ejemplos de código en [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), pero como QodlyScript hereda del Lenguaje 4D, no se sentirá perdido. @@ -235,7 +235,7 @@ El proyecto debe ejecutarse en modo interpretado para que el elemento de menú * ::: -2. In the Qodly Studio toolbar, click on the **Debug** button.
    +2. En la barra de herramientas de Qodly Studio, haga clic en el botón **Debug**.
    ![qodly-debug](../assets/en/WebServer/qodly-debug.png) Si la sesión de depuración se inicia correctamente, aparecerá una viñeta verde en la etiqueta del botón ![qodly-debug](../assets/en/WebServer/debug2.png) y podrá utilizar el depurador de Qodly Studio. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md index 05064f54bf9dd9..9e7eb901643b46 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md @@ -64,8 +64,8 @@ Puede pasar un objeto para definir cómo se gestionan los siguientes atributos d **Notas de compatibilidad** -- *Character style sheets in legacy 4D Write documents use a proprietary mechanism, which is not supported by 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Las hojas de estilo de caracteres antiguos no son importadas y ya no están referenciadas en el documento.* -- *Support for importing in .docx format is only certified for Microsoft Word 2010 and newer. Versiones antiguas, especialmente Microsoft Word 2007, pueden no importar correctamente.* +- *Las hojas de estilo de caracteres de los documentos heredados de 4D Write utilizan un mecanismo propietario que no es compatible con 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Las hojas de estilo de caracteres antiguos no son importadas y ya no están referenciadas en el documento.* +- *El soporte para la importación en formato .docx solo está certificado para Microsoft Word 2010 y más recientes. Versiones antiguas, especialmente Microsoft Word 2007, pueden no importar correctamente.* ## Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md index 96e57899400ed5..5cc5cd870dca4c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md @@ -44,7 +44,7 @@ var $client:=cs.AIKit.OpenAI.new({apiKey: "your api key"}) #### URL del servidor -For a [compatible provider](../compatible-openai.md) API, you can configure the server URL. +Para una API [proveedor compatible](../compatible-openai.md), puede configurar la URL del servidor. ```4d var $client:=cs.AIKit.OpenAI.new({apiKey: "your api key"; baseURL: "https://server.ai"}) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md index 50c983790a5e75..b237a978ab1103 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md @@ -5,7 +5,7 @@ title: OpenAIError Class # OpenAIError Class -La clase `OpenAIError` está diseñada para manejar errores devueltos por la API OpenAI. It extracts relevant information from the error response and provides methods to access this information. +La clase `OpenAIError` está diseñada para manejar errores devueltos por la API OpenAI. Extrae información relevante de la respuesta de error y ofrece los métodos para acceder a esta información. ## Propiedades diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index 223b4de69615ec..340462dceeb399 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -5,7 +5,7 @@ title: OpenAIMessage # OpenAIMessage -The `OpenAIMessage` class represents a structured message containing a role, content, and an optional user. This class provides methods to manipulate and retrieve the text and other content of the message. +La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, un contenido y un usuario opcional. This class provides methods to manipulate and retrieve the text and other content of the message. ## Propiedades @@ -82,8 +82,8 @@ Cuando reciba un mensaje de llamada de herramienta, debe: 2. **Execute the function:** Parse the arguments (which is a JSON string) and call the corresponding function that you defined in your OpenAITool configuration. -3. **Respond with the tool result:** - Create a response message using the exact `tool_call_id` from the original request. +3. **Responde con el resultado de la herramienta:** + Crea un mensaje de respuesta usando el `tool_call_id` exacto de la petición original. **Ejemplo de respuesta de la herramienta:** @@ -103,7 +103,7 @@ var $toolResponse:=cs.AIKit.OpenAIMessage.new({ \ // Add it to the conversation and continue ``` -**Important:** The `tool_call_id` in your response must exactly match the `id` from the original tool call. Esto permite que el modelo de IA asocie correctamente su respuesta con la llamada de función específica que se realizó. +**Importante:** el `tool_call_id` de su respuesta debe coincidir exactamente con el `id` de la llamada de la herramienta original. Esto permite que el modelo de IA asocie correctamente su respuesta con la llamada de función específica que se realizó. ## Ver también diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIParameters.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIParameters.md index 9b33b972486a0f..c4aae60b5308bb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIParameters.md @@ -5,7 +5,7 @@ title: OpenAIParameters # OpenAIParameters -The `OpenAIParameters` class is designed to handle execution and request parameters for interacting with the OpenAI API. +La clase `OpenAIParameters` está diseñada para manejar los parámetros de ejecución y de petición para interactuar con la API OpenAI. ## Propiedades @@ -17,14 +17,14 @@ Utilice esta propiedad de retrollamada para recibir el resultado independienteme | ------------------------------------------------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | `onTerminate`
    (o `formula`) | 4D.Function | Una función que se llamará de forma asíncrona cuando termine. Asegúrese de que el proceso actual no termina. | -Use these callback properties for more granular control over success and error handling: +Utilice estas propiedades de retrollamada para un control más granular de la gestión de éxito y de errores: | Propiedad | Tipo | Descripción | | ------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `onResponse` | 4D.Function | Una función a llamar de forma asíncrona cuando la petición finalice **con éxito**. Asegúrese de que el proceso actual no termina. | | `onError` | 4D.Function | Una función que se llamará de forma asíncrona cuando la petición finalice **con errores**. Asegúrese de que el proceso actual no termina. | -> The callback function will receive the same result object type (one of [OpenAIResult](./OpenAIResult.md) child classes) that would be returned by the function in synchronous code. +> La función de retrollamada recibirá el mismo tipo de objeto de resultado (una de las clases hijas de [OpenAIResult](./OpenAIResult.md)) que devolvería la función en un código síncrono. Ver la [documentación sobre código asíncrono para ejemplos](../asynchronous-call.md) @@ -32,16 +32,16 @@ Ver la [documentación sobre código asíncrono para ejemplos](../asynchronous-c | Propiedad | Tipo | Descripción | | -------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `timeout` | Real | Overrides the client-level default timeout for the request, in seconds. Por defecto es 0. | +| `timeout` | Real | Reemplaza el tiempo de espera predeterminado del nivel de cliente para la petición, en segundos. Por defecto es 0. | | `httpAgent` | HTTPAgent | Anula el agente HTTP predeterminado a nivel de cliente para la petición. | | `maxRetries` | Integer | El número máximo de reintentos para la petición. (Sólo si el código no es asíncrono, es decir, no se proporciona ninguna función) | | `extraHeaders` | Object | Encabezados adicionales para enviar con la petición. | ### Propiedades OpenAPI -| Propiedad | Tipo | Descripción | -| --------- | ---- | ----------------------------------------------------------------------------------------------------------- | -| `user` | Text | A unique identifier representing the end-user, which helps OpenAI monitor and detect abuse. | +| Propiedad | Tipo | Descripción | +| --------- | ---- | --------------------------------------------------------------------------------------------------------------------------- | +| `user` | Text | Un identificador único que representa al usuario final y que ayuda a OpenAI a supervisar y detectar abusos. | ### Otras diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/asynchronous-call.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/asynchronous-call.md index ed81a7d77e2b7a..637fe25c2cdf76 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/asynchronous-call.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/asynchronous-call.md @@ -5,7 +5,7 @@ title: Asynchronous Call # Asynchronous Call -If you do not want to wait for the OpenAPI response when making a request to its API, you need to use asynchronous code. +Si no desea esperar la respuesta del OpenAPI al hacer una petición a su API, debe utilizar un código asíncrono. To make asynchronous calls, you must provide a callback `4D.Function`(`Formula`) in the [OpenAIParameters](Classes/OpenAIParameters.md) object parameter to receive the result. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md index fdbd960b6e8acd..d4288b04753c41 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md @@ -31,7 +31,7 @@ The command facilitates debugging by enabling the identification of the method o | **Propiedad** | **Tipo** | **Description** | **Ejemplo** | | ------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -| database | Text | Name of the database calling the method (to distinguish host methods and component methods) | "database":"contactInfo" | +| database | Text | Nombre de la base de datos que llama al método (para distinguir los métodos locales de los métodos del componente) | "database":"contactInfo" | | formula | Text (si lo hay) | Contenido de la línea actual de código en el nivel actual de la cadena de llamadas (texto bruto). Corresponde al contenido de la línea referenciada por la propiedad `line` en el archivo fuente indicado por el método. Si el código fuente no está disponible, la propiedad `formula` se omite (Undefined). | "var $stack:=Call chain" | | línea | Integer | Número de línea de llamada al método | "line":6 | | name | Text | Nombre del método llamado | "name":"On Load" | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md index 67339d42612c4b..277252ce4c6f14 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md @@ -35,7 +35,7 @@ El comando **Command name** devuelve e Hay dos parámetros opcionales: - *info*: propiedades del comando. The returned value is a *bit field*, where the following bits are meaningful: - - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Only thread-safe commands can be used in [preemptive processes](../Develop/preemptive.md). + - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Solo se pueden usar comandos hilo seguro en [procesos preventivos](../Develop/preemptive.md). - Segundo bit (bit 1): se define en 1 si el comando es **obsoleto**, y en 0 si no lo es. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). *theme*: nombre del tema del lenguaje 4D para el comando. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/string.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/string.md index cd80fd800c2ca9..08d5b6d3f1ca2b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/string.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/string.md @@ -90,7 +90,7 @@ Si pasa 0 en *base*, el comando determina la base dependiendo del valor de *expr :::info - Esta sintaxis sigue estrictamente la especificación [`toString` EcmaScript sobre el manejo del radix](https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-number.prototype.tostring). -- Utilizar esta sintaxis con *base*=10 no dará exactamente los mismos resultados que utilizar la sintaxis sin el parámetro *base*. For example, if the specified number value is not a number, the "NaN" string is returned. +- Utilizar esta sintaxis con *base*=10 no dará exactamente los mismos resultados que utilizar la sintaxis sin el parámetro *base*. Por ejemplo, si el valor numérico especificado no es un número, se devuelve la cadena "NaN". ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/variables.md b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/variables.md index c5866a7ac49936..01d7ef7660eaed 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/variables.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/variables.md @@ -243,7 +243,7 @@ Las variables del sistema son utilizadas por los comandos 4D. Consulte el párra | ------------------------------------------------------ | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OK` | Integer | Normalmente se establece en 1 después de que un comando haya mostrado una caja de diálogo y el usuario haya hecho clic en el botón **Aceptar**, y en 0 si hizo clic en **Cancelar**. Algunos comandos también modifican el valor de la variable del sistema `OK` cuando se ejecuta una operación con éxito. | | `Document` | Text | Contiene el "nombre largo" (ruta completa+nombre) del último archivo abierto o creado mediante comandos como [Open document](https://doc.4d.com/4dv20/help/command/en/page264.html) o [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/en/page345.html). | -| `FldDelimit`, `RecDelimit` | Text | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tabulación** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | +| `FldDelimit`, `RecDelimit` | Integer | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tabulación** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | | `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/en/page155.html). Ver [Gestión de errores dentro del método](../Concepts/error-handling.md#handling-errors-within-the-method). | | `MouseDown` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html). Toma el valor 1 cuando se presiona el botón del ratón, de lo contrario 0. | | `MouseX`, `MouseY` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html).
  • En un evento `MouseDown=1`, `MouseX` y `MouseY` se establecen respectivamente en las coordenadas verticales y horizontales del clic. Ambos valores se expresan en píxeles y utilizan el sistema de coordenadas local de la ventana.
  • En el caso de un campo imagen o variable, `MouseX` y `MouseY` devuelven las coordenadas locales de un clic de ratón en los eventos de formulario [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) y [`On Mouse Up`](../Events/onMouseUp.md). Las coordenadas locales del cursor del ratón también se retornan en los eventos formulario [`On Mouse Enter`](../Events/onMouseEnter.md) y [`On Mouse Move`](../Events/onMouseMove.md). Para obtener más información, consulte la sección [Coordenadas del ratón en una imagen](../FormEditor/pictures.md#coordenadas-del-ratón-en-una-imagen).
  • | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md index 3624ec598b4b1b..b66e8076cf076a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md @@ -436,7 +436,7 @@ La función `.getInfo()` devuelve | Propiedad | Tipo | Descripción | | ---------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | type | string |
  • "4D": datastore principal, disponible a través de ds
  • "4D Server": datastore remoto, abrir con Open datastore
  • | -| networked | boolean |
  • True: el almacén de datos se alcanza a través de una conexión de red.
  • False: the datastore is not reached through a network connection (local database)
  • | +| networked | boolean |
  • True: el almacén de datos se alcanza a través de una conexión de red.
  • False: no se llega al almacén de datos a través de una conexión de red (base de datos local)
  • | | localID | text | ID del almacén de datos en la máquina. ID del almacén de datos en la máquina. Cadena vacía ("") para el almacén de datos principal. | | connection | object | Objeto que describe la conexión del almacén de datos remoto (no se devuelve para el almacén de datos principal). Propiedades disponibles:
    PropiedadTipoDescripción
    nombre de hosttextoDirección IP o nombre del datastore remoto + ":" + número de puerto
    tlsbooleanoTrue si se utiliza una conexión segura con el datastore remoto
    idleTimeoutnúmeroTiempo de inactividad de la sesión (en minutos)
    usuariotextoUsuario autenticado en el almacén de datos remoto
    | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md index c5ed7c2561fabb..fb2d8d27b187e0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md @@ -3,7 +3,7 @@ id: TCPEventClass title: TCPEvent --- -The `TCPEvent` class provides information about events occurring during the lifecycle of a TCP connection. It is generated when a [TCPConnection](TCPConnectionClass.md) is opened and is typically utilized in callbacks such as `onConnection`, `onData`, `onError`, and others. +La clase `TCPEvent` ofrece información sobre los eventos que se producen durante el ciclo de vida de una conexión TCP. It is generated when a [TCPConnection](TCPConnectionClass.md) is opened and is typically utilized in callbacks such as `onConnection`, `onData`, `onError`, and others.
    Historia diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md index a1cc173febeb9b..e31872102c3770 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md @@ -250,17 +250,18 @@ El lenguaje 4D maneja varias **variables sistema**, las cuales le permiten contr Las variables del sistema son utilizadas por los [comandos 4D](../commands/command-index.md). Consulte el párrafo "Variables del sistema y conjuntos" en la descripción de un comando para averiguar si afecta a una variable del sistema. -| Nombre de la variable del sistema | Tipo | Descripción | -| ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OK` | Integer | Normalmente se establece en 1 después de que un comando haya mostrado una caja de diálogo y el usuario haya hecho clic en el botón **Aceptar**, y en 0 si hizo clic en **Cancelar**. Algunos comandos también modifican el valor de la variable del sistema `OK` cuando se ejecuta una operación con éxito. | -| `Document` | Text | Contiene el "nombre largo" (ruta completa+nombre) del último archivo abierto o creado utilizando comandos como [Open document](../commands-legacy/open-document.md) o [SELECT LOG FILE](../commands/select-log-file.md). | -| `FldDelimit`, `RecDelimit` | Text | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tab** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Ver [Gestión de errores en el método](../Concepts/error-handling.md#handling-errors-within-the-method). | -| `MouseDown` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Toma el valor 1 cuando se presiona el botón del ratón, de lo contrario 0. | -| `MouseX`, `MouseY` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • En un evento `MouseDown=1`, `MouseX` y `MouseY` se establecen respectivamente en las coordenadas verticales y horizontales del clic. Ambos valores se expresan en píxeles y utilizan el sistema de coordenadas local de la ventana.
  • En el caso de un campo imagen o variable, `MouseX` y `MouseY` devuelven las coordenadas locales de un clic de ratón en los eventos de formulario [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) y [`On Mouse Up`](../Events/onMouseUp.md). Las coordenadas locales del cursor del ratón también se retornan en los eventos formulario [`On Mouse Enter`](../Events/onMouseEnter.md) y [`On Mouse Move`](../Events/onMouseMove.md). Para obtener más información, consulte la sección [Coordenadas del ratón en una imagen](../FormEditor/pictures.md#coordenadas-del-ratón-en-una-imagen).
  • | -| `KeyCode` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el código de carácter de la tecla que se acaba de presionar. Si la tecla es una tecla de función, `KeyCode` se establece como un código especial. | -| `Modifiers` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Establece las teclas modificadoras del teclado (Ctrl/Command, Alt/Option, Shift, Caps Lock). | -| `MouseProc` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el número de proceso en el que tuvo lugar el último evento | +| Nombre de la variable del sistema | Tipo | Descripción | +| --------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OK` | Integer | Normalmente se establece en 1 después de que un comando haya mostrado una caja de diálogo y el usuario haya hecho clic en el botón **Aceptar**, y en 0 si hizo clic en **Cancelar**. Algunos comandos también modifican el valor de la variable del sistema `OK` cuando se ejecuta una operación con éxito. | +| `Document` | Text | Contiene el "nombre largo" (ruta completa+nombre) del último archivo abierto o creado utilizando comandos como [Open document](../commands-legacy/open-document.md) o [SELECT LOG FILE](../commands/select-log-file.md). | +| `FldDelimit`, `RecDelimit` | Integer | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tab** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | +| `Error`, `Error line` | Integer | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Ver [Gestión de errores en el método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `Error method`, `Error formula` | Text | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Ver [Gestión de errores en el método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `MouseDown` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Toma el valor 1 cuando se presiona el botón del ratón, de lo contrario 0. | +| `MouseX`, `MouseY` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • En un evento `MouseDown=1`, `MouseX` y `MouseY` se establecen respectivamente en las coordenadas verticales y horizontales del clic. Ambos valores se expresan en píxeles y utilizan el sistema de coordenadas local de la ventana.
  • En el caso de un campo imagen o variable, `MouseX` y `MouseY` devuelven las coordenadas locales de un clic de ratón en los eventos de formulario [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) y [`On Mouse Up`](../Events/onMouseUp.md). Las coordenadas locales del cursor del ratón también se retornan en los eventos formulario [`On Mouse Enter`](../Events/onMouseEnter.md) y [`On Mouse Move`](../Events/onMouseMove.md). Para obtener más información, consulte la sección [Coordenadas del ratón en una imagen](../FormEditor/pictures.md#coordenadas-del-ratón-en-una-imagen).
  • | +| `KeyCode` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el código de carácter de la tecla que se acaba de presionar. Si la tecla es una tecla de función, `KeyCode` se establece como un código especial. | +| `Modifiers` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Establece las teclas modificadoras del teclado (Ctrl/Command, Alt/Option, Shift, Caps Lock). | +| `MouseProc` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el número de proceso en el que tuvo lugar el último evento | :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Menus/properties.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Menus/properties.md index e71e4a99e8fae0..4d34bb1d18dda4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Menus/properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Menus/properties.md @@ -12,9 +12,9 @@ La propiedad **Title** contiene la etiqueta de un menú o elemento de menú tal En el editor de menús, puede introducir directamente la etiqueta como "fijo". También puede introducir una referencia para una variable o un elemento XLIFF, lo que facilitará el mantenimiento y la traducción de las aplicaciones. Puede utilizar los siguientes tipos de referencias: - Una referencia a un recurso XLIFF del tipo :xliff:MyLabel. Para más información sobre las referencias XLIFF, consulte la sección *Arquitectura XLIFF* en *Referencia Diseño 4D*. -- (**Deprecated**) An interprocess variable name followed by a number, for example: `:<>vlang,3`. Si se cambia el contenido de esta variable, se modificará la etiqueta del menú cuando se muestre. En este caso, la etiqueta llamará a un recurso XLIFF. El valor contenido en la variable `<>vlang` corresponde al atributo *id* del elemento *group*. El segundo valor (3 en este ejemplo) designa el atributo *id* del elemento *trans-unit*. +- (**Obsoleto**) Un nombre de variable interproceso seguido de un número, por ejemplo: `:<>vlang,3`. Si se cambia el contenido de esta variable, se modificará la etiqueta del menú cuando se muestre. En este caso, la etiqueta llamará a un recurso XLIFF. El valor contenido en la variable `<>vlang` corresponde al atributo *id* del elemento *group*. El segundo valor (3 en este ejemplo) designa el atributo *id* del elemento *trans-unit*. -Using the 4D language, you set the title property through the *itemText* parameter of the [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), and [`SET MENU ITEM`](../commands/set-menu-item) commands. +Usando el lenguaje 4D, se define la propiedad del título a través del parámetro *itemText* de los comandos [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), y [`SET MENU ITEM`](../commands/set-menu-item). ### Caracteres de control @@ -33,9 +33,9 @@ Los caracteres de control no aparecen en las etiquetas de los comandos del menú ## Parámetros -Puede asociar un parámetro personalizado a cada elemento del menú. Un parámetro de elemento de menú es una cadena de caracteres cuyo contenido puede elegirse libremente. It can be set in the Menu editor, or through the [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter) command. +Puede asociar un parámetro personalizado a cada elemento del menú. Un parámetro de elemento de menú es una cadena de caracteres cuyo contenido puede elegirse libremente. Puede configurarse en el editor de menús o mediante el comando [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter). -Menu item parameters are useful with programmed management of menus, in particular when using the [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) and [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter) commands. +Los parámetros de los elementos de menú son útiles para la gestión programada de menús, en particular cuando se utilizan los comandos [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) y [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter). ## Acción @@ -57,7 +57,7 @@ Puede asignar un método proyecto y/o una acción estándar a un comando de men - **Acción estándar asociada**: elija o escriba la acción que desea asignar en el combo box "Acción estándar asociada". Puede introducir toda acción soportada y (opcionalmente) el parámetro que desee en el área. Para obtener una lista completa de acciones estándar, consulte la sección **Acciones estándar** en el *Modo Diseño*. **Nota para macOS:** en macOS, los comandos de menús personalizados asociados a la acción *Salir* se colocan automáticamente en el menú de la aplicación, conforme a los estándares de interfaz de la plataforma. -Using the 4D language, you can associate a project method using the [`SET MENU ITEM METHOD`](../commands/set-menu-item-method) command, and a standard action using the [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property) command. +Utilizando el lenguaje 4D, puede asociar un método de proyecto utilizando el comando [`SET MENU ITEM METHOD`](../commands/set-menu-item-method), y una acción estándar utilizando el comando [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property). ### Iniciar un proceso diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md index dbba01abbd9f8a..06fd41ba79e5bd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md @@ -17,7 +17,7 @@ No se puede activar directamente la ejecución de la función de evento. Los eve :::info Nota de compatibilidad -Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. +Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index 1889c583ab40d8..669de5f11a80eb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -338,7 +338,7 @@ La función `Class constructor` es activada por los siguientes comandos y funcio :::note Notas -- The [`entity.clone()`](../API/EntityClass.md#clone) function does not trigger the entity Class constructor. +- La función [`entity.clone()`](../API/EntityClass.md#clone) no activa el constructor de la clase de la entidad. - Los registros creados a nivel de la base de datos 4D utilizando comandos del lenguaje clásico 4D o acciones estándar no activan el Class constructor de la entidad. ::: @@ -404,7 +404,7 @@ sequenceDiagram ``` -#### Example 4 (diagram): Qodly - Standard action and update value on the newly created entity +#### Ejemplo 4 (diagrama): Qodly - Acción estándar y valor de actualización en la nueva entidad creada ```mermaid diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/date-time-formats.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/date-time-formats.md index 79031da5a4075f..c4086f2b4ba691 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/date-time-formats.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Project/date-time-formats.md @@ -112,7 +112,7 @@ La siguiente tabla muestra todos los patrones soportados para formatos de fecha ### `L` (monopuesto) vs `M` -En algunos idiomas (ruso, eslovaco), el mes utilizado por sí solo es diferente al mes en una fecha. In "January 10, 2010", "January" is not spelled the same as in "*rendez-vous* in January". +En algunos idiomas (ruso, eslovaco), el mes utilizado por sí solo es diferente al mes en una fecha. En "10 de enero de 2010", "enero" no se escribe igual que en "*rendez-vous* en janvier". ### `e` vs `c` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md index 09aab72cb82cf9..9edb4dbc3da69b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/classes.md @@ -205,7 +205,7 @@ La propiedad `.borderBottom` es la **.borderTop** : [cs.ViewPro.LineBorder](#lineborder) -The `.borderTop` property is the top border line of the table . +La propiedad `.borderTop` es la línea del borde superior de la tabla . ### .borderHorizontal diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md index 2843b740b83dc6..8c82c06835134d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md @@ -48,14 +48,14 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | autoFitType | number | El contenido se formatea para que se ajuste en las celdas, o en las celdas y los encabezados. Valores disponibles:
    ConstanteValorDescripción
    vk auto fit type cell 0 El contenido se ajusta automáticamente a las celdas
    vk auto fit type cell with header 1 El contenido se ajusta automáticamente a las celdas y encabezados
    | | backColor | string | Una cadena de color utilizada para representar el color de fondo del área, como "red", "#FFFF00", "rgb(255,0,0)", "Acento 5". El color de fondo inicial se oculta cuando se define una backgroundImage. | | backgroundImage | string / picture / file | Imagen de fondo para el área. | -| backgroundImageLayout | number | Cómo se muestra la imagen de fondo. Available values:
    ConstantValueDescription
    vk image layout center 1 In the center of the area.
    vk image layout none 3 In the upper left corner of the area with its original size.
    vk image layout stretch 0 Llena el área.
    vk image layout zoom 2 Mostrado con su relación de aspecto original.
    | +| backgroundImageLayout | number | Cómo se muestra la imagen de fondo. Available values:
    ConstantValueDescription
    vk image layout center 1 In the center of the area.
    vk image layout none 3 En la esquina superior izquierda del área con su tamaño original.
    vk image layout stretch 0 Llena el área.
    vk image layout zoom 2 Mostrado con su relación de aspecto original.
    | | calcOnDemand | boolean | Las fórmulas se calculan sólo cuando se piden. | | columnResizeMode | number | Redimensiona modo para columnas. Valores disponibles:
    ConstanteValorDescripción
    vk resize mode normal 0 Utiliza el modo de redimensionamiento normal (es decir, las columnas restantes se ven afectadas)
    vk resize mode split 1 Utiliza el modo dividido (es decir, las columnas restantes no se ven afectadas)
    | | copyPasteHeaderOptions | number | Encabezados para incluir cuando se copian o pegan datos. Available values:
    ConstantValueDescription
    vk copy paste header options all headers3 Includes selected headers when data is copied; overwrites selected headers when data is pasted.
    vk copy paste header options column headers 2 Includes selected column headers when data is copied; overwrites selected column headers when data is pasted.
    vk copy paste header options no headers0 Column and row headers are not included when data is copied; does not overwrite selected column or row headers when data is pasted.
    vk copy paste header options row headers1 Includes selected row headers when data is copied; overwrites selected row headers when data is pasted.
    | | customList | collection | La lista para que los usuarios personalicen el relleno de arrastre, dar prioridad a que coincida con esta lista en cada relleno. Cada elemento de colección es una colección de cadenas. Vet en [SpreadJS docs](https://developer.mescius.com/spreadjs/docs/features/cells/AutoFillData/AutoFillLists). | | cutCopyIndicatorBorderColor | string | Color del borde del indicador que aparece cuando el usuario corta o copia la selección. | | cutCopyIndicatorVisible | boolean | Muestra un indicador al copiar o cortar el elemento seleccionado. | -| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Fills cells with series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | +| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Llena las celdas con series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | | enableAccessibility | boolean | El soporte de accesibilidad está activado en la hoja de cálculo. | | enableFormulaTextbox | boolean | Se activa la caja de texto de la fórmula. | | grayAreaBackColor | string | Una cadena color utilizada para representar el color de fondo del área gris, como "red", "#FFFF00", "rgb(255,0,0)", "Accent 5", etc. | @@ -66,7 +66,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | newTabVisible | boolean | Mostrar una pestaña especial para permitir a los usuarios insertar nuevas hojas. | | numbersFitMode | number | Cambia el modo de visualización cuando el ancho de los datos de fecha/número es mayor que el ancho de la columna. Valores disponibles:
    ConstanteValorDescripción
    vk numbers fit mode mask0 Sustituye el contenido de los datos por "###" y muestra la punta
    vk numbers fit mode overflow 1 Muestra el contenido de los datos como una cadena. Si la siguiente celda está vacía, se desborda el contenido.
    | | pasteSkipInvisibleRange | boolean | Pegar u omitir el pegado de datos en rangos invisibles:
    • False (por defecto): pegar datos
    • True: omitir el pegado en rangos invisibles
    Ver [SpreadJS docs](https://developer.mescius.com/spreadjs/docs/features/rows-columns/paste-skip-data-invisible-range) para más información sobre rangos invisibles. | -| referenceStyle | number | Estilo para referencias de celdas y rangos en fórmulas de celdas. Available values:
    ConstantValueDescription
    vk reference style A1 0 Use A1 style.
    vk reference style R1C1 1 Use R1C1 style
    | +| referenceStyle | number | Estilo para referencias de celdas y rangos en fórmulas de celdas. Available values:
    ConstantValueDescription
    vk reference style A1 0 Use A1 style.
    vk estilo de referencia R1C1 1 Utilizar el estilo R1C1
    | | resizeZeroIndicator | number | Política de dibujo cuando las líneas o columnas se redimensionan a 0. Available values:
    ConstantValueDescription
    vk resize zero indicator default 0 Uses the current drawing policy when the row or column is resized to zero.
    vk resize zero indicator enhanced 1 Draws two short lines when the row or column is resized to zero.
    | | rowResizeMode | number | La forma en que se redimensionan las líneas. Los valores disponibles son los mismos qe columnResizeMode | | scrollbarAppearance | number | Apariencia de la barra de desplazamiento. Available values:
    ConstantValueDescription
    vk scrollbar appearance mobile1 Mobile scrollbar appearance.
    vk scrollbar appearance skin (por defecto)0 Apariencia clásica de la barra de desplazamiento similar a Excel.
    | @@ -79,7 +79,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | showDragFillSmartTag | boolean | Mostrar el diálogo de arrastrar y rellenar. | | showDragFillTip | boolean | Mostrar la punta de arrastrar y soltar. | | showHorizontalScrollbar | boolean | Mostrar la barra de desplazamiento horizontal. | -| showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Solo se muestra la punta de redimensionamiento horizontal.
    vk show resize tip none 0 No resize tip is displayed.
    vk show resize tip row 2 Only the vertical resize tip is displayed.
    | +| showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Solo se muestra la punta de redimensionamiento horizontal.
    vk show resize tip none 0 No se muestra ningún consejo de redimensionamiento.
    vk show resize tip row 2 Solo se muestra la punta de redimensionamiento vertical.
    | | showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Solo se muestra la punta de desplazamiento vertical.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Solo se muestra la punta de desplazamiento vertical.
    | | showVerticalScrollbar | boolean | Mostrar la barra de desplazamiento vertical. | | tabEditable | boolean | La pestaña de la hoja se puede editar. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md index 105b658372a4fe..1afca4411910ff 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md @@ -116,7 +116,7 @@ Hay dos formas de acceder a Qodly Studio: The Qodly Studio documentation is available on the [Qodly documentation website](https://developer.qodly.com/docs/studio/overview). -You can rely on this documentation and its associated resources for developing web applications powered by Qodly pages. Sin embargo, dependiendo de la etapa de implementación, los desarrolladores 4D utilizarán Qodly Studio o 4D IDE (ver [Comparación de funcionalidades](#comparación-de-funcionalidades)). +Puede confiar en esta documentación y sus recursos asociados para desarrollar aplicaciones web basadas en páginas Qodly. Sin embargo, dependiendo de la etapa de implementación, los desarrolladores 4D utilizarán Qodly Studio o 4D IDE (ver [Comparación de funcionalidades](#comparación-de-funcionalidades)). Se ofrecen ejemplos de código en [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), pero como QodlyScript hereda del Lenguaje 4D, no se sentirá perdido. Se ofrecen ejemplos de código en [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), pero como QodlyScript hereda del Lenguaje 4D, no se sentirá perdido. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-document.md index fe2e0e06cbf62c..6cb9ae06065872 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-document.md @@ -52,25 +52,25 @@ Puede omitir el parámetro *format*, en cuyo caso deberá especificar la extensi Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* conteniendo los valores para definir las propiedades del documento exportado. Las siguientes propiedades están disponibles: -| Constante | Valor | Comentario | -| ------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | -| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | -| wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](#wk-factur-x-object)). | -| wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | -| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | -| wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | -| wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | -| wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). If a picture contains more than one format, the format for screen rendering is used.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | -| wk page index | pageIndex | Sólo para exportación SVG. Índice de la página a exportar a formato svg (por defecto es 1). El índice de páginas comienza en 1 para la primera página del documento. **Nota:** el índice de páginas es independiente de la numeración de páginas. | -| wk pdfa version | pdfaVersion | Exporta PDF conforme a una versión PDF/A. Para más información sobre las propiedades y versiones de PDF/A, consulte la [página PDF/A en Wikipedia](https://en.wikipedia.org/wiki/PDF/A). Valores posibles:
  • `wk pdfa2`: exporta a la versión "PDF/A-2"
  • `wk pdfa3`: exporta a la versión "PDF/A-3"
  • **Nota:** en macOS, `wk pdfa2` puede exportar a PDF/A-2 o PDF/A-3 o superior, dependiendo de la implementación de la plataforma. Además, `wk pdfa3` significa "exporta a *al menos* PDF/A-3". En Windows, el archivo PDF de salida siempre será igual a la conformidad deseada. | -| wk recompute formulas | recomputeFormulas | Define si las fórmulas deben volver a calcularse cuando se exportan. Valores posibles:
  • true - Valor por defecto. Se vuelven a calcular todas las fórmulas
  • false - No se vuelven a calcular las fórmulas
  • | -| wk visible background and anchored elements | visibleBackground | Muestra o exporta imágenes/color de fondo, imágenes ancladas y cuadros de texto (para mostrar, efecto visible sólo en modo de vista Página o Anidado). Valores posibles: True/False | -| wk visible empty images | visibleEmptyImages | Muestra o exporta un rectángulo negro por defecto para las imágenes que no se pueden cargar o calcular (imágenes vacías o imágenes en un formato no compatible). Valores posibles: True/False. Valor por defecto: True Si el valor es False, los elementos de imagen que falten no se mostrarán en absoluto aunque tengan bordes, ancho, alto o fondo; esto puede afectar al diseño de la página para imágenes en línea. | -| wk visible footers | visibleFooters | Muestra o exporta los pies de página (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | -| wk visible headers | visibleHeaders | Muestra o exporta los encabezados (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | -| wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | -| wk whitespace | whitespace | Define el valor css "white-space" para los formatos de exportación `wk mime html` y `wk web page complete`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | +| Constante | Valor | Comentario | +| ------------------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | +| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | +| wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](#wk-factur-x-object)). | +| wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | +| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | +| wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | +| wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | +| wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el formato para la renderización en pantalla.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | +| wk page index | pageIndex | Sólo para exportación SVG. Índice de la página a exportar a formato svg (por defecto es 1). El índice de páginas comienza en 1 para la primera página del documento. **Nota:** el índice de páginas es independiente de la numeración de páginas. | +| wk pdfa version | pdfaVersion | Exporta PDF conforme a una versión PDF/A. Para más información sobre las propiedades y versiones de PDF/A, consulte la [página PDF/A en Wikipedia](https://en.wikipedia.org/wiki/PDF/A). Valores posibles:
  • `wk pdfa2`: exporta a la versión "PDF/A-2"
  • `wk pdfa3`: exporta a la versión "PDF/A-3"
  • **Nota:** en macOS, `wk pdfa2` puede exportar a PDF/A-2 o PDF/A-3 o superior, dependiendo de la implementación de la plataforma. Además, `wk pdfa3` significa "exporta a *al menos* PDF/A-3". En Windows, el archivo PDF de salida siempre será igual a la conformidad deseada. | +| wk recompute formulas | recomputeFormulas | Define si las fórmulas deben volver a calcularse cuando se exportan. Valores posibles:
  • true - Valor por defecto. Se vuelven a calcular todas las fórmulas
  • false - No se vuelven a calcular las fórmulas
  • | +| wk visible background and anchored elements | visibleBackground | Muestra o exporta imágenes/color de fondo, imágenes ancladas y cuadros de texto (para mostrar, efecto visible sólo en modo de vista Página o Anidado). Valores posibles: True/False | +| wk visible empty images | visibleEmptyImages | Muestra o exporta un rectángulo negro por defecto para las imágenes que no se pueden cargar o calcular (imágenes vacías o imágenes en un formato no compatible). Valores posibles: True/False. Valor por defecto: True Si el valor es False, los elementos de imagen que falten no se mostrarán en absoluto aunque tengan bordes, ancho, alto o fondo; esto puede afectar al diseño de la página para imágenes en línea. | +| wk visible footers | visibleFooters | Muestra o exporta los pies de página (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | +| wk visible headers | visibleHeaders | Muestra o exporta los encabezados (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | +| wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | +| wk whitespace | whitespace | Define el valor css "white-space" para los formatos de exportación `wk mime html` y `wk web page complete`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | La siguiente tabla indica la *option* disponible por *format* de exportación: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md index 606d4bcc42bcd7..f77c075aef2b83 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md @@ -52,25 +52,25 @@ En el parámetro *format*, pase una constante del tema *4D Write Pro Constants* Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* conteniendo los valores para definir las propiedades del documento exportado. Las siguientes propiedades están disponibles: -| Constante | Valor | Comentario | -| ------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | -| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | -| wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](./wp-export-document.md#wk-factur-x-object)). | -| wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](./wp-export-document.md#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | -| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | -| wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | -| wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | -| wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). If a picture contains more than one format, the format for screen rendering is used.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | -| wk page index | pageIndex | Sólo para exportación SVG. Índice de la página a exportar a formato svg (por defecto es 1). El índice de páginas comienza en 1 para la primera página del documento. **Nota:** el índice de páginas es independiente de la numeración de páginas. | -| wk pdfa version | pdfaVersion | Exporta PDF conforme a una versión PDF/A. Para más información sobre las propiedades y versiones de PDF/A, consulte la [página PDF/A en Wikipedia](https://en.wikipedia.org/wiki/PDF/A). Valores posibles:
  • `wk pdfa2`: exporta a la versión "PDF/A-2"
  • `wk pdfa3`: exporta a la versión "PDF/A-3"
  • **Nota:** en macOS, `wk pdfa2` puede exportar a PDF/A-2 o PDF/A-3 o superior, dependiendo de la implementación de la plataforma. Además, `wk pdfa3` significa "exporta a *al menos* PDF/A-3". En Windows, el archivo PDF de salida siempre será igual a la conformidad deseada. | -| wk recompute formulas | recomputeFormulas | Define si las fórmulas deben volver a calcularse cuando se exportan. Valores posibles:
  • true - Valor por defecto. Se vuelven a calcular todas las fórmulas
  • false - No se vuelven a calcular las fórmulas
  • | -| wk visible background and anchored elements | visibleBackground | Muestra o exporta imágenes/color de fondo, imágenes ancladas y cuadros de texto (para mostrar, efecto visible sólo en modo de vista Página o Anidado). Valores posibles: True/False | -| wk visible empty images | visibleEmptyImages | Muestra o exporta un rectángulo negro por defecto para las imágenes que no se pueden cargar o calcular (imágenes vacías o imágenes en un formato no compatible). Valores posibles: True/False. Valor por defecto: True Si el valor es False, los elementos de imagen que falten no se mostrarán en absoluto aunque tengan bordes, ancho, alto o fondo; esto puede afectar al diseño de la página para imágenes en línea. | -| wk visible footers | visibleFooters | Muestra o exporta los pies de página (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | -| wk visible headers | visibleHeaders | Muestra o exporta los encabezados (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | -| wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | -| wk whitespace | whitespace | Define el valor css "white-space" para el formato de exportación `wk mime html`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | +| Constante | Valor | Comentario | +| ------------------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | +| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | +| wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](./wp-export-document.md#wk-factur-x-object)). | +| wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](./wp-export-document.md#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | +| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | +| wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | +| wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | +| wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el formato para la renderización en pantalla.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | +| wk page index | pageIndex | Sólo para exportación SVG. Índice de la página a exportar a formato svg (por defecto es 1). El índice de páginas comienza en 1 para la primera página del documento. **Nota:** el índice de páginas es independiente de la numeración de páginas. | +| wk pdfa version | pdfaVersion | Exporta PDF conforme a una versión PDF/A. Para más información sobre las propiedades y versiones de PDF/A, consulte la [página PDF/A en Wikipedia](https://en.wikipedia.org/wiki/PDF/A). Valores posibles:
  • `wk pdfa2`: exporta a la versión "PDF/A-2"
  • `wk pdfa3`: exporta a la versión "PDF/A-3"
  • **Nota:** en macOS, `wk pdfa2` puede exportar a PDF/A-2 o PDF/A-3 o superior, dependiendo de la implementación de la plataforma. Además, `wk pdfa3` significa "exporta a *al menos* PDF/A-3". En Windows, el archivo PDF de salida siempre será igual a la conformidad deseada. | +| wk recompute formulas | recomputeFormulas | Define si las fórmulas deben volver a calcularse cuando se exportan. Valores posibles:
  • true - Valor por defecto. Se vuelven a calcular todas las fórmulas
  • false - No se vuelven a calcular las fórmulas
  • | +| wk visible background and anchored elements | visibleBackground | Muestra o exporta imágenes/color de fondo, imágenes ancladas y cuadros de texto (para mostrar, efecto visible sólo en modo de vista Página o Anidado). Valores posibles: True/False | +| wk visible empty images | visibleEmptyImages | Muestra o exporta un rectángulo negro por defecto para las imágenes que no se pueden cargar o calcular (imágenes vacías o imágenes en un formato no compatible). Valores posibles: True/False. Valor por defecto: True Si el valor es False, los elementos de imagen que falten no se mostrarán en absoluto aunque tengan bordes, ancho, alto o fondo; esto puede afectar al diseño de la página para imágenes en línea. | +| wk visible footers | visibleFooters | Muestra o exporta los pies de página (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | +| wk visible headers | visibleHeaders | Muestra o exporta los encabezados (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | +| wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | +| wk whitespace | whitespace | Define el valor css "white-space" para el formato de exportación `wk mime html`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | The following table indicates the *option* available per export *format*: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md index 05064f54bf9dd9..9e7eb901643b46 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md @@ -64,8 +64,8 @@ Puede pasar un objeto para definir cómo se gestionan los siguientes atributos d **Notas de compatibilidad** -- *Character style sheets in legacy 4D Write documents use a proprietary mechanism, which is not supported by 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Las hojas de estilo de caracteres antiguos no son importadas y ya no están referenciadas en el documento.* -- *Support for importing in .docx format is only certified for Microsoft Word 2010 and newer. Versiones antiguas, especialmente Microsoft Word 2007, pueden no importar correctamente.* +- *Las hojas de estilo de caracteres de los documentos heredados de 4D Write utilizan un mecanismo propietario que no es compatible con 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Las hojas de estilo de caracteres antiguos no son importadas y ya no están referenciadas en el documento.* +- *El soporte para la importación en formato .docx solo está certificado para Microsoft Word 2010 y más recientes. Versiones antiguas, especialmente Microsoft Word 2007, pueden no importar correctamente.* ## Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md index 1271a5aaaa8e21..c521ca59af78e2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md @@ -44,7 +44,7 @@ var $client:=cs.AIKit.OpenAI.new({apiKey: "your api key"}) #### URL del servidor -For a [compatible provider](../compatible-openai.md) API, you can configure the server URL. +Para una API [proveedor compatible](../compatible-openai.md), puede configurar la URL del servidor. ```4d var $client:=cs.AIKit.OpenAI.new({apiKey: "your api key"; baseURL: "https://server.ai"}) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md index 50c983790a5e75..b237a978ab1103 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md @@ -5,7 +5,7 @@ title: OpenAIError Class # OpenAIError Class -La clase `OpenAIError` está diseñada para manejar errores devueltos por la API OpenAI. It extracts relevant information from the error response and provides methods to access this information. +La clase `OpenAIError` está diseñada para manejar errores devueltos por la API OpenAI. Extrae información relevante de la respuesta de error y ofrece los métodos para acceder a esta información. ## Propiedades diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIParameters.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIParameters.md index 54c9d61d806d8a..f4bf7976453bad 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIParameters.md @@ -5,7 +5,7 @@ title: OpenAIParameters # OpenAIParameters -The `OpenAIParameters` class is designed to handle execution and request parameters for interacting with the OpenAI API. +La clase `OpenAIParameters` está diseñada para manejar los parámetros de ejecución y de petición para interactuar con la API OpenAI. ## Propiedades @@ -24,16 +24,16 @@ Ver la [documentación sobre código asíncrono](../asynchronous-call.md) | Propiedad | Tipo | Descripción | | -------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `timeout` | Real | Overrides the client-level default timeout for the request, in seconds. Por defecto es 0. | +| `timeout` | Real | Reemplaza el tiempo de espera predeterminado del nivel de cliente para la petición, en segundos. Por defecto es 0. | | `httpAgent` | HTTPAgent | Anula el agente HTTP predeterminado a nivel de cliente para la petición. | | `maxRetries` | Integer | El número máximo de reintentos para la petición. (Sólo si el código no es asíncrono, es decir, no se proporciona ninguna función) | | `extraHeaders` | Object | Encabezados adicionales para enviar con la petición. | ### Propiedades OpenAPI -| Propiedad | Tipo | Descripción | -| --------- | ---- | ----------------------------------------------------------------------------------------------------------- | -| `user` | Text | A unique identifier representing the end-user, which helps OpenAI monitor and detect abuse. | +| Propiedad | Tipo | Descripción | +| --------- | ---- | --------------------------------------------------------------------------------------------------------------------------- | +| `user` | Text | Un identificador único que representa al usuario final y que ayuda a OpenAI a supervisar y detectar abusos. | ## Clases heredadas diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/asynchronous-call.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/asynchronous-call.md index 90a8a0f9ad4cd2..3df96877e738c2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/asynchronous-call.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/asynchronous-call.md @@ -5,7 +5,7 @@ title: Asynchronous Call # Asynchronous Call -If you do not want to wait for the OpenAPI response when making a request to its API, you need to use asynchronous code. +Si no desea esperar la respuesta del OpenAPI al hacer una petición a su API, debe utilizar un código asíncrono. Debe proporcionar un `4D.Formula` para recibir el resultado. Ver [OpenAIParameters](Classes/OpenAIParameters.md) para una lista de ellos. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md index fdbd960b6e8acd..d4288b04753c41 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md @@ -31,7 +31,7 @@ The command facilitates debugging by enabling the identification of the method o | **Propiedad** | **Tipo** | **Description** | **Ejemplo** | | ------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -| database | Text | Name of the database calling the method (to distinguish host methods and component methods) | "database":"contactInfo" | +| database | Text | Nombre de la base de datos que llama al método (para distinguir los métodos locales de los métodos del componente) | "database":"contactInfo" | | formula | Text (si lo hay) | Contenido de la línea actual de código en el nivel actual de la cadena de llamadas (texto bruto). Corresponde al contenido de la línea referenciada por la propiedad `line` en el archivo fuente indicado por el método. Si el código fuente no está disponible, la propiedad `formula` se omite (Undefined). | "var $stack:=Call chain" | | línea | Integer | Número de línea de llamada al método | "line":6 | | name | Text | Nombre del método llamado | "name":"On Load" | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md index 81ea01647a075f..4a2b20f032e1e2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md @@ -35,7 +35,7 @@ The **Command name** command returns t Hay dos parámetros opcionales: - *info*: propiedades del comando. The returned value is a *bit field*, where the following bits are meaningful: - - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Only thread-safe commands can be used in [preemptive processes](../Develop/preemptive.md). + - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Solo se pueden usar comandos hilo seguro en [procesos preventivos](../Develop/preemptive.md). - Segundo bit (bit 1): se define en 1 si el comando es **obsoleto**, y en 0 si no lo es. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). *theme*: nombre del tema del lenguaje 4D para el comando. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/variables.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/variables.md index a7b5e56a2fe736..9ca0af37245507 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/variables.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/variables.md @@ -242,7 +242,7 @@ Las variables del sistema son utilizadas por los [comandos 4D](commands.md). Con | ------------------------------------------------------ | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OK` | Integer | Normalmente se establece en 1 después de que un comando haya mostrado una caja de diálogo y el usuario haya hecho clic en el botón **Aceptar**, y en 0 si hizo clic en **Cancelar**. Algunos comandos también modifican el valor de la variable del sistema `OK` cuando se ejecuta una operación con éxito. | | `Document` | Text | Contiene el "nombre largo" (ruta completa+nombre) del último archivo abierto o creado mediante comandos como [Open document](https://doc.4d.com/4dv20/help/command/en/page264.html) o [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/en/page345.html). | -| `FldDelimit`, `RecDelimit` | Text | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tabulación** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | +| `FldDelimit`, `RecDelimit` | Integer | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tabulación** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | | `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/en/page155.html). Ver [Gestión de errores dentro del método](../Concepts/error-handling.md#handling-errors-within-the-method). | | `MouseDown` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html). Toma el valor 1 cuando se presiona el botón del ratón, de lo contrario 0. | | `MouseX`, `MouseY` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html).
  • En un evento `MouseDown=1`, `MouseX` y `MouseY` se establecen respectivamente en las coordenadas verticales y horizontales del clic. Ambos valores se expresan en píxeles y utilizan el sistema de coordenadas local de la ventana.
  • En el caso de un campo imagen o variable, `MouseX` y `MouseY` devuelven las coordenadas locales de un clic de ratón en los eventos de formulario [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) y [`On Mouse Up`](../Events/onMouseUp.md). Las coordenadas locales del cursor del ratón también se retornan en los eventos formulario [`On Mouse Enter`](../Events/onMouseEnter.md) y [`On Mouse Move`](../Events/onMouseMove.md). Para obtener más información, consulte la sección [Coordenadas del ratón en una imagen](../FormEditor/pictures.md#coordenadas-del-ratón-en-una-imagen).
  • | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/FormEditor/formEditor.md b/i18n/es/docusaurus-plugin-content-docs/version-20/FormEditor/formEditor.md index b3bc4c53bcc4a9..7dcdb830dcd022 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/FormEditor/formEditor.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/FormEditor/formEditor.md @@ -340,7 +340,7 @@ Cuando se superponen varios objetos, se puede utilizar el atajo **Ctrl+Mayús+cl :::note -In binary databases, use **Ctrl+Click / Command+Click** to perform the same action. +En bases de datos binarias, utilice **Ctrl+Clic / Comando+Clic** para efectuar la misma acción. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md index 3624ec598b4b1b..b66e8076cf076a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md @@ -436,7 +436,7 @@ La función `.getInfo()` devuelve | Propiedad | Tipo | Descripción | | ---------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | type | string |
  • "4D": datastore principal, disponible a través de ds
  • "4D Server": datastore remoto, abrir con Open datastore
  • | -| networked | boolean |
  • True: el almacén de datos se alcanza a través de una conexión de red.
  • False: the datastore is not reached through a network connection (local database)
  • | +| networked | boolean |
  • True: el almacén de datos se alcanza a través de una conexión de red.
  • False: no se llega al almacén de datos a través de una conexión de red (base de datos local)
  • | | localID | text | ID del almacén de datos en la máquina. ID del almacén de datos en la máquina. Cadena vacía ("") para el almacén de datos principal. | | connection | object | Objeto que describe la conexión del almacén de datos remoto (no se devuelve para el almacén de datos principal). Propiedades disponibles:
    PropiedadTipoDescripción
    nombre de hosttextoDirección IP o nombre del datastore remoto + ":" + número de puerto
    tlsbooleanoTrue si se utiliza una conexión segura con el datastore remoto
    idleTimeoutnúmeroTiempo de inactividad de la sesión (en minutos)
    usuariotextoUsuario autenticado en el almacén de datos remoto
    | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/EntityClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/EntityClass.md index 43a8a2bc90666a..e5bb51f928f1e0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/EntityClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/EntityClass.md @@ -393,15 +393,15 @@ El objeto devuelto por `.drop()` contiene las siguientes propiedades: (\*) Los siguientes valores pueden ser devueltos en las propiedades *status* y *statusText* del objeto *Result* en caso de error: -| Constante | Valor | Comentario | -| ----------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza entity.drop(), este error puede ser devuelto cuando se utiliza la opción dk force drop if stamp changed. When using entity.lock(), this error can be returned when dk reload if stamp changed option is used.
  • **statusText asociado**: "La entidad ya no existe" | -| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista.
    **statusText asociado**: "Already locked" | -| `dk status validation failed` | 7 | Error no crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | -| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
    **statusText asociado**\*: "Other error" | -| `dk status serious validation error` | 8 | Error crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | -| `dk status stamp has changed` | 2 | El valor del marcador interno (stamp) de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used
  • **Associated statusText**: "Stamp has changed"
  • | -| `dk status wrong permission` | 1 | Los privilegios actuales no permiten suprimir la entidad. **Associated statusText**: "Permission Error" | +| Constante | Valor | Comentario | +| ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `dk status entity does not exist anymore` | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido eliminada (el marcador ha cambiado y ahora el espacio de memoria está libre)
  • la entidad ha sido eliminada y reemplazada por otra con otra clave primaria (el marcador ha cambiado y una nueva entidad ahora utiliza el espacio memoria). Cuando se utiliza entity.drop(), este error puede ser devuelto cuando se utiliza la opción dk force drop if stamp changed. Cuando se utiliza entity.lock(), este error puede ser devuelto cuando se utiliza la opción dk reload if stamp changed
  • **statusText asociado**: "La entidad ya no existe" | +| `dk status locked` | 3 | La entidad está bloqueada por un bloqueo pesimista.
    **statusText asociado**: "Already locked" | +| `dk status validation failed` | 7 | Error no crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Mild Validation Error" | +| `dk status serious error` | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc.
    **statusText asociado**\*: "Other error" | +| `dk status serious validation error` | 8 | Error crítico enviado por el desarrollador para un [evento de validación](../ORDA/orda-events.md). **statusText asociado**: "Serious Validation Error" | +| `dk status stamp has changed` | 2 | El valor del marcador interno (stamp) de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • with `.save()`: error only if the `dk auto merge` option is not used
  • with `.drop()`: error only if the `dk force drop if stamp changed` option is not used
  • with `.lock()`: error only if the `dk reload if stamp changed` option is not used
  • **Associated statusText**: "Stamp has changed"
  • | +| `dk status wrong permission` | 1 | Los privilegios actuales no permiten suprimir la entidad. **Associated statusText**: "Permission Error" | #### Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md index c5ed7c2561fabb..fb2d8d27b187e0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md @@ -3,7 +3,7 @@ id: TCPEventClass title: TCPEvent --- -The `TCPEvent` class provides information about events occurring during the lifecycle of a TCP connection. It is generated when a [TCPConnection](TCPConnectionClass.md) is opened and is typically utilized in callbacks such as `onConnection`, `onData`, `onError`, and others. +La clase `TCPEvent` ofrece información sobre los eventos que se producen durante el ciclo de vida de una conexión TCP. It is generated when a [TCPConnection](TCPConnectionClass.md) is opened and is typically utilized in callbacks such as `onConnection`, `onData`, `onError`, and others.
    Historia diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebServerClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebServerClass.md index 9b27f3d5414da9..3f4c6a3239e5ec 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebServerClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebServerClass.md @@ -187,7 +187,7 @@ El nombre de la página de i *Propiedad de sólo lectura* -A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. Para más información, consulte la página [HTTP Request handler](../WebServer/http-request-handler.md). +Una colección de objetos HTTP handler personalizados. Un objeto HTTP handler contiene un patrón de URL escuchado, un verbo manejado y el código a llamar. Los manejadores HTTP pueden definirse a través de un archivo HTTPHandlers.json o del parámetro *settings* de la función [`.start()`](#start). Para más información, consulte la página [HTTP Request handler](../WebServer/http-request-handler.md). @@ -495,7 +495,7 @@ La ruta de la carpeta raíz del s *Propiedad de sólo lectura* -A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. Para obtener más información, consulte la página [Reglas HTTP](../WebServer/http-rules.md). +Una colección de objetos de reglas que se manejan actualmente para personalizar los encabezados HTTP. Un objeto regla contiene una propiedad "regexPattern", así como un nombre de acción con un valor. Las reglas HTTP pueden definirse a través de un archivo HTTPRules.json o del parámetro *settings* de la función [`.start()`](#start). Para obtener más información, consulte la página [Reglas HTTP](../WebServer/http-rules.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/variables.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/variables.md index a1cc173febeb9b..e31872102c3770 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/variables.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/variables.md @@ -250,17 +250,18 @@ El lenguaje 4D maneja varias **variables sistema**, las cuales le permiten contr Las variables del sistema son utilizadas por los [comandos 4D](../commands/command-index.md). Consulte el párrafo "Variables del sistema y conjuntos" en la descripción de un comando para averiguar si afecta a una variable del sistema. -| Nombre de la variable del sistema | Tipo | Descripción | -| ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OK` | Integer | Normalmente se establece en 1 después de que un comando haya mostrado una caja de diálogo y el usuario haya hecho clic en el botón **Aceptar**, y en 0 si hizo clic en **Cancelar**. Algunos comandos también modifican el valor de la variable del sistema `OK` cuando se ejecuta una operación con éxito. | -| `Document` | Text | Contiene el "nombre largo" (ruta completa+nombre) del último archivo abierto o creado utilizando comandos como [Open document](../commands-legacy/open-document.md) o [SELECT LOG FILE](../commands/select-log-file.md). | -| `FldDelimit`, `RecDelimit` | Text | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tab** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Ver [Gestión de errores en el método](../Concepts/error-handling.md#handling-errors-within-the-method). | -| `MouseDown` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Toma el valor 1 cuando se presiona el botón del ratón, de lo contrario 0. | -| `MouseX`, `MouseY` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • En un evento `MouseDown=1`, `MouseX` y `MouseY` se establecen respectivamente en las coordenadas verticales y horizontales del clic. Ambos valores se expresan en píxeles y utilizan el sistema de coordenadas local de la ventana.
  • En el caso de un campo imagen o variable, `MouseX` y `MouseY` devuelven las coordenadas locales de un clic de ratón en los eventos de formulario [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) y [`On Mouse Up`](../Events/onMouseUp.md). Las coordenadas locales del cursor del ratón también se retornan en los eventos formulario [`On Mouse Enter`](../Events/onMouseEnter.md) y [`On Mouse Move`](../Events/onMouseMove.md). Para obtener más información, consulte la sección [Coordenadas del ratón en una imagen](../FormEditor/pictures.md#coordenadas-del-ratón-en-una-imagen).
  • | -| `KeyCode` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el código de carácter de la tecla que se acaba de presionar. Si la tecla es una tecla de función, `KeyCode` se establece como un código especial. | -| `Modifiers` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Establece las teclas modificadoras del teclado (Ctrl/Command, Alt/Option, Shift, Caps Lock). | -| `MouseProc` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el número de proceso en el que tuvo lugar el último evento | +| Nombre de la variable del sistema | Tipo | Descripción | +| --------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OK` | Integer | Normalmente se establece en 1 después de que un comando haya mostrado una caja de diálogo y el usuario haya hecho clic en el botón **Aceptar**, y en 0 si hizo clic en **Cancelar**. Algunos comandos también modifican el valor de la variable del sistema `OK` cuando se ejecuta una operación con éxito. | +| `Document` | Text | Contiene el "nombre largo" (ruta completa+nombre) del último archivo abierto o creado utilizando comandos como [Open document](../commands-legacy/open-document.md) o [SELECT LOG FILE](../commands/select-log-file.md). | +| `FldDelimit`, `RecDelimit` | Integer | Contienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es **Tab** (9)) y separador de registros (por defecto es **retorno de carro** (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema. | +| `Error`, `Error line` | Integer | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Ver [Gestión de errores en el método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `Error method`, `Error formula` | Text | Utilizado en un método de captura de errores instalado por el comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Ver [Gestión de errores en el método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `MouseDown` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Toma el valor 1 cuando se presiona el botón del ratón, de lo contrario 0. | +| `MouseX`, `MouseY` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • En un evento `MouseDown=1`, `MouseX` y `MouseY` se establecen respectivamente en las coordenadas verticales y horizontales del clic. Ambos valores se expresan en píxeles y utilizan el sistema de coordenadas local de la ventana.
  • En el caso de un campo imagen o variable, `MouseX` y `MouseY` devuelven las coordenadas locales de un clic de ratón en los eventos de formulario [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) y [`On Mouse Up`](../Events/onMouseUp.md). Las coordenadas locales del cursor del ratón también se retornan en los eventos formulario [`On Mouse Enter`](../Events/onMouseEnter.md) y [`On Mouse Move`](../Events/onMouseMove.md). Para obtener más información, consulte la sección [Coordenadas del ratón en una imagen](../FormEditor/pictures.md#coordenadas-del-ratón-en-una-imagen).
  • | +| `KeyCode` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el código de carácter de la tecla que se acaba de presionar. Si la tecla es una tecla de función, `KeyCode` se establece como un código especial. | +| `Modifiers` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Establece las teclas modificadoras del teclado (Ctrl/Command, Alt/Option, Shift, Caps Lock). | +| `MouseProc` | Integer | Utilizado en un método instalado por el comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Define el número de proceso en el que tuvo lugar el último evento | :::note diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md index 8c272c69a56671..3372865a4eb79b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md @@ -102,7 +102,7 @@ En Windows, 4D soporta el renderizado de formularios **Fluent UI**, el moderno d La renderización Fluent UI ofrece controles modernos y atractivos, compatibilidad con los temas sistema dark/light, renderización más fluida optimizada para pantallas de alta resolución y una experiencia de usuario coherente y alineada con las aplicaciones recientes de Microsoft. -| Light theme | Dark theme | +| Tema claro | Tema oscuro | | --------------------------------------- | -------------------------------------------- | | ![](../assets/en/FormEditor/fluent.png) | ![](../assets/en/FormEditor/fluent-dark.png) | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Menus/properties.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Menus/properties.md index e71e4a99e8fae0..4d34bb1d18dda4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Menus/properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Menus/properties.md @@ -12,9 +12,9 @@ La propiedad **Title** contiene la etiqueta de un menú o elemento de menú tal En el editor de menús, puede introducir directamente la etiqueta como "fijo". También puede introducir una referencia para una variable o un elemento XLIFF, lo que facilitará el mantenimiento y la traducción de las aplicaciones. Puede utilizar los siguientes tipos de referencias: - Una referencia a un recurso XLIFF del tipo :xliff:MyLabel. Para más información sobre las referencias XLIFF, consulte la sección *Arquitectura XLIFF* en *Referencia Diseño 4D*. -- (**Deprecated**) An interprocess variable name followed by a number, for example: `:<>vlang,3`. Si se cambia el contenido de esta variable, se modificará la etiqueta del menú cuando se muestre. En este caso, la etiqueta llamará a un recurso XLIFF. El valor contenido en la variable `<>vlang` corresponde al atributo *id* del elemento *group*. El segundo valor (3 en este ejemplo) designa el atributo *id* del elemento *trans-unit*. +- (**Obsoleto**) Un nombre de variable interproceso seguido de un número, por ejemplo: `:<>vlang,3`. Si se cambia el contenido de esta variable, se modificará la etiqueta del menú cuando se muestre. En este caso, la etiqueta llamará a un recurso XLIFF. El valor contenido en la variable `<>vlang` corresponde al atributo *id* del elemento *group*. El segundo valor (3 en este ejemplo) designa el atributo *id* del elemento *trans-unit*. -Using the 4D language, you set the title property through the *itemText* parameter of the [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), and [`SET MENU ITEM`](../commands/set-menu-item) commands. +Usando el lenguaje 4D, se define la propiedad del título a través del parámetro *itemText* de los comandos [`APPEND MENU ITEM`](../commands/append-menu-item), [`INSERT MENU ITEM`](../commands/insert-menu-item), y [`SET MENU ITEM`](../commands/set-menu-item). ### Caracteres de control @@ -33,9 +33,9 @@ Los caracteres de control no aparecen en las etiquetas de los comandos del menú ## Parámetros -Puede asociar un parámetro personalizado a cada elemento del menú. Un parámetro de elemento de menú es una cadena de caracteres cuyo contenido puede elegirse libremente. It can be set in the Menu editor, or through the [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter) command. +Puede asociar un parámetro personalizado a cada elemento del menú. Un parámetro de elemento de menú es una cadena de caracteres cuyo contenido puede elegirse libremente. Puede configurarse en el editor de menús o mediante el comando [`SET MENU ITEM PARAMETER`](../commands/set-menu-item-parameter). -Menu item parameters are useful with programmed management of menus, in particular when using the [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) and [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter) commands. +Los parámetros de los elementos de menú son útiles para la gestión programada de menús, en particular cuando se utilizan los comandos [`Dynamic pop up menu`](../commands/dynamic-pop-up-menu), [`Get menu item parameter`](../commands/get-menu-item-parameter) y [`Get selected menu item parameter`](../commands/get-selected-menu-item-parameter). ## Acción @@ -57,7 +57,7 @@ Puede asignar un método proyecto y/o una acción estándar a un comando de men - **Acción estándar asociada**: elija o escriba la acción que desea asignar en el combo box "Acción estándar asociada". Puede introducir toda acción soportada y (opcionalmente) el parámetro que desee en el área. Para obtener una lista completa de acciones estándar, consulte la sección **Acciones estándar** en el *Modo Diseño*. **Nota para macOS:** en macOS, los comandos de menús personalizados asociados a la acción *Salir* se colocan automáticamente en el menú de la aplicación, conforme a los estándares de interfaz de la plataforma. -Using the 4D language, you can associate a project method using the [`SET MENU ITEM METHOD`](../commands/set-menu-item-method) command, and a standard action using the [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property) command. +Utilizando el lenguaje 4D, puede asociar un método de proyecto utilizando el comando [`SET MENU ITEM METHOD`](../commands/set-menu-item-method), y una acción estándar utilizando el comando [`SET MENU ITEM PROPERTY`](../commands/set-menu-item-property). ### Iniciar un proceso diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index 4e2033c1d4caa1..4efe396d833a2a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -24,7 +24,7 @@ No se puede activar directamente la ejecución de la función de evento. Los eve :::info Nota de compatibilidad -Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. +Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: @@ -338,7 +338,7 @@ Este evento es activado por las siguientes funciones: This event is triggered **before** the entity is actually saved and lets you check data consistency so that you can stop the action if needed. Por ejemplo, puede comprobar en este evento que "fecha de salida" < "fecha de llegada". -To stop the action, the code of the function must return an [error object](#error-object). +Para detener la acción, el código de la función debe devolver un [objeto error](#error-object). :::note @@ -380,7 +380,7 @@ Function event saving ($event : Object) Este evento se activa cada vez que se guarda una entidad. - Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. The function is executed even if no attribute has been touched in the entity (e.g. in case of sending data to an external app each time a save is done). -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. La función **no** se ejecuta si el atributo no ha sido tocado en la entidad. +- Si definió la función en el nivel de atributo (segunda Sintaxis), solo se llama para este atributo. La función **no** se ejecuta si el atributo no ha sido tocado en la entidad. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -393,13 +393,13 @@ Este evento se activa **mientras** la entidad se guarda. If a [`validateSave()`] :::note -The business logic should raise errors which can't be detected during the `validateSave()` events, e.g. a network error +La lógica de negocio debe generar errores que no puedan detectarse durante los eventos `validateSave()`, por ejemplo, un error de red ::: Durante la acción de guardar, se pueden producir errores en el motor 4D (índice, sello ha cambiado, no hay suficiente espacio en el disco). -To stop the action, the code of the function must return an [error object](#error-object). +Para detener la acción, el código de la función debe devolver un [objeto error](#error-object). #### Ejemplo @@ -420,7 +420,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -434,6 +436,12 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: + ### `Function event afterSave` #### Sintaxis @@ -486,7 +494,7 @@ Function event validateDrop ($event : Object) Este evento se activa cada vez que una entidad está a punto de ser soltada. - Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. +- Si definió la función en el nivel de atributo (segunda Sintaxis), solo se llama para este atributo. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -498,7 +506,7 @@ Este evento se activa con las siguientes funcionalidades: This event is triggered **before** the entity is actually dropped, allowing you to check data consistency and if necessary, to stop the drop action. -To stop the action, the code of the function must return an [error object](#error-object). +Para detener la acción, el código de la función debe devolver un [objeto error](#error-object). #### Ejemplo @@ -533,7 +541,7 @@ Function event dropping ($event : Object) Este evento se activa cada vez que se elimina una entidad. - Si define la función a nivel de entidad (primera Sintaxis), se llama para cualquier atributo de la entidad. -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. +- Si definió la función en el nivel de atributo (segunda Sintaxis), solo se llama para este atributo. La función recibe un [objeto *event*](#event-parameter) como parámetro. @@ -547,11 +555,11 @@ This event is triggered **while** the entity is actually dropped. If a [`validat :::note -The business logic should raise errors which cannot be detected during the `validateDrop()` events, e.g. a network error. +La lógica de negocio debe generar errores que no puedan detectarse durante los eventos `validateDrop()`, por ejemplo, un error de red. ::: -To stop the action, the code of the function must return an [error object](#error-object). +Para detener la acción, el código de la función debe devolver un [objeto error](#error-object). #### Ejemplo diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index b7e892e9b05080..669de5f11a80eb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -404,7 +404,7 @@ sequenceDiagram ``` -#### Example 4 (diagram): Qodly - Standard action and update value on the newly created entity +#### Ejemplo 4 (diagrama): Qodly - Acción estándar y valor de actualización en la nueva entidad creada ```mermaid diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index 24876efc710352..d44456626e3e3b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -35,7 +35,7 @@ Puede asignar acciones de permiso específicas a los siguientes recursos en su p Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma en que se acceda), 4D verifica que la sesión tenga los permisos apropiados y rechaza el acceso si no está autorizado. -## Permissions +## Permisos A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). @@ -262,8 +262,8 @@ The `restrictedByDefault` property configures how every [resource](#resources) a Depending on your environment, the recommended settings are: -- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. -- **Development**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **false**. Esto permite un acceso más fácil durante el desarrollo y la depuración, con la posibilidad de aplicar gradualmente restricciones. +- **Producción**: defina tanto `restrictedByDefault` como [`forceLogin`](../REST/authUsers.md#force-login-mode) como **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. +- **Desarrollo**: defina `restrictedByDefault` y [`forceLogin`](../REST/authUsers.md#force-login-mode) como **false**. Esto permite un acceso más fácil durante el desarrollo y la depuración, con la posibilidad de aplicar gradualmente restricciones. ### Archivo `Roles_Errors.json` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Project/date-time-formats.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Project/date-time-formats.md index 1205c7f43c900d..a8bc65c4192828 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Project/date-time-formats.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Project/date-time-formats.md @@ -112,7 +112,7 @@ La siguiente tabla muestra todos los patrones soportados para formatos de fecha ### `L` (monopuesto) vs `M` -En algunos idiomas (ruso, eslovaco), el mes utilizado por sí solo es diferente al mes en una fecha. In "January 10, 2010", "January" is not spelled the same as in "*rendez-vous* in January". +En algunos idiomas (ruso, eslovaco), el mes utilizado por sí solo es diferente al mes en una fecha. En "10 de enero de 2010", "enero" no se escribe igual que en "*rendez-vous* en janvier". ### `e` vs `c` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$filter.md b/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$filter.md index daaa27e8603038..b4a6412ae9d9e6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$filter.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/REST/$filter.md @@ -84,17 +84,17 @@ If the attribute stores [**vector objects**](../API/VectorClass.md) (see how to For more information about vector similarity searches, please refer to [Query by vector similarity](../API/DataClassClass.md#query-by-vector-similarity) section. -Use the `params` property to provide the filter with the vector comparison parameter, using a syntax like: +Utilice la propiedad `params` para ofrecer al filtro el parámetro de comparación de vectores, utilizando una sintaxis como: **\{vectorAttribute\} \{comparator\} \{placeholder\}&$params=vectorComparison** El parámetro *vectorComparison* es una colección de los siguientes elementos: -| Propiedad | Tipo | Descripción | -| -------------------------------------------------------------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [].vector | Colección de números | Obligatorio. Una colección que representa el vector a comparar | -| [].metric | Text | Opcional. [Cálculo vectorial](../API/VectorClass.md#understanding-the-different-vector-computations) a utilizar para la consulta. Supported values:
  • "cosine" (default if omitted): calculates the cosine similarity between vectors.
  • "dot": calcula la similitud de puntos de los vectores.
  • "euclídea": calcula la distancia euclidiana entre vectores. | -| [].threshold | Real | Opcional (por defecto: 0,5). Un valor umbral utilizado para filtrar las comparaciones de vectores en función de su puntuación de similitud coseno, punto o euclídea según la "métrica" seleccionada. Es altamente recomendable elegir una similitud que se adapte mejor a su caso de uso específico para obtener resultados óptimos. | +| Propiedad | Tipo | Descripción | +| -------------------------------------------------------------------------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [].vector | Colección de números | Obligatorio. Una colección que representa el vector a comparar | +| [].metric | Text | Opcional. [Cálculo vectorial](../API/VectorClass.md#understanding-the-different-vector-computations) a utilizar para la consulta. Valores soportados:
  • "cosine" (por defecto si omitido): calcula la similitud del coseno entre los vectores.
  • "dot": calcula la similitud de puntos de los vectores.
  • "euclídea": calcula la distancia euclidiana entre vectores. | +| [].threshold | Real | Opcional (por defecto: 0,5). Un valor umbral utilizado para filtrar las comparaciones de vectores en función de su puntuación de similitud coseno, punto o euclídea según la "métrica" seleccionada. Es altamente recomendable elegir una similitud que se adapte mejor a su caso de uso específico para obtener resultados óptimos. | Solo un subconjunto de símbolos **comparadores** son soportados con comparaciones vectoriales. Tenga en cuenta que comparan los resultados con el valor umbral: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md index 09aab72cb82cf9..9edb4dbc3da69b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/classes.md @@ -205,7 +205,7 @@ La propiedad `.borderBottom` es la **.borderTop** : [cs.ViewPro.LineBorder](#lineborder) -The `.borderTop` property is the top border line of the table . +La propiedad `.borderTop` es la línea del borde superior de la tabla . ### .borderHorizontal diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md index 2843b740b83dc6..8c82c06835134d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md @@ -48,14 +48,14 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | autoFitType | number | El contenido se formatea para que se ajuste en las celdas, o en las celdas y los encabezados. Valores disponibles:
    ConstanteValorDescripción
    vk auto fit type cell 0 El contenido se ajusta automáticamente a las celdas
    vk auto fit type cell with header 1 El contenido se ajusta automáticamente a las celdas y encabezados
    | | backColor | string | Una cadena de color utilizada para representar el color de fondo del área, como "red", "#FFFF00", "rgb(255,0,0)", "Acento 5". El color de fondo inicial se oculta cuando se define una backgroundImage. | | backgroundImage | string / picture / file | Imagen de fondo para el área. | -| backgroundImageLayout | number | Cómo se muestra la imagen de fondo. Available values:
    ConstantValueDescription
    vk image layout center 1 In the center of the area.
    vk image layout none 3 In the upper left corner of the area with its original size.
    vk image layout stretch 0 Llena el área.
    vk image layout zoom 2 Mostrado con su relación de aspecto original.
    | +| backgroundImageLayout | number | Cómo se muestra la imagen de fondo. Available values:
    ConstantValueDescription
    vk image layout center 1 In the center of the area.
    vk image layout none 3 En la esquina superior izquierda del área con su tamaño original.
    vk image layout stretch 0 Llena el área.
    vk image layout zoom 2 Mostrado con su relación de aspecto original.
    | | calcOnDemand | boolean | Las fórmulas se calculan sólo cuando se piden. | | columnResizeMode | number | Redimensiona modo para columnas. Valores disponibles:
    ConstanteValorDescripción
    vk resize mode normal 0 Utiliza el modo de redimensionamiento normal (es decir, las columnas restantes se ven afectadas)
    vk resize mode split 1 Utiliza el modo dividido (es decir, las columnas restantes no se ven afectadas)
    | | copyPasteHeaderOptions | number | Encabezados para incluir cuando se copian o pegan datos. Available values:
    ConstantValueDescription
    vk copy paste header options all headers3 Includes selected headers when data is copied; overwrites selected headers when data is pasted.
    vk copy paste header options column headers 2 Includes selected column headers when data is copied; overwrites selected column headers when data is pasted.
    vk copy paste header options no headers0 Column and row headers are not included when data is copied; does not overwrite selected column or row headers when data is pasted.
    vk copy paste header options row headers1 Includes selected row headers when data is copied; overwrites selected row headers when data is pasted.
    | | customList | collection | La lista para que los usuarios personalicen el relleno de arrastre, dar prioridad a que coincida con esta lista en cada relleno. Cada elemento de colección es una colección de cadenas. Vet en [SpreadJS docs](https://developer.mescius.com/spreadjs/docs/features/cells/AutoFillData/AutoFillLists). | | cutCopyIndicatorBorderColor | string | Color del borde del indicador que aparece cuando el usuario corta o copia la selección. | | cutCopyIndicatorVisible | boolean | Muestra un indicador al copiar o cortar el elemento seleccionado. | -| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Fills cells with series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | +| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Llena las celdas con series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | | enableAccessibility | boolean | El soporte de accesibilidad está activado en la hoja de cálculo. | | enableFormulaTextbox | boolean | Se activa la caja de texto de la fórmula. | | grayAreaBackColor | string | Una cadena color utilizada para representar el color de fondo del área gris, como "red", "#FFFF00", "rgb(255,0,0)", "Accent 5", etc. | @@ -66,7 +66,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | newTabVisible | boolean | Mostrar una pestaña especial para permitir a los usuarios insertar nuevas hojas. | | numbersFitMode | number | Cambia el modo de visualización cuando el ancho de los datos de fecha/número es mayor que el ancho de la columna. Valores disponibles:
    ConstanteValorDescripción
    vk numbers fit mode mask0 Sustituye el contenido de los datos por "###" y muestra la punta
    vk numbers fit mode overflow 1 Muestra el contenido de los datos como una cadena. Si la siguiente celda está vacía, se desborda el contenido.
    | | pasteSkipInvisibleRange | boolean | Pegar u omitir el pegado de datos en rangos invisibles:
    • False (por defecto): pegar datos
    • True: omitir el pegado en rangos invisibles
    Ver [SpreadJS docs](https://developer.mescius.com/spreadjs/docs/features/rows-columns/paste-skip-data-invisible-range) para más información sobre rangos invisibles. | -| referenceStyle | number | Estilo para referencias de celdas y rangos en fórmulas de celdas. Available values:
    ConstantValueDescription
    vk reference style A1 0 Use A1 style.
    vk reference style R1C1 1 Use R1C1 style
    | +| referenceStyle | number | Estilo para referencias de celdas y rangos en fórmulas de celdas. Available values:
    ConstantValueDescription
    vk reference style A1 0 Use A1 style.
    vk estilo de referencia R1C1 1 Utilizar el estilo R1C1
    | | resizeZeroIndicator | number | Política de dibujo cuando las líneas o columnas se redimensionan a 0. Available values:
    ConstantValueDescription
    vk resize zero indicator default 0 Uses the current drawing policy when the row or column is resized to zero.
    vk resize zero indicator enhanced 1 Draws two short lines when the row or column is resized to zero.
    | | rowResizeMode | number | La forma en que se redimensionan las líneas. Los valores disponibles son los mismos qe columnResizeMode | | scrollbarAppearance | number | Apariencia de la barra de desplazamiento. Available values:
    ConstantValueDescription
    vk scrollbar appearance mobile1 Mobile scrollbar appearance.
    vk scrollbar appearance skin (por defecto)0 Apariencia clásica de la barra de desplazamiento similar a Excel.
    | @@ -79,7 +79,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | showDragFillSmartTag | boolean | Mostrar el diálogo de arrastrar y rellenar. | | showDragFillTip | boolean | Mostrar la punta de arrastrar y soltar. | | showHorizontalScrollbar | boolean | Mostrar la barra de desplazamiento horizontal. | -| showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Solo se muestra la punta de redimensionamiento horizontal.
    vk show resize tip none 0 No resize tip is displayed.
    vk show resize tip row 2 Only the vertical resize tip is displayed.
    | +| showResizeTip | number | Cómo mostrar el tip de redimensionamiento. Available values:
    ConstantValueDescription
    vk show resize tip both 3 Horizontal and vertical resize tips are displayed.
    vk show resize tip column 1 Solo se muestra la punta de redimensionamiento horizontal.
    vk show resize tip none 0 No se muestra ningún consejo de redimensionamiento.
    vk show resize tip row 2 Solo se muestra la punta de redimensionamiento vertical.
    | | showScrollTip | number | Cómo mostrar el tip de desplazamiento. Available values:
    ConstantValueDescription
    vk show scroll tip both 3 Horizontal and vertical scroll tips are displayed.
    vk show scroll tip horizontal 1 Solo se muestra la punta de desplazamiento vertical.
    vk show scroll tip none No se muestra ninguna propina.
    vk show scroll tip vertical 2 Solo se muestra la punta de desplazamiento vertical.
    | | showVerticalScrollbar | boolean | Mostrar la barra de desplazamiento vertical. | | tabEditable | boolean | La pestaña de la hoja se puede editar. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/preemptiveWeb.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/preemptiveWeb.md index c270d197d2e68a..0e7af110758c9b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/preemptiveWeb.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/preemptiveWeb.md @@ -30,7 +30,7 @@ La siguiente tabla indica si el modo apropiativo se utiliza o está disponible, - si las sesiones escalables están activadas, el modo apropiativo se utiliza automáticamente para los procesos web y servicios web. - si las sesiones escalables no están activadas: - for web processes, the [**Use preemptive processes**](webServerConfig.md#use-preemptive-processes) option is taken into account. - - for web service processes (server or client), preemptive mode is supported at method level. + - para los procesos de servicios web (servidor o cliente), el modo preventivo está soportado a nivel de método. ## Escribir código servidor web hilo seguro diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md index 105b658372a4fe..1afca4411910ff 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md @@ -116,7 +116,7 @@ Hay dos formas de acceder a Qodly Studio: The Qodly Studio documentation is available on the [Qodly documentation website](https://developer.qodly.com/docs/studio/overview). -You can rely on this documentation and its associated resources for developing web applications powered by Qodly pages. Sin embargo, dependiendo de la etapa de implementación, los desarrolladores 4D utilizarán Qodly Studio o 4D IDE (ver [Comparación de funcionalidades](#comparación-de-funcionalidades)). +Puede confiar en esta documentación y sus recursos asociados para desarrollar aplicaciones web basadas en páginas Qodly. Sin embargo, dependiendo de la etapa de implementación, los desarrolladores 4D utilizarán Qodly Studio o 4D IDE (ver [Comparación de funcionalidades](#comparación-de-funcionalidades)). Se ofrecen ejemplos de código en [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), pero como QodlyScript hereda del Lenguaje 4D, no se sentirá perdido. Se ofrecen ejemplos de código en [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), pero como QodlyScript hereda del Lenguaje 4D, no se sentirá perdido. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md index e32bca5acba067..b0efb466f4a29a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md @@ -52,25 +52,25 @@ Puede omitir el parámetro *format*, en cuyo caso deberá especificar la extensi Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* conteniendo los valores para definir las propiedades del documento exportado. Las siguientes propiedades están disponibles: -| Constante | Valor | Comentario | -| ------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | -| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | -| wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](#wk-factur-x-object)). | -| wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | -| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | -| wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | -| wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | -| wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). If a picture contains more than one format, the format for screen rendering is used.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | -| wk page index | pageIndex | Sólo para exportación SVG. Índice de la página a exportar a formato svg (por defecto es 1). El índice de páginas comienza en 1 para la primera página del documento. **Nota:** el índice de páginas es independiente de la numeración de páginas. | -| wk pdfa version | pdfaVersion | Exporta PDF conforme a una versión PDF/A. Para más información sobre las propiedades y versiones de PDF/A, consulte la [página PDF/A en Wikipedia](https://en.wikipedia.org/wiki/PDF/A). Valores posibles:
  • `wk pdfa2`: exporta a la versión "PDF/A-2"
  • `wk pdfa3`: exporta a la versión "PDF/A-3"
  • **Nota:** en macOS, `wk pdfa2` puede exportar a PDF/A-2 o PDF/A-3 o superior, dependiendo de la implementación de la plataforma. Además, `wk pdfa3` significa "exporta a *al menos* PDF/A-3". En Windows, el archivo PDF de salida siempre será igual a la conformidad deseada. | -| wk recompute formulas | recomputeFormulas | Define si las fórmulas deben volver a calcularse cuando se exportan. Valores posibles:
  • true - Valor por defecto. Se vuelven a calcular todas las fórmulas
  • false - No se vuelven a calcular las fórmulas
  • | -| wk visible background and anchored elements | visibleBackground | Muestra o exporta imágenes/color de fondo, imágenes ancladas y cuadros de texto (para mostrar, efecto visible sólo en modo de vista Página o Anidado). Valores posibles: True/False | -| wk visible empty images | visibleEmptyImages | Muestra o exporta un rectángulo negro por defecto para las imágenes que no se pueden cargar o calcular (imágenes vacías o imágenes en un formato no compatible). Valores posibles: True/False. Valor por defecto: True Si el valor es False, los elementos de imagen que falten no se mostrarán en absoluto aunque tengan bordes, ancho, alto o fondo; esto puede afectar al diseño de la página para imágenes en línea. | -| wk visible footers | visibleFooters | Muestra o exporta los pies de página (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | -| wk visible headers | visibleHeaders | Muestra o exporta los encabezados (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | -| wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | -| wk whitespace | whitespace | Define el valor css "white-space" para los formatos de exportación `wk mime html` y `wk web page complete`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | +| Constante | Valor | Comentario | +| ------------------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | +| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | +| wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](#wk-factur-x-object)). | +| wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | +| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | +| wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | +| wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | +| wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el formato para la renderización en pantalla.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | +| wk page index | pageIndex | Sólo para exportación SVG. Índice de la página a exportar a formato svg (por defecto es 1). El índice de páginas comienza en 1 para la primera página del documento. **Nota:** el índice de páginas es independiente de la numeración de páginas. | +| wk pdfa version | pdfaVersion | Exporta PDF conforme a una versión PDF/A. Para más información sobre las propiedades y versiones de PDF/A, consulte la [página PDF/A en Wikipedia](https://en.wikipedia.org/wiki/PDF/A). Valores posibles:
  • `wk pdfa2`: exporta a la versión "PDF/A-2"
  • `wk pdfa3`: exporta a la versión "PDF/A-3"
  • **Nota:** en macOS, `wk pdfa2` puede exportar a PDF/A-2 o PDF/A-3 o superior, dependiendo de la implementación de la plataforma. Además, `wk pdfa3` significa "exporta a *al menos* PDF/A-3". En Windows, el archivo PDF de salida siempre será igual a la conformidad deseada. | +| wk recompute formulas | recomputeFormulas | Define si las fórmulas deben volver a calcularse cuando se exportan. Valores posibles:
  • true - Valor por defecto. Se vuelven a calcular todas las fórmulas
  • false - No se vuelven a calcular las fórmulas
  • | +| wk visible background and anchored elements | visibleBackground | Muestra o exporta imágenes/color de fondo, imágenes ancladas y cuadros de texto (para mostrar, efecto visible sólo en modo de vista Página o Anidado). Valores posibles: True/False | +| wk visible empty images | visibleEmptyImages | Muestra o exporta un rectángulo negro por defecto para las imágenes que no se pueden cargar o calcular (imágenes vacías o imágenes en un formato no compatible). Valores posibles: True/False. Valor por defecto: True Si el valor es False, los elementos de imagen que falten no se mostrarán en absoluto aunque tengan bordes, ancho, alto o fondo; esto puede afectar al diseño de la página para imágenes en línea. | +| wk visible footers | visibleFooters | Muestra o exporta los pies de página (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | +| wk visible headers | visibleHeaders | Muestra o exporta los encabezados (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | +| wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | +| wk whitespace | whitespace | Define el valor css "white-space" para los formatos de exportación `wk mime html` y `wk web page complete`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | The following table indicates the *option* available per export *format*: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md index 606d4bcc42bcd7..f77c075aef2b83 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md @@ -52,25 +52,25 @@ En el parámetro *format*, pase una constante del tema *4D Write Pro Constants* Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* conteniendo los valores para definir las propiedades del documento exportado. Las siguientes propiedades están disponibles: -| Constante | Valor | Comentario | -| ------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | -| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | -| wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](./wp-export-document.md#wk-factur-x-object)). | -| wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](./wp-export-document.md#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | -| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | -| wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | -| wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | -| wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). If a picture contains more than one format, the format for screen rendering is used.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | -| wk page index | pageIndex | Sólo para exportación SVG. Índice de la página a exportar a formato svg (por defecto es 1). El índice de páginas comienza en 1 para la primera página del documento. **Nota:** el índice de páginas es independiente de la numeración de páginas. | -| wk pdfa version | pdfaVersion | Exporta PDF conforme a una versión PDF/A. Para más información sobre las propiedades y versiones de PDF/A, consulte la [página PDF/A en Wikipedia](https://en.wikipedia.org/wiki/PDF/A). Valores posibles:
  • `wk pdfa2`: exporta a la versión "PDF/A-2"
  • `wk pdfa3`: exporta a la versión "PDF/A-3"
  • **Nota:** en macOS, `wk pdfa2` puede exportar a PDF/A-2 o PDF/A-3 o superior, dependiendo de la implementación de la plataforma. Además, `wk pdfa3` significa "exporta a *al menos* PDF/A-3". En Windows, el archivo PDF de salida siempre será igual a la conformidad deseada. | -| wk recompute formulas | recomputeFormulas | Define si las fórmulas deben volver a calcularse cuando se exportan. Valores posibles:
  • true - Valor por defecto. Se vuelven a calcular todas las fórmulas
  • false - No se vuelven a calcular las fórmulas
  • | -| wk visible background and anchored elements | visibleBackground | Muestra o exporta imágenes/color de fondo, imágenes ancladas y cuadros de texto (para mostrar, efecto visible sólo en modo de vista Página o Anidado). Valores posibles: True/False | -| wk visible empty images | visibleEmptyImages | Muestra o exporta un rectángulo negro por defecto para las imágenes que no se pueden cargar o calcular (imágenes vacías o imágenes en un formato no compatible). Valores posibles: True/False. Valor por defecto: True Si el valor es False, los elementos de imagen que falten no se mostrarán en absoluto aunque tengan bordes, ancho, alto o fondo; esto puede afectar al diseño de la página para imágenes en línea. | -| wk visible footers | visibleFooters | Muestra o exporta los pies de página (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | -| wk visible headers | visibleHeaders | Muestra o exporta los encabezados (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | -| wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | -| wk whitespace | whitespace | Define el valor css "white-space" para el formato de exportación `wk mime html`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | +| Constante | Valor | Comentario | +| ------------------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| wk CID host domain name | cidHostDomain | Nombre de dominio de host CID: dominio de host que se añadirá a las URL CID generadas incluyendo una "@" como separador. Disponible sólo cuando se utiliza el formato `wk mime html`. | +| wk embedded pictures | embeddedPictures | Sólo para exportación SVG. Establece si las imágenes se incrustan en el archivo .svg exportado cuando se llama a [WP EXPORT DOCUMENT](wp-export-document.md). Valores disponibles:
  • true (por defecto): las imágenes están incrustadas en el archivo .svg exportado
  • false: las imágenes se exportan en una carpeta llamada "filename\_images" en el nivel del archivo .svg exportado, "filename" siendo el nombre pasado al comando para el archivo, sin la extensión. Las imágenes no están integradas, sino referenciadas en el archivo .svg.
  • Nota: si la carpeta ya existe, se vaciará antes de exportar el archivo. Si no hay ninguna imagen en la página exportada, se elimina la carpeta | +| wk factur x | facturX | Sólo para exportación en PDF. Valor: objeto que configura una exportación PDF "Factur-X (ZUGFeRD)" (ver [wk factur x object](./wp-export-document.md#wk-factur-x-object)). | +| wk files | Histórico | Sólo para exportación en PDF. Valor: colección de objetos, cada uno de los cuales describe un archivo que se integrará en el documento final (ver [wk files collection](./wp-export-document.md#wk-files-collection)). Esta funcionalidad sólo se admite en documentos PDF/A-3: cuando se utiliza el atributo `wk files`, se establece automáticamente la versión "PDF/A-3" (se ignora el atributo `wk pdfa version`). En caso de una exportación de Factur-X PDF (ver abajo), el primer objeto de la colección debe contener el archivo Factur-X xml. | +| wk google fonts tag | googleFontsTag | Sólo para exportación SVG. Define la regla de importación para fuentes google en el SVG exportado. Valores posibles:
  • false (por defecto): no se añade ninguna regla de importación de fuentes de Google.
  • true: añade la regla @import al archivo exportado. Útil si desea utilizar fuentes que no están disponibles por defecto en Windows o macOS.
  • **Note:** This property is set to false by default because when enabled, Google fonts override native fonts, and native fonts are generally better rendered in the browser. | +| wk HTML pretty print | htmlPrettyPrint | El código HTML está formateado para facilitar su lectura. | +| wk max picture DPI | maxPictureDPI | Se utiliza para reducir imágenes a la resolución preferida. Para imágenes SVG en Windows, utilizado para la rasterización. Valores por defecto: 300 (for wk optimized for \= wk print) 192 (for wk optimized for \= wk screen) Valor máximo posible: 1440 | +| wk optimized for | optimizedFor | Define cómo se optimiza un documento exportado en función de su soporte. Valores posibles:
  • `wk print` (valor por defecto para `wk pdf` y `wk svg`) Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 300 (valor por defecto) y pueden convertirse a PNG si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 300 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el mejor formato para la impresión (*por ejemplo*, .tiff en lugar de .jpg)
  • `wk screen` (valor por defecto para `wk web page complete` y `wk mime html`). Las imágenes de mapa de bits pueden reducirse utilizando los PPP definidos por `wk max picture DPI` o 192 (valor por defecto) y pueden convertirse a JPEG (imágenes opacas) o PNG (imágenes transparentes) si el códec no es compatible con el tipo de exportación. Las imágenes vectoriales se convierten a PNG utilizando los PPP definidos por `wk max picture DPI` o 192 (sólo Windows). Si una imagen contiene más de un formato, se utiliza el formato para la renderización en pantalla.
  • **Nota:** los documentos exportados en formato `wk docx` siempre se optimizan para la impresión wk (la opción wk optimized for se ignora). | +| wk page index | pageIndex | Sólo para exportación SVG. Índice de la página a exportar a formato svg (por defecto es 1). El índice de páginas comienza en 1 para la primera página del documento. **Nota:** el índice de páginas es independiente de la numeración de páginas. | +| wk pdfa version | pdfaVersion | Exporta PDF conforme a una versión PDF/A. Para más información sobre las propiedades y versiones de PDF/A, consulte la [página PDF/A en Wikipedia](https://en.wikipedia.org/wiki/PDF/A). Valores posibles:
  • `wk pdfa2`: exporta a la versión "PDF/A-2"
  • `wk pdfa3`: exporta a la versión "PDF/A-3"
  • **Nota:** en macOS, `wk pdfa2` puede exportar a PDF/A-2 o PDF/A-3 o superior, dependiendo de la implementación de la plataforma. Además, `wk pdfa3` significa "exporta a *al menos* PDF/A-3". En Windows, el archivo PDF de salida siempre será igual a la conformidad deseada. | +| wk recompute formulas | recomputeFormulas | Define si las fórmulas deben volver a calcularse cuando se exportan. Valores posibles:
  • true - Valor por defecto. Se vuelven a calcular todas las fórmulas
  • false - No se vuelven a calcular las fórmulas
  • | +| wk visible background and anchored elements | visibleBackground | Muestra o exporta imágenes/color de fondo, imágenes ancladas y cuadros de texto (para mostrar, efecto visible sólo en modo de vista Página o Anidado). Valores posibles: True/False | +| wk visible empty images | visibleEmptyImages | Muestra o exporta un rectángulo negro por defecto para las imágenes que no se pueden cargar o calcular (imágenes vacías o imágenes en un formato no compatible). Valores posibles: True/False. Valor por defecto: True Si el valor es False, los elementos de imagen que falten no se mostrarán en absoluto aunque tengan bordes, ancho, alto o fondo; esto puede afectar al diseño de la página para imágenes en línea. | +| wk visible footers | visibleFooters | Muestra o exporta los pies de página (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | +| wk visible headers | visibleHeaders | Muestra o exporta los encabezados (para la visualización, efecto visible sólo en el modo vista Página). Valores posibles: True/False | +| wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | +| wk whitespace | whitespace | Define el valor css "white-space" para el formato de exportación `wk mime html`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | The following table indicates the *option* available per export *format*: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md index 05064f54bf9dd9..9e7eb901643b46 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md @@ -64,8 +64,8 @@ Puede pasar un objeto para definir cómo se gestionan los siguientes atributos d **Notas de compatibilidad** -- *Character style sheets in legacy 4D Write documents use a proprietary mechanism, which is not supported by 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Las hojas de estilo de caracteres antiguos no son importadas y ya no están referenciadas en el documento.* -- *Support for importing in .docx format is only certified for Microsoft Word 2010 and newer. Versiones antiguas, especialmente Microsoft Word 2007, pueden no importar correctamente.* +- *Las hojas de estilo de caracteres de los documentos heredados de 4D Write utilizan un mecanismo propietario que no es compatible con 4D Write Pro. To get the best result for imported text, style sheet attributes are converted to "hard coded" style attributes. Las hojas de estilo de caracteres antiguos no son importadas y ya no están referenciadas en el documento.* +- *El soporte para la importación en formato .docx solo está certificado para Microsoft Word 2010 y más recientes. Versiones antiguas, especialmente Microsoft Word 2007, pueden no importar correctamente.* ## Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md index 1271a5aaaa8e21..c521ca59af78e2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md @@ -44,7 +44,7 @@ var $client:=cs.AIKit.OpenAI.new({apiKey: "your api key"}) #### URL del servidor -For a [compatible provider](../compatible-openai.md) API, you can configure the server URL. +Para una API [proveedor compatible](../compatible-openai.md), puede configurar la URL del servidor. ```4d var $client:=cs.AIKit.OpenAI.new({apiKey: "your api key"; baseURL: "https://server.ai"}) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md index 50c983790a5e75..b237a978ab1103 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md @@ -5,7 +5,7 @@ title: OpenAIError Class # OpenAIError Class -La clase `OpenAIError` está diseñada para manejar errores devueltos por la API OpenAI. It extracts relevant information from the error response and provides methods to access this information. +La clase `OpenAIError` está diseñada para manejar errores devueltos por la API OpenAI. Extrae información relevante de la respuesta de error y ofrece los métodos para acceder a esta información. ## Propiedades diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md index df318d585644d2..340462dceeb399 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md @@ -82,8 +82,8 @@ Cuando reciba un mensaje de llamada de herramienta, debe: 2. **Execute the function:** Parse the arguments (which is a JSON string) and call the corresponding function that you defined in your OpenAITool configuration. -3. **Respond with the tool result:** - Create a response message using the exact `tool_call_id` from the original request. +3. **Responde con el resultado de la herramienta:** + Crea un mensaje de respuesta usando el `tool_call_id` exacto de la petición original. **Ejemplo de respuesta de la herramienta:** diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIParameters.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIParameters.md index 9b33b972486a0f..c4aae60b5308bb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIParameters.md @@ -5,7 +5,7 @@ title: OpenAIParameters # OpenAIParameters -The `OpenAIParameters` class is designed to handle execution and request parameters for interacting with the OpenAI API. +La clase `OpenAIParameters` está diseñada para manejar los parámetros de ejecución y de petición para interactuar con la API OpenAI. ## Propiedades @@ -17,14 +17,14 @@ Utilice esta propiedad de retrollamada para recibir el resultado independienteme | ------------------------------------------------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | `onTerminate`
    (o `formula`) | 4D.Function | Una función que se llamará de forma asíncrona cuando termine. Asegúrese de que el proceso actual no termina. | -Use these callback properties for more granular control over success and error handling: +Utilice estas propiedades de retrollamada para un control más granular de la gestión de éxito y de errores: | Propiedad | Tipo | Descripción | | ------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `onResponse` | 4D.Function | Una función a llamar de forma asíncrona cuando la petición finalice **con éxito**. Asegúrese de que el proceso actual no termina. | | `onError` | 4D.Function | Una función que se llamará de forma asíncrona cuando la petición finalice **con errores**. Asegúrese de que el proceso actual no termina. | -> The callback function will receive the same result object type (one of [OpenAIResult](./OpenAIResult.md) child classes) that would be returned by the function in synchronous code. +> La función de retrollamada recibirá el mismo tipo de objeto de resultado (una de las clases hijas de [OpenAIResult](./OpenAIResult.md)) que devolvería la función en un código síncrono. Ver la [documentación sobre código asíncrono para ejemplos](../asynchronous-call.md) @@ -32,16 +32,16 @@ Ver la [documentación sobre código asíncrono para ejemplos](../asynchronous-c | Propiedad | Tipo | Descripción | | -------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `timeout` | Real | Overrides the client-level default timeout for the request, in seconds. Por defecto es 0. | +| `timeout` | Real | Reemplaza el tiempo de espera predeterminado del nivel de cliente para la petición, en segundos. Por defecto es 0. | | `httpAgent` | HTTPAgent | Anula el agente HTTP predeterminado a nivel de cliente para la petición. | | `maxRetries` | Integer | El número máximo de reintentos para la petición. (Sólo si el código no es asíncrono, es decir, no se proporciona ninguna función) | | `extraHeaders` | Object | Encabezados adicionales para enviar con la petición. | ### Propiedades OpenAPI -| Propiedad | Tipo | Descripción | -| --------- | ---- | ----------------------------------------------------------------------------------------------------------- | -| `user` | Text | A unique identifier representing the end-user, which helps OpenAI monitor and detect abuse. | +| Propiedad | Tipo | Descripción | +| --------- | ---- | --------------------------------------------------------------------------------------------------------------------------- | +| `user` | Text | Un identificador único que representa al usuario final y que ayuda a OpenAI a supervisar y detectar abusos. | ### Otras diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/asynchronous-call.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/asynchronous-call.md index ed81a7d77e2b7a..637fe25c2cdf76 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/asynchronous-call.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/asynchronous-call.md @@ -5,7 +5,7 @@ title: Asynchronous Call # Asynchronous Call -If you do not want to wait for the OpenAPI response when making a request to its API, you need to use asynchronous code. +Si no desea esperar la respuesta del OpenAPI al hacer una petición a su API, debe utilizar un código asíncrono. To make asynchronous calls, you must provide a callback `4D.Function`(`Formula`) in the [OpenAIParameters](Classes/OpenAIParameters.md) object parameter to receive the result. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md index fdbd960b6e8acd..d4288b04753c41 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md @@ -31,7 +31,7 @@ The command facilitates debugging by enabling the identification of the method o | **Propiedad** | **Tipo** | **Description** | **Ejemplo** | | ------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -| database | Text | Name of the database calling the method (to distinguish host methods and component methods) | "database":"contactInfo" | +| database | Text | Nombre de la base de datos que llama al método (para distinguir los métodos locales de los métodos del componente) | "database":"contactInfo" | | formula | Text (si lo hay) | Contenido de la línea actual de código en el nivel actual de la cadena de llamadas (texto bruto). Corresponde al contenido de la línea referenciada por la propiedad `line` en el archivo fuente indicado por el método. Si el código fuente no está disponible, la propiedad `formula` se omite (Undefined). | "var $stack:=Call chain" | | línea | Integer | Número de línea de llamada al método | "line":6 | | name | Text | Nombre del método llamado | "name":"On Load" | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md index 8198b5151245b1..bb45fe7142036b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md @@ -35,7 +35,7 @@ The **Command name** command returns t Hay dos parámetros opcionales: - *info*: propiedades del comando. The returned value is a *bit field*, where the following bits are meaningful: - - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Only thread-safe commands can be used in [preemptive processes](../Develop/preemptive.md). + - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Solo se pueden usar comandos hilo seguro en [procesos preventivos](../Develop/preemptive.md). - Segundo bit (bit 1): se define en 1 si el comando es **obsoleto**, y en 0 si no lo es. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). *theme*: nombre del tema del lenguaje 4D para el comando. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/string.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/string.md index 80dd73a149d5ca..fd7055d12e54d3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/string.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/string.md @@ -90,7 +90,7 @@ Si pasa 0 en *base*, el comando determina la base dependiendo del valor de *expr :::info - Esta sintaxis sigue estrictamente la especificación [`toString` EcmaScript sobre el manejo del radix](https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-number.prototype.tostring). -- Utilizar esta sintaxis con *base*=10 no dará exactamente los mismos resultados que utilizar la sintaxis sin el parámetro *base*. For example, if the specified number value is not a number, the "NaN" string is returned. +- Utilizar esta sintaxis con *base*=10 no dará exactamente los mismos resultados que utilizar la sintaxis sin el parámetro *base*. Por ejemplo, si el valor numérico especificado no es un número, se devuelve la cadena "NaN". ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/variables.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/variables.md index a1b7c382575f99..a4914290a1e1f1 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/variables.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/variables.md @@ -250,17 +250,18 @@ Le langage 4D gère plusieurs **variables système**, qui permettent de contrôl Les variables système sont utilisées par les [commandes 4D](../commands/command-index.md). Reportez-vous au paragraphe "Variables et ensembles système" dans la description d'une commande pour savoir si elle affecte une variable système. -| Nom de variable système | Type | Description | -| ------------------------------------------------------ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OK` | Integer | Généralement fixée à 1 lorsqu'une commande a affiché une boîte de dialogue et que l'utilisateur a cliqué sur le bouton **OK**, et à 0 s'il a cliqué sur **Cancel**. Certaines commandes modifient également la valeur de la variable système `OK` lorsqu'une opération est exécutée avec succès. | -| `Document` | Text | Contient le "nom long" (chemin complet + nom) du dernier fichier ouvert ou créé à l'aide de commandes telles que [Open document](../commands-legacy/open-document.md) ou [SELECT LOG FILE](../commands/select-log-file.md). | -| `FldDelimit`, `RecDelimit` | Text | Contiennent les codes de caractères qui seront utilisés respectivement comme séparateur de champs (par défaut **Tab** (9)) et séparateur d'enregistrements (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilisées dans une méthode d'interception d'erreurs installée par la commande [`ON ERR CALL`](../commands-legacy/on-err-call.md). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | -| `MouseDown` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Prend la valeur 1 si le bouton de la souris a été enfoncé, sinon prend la valeur 0. | -| `MouseX`, `MouseY` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Dans un événement `MouseDown=1`, `MouseX` et `MouseY` reçoivent respectivement les coordonnées verticales et horizontales du clic. Les deux valeurs sont exprimées en pixels et avec le système de coordonnées locales de la fenêtre.
  • Dans le cas d'un champ ou d'une variable image, `MouseX` et `MouseY` reçoivent les coordonnées locales d'un clic de souris dans les événements de formulaire [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) et [`On Mouse Up`](../Events/onMouseUp.md). Les coordonnées locales du curseur de la souris sont également retournées dans les événements [`On Mouse Enter`](../Events/onMouseEnter.md) et [`On Mouse Move`](../Events/onMouseMove.md) . Pour plus d'informations, voir la section [Coordonnées de la souris dans une image](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | -| `KeyCode` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Définit le code de caractère de la touche qui vient d'être pressée. Si la touche est une touche de fonction, `KeyCode` prend la valeur d'un code spécial. | -| `Modifiers` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient les codes des modifiers du clavier (Ctrl/Commande, Alt/Option, Maj, Verr. | -| `MouseProc` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient le numéro du process dans lequel le dernier événement a eu lieu | +| Nom de variable système | Type | Description | +| ------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OK` | Integer | Généralement fixée à 1 lorsqu'une commande a affiché une boîte de dialogue et que l'utilisateur a cliqué sur le bouton **OK**, et à 0 s'il a cliqué sur **Cancel**. Certaines commandes modifient également la valeur de la variable système `OK` lorsqu'une opération est exécutée avec succès. | +| `Document` | Text | Contient le "nom long" (chemin complet + nom) du dernier fichier ouvert ou créé à l'aide de commandes telles que [Open document](../commands-legacy/open-document.md) ou [SELECT LOG FILE](../commands/select-log-file.md). | +| `FldDelimit`, `RecDelimit` | Integer | Contiennent les codes de caractères qui seront utilisés respectivement comme séparateur de champs (par défaut **Tab** (9)) et séparateur d'enregistrements (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | +| `Error`, `Error line` | Integer | Utilisées dans une méthode d'interception d'erreurs installée par la commande [`ON ERR CALL`](../commands-legacy/on-err-call.md). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `Error method`, `Error formula` | Text | Utilisées dans une méthode d'interception d'erreurs installée par la commande [`ON ERR CALL`](../commands-legacy/on-err-call.md). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `MouseDown` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Prend la valeur 1 si le bouton de la souris a été enfoncé, sinon prend la valeur 0. | +| `MouseX`, `MouseY` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Dans un événement `MouseDown=1`, `MouseX` et `MouseY` reçoivent respectivement les coordonnées verticales et horizontales du clic. Les deux valeurs sont exprimées en pixels et avec le système de coordonnées locales de la fenêtre.
  • Dans le cas d'un champ ou d'une variable image, `MouseX` et `MouseY` reçoivent les coordonnées locales d'un clic de souris dans les événements de formulaire [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) et [`On Mouse Up`](../Events/onMouseUp.md). Les coordonnées locales du curseur de la souris sont également retournées dans les événements [`On Mouse Enter`](../Events/onMouseEnter.md) et [`On Mouse Move`](../Events/onMouseMove.md) . Pour plus d'informations, voir la section [Coordonnées de la souris dans une image](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | +| `KeyCode` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Définit le code de caractère de la touche qui vient d'être pressée. Si la touche est une touche de fonction, `KeyCode` prend la valeur d'un code spécial. | +| `Modifiers` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient les codes des modifiers du clavier (Ctrl/Commande, Alt/Option, Maj, Verr. | +| `MouseProc` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient le numéro du process dans lequel le dernier événement a eu lieu | :::note diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index cebaba79eccf23..ddd14e1fbaa77c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -24,7 +24,7 @@ Vous ne pouvez pas déclencher directement l'exécution d'une fonction d'événe :::info Note de compatibilité -Les événements d'entité ORDA dans le magasin de données sont équivalents aux triggers dans la base de données 4D. Cependant, les actions déclenchées au niveau de la base de données 4D à l'aide des commandes du langage classique 4D ou des actions standard ne déclenchent pas les événements ORDA. +Les événements d'entité ORDA dans le magasin de données sont équivalents aux triggers dans la base de données 4D. Cependant, les actions déclenchées au niveau de la base de données 4D à l'aide des commandes du langage classique 4D ou des actions standard ne déclenchent pas les événements ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: @@ -420,7 +420,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -434,6 +436,12 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: + ### `Function event afterSave` #### Syntaxe diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/variables.md b/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/variables.md index 3a7c5321a9bac5..b726927cd5e139 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/variables.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/variables.md @@ -242,7 +242,7 @@ Les variables système sont utilisées par les commandes 4D. Reportez-vous au pa | ------------------------------------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OK` | Integer | Prend généralement la valeur 1 après qu'une commande a affiché une boîte de dialogue et l'utilisateur a cliqué sur le bouton **OK** , et 0 s'il a cliqué sur **Annuler**. Certaines commandes modifient également la valeur de la variable système `OK` lorsqu'une opération est exécutée avec succès. | | `Document` | Text | Contient le "long nom" (chemin complet +nom) du dernier fichier ouvert ou créé à l'aide de commandes telles que [Open document](https://doc.4d.com/4dv20/help/command/en/page264.html) ou [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/en/page345.html). | -| `FldDelimit`, `RecDelimit` | Text | Contient les codes de caractères qui seront utilisés respectivement comme séparateur de champ (par défaut **Tab** (9)) et séparateur d'enregistrement (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | +| `FldDelimit`, `RecDelimit` | Integer | Contient les codes de caractères qui seront utilisés respectivement comme séparateur de champ (par défaut **Tab** (9)) et séparateur d'enregistrement (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | | `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilisées dans une méthode de gestion d'erreurs installée par la commande [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/en/page155.html). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | | `MouseDown` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html). Prend la valeur 1 si le bouton de la souris a été enfoncé, sinon prend la valeur 0. | | `MouseX`, `MouseY` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html).
  • Dans un événement `MouseDown=1`, `MouseX` et `MouseY` sont respectivement définis sur les coordonnées verticales et horizontales du clic. Les deux valeurs sont exprimées en pixels et avec le système de coordonnées locales de la fenêtre.
  • Dans le cas d'un champ ou d'une variable image, `MouseX` et `MouseY` retournent les coordonnées locales du clic de souris dans les événements formulaire [`On Clicked`](.. Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) et [`On Mouse Up`](../Events/onMouseUp.md). Les coordonnées locales du curseur de la souris sont également retournées dans les événements [`On Mouse Enter`](../Events/onMouseEnter.md) et [`On Mouse Move`](../Events/onMouseMove.md) . Pour plus d'informations, voir la section [Coordonnées de la souris dans une image](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md index a1b7c382575f99..a4914290a1e1f1 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md @@ -250,17 +250,18 @@ Le langage 4D gère plusieurs **variables système**, qui permettent de contrôl Les variables système sont utilisées par les [commandes 4D](../commands/command-index.md). Reportez-vous au paragraphe "Variables et ensembles système" dans la description d'une commande pour savoir si elle affecte une variable système. -| Nom de variable système | Type | Description | -| ------------------------------------------------------ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OK` | Integer | Généralement fixée à 1 lorsqu'une commande a affiché une boîte de dialogue et que l'utilisateur a cliqué sur le bouton **OK**, et à 0 s'il a cliqué sur **Cancel**. Certaines commandes modifient également la valeur de la variable système `OK` lorsqu'une opération est exécutée avec succès. | -| `Document` | Text | Contient le "nom long" (chemin complet + nom) du dernier fichier ouvert ou créé à l'aide de commandes telles que [Open document](../commands-legacy/open-document.md) ou [SELECT LOG FILE](../commands/select-log-file.md). | -| `FldDelimit`, `RecDelimit` | Text | Contiennent les codes de caractères qui seront utilisés respectivement comme séparateur de champs (par défaut **Tab** (9)) et séparateur d'enregistrements (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilisées dans une méthode d'interception d'erreurs installée par la commande [`ON ERR CALL`](../commands-legacy/on-err-call.md). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | -| `MouseDown` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Prend la valeur 1 si le bouton de la souris a été enfoncé, sinon prend la valeur 0. | -| `MouseX`, `MouseY` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Dans un événement `MouseDown=1`, `MouseX` et `MouseY` reçoivent respectivement les coordonnées verticales et horizontales du clic. Les deux valeurs sont exprimées en pixels et avec le système de coordonnées locales de la fenêtre.
  • Dans le cas d'un champ ou d'une variable image, `MouseX` et `MouseY` reçoivent les coordonnées locales d'un clic de souris dans les événements de formulaire [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) et [`On Mouse Up`](../Events/onMouseUp.md). Les coordonnées locales du curseur de la souris sont également retournées dans les événements [`On Mouse Enter`](../Events/onMouseEnter.md) et [`On Mouse Move`](../Events/onMouseMove.md) . Pour plus d'informations, voir la section [Coordonnées de la souris dans une image](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | -| `KeyCode` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Définit le code de caractère de la touche qui vient d'être pressée. Si la touche est une touche de fonction, `KeyCode` prend la valeur d'un code spécial. | -| `Modifiers` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient les codes des modifiers du clavier (Ctrl/Commande, Alt/Option, Maj, Verr. | -| `MouseProc` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient le numéro du process dans lequel le dernier événement a eu lieu | +| Nom de variable système | Type | Description | +| ------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OK` | Integer | Généralement fixée à 1 lorsqu'une commande a affiché une boîte de dialogue et que l'utilisateur a cliqué sur le bouton **OK**, et à 0 s'il a cliqué sur **Cancel**. Certaines commandes modifient également la valeur de la variable système `OK` lorsqu'une opération est exécutée avec succès. | +| `Document` | Text | Contient le "nom long" (chemin complet + nom) du dernier fichier ouvert ou créé à l'aide de commandes telles que [Open document](../commands-legacy/open-document.md) ou [SELECT LOG FILE](../commands/select-log-file.md). | +| `FldDelimit`, `RecDelimit` | Integer | Contiennent les codes de caractères qui seront utilisés respectivement comme séparateur de champs (par défaut **Tab** (9)) et séparateur d'enregistrements (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | +| `Error`, `Error line` | Integer | Utilisées dans une méthode d'interception d'erreurs installée par la commande [`ON ERR CALL`](../commands-legacy/on-err-call.md). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `Error method`, `Error formula` | Text | Utilisées dans une méthode d'interception d'erreurs installée par la commande [`ON ERR CALL`](../commands-legacy/on-err-call.md). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `MouseDown` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Prend la valeur 1 si le bouton de la souris a été enfoncé, sinon prend la valeur 0. | +| `MouseX`, `MouseY` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Dans un événement `MouseDown=1`, `MouseX` et `MouseY` reçoivent respectivement les coordonnées verticales et horizontales du clic. Les deux valeurs sont exprimées en pixels et avec le système de coordonnées locales de la fenêtre.
  • Dans le cas d'un champ ou d'une variable image, `MouseX` et `MouseY` reçoivent les coordonnées locales d'un clic de souris dans les événements de formulaire [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) et [`On Mouse Up`](../Events/onMouseUp.md). Les coordonnées locales du curseur de la souris sont également retournées dans les événements [`On Mouse Enter`](../Events/onMouseEnter.md) et [`On Mouse Move`](../Events/onMouseMove.md) . Pour plus d'informations, voir la section [Coordonnées de la souris dans une image](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | +| `KeyCode` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Définit le code de caractère de la touche qui vient d'être pressée. Si la touche est une touche de fonction, `KeyCode` prend la valeur d'un code spécial. | +| `Modifiers` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient les codes des modifiers du clavier (Ctrl/Commande, Alt/Option, Maj, Verr. | +| `MouseProc` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient le numéro du process dans lequel le dernier événement a eu lieu | :::note diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md index f70ffbbad5dfdb..609c544ec80483 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md @@ -17,7 +17,7 @@ Vous ne pouvez pas déclencher directement l'exécution d'une fonction d'événe :::info Note de compatibilité -Les événements d'entité ORDA dans le magasin de données sont équivalents aux triggers dans la base de données 4D. Cependant, les actions déclenchées au niveau de la base de données 4D à l'aide des commandes du langage classique 4D ou des actions standard ne déclenchent pas les événements ORDA. +Les événements d'entité ORDA dans le magasin de données sont équivalents aux triggers dans la base de données 4D. Cependant, les actions déclenchées au niveau de la base de données 4D à l'aide des commandes du langage classique 4D ou des actions standard ne déclenchent pas les événements ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/variables.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/variables.md index 71d9b0f917b259..92a7754bc3e737 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/variables.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/variables.md @@ -241,7 +241,7 @@ Les variables système sont utilisées par les [commandes 4D](commands.md). Repo | ------------------------------------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `OK` | Integer | Prend généralement la valeur 1 après qu'une commande a affiché une boîte de dialogue et l'utilisateur a cliqué sur le bouton **OK** , et 0 s'il a cliqué sur **Annuler**. Certaines commandes modifient également la valeur de la variable système `OK` lorsqu'une opération est exécutée avec succès. | | `Document` | Text | Contient le "long nom" (chemin complet +nom) du dernier fichier ouvert ou créé à l'aide de commandes telles que [Open document](https://doc.4d.com/4dv20/help/command/en/page264.html) ou [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/en/page345.html). | -| `FldDelimit`, `RecDelimit` | Text | Contient les codes de caractères qui seront utilisés respectivement comme séparateur de champ (par défaut **Tab** (9)) et séparateur d'enregistrement (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | +| `FldDelimit`, `RecDelimit` | Integer | Contient les codes de caractères qui seront utilisés respectivement comme séparateur de champ (par défaut **Tab** (9)) et séparateur d'enregistrement (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | | `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilisées dans une méthode de gestion d'erreurs installée par la commande [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/en/page155.html). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | | `MouseDown` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html). Prend la valeur 1 si le bouton de la souris a été enfoncé, sinon prend la valeur 0. | | `MouseX`, `MouseY` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html).
  • Dans un événement `MouseDown=1`, `MouseX` et `MouseY` sont respectivement définis sur les coordonnées verticales et horizontales du clic. Les deux valeurs sont exprimées en pixels et avec le système de coordonnées locales de la fenêtre.
  • Dans le cas d'un champ ou d'une variable image, `MouseX` et `MouseY` retournent les coordonnées locales du clic de souris dans les événements formulaire [`On Clicked`](.. Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) et [`On Mouse Up`](../Events/onMouseUp.md). Les coordonnées locales du curseur de la souris sont également retournées dans les événements [`On Mouse Enter`](../Events/onMouseEnter.md) et [`On Mouse Move`](../Events/onMouseMove.md) . Pour plus d'informations, voir la section [Coordonnées de la souris dans une image](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/variables.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/variables.md index a1b7c382575f99..a4914290a1e1f1 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/variables.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/variables.md @@ -250,17 +250,18 @@ Le langage 4D gère plusieurs **variables système**, qui permettent de contrôl Les variables système sont utilisées par les [commandes 4D](../commands/command-index.md). Reportez-vous au paragraphe "Variables et ensembles système" dans la description d'une commande pour savoir si elle affecte une variable système. -| Nom de variable système | Type | Description | -| ------------------------------------------------------ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OK` | Integer | Généralement fixée à 1 lorsqu'une commande a affiché une boîte de dialogue et que l'utilisateur a cliqué sur le bouton **OK**, et à 0 s'il a cliqué sur **Cancel**. Certaines commandes modifient également la valeur de la variable système `OK` lorsqu'une opération est exécutée avec succès. | -| `Document` | Text | Contient le "nom long" (chemin complet + nom) du dernier fichier ouvert ou créé à l'aide de commandes telles que [Open document](../commands-legacy/open-document.md) ou [SELECT LOG FILE](../commands/select-log-file.md). | -| `FldDelimit`, `RecDelimit` | Text | Contiennent les codes de caractères qui seront utilisés respectivement comme séparateur de champs (par défaut **Tab** (9)) et séparateur d'enregistrements (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Utilisées dans une méthode d'interception d'erreurs installée par la commande [`ON ERR CALL`](../commands-legacy/on-err-call.md). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | -| `MouseDown` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Prend la valeur 1 si le bouton de la souris a été enfoncé, sinon prend la valeur 0. | -| `MouseX`, `MouseY` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Dans un événement `MouseDown=1`, `MouseX` et `MouseY` reçoivent respectivement les coordonnées verticales et horizontales du clic. Les deux valeurs sont exprimées en pixels et avec le système de coordonnées locales de la fenêtre.
  • Dans le cas d'un champ ou d'une variable image, `MouseX` et `MouseY` reçoivent les coordonnées locales d'un clic de souris dans les événements de formulaire [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) et [`On Mouse Up`](../Events/onMouseUp.md). Les coordonnées locales du curseur de la souris sont également retournées dans les événements [`On Mouse Enter`](../Events/onMouseEnter.md) et [`On Mouse Move`](../Events/onMouseMove.md) . Pour plus d'informations, voir la section [Coordonnées de la souris dans une image](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | -| `KeyCode` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Définit le code de caractère de la touche qui vient d'être pressée. Si la touche est une touche de fonction, `KeyCode` prend la valeur d'un code spécial. | -| `Modifiers` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient les codes des modifiers du clavier (Ctrl/Commande, Alt/Option, Maj, Verr. | -| `MouseProc` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient le numéro du process dans lequel le dernier événement a eu lieu | +| Nom de variable système | Type | Description | +| ------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OK` | Integer | Généralement fixée à 1 lorsqu'une commande a affiché une boîte de dialogue et que l'utilisateur a cliqué sur le bouton **OK**, et à 0 s'il a cliqué sur **Cancel**. Certaines commandes modifient également la valeur de la variable système `OK` lorsqu'une opération est exécutée avec succès. | +| `Document` | Text | Contient le "nom long" (chemin complet + nom) du dernier fichier ouvert ou créé à l'aide de commandes telles que [Open document](../commands-legacy/open-document.md) ou [SELECT LOG FILE](../commands/select-log-file.md). | +| `FldDelimit`, `RecDelimit` | Integer | Contiennent les codes de caractères qui seront utilisés respectivement comme séparateur de champs (par défaut **Tab** (9)) et séparateur d'enregistrements (par défaut **retour chariot** (13)) lors de l'importation ou de l'exportation de texte. Pour utiliser un séparateur différent, attribuez une nouvelle valeur à la variable système. | +| `Error`, `Error line` | Integer | Utilisées dans une méthode d'interception d'erreurs installée par la commande [`ON ERR CALL`](../commands-legacy/on-err-call.md). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `Error method`, `Error formula` | Text | Utilisées dans une méthode d'interception d'erreurs installée par la commande [`ON ERR CALL`](../commands-legacy/on-err-call.md). Voir [Gestion des erreurs dans la méthode](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `MouseDown` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Prend la valeur 1 si le bouton de la souris a été enfoncé, sinon prend la valeur 0. | +| `MouseX`, `MouseY` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Dans un événement `MouseDown=1`, `MouseX` et `MouseY` reçoivent respectivement les coordonnées verticales et horizontales du clic. Les deux valeurs sont exprimées en pixels et avec le système de coordonnées locales de la fenêtre.
  • Dans le cas d'un champ ou d'une variable image, `MouseX` et `MouseY` reçoivent les coordonnées locales d'un clic de souris dans les événements de formulaire [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) et [`On Mouse Up`](../Events/onMouseUp.md). Les coordonnées locales du curseur de la souris sont également retournées dans les événements [`On Mouse Enter`](../Events/onMouseEnter.md) et [`On Mouse Move`](../Events/onMouseMove.md) . Pour plus d'informations, voir la section [Coordonnées de la souris dans une image](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | +| `KeyCode` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Définit le code de caractère de la touche qui vient d'être pressée. Si la touche est une touche de fonction, `KeyCode` prend la valeur d'un code spécial. | +| `Modifiers` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient les codes des modifiers du clavier (Ctrl/Commande, Alt/Option, Maj, Verr. | +| `MouseProc` | Integer | Utilisée dans une méthode installée par la commande [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Contient le numéro du process dans lequel le dernier événement a eu lieu | :::note diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index 427c5b2a049eff..bf3fab6666e51c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -24,7 +24,7 @@ Vous ne pouvez pas déclencher directement l'exécution d'une fonction d'événe :::info Note de compatibilité -Les événements d'entité ORDA dans le magasin de données sont équivalents aux triggers dans la base de données 4D. Cependant, les actions déclenchées au niveau de la base de données 4D à l'aide des commandes du langage classique 4D ou des actions standard ne déclenchent pas les événements ORDA. +Les événements d'entité ORDA dans le magasin de données sont équivalents aux triggers dans la base de données 4D. Cependant, les actions déclenchées au niveau de la base de données 4D à l'aide des commandes du langage classique 4D ou des actions standard ne déclenchent pas les événements ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: @@ -420,7 +420,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -434,6 +436,12 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: + ### `Function event afterSave` #### Syntaxe diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/variables.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/variables.md index bf38f56c24bd72..e353105188d538 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/variables.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/variables.md @@ -251,17 +251,18 @@ MyNumber:=3 システム変数は [4Dコマンド](../commands/command-index.md) によって使用されます。 コマンドがシステム変数に影響を与えるかどうかを確認するには、コマンドの説明の "システム変数およびセット" の項目を参照ください。 -| システム変数名 | 型 | 説明 | -| ------------------------------------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `OK` | Integer | 通常、コマンドがダイアログボックスを表示して、ユーザーが **OK** ボタンをクリックすると 1 に、**キャンセル** ボタンをクリックした場合は 0 に設定されます。 一部のコマンドは、処理が成功すると `OK` システム変数の値を変更します。 | -| `Document` | Text | [Open document](../commands-legacy/open-document.md) や [SELECT LOG FILE](../commands/select-log-file.md) などのコマンドを使用して最後に開かれた、または作成されたファイルの「長い名前」(完全パス名)が格納されています。 | -| `FldDelimit`, `RecDelimit` | Text | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | [`ON ERR CALL`](../commands-legacy/on-err-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理)参照。 | -| `MouseDown` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 マウスボタンが押されたときに 1 が、それ以外の場合は 0 に設定されます。 | -| `MouseX`, `MouseY` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。
  • `MouseDown=1` イベントの時、`MouseX` と `MouseY` にはクリックされた場所の水平 / 垂直座標がそれぞれ代入されます。 両方の値ともピクセル単位で表わされ、ウィンドウのローカルな座標システムを使用します。
  • ピクチャーフィールドや変数の場合は、[`On Clicked`](../Events/onClicked.md) や [`On Double Clicked`](../Events/onDoubleClicked.md)、および [`On Mouse Up`](../Events/onMouseUp.md) フォームイベント内で、クリックのローカル座標が `MouseX` と `MouseY` に返されます。 また、[`On Mouse Enter`](../Events/onMouseEnter.md) および [`On Mouse Move`](../Events/onMouseMove.md) フォームイベントでもマウスカーソルのローカル座標が返されます。 詳細については、[ピクチャー上のマウス座標](../FormEditor/pictures.md#ピクチャー上のマウス座標) を参照ください。
  • | -| `KeyCode` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 押されたキーの文字コードが代入されます。 押されたキーがファンクションキーの場合、`KeyCode` には特殊コードがセットされます。 | -| `Modifiers` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 キーボードのモディファイアキーの値を格納します (Ctrl/Command、Alt/Option、Shift、Caps Lock)。 | -| `MouseProc` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 最後のイベントが発生したプロセス番号を格納します。 | +| システム変数名 | 型 | 説明 | +| ------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `OK` | Integer | 通常、コマンドがダイアログボックスを表示して、ユーザーが **OK** ボタンをクリックすると 1 に、**キャンセル** ボタンをクリックした場合は 0 に設定されます。 一部のコマンドは、処理が成功すると `OK` システム変数の値を変更します。 | +| `Document` | Text | [Open document](../commands-legacy/open-document.md) や [SELECT LOG FILE](../commands/select-log-file.md) などのコマンドを使用して最後に開かれた、または作成されたファイルの「長い名前」(完全パス名)が格納されています。 | +| `FldDelimit`, `RecDelimit` | Integer | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | +| `Error`, `Error line` | Integer | [`ON ERR CALL`](../commands-legacy/on-err-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理)参照。 | +| `Error method`, `Error formula` | Text | [`ON ERR CALL`](../commands-legacy/on-err-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理)参照。 | +| `MouseDown` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 マウスボタンが押されたときに 1 が、それ以外の場合は 0 に設定されます。 | +| `MouseX`, `MouseY` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。
  • `MouseDown=1` イベントの時、`MouseX` と `MouseY` にはクリックされた場所の水平 / 垂直座標がそれぞれ代入されます。 両方の値ともピクセル単位で表わされ、ウィンドウのローカルな座標システムを使用します。
  • ピクチャーフィールドや変数の場合は、[`On Clicked`](../Events/onClicked.md) や [`On Double Clicked`](../Events/onDoubleClicked.md)、および [`On Mouse Up`](../Events/onMouseUp.md) フォームイベント内で、クリックのローカル座標が `MouseX` と `MouseY` に返されます。 また、[`On Mouse Enter`](../Events/onMouseEnter.md) および [`On Mouse Move`](../Events/onMouseMove.md) フォームイベントでもマウスカーソルのローカル座標が返されます。 詳細については、[ピクチャー上のマウス座標](../FormEditor/pictures.md#ピクチャー上のマウス座標) を参照ください。
  • | +| `KeyCode` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 押されたキーの文字コードが代入されます。 押されたキーがファンクションキーの場合、`KeyCode` には特殊コードがセットされます。 | +| `Modifiers` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 キーボードのモディファイアキーの値を格納します (Ctrl/Command、Alt/Option、Shift、Caps Lock)。 | +| `MouseProc` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 最後のイベントが発生したプロセス番号を格納します。 | :::note diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/glossary.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/glossary.md index ce31a26ca023c4..bb8df81f97df04 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/glossary.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/glossary.md @@ -105,7 +105,7 @@ ORDA データモデルクラスの関数。 ## 汎用クラス -エンティティやデータクラスなどの ORDA オブジェクト用のビルトインクラス。 エンティティやデータクラスなどの ORDA オブジェクト用のビルトインクラス。 汎用クラスのプロパティや関数は、ユーザー拡張クラス (例: `EmployeeEntity`) において自動で利用可能です。 +エンティティやデータクラスなどの ORDA オブジェクト用のビルトインクラス。 汎用クラスのプロパティや関数は、ユーザー拡張クラス (例: `EmployeeEntity`) において自動で利用可能です。 ## レイジーローディング @@ -119,7 +119,7 @@ ORDA データモデルクラスの関数。 データストア、データクラス、エンティティセレクション、エンティティなどの ORDA オブジェクトは、オブジェクトのクラスを定義します。 これらのクラスには、オブジェクトを直接操作するための専用のメソッドが提供されています。 これらのメソッドはメンバー関数とも呼ばれます。 このメソッドを使用するには、オブジェクトのインスタンスに対して呼び出します。 -たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: +たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: ```code4d $myClass.query("name = smith") @@ -150,7 +150,7 @@ $myClass.query("name = smith") ## 権限 -The ability to run one or more [actions](#action) on [resources](#resource). ビジネスロジックに応じて、複数の権限を [ロール](#ロール) としてまとめることができます。 +[リソース](#リソース) に対する実行が許可された [アクション](#アクション) の範囲のことです。 ビジネスロジックに応じて、複数の権限を [ロール](#ロール) としてまとめることができます。 ## プロパティ diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index ea892330827279..cc909bcea59ea6 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -1,114 +1,114 @@ --- id: orda-events -title: Entity Events +title: エンティティイベント ---
    履歴 -| リリース | 内容 | -| ------ | ----------------------------------------------------------------------------------------------------- | -| 21 | Added events: validateSave / saving / afterSave / validateDrop / dropping / afterDrop | -| 20 R10 | touched event added | +| リリース | 内容 | +| ------ | -------------------------------------------------------------------------------------------------- | +| 21 | 追加されたイベント: validateSave / saving / afterSave / validateDrop / dropping / afterDrop | +| 20 R10 | touched イベント追加 |
    -Entity events are functions that are automatically invoked by ORDA each time entities and entity attributes are manipulated (added, deleted, or modified). You can write very simple events, and then make them more sophisticated. +エンティティイベントとは、エンティティやエンティティ属性が操作(追加、削除、変更)されるたびに ORDA によって自動的に呼び出される関数です。 シンプルなイベントを書き、それをより洗練されたものに変えていくことができます。 -You cannot directly trigger event function execution. Events are called automatically by ORDA based on user actions or operations performed through code on entities and their attributes. +イベント関数の実行は直接トリガーすることはできません。 イベントは、ユーザーアクションや、エンティティまたはその属性に対するコードを通して実行された操作に基づいて、ORDA によって自動的に呼び出されます。 -:::tip Related blog post +:::tip 関連したblog 記事 [ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-database-operations) ::: -:::info note Compatibility note +:::info 互換性に関する注意 -ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. +データストアにおける ORDA エンティティイベントは、4D データベースにおけるトリガに相当します。 しかしながら、4D クラシックランゲージコマンドを使用して 4D データベースレベルでトリガーされたアクション、あるいは標準アクションは、ORDA イベントをトリガーしません。 また、トリガとは異なり、ORDA エンティティイベントはエンティティを保存または削除する際に、データクラスの元となるテーブル全体をロックしないことに注意して下さい。 個別のエンティティ(つまりレコード)に起因している限りは、複数のイベントが同時に実行されることが可能です。 ::: ## 概要 -### Event level +### イベントレベル -A event function is always defined in the [Entity class](../ORDA/ordaClasses.md#entity-class). +イベント関数は必ず[Entity クラス](../ORDA/ordaClasses.md#エンティティクラス) 内で定義されます。 -It can be set at the **entity** level and/or the **attribute** level (it includes [**computed attributes**](../ORDA/ordaClasses.md#computed-attributes)). In the first case, it will be triggered for any attributes of the entity; on the other case, it will only be triggered for the targeted attribute. +イベントは **エンティティ** レベルまたは **属性** レベルで設定することができます(属性には [**計算属性**](../ORDA/ordaClasses.md#計算属性) も含まれます)。 前者の場合、エンティティのあらゆる属性でイベントがトリガーされます。それ以外の場合、イベントは対象となる属性に対してのみトリガーされます。 -For the same event, you can define different functions for different attributes. +同じイベントに対して、異なる属性に対して異なる関数を定義することができます。 -You can also define the same event at both attribute and entity levels. The attribute event is called first and then the entity event. +また同じイベントを属性レベルとエンティティレベルの両方で定義することも可能です。 その場合、属性イベントが先に呼ばれ、その後にエンティティイベントが呼ばれます。 -### Execution in remote configurations +### リモート構成における実行 -Usually, ORDA events are executed on the server. +一般的に、ORDA イベントはサーバー上で実行されます。 -In client/server configuration however, the `touched()` event function can be executed on the **server or the client**, depending on the use of [`local`](./ordaClasses.md#local-functions) keyword. A specific implementation on the client side allows the triggering of the event on the client. +しかしながらクライアント/サーバー構成においては、[`local`](./ordaClasses.md#local-functions) キーワードの使用によっては、`touched()` イベント関数を**サーバーまたはクライアント**で実行することが可能です。 クライアント側で特定の実装をすることにより、イベントをクライアント上でトリガーすることができるようになります。 :::note -ORDA [`constructor()`](./ordaClasses.md#class-constructor) functions are always executed on the client. +ORDA [`constructor()`](./ordaClasses.md#class-constructor) 関数は必ずクライアント上で実行されます。 ::: -With other remote configurations (i.e. [Qodly applications](https://developer.4d.com/qodly), [REST API requests](../REST/REST_requests.md), or requests through [`Open datastore`](../commands/open-datastore.md)), the `touched()` event function is always executed **server-side**. It means that you have to make sure the server can "see" that an attribute has been touched to trigger the event (see below). +他のリモート構成(例: [Qodly アプリケーション](https://developer.4d.com/qodly)、[REST API リクエスト](../REST/REST_requests.md)、あるいは[`Open datastore`](../commands/open-datastore.md) を通したリクエスト)においては、イベント関数は必ず**サーバー側**で実行されます。 これはつまりイベントをトリガーするためには、属性がタッチされたことがサーバーから"見える"ようにしておくようにしなければならいことを意味します(以下参照)。 -### Summary table +### 概要表 -The following table lists ORDA events along with their rules. +以下の表は、ORDA イベントの一覧とそのルールをまとめたものです。 -| イベント | レベル | Function name | (C/S) Executed on | Can stop action by returning an error | -| :------------------------ | :----- | :------------------------------------------------------ | :------------------------------------------------------------------: | ------------------------------------- | -| Entity instantiation | Entity | [`constructor()`](./ordaClasses.md#class-constructor-1) | client | × | -| Attribute touched | 属性 | `event touched ()` | Depends on [`local`](../ORDA/ordaClasses.md#local-functions) keyword | × | -| | Entity | `event touched()` | Depends on [`local`](../ORDA/ordaClasses.md#local-functions) keyword | × | -| Before saving an entity | 属性 | `validateSave ()` | server | ◯ | -| | Entity | `validateSave()` | server | ◯ | -| When saving an entity | 属性 | `saving ()` | server | ◯ | -| | Entity | `saving()` | server | ◯ | -| After saving an entity | Entity | `afterSave()` | server | × | -| Before dropping an entity | 属性 | `validateDrop ()` | server | ◯ | -| | Entity | `validateDrop()` | server | ◯ | -| When dropping an entity | 属性 | `dropping ()` | server | ◯ | -| | Entity | `dropping()` | server | ◯ | -| After dropping an entity | Entity | `afterDrop()` | server | × | +| イベント | レベル | 関数名 | (C/S の場合) 実行される場所 | エラーを返すことでアクションを停止できる | +| :------------------------------------ | :----- | :------------------------------------------------------ | :--------------------------------------------------------: | -------------------- | +| エンティティのインスタンス化 | Entity | [`constructor()`](./ordaClasses.md#class-constructor-1) | client | × | +| 属性がタッチされた | 属性 | `event touched ()` | [`local`](../ORDA/ordaClasses.md#local-functions) キーワードによる | × | +| | Entity | `event touched()` | [`local`](../ORDA/ordaClasses.md#local-functions) キーワードによる | × | +| エンティティを保存する前 | 属性 | `validateSave ()` | server | ◯ | +| | Entity | `validateSave()` | server | ◯ | +| エンティティの保存時 | 属性 | `saving ()` | server | ◯ | +| | Entity | `saving()` | server | ◯ | +| エンティティを保存した後 | Entity | `afterSave()` | server | × | +| エンティティをドロップ(削除)する前 | 属性 | `validateDrop ()` | server | ◯ | +| | Entity | `validateDrop()` | server | ◯ | +| エンティティのドロップ(削除)時 | 属性 | `dropping ()` | server | ◯ | +| | Entity | `dropping()` | server | ◯ | +| エンティティをドロップした後 | Entity | `afterDrop()` | server | × | :::note -The [`constructor()`](./ordaClasses.md#class-constructor-1) function is not actually an event function but is always called when a new entity is instantiated. +[`constructor()`](./ordaClasses.md#class-constructor-1) 関数は実際にはイベント関数ではありませんが、エンティティがインスタンス化される際に必ず呼び出されます。 ::: -## *event* parameter +## *event* 引数 -Event functions accept a single *event* object as parameter. When the function is called, the parameter is filled with several properties: +イベント関数は、単一の *event* オブジェクトを引数として受け取ります。 関数が呼び出されると、引数には複数のプロパティに値が入れられます: -| プロパティ名 | 利用可能性 | 型 | 説明 | | -| :------------------ | :----------------------------------------------------------------------------------------------------------------------- | :------------------- | :-------------------------------------------------------------------------------------------------------------------- | - | -| "kind" | Always | 文字列 | Event name: "touched", "validateSave", "saving", "afterSave", "validateDrop", "dropping", "afterDrop" | | -| *attributeName* | Only for events implemented at attribute level ("validateSave", "saving", "validateDrop", "dropping") | 文字列 | Attribute name (*e.g.* "firstname") | | -| *dataClassName* | Always | 文字列 | Dataclass name (*e.g.* "Company") | | -| "savedAttributes" | Only in [`afterSave()`](#function-event-aftersave) | Collection of String | Names of attributes properly saved | | -| "droppedAttributes" | Only in [`afterDrop()`](#function-event-afterdrop) | Collection of String | Names of attributes properly dropped | | -| "saveStatus" | Only in [`afterSave()`](#function-event-aftersave) | 文字列 | "success" if the save was successful, "failed" otherwise | | -| "dropStatus" | Only in [`afterDrop()`](#function-event-afterdrop) | 文字列 | "success" if the drop was successful, "failed" otherwise | | +| プロパティ名 | 利用可能性 | 型 | 説明 | | +| :------------------ | :-------------------------------------------------------------------------------------------- | :--------- | :--------------------------------------------------------------------------------------------------------- | - | +| "kind" | 常に | 文字列 | イベント名: "touched"、"validateSave"、"saving"、"afterSave"、"validateDrop"、"dropping"、"afterDrop" | | +| *attributeName* | 属性レベルで実装されているイベントに対してのみ("validateSave"、"saving"、"validateDrop"、"dropping") | 文字列 | 属性名 (*例* "firstname") | | +| *dataClassName* | 常に | 文字列 | データクラス名 (*例* "Company") | | +| "savedAttributes" | [`afterSave()`](#function-event-aftersave) でのみ | 文字列のコレクション | 正常に保存された属性名 | | +| "droppedAttributes" | [`afterDrop()`](#function-event-afterdrop) でのみ | 文字列のコレクション | 正常にドロップ(削除)された属性名 | | +| "saveStatus" | [`afterSave()`](#function-event-aftersave) でのみ | 文字列 | 保存が正常であれば "success"、それ以外の場合には "failed" | | +| "dropStatus" | [`afterDrop()`](#function-event-afterdrop) でのみ | 文字列 | ドロップ(削除)が正常であれば "success"、それ以外の場合には "failed" | | -## Error object +## エラーオブジェクト -[Some event functions](#summary-table) can return an **error object** to raise an error and stop the running action. +[一部のイベント関数](#概要表) は **エラーオブジェクト** を返すことでエラーを生成し実行中のアクションを停止することができます。 -When an error occurs in an event, the other events are stopped at the first raised error and the action (save or drop) is also stopped. This error is sent before other potential errors like [stamp has changed, entity locked](../API/EntityClass.md#save), etc. +イベント中にエラーが発生した場合、他のイベントも最初にエラーが生成された時点で停止し、アクション(保存やドロップ)も停止します。 このエラーは[スタンプが変更された、エンティティがロックされていた](../API/EntityClass.md#save) などの潜在的なエラーの前に送信されます。 -### Error object properties +### エラーオブジェクトのプロパティ -| プロパティ | 型 | 説明 | Set by the developer | -| ------------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | -| errCode | Integer | Same as for [`Last errors`](../commands/last-errors.md) command | ◯ | -| message | Text | Same as for [`Last errors`](../commands/last-errors.md) command | ◯ | -| extraDescription | Object | Free information to set up | ◯ | -| seriousError | Boolean | Used only with validate events (see below).
  • `True`: creates a [serious (unpredictable) error](../Concepts/error-handling.md#predictable-vs-unpredictable-errors) and triggers an exception. Adds the `dk status serious validation error` status
  • `False`: creates only a [silent (predictable) error](../Concepts/error-handling.md#predictable-vs-unpredictable-errors). Adds the `dk status validation failed` status
  • | Yes (default is false) | -| componentSignature | Text | Always "DBEV" | × | +| プロパティ | 型 | 説明 | 開発者によって設定 | +| ------------------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | +| errCode | Integer | [`Last errors`](../commands/last-errors.md) コマンドと同じ | ◯ | +| message | Text | [`Last errors`](../commands/last-errors.md) コマンドと同じ | ◯ | +| extraDescription | Object | 自由に設定可能な情報 | ◯ | +| seriousError | Boolean | validate イベントでのみ使用されます(以下参照)。
  • `True`: [深刻(予測不能)なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不能なエラー) を作成し、例外をトリガーします。 `dk status serious validation error` ステータスを追加します
  • `False`: creates only a [静か(予測可能) なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー) のみを作成します。 `dk status validation failed` ステータスを追加します
  • | 可能(デフォルトはfalse) | +| componentSignature | Text | 常に "DBEV" | × | - [Serious errors](../Concepts/error-handling.md#predictable-vs-unpredictable-errors) are stacked in the `errors` collection property of the **Result object** returned by the [`save()`](../API/EntityClass.md#save) or [`drop()`](../API/EntityClass.md#drop) functions. - In case of an error triggered by a **validate** event, the `seriousError` property allows you to choose the level of the error to generate: @@ -420,7 +420,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -434,6 +436,12 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: + ### `Function event afterSave` #### シンタックス diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/variables.md b/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/variables.md index 8f3d48ce8cab37..5eed54f80551e0 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/variables.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/variables.md @@ -243,7 +243,7 @@ atNames{1}:="Richard" | ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OK` | Integer | 通常、コマンドがダイアログボックスを表示して、ユーザーが **OK** ボタンをクリックすると 1 に、**キャンセル** ボタンをクリックした場合は 0 に設定されます。 一部のコマンドは、処理が成功すると `OK` システム変数の値を変更します。 | | `Document` | Text | [Open document](https://doc.4d.com/4dv20/help/command/ja/page264.html) や [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/ja/page345.html) などのコマンドを使用して最後に開いたファイルまたは作成したファイルのパス名 (フルパス + 名前) が含まれます。 | -| `FldDelimit`, `RecDelimit` | Text | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | +| `FldDelimit`, `RecDelimit` | Integer | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | | `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/ja/page155.html) コマンドでインストールされたエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理) 参照。 | | `MouseDown` | Integer | [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/ja/page190.html) コマンドでインストールされたメソッド内で使用されます。 マウスボタンが押されたときに 1 が、それ以外の場合は 0 に設定されます。 | | `MouseX`, `MouseY` | Integer | [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/ja/page190.html) コマンドでインストールされたメソッド内で使用されます。
  • MouseDown=1 イベントの時、MouseXMouseY にはクリックされた場所の水平 / 垂直座標がそれぞれ代入されます。 両方の値ともピクセル単位で表わされ、ウィンドウのローカルな座標システムを使用します。
  • ピクチャーフィールドや変数の場合は、On ClickedOn Double Clicked、および On Mouse Up フォームイベント内で、クリックのローカル座標が MouseXMouseY に返されます。 また、[`On Mouse Enter`](../Events/onMouseEnter.md) および [`On Mouse Move`](../Events/onMouseMove.md) フォームイベントでもマウスカーソルのローカル座標が返されます。 詳細については、[ピクチャー上のマウス座標](../FormEditor/pictures.md#ピクチャー上のマウス座標) を参照ください。
  • | diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md index bf38f56c24bd72..e353105188d538 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md @@ -251,17 +251,18 @@ MyNumber:=3 システム変数は [4Dコマンド](../commands/command-index.md) によって使用されます。 コマンドがシステム変数に影響を与えるかどうかを確認するには、コマンドの説明の "システム変数およびセット" の項目を参照ください。 -| システム変数名 | 型 | 説明 | -| ------------------------------------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `OK` | Integer | 通常、コマンドがダイアログボックスを表示して、ユーザーが **OK** ボタンをクリックすると 1 に、**キャンセル** ボタンをクリックした場合は 0 に設定されます。 一部のコマンドは、処理が成功すると `OK` システム変数の値を変更します。 | -| `Document` | Text | [Open document](../commands-legacy/open-document.md) や [SELECT LOG FILE](../commands/select-log-file.md) などのコマンドを使用して最後に開かれた、または作成されたファイルの「長い名前」(完全パス名)が格納されています。 | -| `FldDelimit`, `RecDelimit` | Text | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | [`ON ERR CALL`](../commands-legacy/on-err-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理)参照。 | -| `MouseDown` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 マウスボタンが押されたときに 1 が、それ以外の場合は 0 に設定されます。 | -| `MouseX`, `MouseY` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。
  • `MouseDown=1` イベントの時、`MouseX` と `MouseY` にはクリックされた場所の水平 / 垂直座標がそれぞれ代入されます。 両方の値ともピクセル単位で表わされ、ウィンドウのローカルな座標システムを使用します。
  • ピクチャーフィールドや変数の場合は、[`On Clicked`](../Events/onClicked.md) や [`On Double Clicked`](../Events/onDoubleClicked.md)、および [`On Mouse Up`](../Events/onMouseUp.md) フォームイベント内で、クリックのローカル座標が `MouseX` と `MouseY` に返されます。 また、[`On Mouse Enter`](../Events/onMouseEnter.md) および [`On Mouse Move`](../Events/onMouseMove.md) フォームイベントでもマウスカーソルのローカル座標が返されます。 詳細については、[ピクチャー上のマウス座標](../FormEditor/pictures.md#ピクチャー上のマウス座標) を参照ください。
  • | -| `KeyCode` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 押されたキーの文字コードが代入されます。 押されたキーがファンクションキーの場合、`KeyCode` には特殊コードがセットされます。 | -| `Modifiers` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 キーボードのモディファイアキーの値を格納します (Ctrl/Command、Alt/Option、Shift、Caps Lock)。 | -| `MouseProc` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 最後のイベントが発生したプロセス番号を格納します。 | +| システム変数名 | 型 | 説明 | +| ------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `OK` | Integer | 通常、コマンドがダイアログボックスを表示して、ユーザーが **OK** ボタンをクリックすると 1 に、**キャンセル** ボタンをクリックした場合は 0 に設定されます。 一部のコマンドは、処理が成功すると `OK` システム変数の値を変更します。 | +| `Document` | Text | [Open document](../commands-legacy/open-document.md) や [SELECT LOG FILE](../commands/select-log-file.md) などのコマンドを使用して最後に開かれた、または作成されたファイルの「長い名前」(完全パス名)が格納されています。 | +| `FldDelimit`, `RecDelimit` | Integer | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | +| `Error`, `Error line` | Integer | [`ON ERR CALL`](../commands-legacy/on-err-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理)参照。 | +| `Error method`, `Error formula` | Text | [`ON ERR CALL`](../commands-legacy/on-err-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理)参照。 | +| `MouseDown` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 マウスボタンが押されたときに 1 が、それ以外の場合は 0 に設定されます。 | +| `MouseX`, `MouseY` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。
  • `MouseDown=1` イベントの時、`MouseX` と `MouseY` にはクリックされた場所の水平 / 垂直座標がそれぞれ代入されます。 両方の値ともピクセル単位で表わされ、ウィンドウのローカルな座標システムを使用します。
  • ピクチャーフィールドや変数の場合は、[`On Clicked`](../Events/onClicked.md) や [`On Double Clicked`](../Events/onDoubleClicked.md)、および [`On Mouse Up`](../Events/onMouseUp.md) フォームイベント内で、クリックのローカル座標が `MouseX` と `MouseY` に返されます。 また、[`On Mouse Enter`](../Events/onMouseEnter.md) および [`On Mouse Move`](../Events/onMouseMove.md) フォームイベントでもマウスカーソルのローカル座標が返されます。 詳細については、[ピクチャー上のマウス座標](../FormEditor/pictures.md#ピクチャー上のマウス座標) を参照ください。
  • | +| `KeyCode` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 押されたキーの文字コードが代入されます。 押されたキーがファンクションキーの場合、`KeyCode` には特殊コードがセットされます。 | +| `Modifiers` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 キーボードのモディファイアキーの値を格納します (Ctrl/Command、Alt/Option、Shift、Caps Lock)。 | +| `MouseProc` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 最後のイベントが発生したプロセス番号を格納します。 | :::note diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md index ce31a26ca023c4..bb8df81f97df04 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md @@ -105,7 +105,7 @@ ORDA データモデルクラスの関数。 ## 汎用クラス -エンティティやデータクラスなどの ORDA オブジェクト用のビルトインクラス。 エンティティやデータクラスなどの ORDA オブジェクト用のビルトインクラス。 汎用クラスのプロパティや関数は、ユーザー拡張クラス (例: `EmployeeEntity`) において自動で利用可能です。 +エンティティやデータクラスなどの ORDA オブジェクト用のビルトインクラス。 汎用クラスのプロパティや関数は、ユーザー拡張クラス (例: `EmployeeEntity`) において自動で利用可能です。 ## レイジーローディング @@ -119,7 +119,7 @@ ORDA データモデルクラスの関数。 データストア、データクラス、エンティティセレクション、エンティティなどの ORDA オブジェクトは、オブジェクトのクラスを定義します。 これらのクラスには、オブジェクトを直接操作するための専用のメソッドが提供されています。 これらのメソッドはメンバー関数とも呼ばれます。 このメソッドを使用するには、オブジェクトのインスタンスに対して呼び出します。 -たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: +たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: ```code4d $myClass.query("name = smith") @@ -150,7 +150,7 @@ $myClass.query("name = smith") ## 権限 -The ability to run one or more [actions](#action) on [resources](#resource). ビジネスロジックに応じて、複数の権限を [ロール](#ロール) としてまとめることができます。 +[リソース](#リソース) に対する実行が許可された [アクション](#アクション) の範囲のことです。 ビジネスロジックに応じて、複数の権限を [ロール](#ロール) としてまとめることができます。 ## プロパティ diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md index a61deb863753ab..f5670319110839 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md @@ -1,77 +1,77 @@ --- id: orda-events -title: Entity Events +title: エンティティイベント ---
    履歴 -| リリース | 内容 | -| ------ | ------------------- | -| 20 R10 | touched event added | +| リリース | 内容 | +| ------ | -------------- | +| 20 R10 | touched イベント追加 |
    -Entity events are functions that are automatically invoked by ORDA each time entities and entity attributes are manipulated (added, deleted, or modified). You can write very simple events, and then make them more sophisticated. +エンティティイベントとは、エンティティやエンティティ属性が操作(追加、削除、変更)されるたびに ORDA によって自動的に呼び出される関数です。 シンプルなイベントを書き、それをより洗練されたものに変えていくことができます。 -You cannot directly trigger event function execution. Events are called automatically by ORDA based on user actions or operations performed through code on entities and their attributes. +イベント関数の実行は直接トリガーすることはできません。 イベントは、ユーザーアクションや、エンティティまたはその属性に対するコードを通して実行された操作に基づいて、ORDA によって自動的に呼び出されます。 -:::info note Compatibility note +:::info 互換性に関する注意 -ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. +データストアにおける ORDA エンティティイベントは、4D データベースにおけるトリガに相当します。 しかしながら、4D クラシックランゲージコマンドを使用して 4D データベースレベルでトリガーされたアクション、あるいは標準アクションは、ORDA イベントをトリガーしません。 また、トリガとは異なり、ORDA エンティティイベントはエンティティを保存または削除する際に、データクラスの元となるテーブル全体をロックしないことに注意して下さい。 個別のエンティティ(つまりレコード)に起因している限りは、複数のイベントが同時に実行されることが可能です。 ::: ## 概要 -### Event level +### イベントレベル エンティティイベント関数は必ず[Entity クラス](../ORDA/ordaClasses.md#entity-class) 内で定義されます。 -It can be set at the **entity** level and/or the **attribute** level (it includes [**computed attributes**](../ORDA/ordaClasses.md#computed-attributes)). In the first case, it will be triggered for any attributes of the entity; on the other case, it will only be triggered for the targeted attribute. +イベントは **エンティティ** レベルまたは **属性** レベルで設定することができます(属性には [**計算属性**](../ORDA/ordaClasses.md#計算属性) も含まれます)。 前者の場合、エンティティのあらゆる属性でイベントがトリガーされます。それ以外の場合、イベントは対象となる属性に対してのみトリガーされます。 -For the same event, you can define different functions for different attributes. +同じイベントに対して、異なる属性に対して異なる関数を定義することができます。 -You can also define the same event at both attribute and entity levels. The attribute event is called first and then the entity event. +また同じイベントを属性レベルとエンティティレベルの両方で定義することも可能です。 その場合、属性イベントが先に呼ばれ、その後にエンティティイベントが呼ばれます。 -### Execution in remote configurations +### リモート構成における実行 -Usually, ORDA events are executed on the server. +一般的に、ORDA イベントはサーバー上で実行されます。 -In client/server configuration however, the `touched()` event function can be executed on the **server or the client**, depending on the use of [`local`](./ordaClasses.md#local-functions) keyword. A specific implementation on the client side allows the triggering of the event on the client. +しかしながらクライアント/サーバー構成においては、[`local`](./ordaClasses.md#local-functions) キーワードの使用によっては、`touched()` イベント関数を**サーバーまたはクライアント**で実行することが可能です。 クライアント側で特定の実装をすることにより、イベントをクライアント上でトリガーすることができるようになります。 :::note -ORDA [`constructor()`](./ordaClasses.md#class-constructor) functions are always executed on the client. +ORDA [`constructor()`](./ordaClasses.md#class-constructor) 関数は必ずクライアント上で実行されます。 ::: 他のリモート設定(例: Qodly アプリケーション、[REST API リクエスト](../REST/REST_requests.md)、あるいは[`Open datastore`](../commands/open-datastore.md) を通したリクエスト) では、`touched()` イベント関数は必ず**サーバー側**で実行されます。 これはつまり、イベントがトリガーされるためには、属性がタッチされたということを必ずサーバーが"見える"ようにしておかなければならないということを意味します(以下参照)。 -### Summary table +### 概要表 以下の表は、ORDA エンティティイベントの一覧とそのルールをまとめたものです。 -| イベント | レベル | Function name | (C/S) Executed on | -| :------------------- | :----- | :------------------------------------------------------ | :------------------------------------------------------------------: | -| Entity instantiation | Entity | [`constructor()`](./ordaClasses.md#class-constructor-1) | client | -| Attribute touched | 属性 | `event touched ()` | Depends on [`local`](../ORDA/ordaClasses.md#local-functions) keyword | -| | Entity | `event touched()` | Depends on [`local`](../ORDA/ordaClasses.md#local-functions) keyword | +| イベント | レベル | 関数名 | (C/S の場合) 実行される場所 | +| :------------- | :----- | :------------------------------------------------------ | :--------------------------------------------------------: | +| エンティティのインスタンス化 | Entity | [`constructor()`](./ordaClasses.md#class-constructor-1) | client | +| 属性がタッチされた | 属性 | `event touched ()` | [`local`](../ORDA/ordaClasses.md#local-functions) キーワードによる | +| | Entity | `event touched()` | [`local`](../ORDA/ordaClasses.md#local-functions) キーワードによる | :::note -The [`constructor()`](./ordaClasses.md#class-constructor-1) function is not actually an event function but is always called when a new entity is instantiated. +[`constructor()`](./ordaClasses.md#class-constructor-1) 関数は実際にはイベント関数ではありませんが、エンティティがインスタンス化される際に必ず呼び出されます。 ::: -## *event* parameter +## *event* 引数 -Event functions accept a single *event* object as parameter. When the function is called, the parameter is filled with several properties: +イベント関数は、単一の *event* オブジェクトを引数として受け取ります。 関数が呼び出されると、引数には複数のプロパティに値が入れられます: -| プロパティ名 | 利用可能性 | 型 | 説明 | -| :-------------- | :----------- | :-- | :------------------------------------------------------------------------------------- | -| `kind` | Always | 文字列 | イベント名("touched") | -| *attributeName* | 属性に関するイベントのみ | 文字列 | Attribute name (*e.g.* "firstname") | -| *dataClassName* | Always | 文字列 | Dataclass name (*e.g.* "Company") | +| プロパティ名 | 利用可能性 | 型 | 説明 | +| :-------------- | :----------- | :-- | :----------------------------------------- | +| `kind` | 常に | 文字列 | イベント名("touched") | +| *attributeName* | 属性に関するイベントのみ | 文字列 | 属性名 (*例* "firstname") | +| *dataClassName* | 常に | 文字列 | データクラス名 (*例* "Company") | ## Event function description diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/variables.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/variables.md index 640c4e681ef8e1..6f080fc85169fd 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/variables.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/variables.md @@ -242,7 +242,7 @@ atNames{1}:="Richard" | ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OK` | Integer | 通常、コマンドがダイアログボックスを表示して、ユーザーが **OK** ボタンをクリックすると 1 に、**キャンセル** ボタンをクリックした場合は 0 に設定されます。 一部のコマンドは、処理が成功すると `OK` システム変数の値を変更します。 | | `Document` | Text | [Open document](https://doc.4d.com/4dv20/help/command/ja/page264.html) や [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/ja/page345.html) などのコマンドを使用して最後に開いたファイルまたは作成したファイルのパス名 (フルパス + 名前) が含まれます。 | -| `FldDelimit`, `RecDelimit` | Text | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | +| `FldDelimit`, `RecDelimit` | Integer | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | | `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/ja/page155.html) コマンドでインストールされたエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理) 参照。 | | `MouseDown` | Integer | [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/ja/page190.html) コマンドでインストールされたメソッド内で使用されます。 マウスボタンが押されたときに 1 が、それ以外の場合は 0 に設定されます。 | | `MouseX`, `MouseY` | Integer | [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/ja/page190.html) コマンドでインストールされたメソッド内で使用されます。
  • MouseDown=1 イベントの時、MouseXMouseY にはクリックされた場所の水平 / 垂直座標がそれぞれ代入されます。 両方の値ともピクセル単位で表わされ、ウィンドウのローカルな座標システムを使用します。
  • ピクチャーフィールドや変数の場合は、On ClickedOn Double Clicked、および On Mouse Up フォームイベント内で、クリックのローカル座標が MouseXMouseY に返されます。 また、[`On Mouse Enter`](../Events/onMouseEnter.md) および [`On Mouse Move`](../Events/onMouseMove.md) フォームイベントでもマウスカーソルのローカル座標が返されます。 詳細については、[ピクチャー上のマウス座標](../FormEditor/pictures.md#ピクチャー上のマウス座標) を参照ください。
  • | diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/variables.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/variables.md index bf38f56c24bd72..e353105188d538 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/variables.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/variables.md @@ -251,17 +251,18 @@ MyNumber:=3 システム変数は [4Dコマンド](../commands/command-index.md) によって使用されます。 コマンドがシステム変数に影響を与えるかどうかを確認するには、コマンドの説明の "システム変数およびセット" の項目を参照ください。 -| システム変数名 | 型 | 説明 | -| ------------------------------------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `OK` | Integer | 通常、コマンドがダイアログボックスを表示して、ユーザーが **OK** ボタンをクリックすると 1 に、**キャンセル** ボタンをクリックした場合は 0 に設定されます。 一部のコマンドは、処理が成功すると `OK` システム変数の値を変更します。 | -| `Document` | Text | [Open document](../commands-legacy/open-document.md) や [SELECT LOG FILE](../commands/select-log-file.md) などのコマンドを使用して最後に開かれた、または作成されたファイルの「長い名前」(完全パス名)が格納されています。 | -| `FldDelimit`, `RecDelimit` | Text | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | [`ON ERR CALL`](../commands-legacy/on-err-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理)参照。 | -| `MouseDown` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 マウスボタンが押されたときに 1 が、それ以外の場合は 0 に設定されます。 | -| `MouseX`, `MouseY` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。
  • `MouseDown=1` イベントの時、`MouseX` と `MouseY` にはクリックされた場所の水平 / 垂直座標がそれぞれ代入されます。 両方の値ともピクセル単位で表わされ、ウィンドウのローカルな座標システムを使用します。
  • ピクチャーフィールドや変数の場合は、[`On Clicked`](../Events/onClicked.md) や [`On Double Clicked`](../Events/onDoubleClicked.md)、および [`On Mouse Up`](../Events/onMouseUp.md) フォームイベント内で、クリックのローカル座標が `MouseX` と `MouseY` に返されます。 また、[`On Mouse Enter`](../Events/onMouseEnter.md) および [`On Mouse Move`](../Events/onMouseMove.md) フォームイベントでもマウスカーソルのローカル座標が返されます。 詳細については、[ピクチャー上のマウス座標](../FormEditor/pictures.md#ピクチャー上のマウス座標) を参照ください。
  • | -| `KeyCode` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 押されたキーの文字コードが代入されます。 押されたキーがファンクションキーの場合、`KeyCode` には特殊コードがセットされます。 | -| `Modifiers` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 キーボードのモディファイアキーの値を格納します (Ctrl/Command、Alt/Option、Shift、Caps Lock)。 | -| `MouseProc` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 最後のイベントが発生したプロセス番号を格納します。 | +| システム変数名 | 型 | 説明 | +| ------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `OK` | Integer | 通常、コマンドがダイアログボックスを表示して、ユーザーが **OK** ボタンをクリックすると 1 に、**キャンセル** ボタンをクリックした場合は 0 に設定されます。 一部のコマンドは、処理が成功すると `OK` システム変数の値を変更します。 | +| `Document` | Text | [Open document](../commands-legacy/open-document.md) や [SELECT LOG FILE](../commands/select-log-file.md) などのコマンドを使用して最後に開かれた、または作成されたファイルの「長い名前」(完全パス名)が格納されています。 | +| `FldDelimit`, `RecDelimit` | Integer | テキストを読み込んだり書き出したりする際に、フィールドの区切りとして (デフォルトは **タブ** (9))、あるいはレコードの区切り文字として (デフォルトは **キャリッジリターン** (13)) 使用する文字コードが格納されています。 区切り文字を変更する場合は、システム変数の値を変更します。 | +| `Error`, `Error line` | Integer | [`ON ERR CALL`](../commands-legacy/on-err-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理)参照。 | +| `Error method`, `Error formula` | Text | [`ON ERR CALL`](../commands-legacy/on-err-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 [メソッド内でのエラー処理](../Concepts/error-handling.md#メソッド内でのエラー処理)参照。 | +| `MouseDown` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 マウスボタンが押されたときに 1 が、それ以外の場合は 0 に設定されます。 | +| `MouseX`, `MouseY` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。
  • `MouseDown=1` イベントの時、`MouseX` と `MouseY` にはクリックされた場所の水平 / 垂直座標がそれぞれ代入されます。 両方の値ともピクセル単位で表わされ、ウィンドウのローカルな座標システムを使用します。
  • ピクチャーフィールドや変数の場合は、[`On Clicked`](../Events/onClicked.md) や [`On Double Clicked`](../Events/onDoubleClicked.md)、および [`On Mouse Up`](../Events/onMouseUp.md) フォームイベント内で、クリックのローカル座標が `MouseX` と `MouseY` に返されます。 また、[`On Mouse Enter`](../Events/onMouseEnter.md) および [`On Mouse Move`](../Events/onMouseMove.md) フォームイベントでもマウスカーソルのローカル座標が返されます。 詳細については、[ピクチャー上のマウス座標](../FormEditor/pictures.md#ピクチャー上のマウス座標) を参照ください。
  • | +| `KeyCode` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 押されたキーの文字コードが代入されます。 押されたキーがファンクションキーの場合、`KeyCode` には特殊コードがセットされます。 | +| `Modifiers` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 キーボードのモディファイアキーの値を格納します (Ctrl/Command、Alt/Option、Shift、Caps Lock)。 | +| `MouseProc` | Integer | [`ON EVENT CALL`](../commands-legacy/on-event-call.md) コマンドによって実装されるエラー処理メソッド内で使用されます。 最後のイベントが発生したプロセス番号を格納します。 | :::note diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md index ce31a26ca023c4..bb8df81f97df04 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md @@ -105,7 +105,7 @@ ORDA データモデルクラスの関数。 ## 汎用クラス -エンティティやデータクラスなどの ORDA オブジェクト用のビルトインクラス。 エンティティやデータクラスなどの ORDA オブジェクト用のビルトインクラス。 汎用クラスのプロパティや関数は、ユーザー拡張クラス (例: `EmployeeEntity`) において自動で利用可能です。 +エンティティやデータクラスなどの ORDA オブジェクト用のビルトインクラス。 汎用クラスのプロパティや関数は、ユーザー拡張クラス (例: `EmployeeEntity`) において自動で利用可能です。 ## レイジーローディング @@ -119,7 +119,7 @@ ORDA データモデルクラスの関数。 データストア、データクラス、エンティティセレクション、エンティティなどの ORDA オブジェクトは、オブジェクトのクラスを定義します。 これらのクラスには、オブジェクトを直接操作するための専用のメソッドが提供されています。 これらのメソッドはメンバー関数とも呼ばれます。 このメソッドを使用するには、オブジェクトのインスタンスに対して呼び出します。 -たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: たとえば、`query()` メソッドはデータクラスのメンバー関数です。 たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: +たとえば、`query()` メソッドはデータクラスのメンバー関数です。 `$myClass` 変数にデータクラスオブジェクトを格納している場合、次のように書くことができます: ```code4d $myClass.query("name = smith") @@ -150,7 +150,7 @@ $myClass.query("name = smith") ## 権限 -The ability to run one or more [actions](#action) on [resources](#resource). ビジネスロジックに応じて、複数の権限を [ロール](#ロール) としてまとめることができます。 +[リソース](#リソース) に対する実行が許可された [アクション](#アクション) の範囲のことです。 ビジネスロジックに応じて、複数の権限を [ロール](#ロール) としてまとめることができます。 ## プロパティ diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index ea892330827279..1dbf369a2ddef6 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -1,20 +1,20 @@ --- id: orda-events -title: Entity Events +title: エンティティイベント ---
    履歴 -| リリース | 内容 | -| ------ | ----------------------------------------------------------------------------------------------------- | -| 21 | Added events: validateSave / saving / afterSave / validateDrop / dropping / afterDrop | -| 20 R10 | touched event added | +| リリース | 内容 | +| ------ | -------------------------------------------------------------------------------------------------- | +| 21 | 追加されたイベント: validateSave / saving / afterSave / validateDrop / dropping / afterDrop | +| 20 R10 | touched イベント追加 |
    -Entity events are functions that are automatically invoked by ORDA each time entities and entity attributes are manipulated (added, deleted, or modified). You can write very simple events, and then make them more sophisticated. +エンティティイベントとは、エンティティやエンティティ属性が操作(追加、削除、変更)されるたびに ORDA によって自動的に呼び出される関数です。 シンプルなイベントを書き、それをより洗練されたものに変えていくことができます。 -You cannot directly trigger event function execution. Events are called automatically by ORDA based on user actions or operations performed through code on entities and their attributes. +イベント関数の実行は直接トリガーすることはできません。 イベントは、ユーザーアクションや、エンティティまたはその属性に対するコードを通して実行された操作に基づいて、ORDA によって自動的に呼び出されます。 :::tip Related blog post @@ -22,93 +22,93 @@ You cannot directly trigger event function execution. Events are called automati ::: -:::info note Compatibility note +:::info 互換性に関する注意 -ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. +データストアにおける ORDA エンティティイベントは、4D データベースにおけるトリガに相当します。 しかしながら、4D クラシックランゲージコマンドを使用して 4D データベースレベルでトリガーされたアクション、あるいは標準アクションは、ORDA イベントをトリガーしません。 また、トリガとは異なり、ORDA エンティティイベントはエンティティを保存または削除する際に、データクラスの元となるテーブル全体をロックしないことに注意して下さい。 個別のエンティティ(つまりレコード)に起因している限りは、複数のイベントが同時に実行されることが可能です。 ::: ## 概要 -### Event level +### イベントレベル -A event function is always defined in the [Entity class](../ORDA/ordaClasses.md#entity-class). +イベント関数は必ず[Entity クラス](../ORDA/ordaClasses.md#エンティティクラス) 内で定義されます。 -It can be set at the **entity** level and/or the **attribute** level (it includes [**computed attributes**](../ORDA/ordaClasses.md#computed-attributes)). In the first case, it will be triggered for any attributes of the entity; on the other case, it will only be triggered for the targeted attribute. +イベントは **エンティティ** レベルまたは **属性** レベルで設定することができます(属性には [**計算属性**](../ORDA/ordaClasses.md#計算属性) も含まれます)。 前者の場合、エンティティのあらゆる属性でイベントがトリガーされます。それ以外の場合、イベントは対象となる属性に対してのみトリガーされます。 -For the same event, you can define different functions for different attributes. +同じイベントに対して、異なる属性に対して異なる関数を定義することができます。 -You can also define the same event at both attribute and entity levels. The attribute event is called first and then the entity event. +また同じイベントを属性レベルとエンティティレベルの両方で定義することも可能です。 その場合、属性イベントが先に呼ばれ、その後にエンティティイベントが呼ばれます。 -### Execution in remote configurations +### リモート構成における実行 -Usually, ORDA events are executed on the server. +一般的に、ORDA イベントはサーバー上で実行されます。 -In client/server configuration however, the `touched()` event function can be executed on the **server or the client**, depending on the use of [`local`](./ordaClasses.md#local-functions) keyword. A specific implementation on the client side allows the triggering of the event on the client. +しかしながらクライアント/サーバー構成においては、[`local`](./ordaClasses.md#local-functions) キーワードの使用によっては、`touched()` イベント関数を**サーバーまたはクライアント**で実行することが可能です。 クライアント側で特定の実装をすることにより、イベントをクライアント上でトリガーすることができるようになります。 :::note -ORDA [`constructor()`](./ordaClasses.md#class-constructor) functions are always executed on the client. +ORDA [`constructor()`](./ordaClasses.md#class-constructor) 関数は必ずクライアント上で実行されます。 ::: -With other remote configurations (i.e. [Qodly applications](https://developer.4d.com/qodly), [REST API requests](../REST/REST_requests.md), or requests through [`Open datastore`](../commands/open-datastore.md)), the `touched()` event function is always executed **server-side**. It means that you have to make sure the server can "see" that an attribute has been touched to trigger the event (see below). +他のリモート構成(例: [Qodly アプリケーション](https://developer.4d.com/qodly)、[REST API リクエスト](../REST/REST_requests.md)、あるいは[`Open datastore`](../commands/open-datastore.md) を通したリクエスト)においては、イベント関数は必ず**サーバー側**で実行されます。 これはつまりイベントをトリガーするためには、属性がタッチされたことがサーバーから"見える"ようにしておくようにしなければならいことを意味します(以下参照)。 -### Summary table +### 概要表 -The following table lists ORDA events along with their rules. +以下の表は、ORDA イベントの一覧とそのルールをまとめたものです。 -| イベント | レベル | Function name | (C/S) Executed on | Can stop action by returning an error | -| :------------------------ | :----- | :------------------------------------------------------ | :------------------------------------------------------------------: | ------------------------------------- | -| Entity instantiation | Entity | [`constructor()`](./ordaClasses.md#class-constructor-1) | client | × | -| Attribute touched | 属性 | `event touched ()` | Depends on [`local`](../ORDA/ordaClasses.md#local-functions) keyword | × | -| | Entity | `event touched()` | Depends on [`local`](../ORDA/ordaClasses.md#local-functions) keyword | × | -| Before saving an entity | 属性 | `validateSave ()` | server | ◯ | -| | Entity | `validateSave()` | server | ◯ | -| When saving an entity | 属性 | `saving ()` | server | ◯ | -| | Entity | `saving()` | server | ◯ | -| After saving an entity | Entity | `afterSave()` | server | × | -| Before dropping an entity | 属性 | `validateDrop ()` | server | ◯ | -| | Entity | `validateDrop()` | server | ◯ | -| When dropping an entity | 属性 | `dropping ()` | server | ◯ | -| | Entity | `dropping()` | server | ◯ | -| After dropping an entity | Entity | `afterDrop()` | server | × | +| イベント | レベル | 関数名 | (C/S の場合) 実行される場所 | エラーを返すことでアクションを停止できる | +| :------------------------------------ | :----- | :------------------------------------------------------ | :--------------------------------------------------------: | -------------------- | +| エンティティのインスタンス化 | Entity | [`constructor()`](./ordaClasses.md#class-constructor-1) | client | × | +| 属性がタッチされた | 属性 | `event touched ()` | [`local`](../ORDA/ordaClasses.md#local-functions) キーワードによる | × | +| | Entity | `event touched()` | [`local`](../ORDA/ordaClasses.md#local-functions) キーワードによる | × | +| エンティティを保存する前 | 属性 | `validateSave ()` | server | ◯ | +| | Entity | `validateSave()` | server | ◯ | +| エンティティの保存時 | 属性 | `saving ()` | server | ◯ | +| | Entity | `saving()` | server | ◯ | +| エンティティを保存した後 | Entity | `afterSave()` | server | × | +| エンティティをドロップ(削除)する前 | 属性 | `validateDrop ()` | server | ◯ | +| | Entity | `validateDrop()` | server | ◯ | +| エンティティのドロップ(削除)時 | 属性 | `dropping ()` | server | ◯ | +| | Entity | `dropping()` | server | ◯ | +| エンティティをドロップした後 | Entity | `afterDrop()` | server | × | :::note -The [`constructor()`](./ordaClasses.md#class-constructor-1) function is not actually an event function but is always called when a new entity is instantiated. +[`constructor()`](./ordaClasses.md#class-constructor-1) 関数は実際にはイベント関数ではありませんが、エンティティがインスタンス化される際に必ず呼び出されます。 ::: -## *event* parameter +## *event* 引数 -Event functions accept a single *event* object as parameter. When the function is called, the parameter is filled with several properties: +イベント関数は、単一の *event* オブジェクトを引数として受け取ります。 関数が呼び出されると、引数には複数のプロパティに値が入れられます: -| プロパティ名 | 利用可能性 | 型 | 説明 | | -| :------------------ | :----------------------------------------------------------------------------------------------------------------------- | :------------------- | :-------------------------------------------------------------------------------------------------------------------- | - | -| "kind" | Always | 文字列 | Event name: "touched", "validateSave", "saving", "afterSave", "validateDrop", "dropping", "afterDrop" | | -| *attributeName* | Only for events implemented at attribute level ("validateSave", "saving", "validateDrop", "dropping") | 文字列 | Attribute name (*e.g.* "firstname") | | -| *dataClassName* | Always | 文字列 | Dataclass name (*e.g.* "Company") | | -| "savedAttributes" | Only in [`afterSave()`](#function-event-aftersave) | Collection of String | Names of attributes properly saved | | -| "droppedAttributes" | Only in [`afterDrop()`](#function-event-afterdrop) | Collection of String | Names of attributes properly dropped | | -| "saveStatus" | Only in [`afterSave()`](#function-event-aftersave) | 文字列 | "success" if the save was successful, "failed" otherwise | | -| "dropStatus" | Only in [`afterDrop()`](#function-event-afterdrop) | 文字列 | "success" if the drop was successful, "failed" otherwise | | +| プロパティ名 | 利用可能性 | 型 | 説明 | | +| :------------------ | :-------------------------------------------------------------------------------------------- | :--------- | :--------------------------------------------------------------------------------------------------------- | - | +| "kind" | 常に | 文字列 | イベント名: "touched"、"validateSave"、"saving"、"afterSave"、"validateDrop"、"dropping"、"afterDrop" | | +| *attributeName* | 属性レベルで実装されているイベントに対してのみ("validateSave"、"saving"、"validateDrop"、"dropping") | 文字列 | 属性名 (*例* "firstname") | | +| *dataClassName* | 常に | 文字列 | データクラス名 (*例* "Company") | | +| "savedAttributes" | [`afterSave()`](#function-event-aftersave) でのみ | 文字列のコレクション | 正常に保存された属性名 | | +| "droppedAttributes" | [`afterDrop()`](#function-event-afterdrop) でのみ | 文字列のコレクション | 正常にドロップ(削除)された属性名 | | +| "saveStatus" | [`afterSave()`](#function-event-aftersave) でのみ | 文字列 | 保存が正常であれば "success"、それ以外の場合には "failed" | | +| "dropStatus" | [`afterDrop()`](#function-event-afterdrop) でのみ | 文字列 | ドロップ(削除)が正常であれば "success"、それ以外の場合には "failed" | | -## Error object +## エラーオブジェクト -[Some event functions](#summary-table) can return an **error object** to raise an error and stop the running action. +[一部のイベント関数](#概要表) は **エラーオブジェクト** を返すことでエラーを生成し実行中のアクションを停止することができます。 -When an error occurs in an event, the other events are stopped at the first raised error and the action (save or drop) is also stopped. This error is sent before other potential errors like [stamp has changed, entity locked](../API/EntityClass.md#save), etc. +イベント中にエラーが発生した場合、他のイベントも最初にエラーが生成された時点で停止し、アクション(保存やドロップ)も停止します。 このエラーは[スタンプが変更された、エンティティがロックされていた](../API/EntityClass.md#save) などの潜在的なエラーの前に送信されます。 -### Error object properties +### エラーオブジェクトのプロパティ -| プロパティ | 型 | 説明 | Set by the developer | -| ------------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | -| errCode | Integer | Same as for [`Last errors`](../commands/last-errors.md) command | ◯ | -| message | Text | Same as for [`Last errors`](../commands/last-errors.md) command | ◯ | -| extraDescription | Object | Free information to set up | ◯ | -| seriousError | Boolean | Used only with validate events (see below).
  • `True`: creates a [serious (unpredictable) error](../Concepts/error-handling.md#predictable-vs-unpredictable-errors) and triggers an exception. Adds the `dk status serious validation error` status
  • `False`: creates only a [silent (predictable) error](../Concepts/error-handling.md#predictable-vs-unpredictable-errors). Adds the `dk status validation failed` status
  • | Yes (default is false) | -| componentSignature | Text | Always "DBEV" | × | +| プロパティ | 型 | 説明 | 開発者によって設定 | +| ------------------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | +| errCode | Integer | [`Last errors`](../commands/last-errors.md) コマンドと同じ | ◯ | +| message | Text | [`Last errors`](../commands/last-errors.md) コマンドと同じ | ◯ | +| extraDescription | Object | 自由に設定可能な情報 | ◯ | +| seriousError | Boolean | validate イベントでのみ使用されます(以下参照)。
  • `True`: [深刻(予測不能)なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不能なエラー) を作成し、例外をトリガーします。 `dk status serious validation error` ステータスを追加します
  • `False`: creates only a [静か(予測可能) なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー) のみを作成します。 `dk status validation failed` ステータスを追加します
  • | 可能(デフォルトはfalse) | +| componentSignature | Text | 常に "DBEV" | × | - [Serious errors](../Concepts/error-handling.md#predictable-vs-unpredictable-errors) are stacked in the `errors` collection property of the **Result object** returned by the [`save()`](../API/EntityClass.md#save) or [`drop()`](../API/EntityClass.md#drop) functions. - In case of an error triggered by a **validate** event, the `seriousError` property allows you to choose the level of the error to generate: @@ -420,7 +420,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -434,6 +436,12 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: + ### `Function event afterSave` #### シンタックス diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/variables.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/variables.md index 9ffc9beea3d801..cf29a5c758909a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/variables.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/variables.md @@ -250,17 +250,18 @@ A linguagem 4D gerencia diversas **variáveis sistema**, que permitem controlar As variáveis do sistema são usadas pelos [comandos 4D](../commands/command-index.md). Refer to the "System variables and sets" paragraph in the description of a command to find out whether it affects a system variable. -| Nome da variável sistema | Tipo | Descrição | -| ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OK` | Integer | Geralmente definido como 1 após um comando ter exibido uma caixa de diálogo e o usuário clicou no botão **OK** e em 0 se eles clicarem em **Cancelar**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. | -| `Document` | Text | Contém o "nome longo" (caminho completo) do último arquivo aberto ou criado usando comandos como [Documento aberto](../commands-legacy/open-document.md) ou [ARQUIVO ARQUIVO](../commands/select-log-file.md). | -| `FldDelimit`, `RecDelimit` | Text | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é Tab (9)) e o separador de registros (padrão é retorno do carro (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | -| `MouseDown` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir como 1 quando o botão do mouse for pressionado, caso contrário será definido como 0. | -| `MouseX`, `MouseY` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Em um evento `MouseDown=1`, `MouseX` e `MouseY` são respectivamente definidos como coordenadas verticais e horizontais do clique. Ambos os valores são expressos em píxeis e usam o sistema local de coordenadas da janela.
  • No caso de um campo ou de uma variável de imagem, `MouseX` e `MouseY` retornam as coordenadas locais de um mouse clique nos eventos formulário [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) e [`On Mouse Up`](../Events/onMouseUp.md). As coordenadas locais do cursor do mouse também são retornadas nos eventos formulário [`On Mouse Enter`](../Events/onMouseEnter.md) e [`On Mouse Move`](../Events/onMouseMove.md). Para obter mais informações, consulte as [Coordenadas de Mouse em uma imagem](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | -| `KeyCode` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definido como o código de caractere da tecla que acabou de ser pressionada. Se a chave for uma chave de função, `KeyCode` é definido como um código especial. | -| `Modifiers` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir para as teclas modificadoras do teclado (Ctrl/Comando, Alt/Option, Shift, Caps Lock). | -| `MouseProc` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Defina o número do processo em que o último evento teve lugar | +| Nome da variável sistema | Tipo | Descrição | +| ------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OK` | Integer | Geralmente definido como 1 após um comando ter exibido uma caixa de diálogo e o usuário clicou no botão **OK** e em 0 se eles clicarem em **Cancelar**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. | +| `Document` | Text | Contém o "nome longo" (caminho completo) do último arquivo aberto ou criado usando comandos como [Documento aberto](../commands-legacy/open-document.md) ou [ARQUIVO ARQUIVO](../commands/select-log-file.md). | +| `FldDelimit`, `RecDelimit` | Integer | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é Tab (9)) e o separador de registros (padrão é retorno do carro (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | +| `Error`, `Error line` | Integer | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `Error method`, `Error formula` | Text | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `MouseDown` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir como 1 quando o botão do mouse for pressionado, caso contrário será definido como 0. | +| `MouseX`, `MouseY` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Em um evento `MouseDown=1`, `MouseX` e `MouseY` são respectivamente definidos como coordenadas verticais e horizontais do clique. Ambos os valores são expressos em píxeis e usam o sistema local de coordenadas da janela.
  • No caso de um campo ou de uma variável de imagem, `MouseX` e `MouseY` retornam as coordenadas locais de um mouse clique nos eventos formulário [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) e [`On Mouse Up`](../Events/onMouseUp.md). As coordenadas locais do cursor do mouse também são retornadas nos eventos formulário [`On Mouse Enter`](../Events/onMouseEnter.md) e [`On Mouse Move`](../Events/onMouseMove.md). Para obter mais informações, consulte as [Coordenadas de Mouse em uma imagem](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | +| `KeyCode` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definido como o código de caractere da tecla que acabou de ser pressionada. Se a chave for uma chave de função, `KeyCode` é definido como um código especial. | +| `Modifiers` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir para as teclas modificadoras do teclado (Ctrl/Comando, Alt/Option, Shift, Caps Lock). | +| `MouseProc` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Defina o número do processo em que o último evento teve lugar | :::note diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index d95347972ed07a..05cea3c51f7f7a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -24,7 +24,7 @@ You cannot directly trigger event function execution. Events are called automati :::info Compatibility note -ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. +ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: @@ -420,7 +420,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -434,6 +436,12 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: + ### `Function event afterSave` #### Sintaxe diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/variables.md b/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/variables.md index 3057d13df9e4d7..13e51bc07d2058 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/variables.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/variables.md @@ -243,7 +243,7 @@ As variáveis sistema são usadas pelos comandos 4D. Refer to the "System variab | ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OK` | Integer | Geralmente definido como 1 após um comando ter exibido uma caixa de diálogo e o usuário clicou no botão **OK**, e 0 se eles clicarem em **Cancelar**. Alguns comandos também modificam o valor da variável sistema `OK` quando uma operação é executada com sucesso. | | `Document` | Text | Contém o "nome longo" (caminho completo+nome) do último arquivo aberto ou criado usando comandos como [Open document](https://doc.4d.com/4dv20/help/command/en/page264.html) ou [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/en/page345.html). | -| `FldDelimit`, `RecDelimit` | Text | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é **Tab** (9)) e o separador de registros (padrão é **retorno do carro** (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | +| `FldDelimit`, `RecDelimit` | Integer | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é **Tab** (9)) e o separador de registros (padrão é **retorno do carro** (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | | `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/en/page155.html). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | | `MouseDown` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html). Definir como 1 quando o botão do mouse for pressionado, caso contrário será definido como 0. | | `MouseX`, `MouseY` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html).
  • Em um evento `MouseDown=1`, `MouseX` e `MouseY` são respectivamente definidos como coordenadas verticais e horizontais do clique. Ambos os valores são expressos em píxeis e usam o sistema local de coordenadas da janela.
  • No caso de um campo ou de uma variável de imagem, `MouseX` e `MouseY` retornam as coordenadas locais de um mouse clique nos eventos formulário [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) e [`On Mouse Up`](../Events/onMouseUp.md). As coordenadas locais do cursor do mouse também são retornadas nos eventos formulário [`On Mouse Enter`](../Events/onMouseEnter.md) e [`On Mouse Move`](../Events/onMouseMove.md). Para obter mais informações, consulte as [Coordenadas de Mouse em uma imagem](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md index 9ffc9beea3d801..cf29a5c758909a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/variables.md @@ -250,17 +250,18 @@ A linguagem 4D gerencia diversas **variáveis sistema**, que permitem controlar As variáveis do sistema são usadas pelos [comandos 4D](../commands/command-index.md). Refer to the "System variables and sets" paragraph in the description of a command to find out whether it affects a system variable. -| Nome da variável sistema | Tipo | Descrição | -| ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OK` | Integer | Geralmente definido como 1 após um comando ter exibido uma caixa de diálogo e o usuário clicou no botão **OK** e em 0 se eles clicarem em **Cancelar**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. | -| `Document` | Text | Contém o "nome longo" (caminho completo) do último arquivo aberto ou criado usando comandos como [Documento aberto](../commands-legacy/open-document.md) ou [ARQUIVO ARQUIVO](../commands/select-log-file.md). | -| `FldDelimit`, `RecDelimit` | Text | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é Tab (9)) e o separador de registros (padrão é retorno do carro (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | -| `MouseDown` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir como 1 quando o botão do mouse for pressionado, caso contrário será definido como 0. | -| `MouseX`, `MouseY` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Em um evento `MouseDown=1`, `MouseX` e `MouseY` são respectivamente definidos como coordenadas verticais e horizontais do clique. Ambos os valores são expressos em píxeis e usam o sistema local de coordenadas da janela.
  • No caso de um campo ou de uma variável de imagem, `MouseX` e `MouseY` retornam as coordenadas locais de um mouse clique nos eventos formulário [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) e [`On Mouse Up`](../Events/onMouseUp.md). As coordenadas locais do cursor do mouse também são retornadas nos eventos formulário [`On Mouse Enter`](../Events/onMouseEnter.md) e [`On Mouse Move`](../Events/onMouseMove.md). Para obter mais informações, consulte as [Coordenadas de Mouse em uma imagem](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | -| `KeyCode` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definido como o código de caractere da tecla que acabou de ser pressionada. Se a chave for uma chave de função, `KeyCode` é definido como um código especial. | -| `Modifiers` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir para as teclas modificadoras do teclado (Ctrl/Comando, Alt/Option, Shift, Caps Lock). | -| `MouseProc` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Defina o número do processo em que o último evento teve lugar | +| Nome da variável sistema | Tipo | Descrição | +| ------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OK` | Integer | Geralmente definido como 1 após um comando ter exibido uma caixa de diálogo e o usuário clicou no botão **OK** e em 0 se eles clicarem em **Cancelar**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. | +| `Document` | Text | Contém o "nome longo" (caminho completo) do último arquivo aberto ou criado usando comandos como [Documento aberto](../commands-legacy/open-document.md) ou [ARQUIVO ARQUIVO](../commands/select-log-file.md). | +| `FldDelimit`, `RecDelimit` | Integer | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é Tab (9)) e o separador de registros (padrão é retorno do carro (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | +| `Error`, `Error line` | Integer | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `Error method`, `Error formula` | Text | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `MouseDown` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir como 1 quando o botão do mouse for pressionado, caso contrário será definido como 0. | +| `MouseX`, `MouseY` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Em um evento `MouseDown=1`, `MouseX` e `MouseY` são respectivamente definidos como coordenadas verticais e horizontais do clique. Ambos os valores são expressos em píxeis e usam o sistema local de coordenadas da janela.
  • No caso de um campo ou de uma variável de imagem, `MouseX` e `MouseY` retornam as coordenadas locais de um mouse clique nos eventos formulário [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) e [`On Mouse Up`](../Events/onMouseUp.md). As coordenadas locais do cursor do mouse também são retornadas nos eventos formulário [`On Mouse Enter`](../Events/onMouseEnter.md) e [`On Mouse Move`](../Events/onMouseMove.md). Para obter mais informações, consulte as [Coordenadas de Mouse em uma imagem](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | +| `KeyCode` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definido como o código de caractere da tecla que acabou de ser pressionada. Se a chave for uma chave de função, `KeyCode` é definido como um código especial. | +| `Modifiers` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir para as teclas modificadoras do teclado (Ctrl/Comando, Alt/Option, Shift, Caps Lock). | +| `MouseProc` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Defina o número do processo em que o último evento teve lugar | :::note diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md index 75941c87ec6b55..bc46901da4c8a3 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md @@ -17,7 +17,7 @@ You cannot directly trigger event function execution. Events are called automati :::info Compatibility note -ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. +ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/variables.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/variables.md index e02132e9d3d0d8..cbfaa204c01d52 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/variables.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/variables.md @@ -241,7 +241,7 @@ As variáveis do sistema são usadas pelos [comandos 4D](commands.md). Refer to | ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `OK` | Integer | Geralmente definido como 1 após um comando ter exibido uma caixa de diálogo e o usuário clicou no botão **OK**, e 0 se eles clicarem em **Cancelar**. Alguns comandos também modificam o valor da variável sistema `OK` quando uma operação é executada com sucesso. | | `Document` | Text | Contém o "nome longo" (caminho completo+nome) do último arquivo aberto ou criado usando comandos como [Open document](https://doc.4d.com/4dv20/help/command/en/page264.html) ou [SELECT LOG FILE](https://doc.4d.com/4dv20/help/command/en/page345.html). | -| `FldDelimit`, `RecDelimit` | Text | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é **Tab** (9)) e o separador de registros (padrão é **retorno do carro** (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | +| `FldDelimit`, `RecDelimit` | Integer | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é **Tab** (9)) e o separador de registros (padrão é **retorno do carro** (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | | `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](https://doc.4d.com/4dv20/help/command/en/page155.html). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | | `MouseDown` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html). Definir como 1 quando o botão do mouse for pressionado, caso contrário será definido como 0. | | `MouseX`, `MouseY` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](https://doc.4d.com/4dv20/help/command/en/page190.html).
  • Em um evento `MouseDown=1`, `MouseX` e `MouseY` são respectivamente definidos como coordenadas verticais e horizontais do clique. Ambos os valores são expressos em píxeis e usam o sistema local de coordenadas da janela.
  • No caso de um campo ou de uma variável de imagem, `MouseX` e `MouseY` retornam as coordenadas locais de um mouse clique nos eventos formulário [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) e [`On Mouse Up`](../Events/onMouseUp.md). As coordenadas locais do cursor do mouse também são retornadas nos eventos formulário [`On Mouse Enter`](../Events/onMouseEnter.md) e [`On Mouse Move`](../Events/onMouseMove.md). Para obter mais informações, consulte as [Coordenadas de Mouse em uma imagem](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/variables.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/variables.md index 9ffc9beea3d801..cf29a5c758909a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/variables.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/variables.md @@ -250,17 +250,18 @@ A linguagem 4D gerencia diversas **variáveis sistema**, que permitem controlar As variáveis do sistema são usadas pelos [comandos 4D](../commands/command-index.md). Refer to the "System variables and sets" paragraph in the description of a command to find out whether it affects a system variable. -| Nome da variável sistema | Tipo | Descrição | -| ------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `OK` | Integer | Geralmente definido como 1 após um comando ter exibido uma caixa de diálogo e o usuário clicou no botão **OK** e em 0 se eles clicarem em **Cancelar**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. | -| `Document` | Text | Contém o "nome longo" (caminho completo) do último arquivo aberto ou criado usando comandos como [Documento aberto](../commands-legacy/open-document.md) ou [ARQUIVO ARQUIVO](../commands/select-log-file.md). | -| `FldDelimit`, `RecDelimit` | Text | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é Tab (9)) e o separador de registros (padrão é retorno do carro (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | -| `Error`, `Error method`, `Error line`, `Error formula` | Text, Longint | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | -| `MouseDown` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir como 1 quando o botão do mouse for pressionado, caso contrário será definido como 0. | -| `MouseX`, `MouseY` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Em um evento `MouseDown=1`, `MouseX` e `MouseY` são respectivamente definidos como coordenadas verticais e horizontais do clique. Ambos os valores são expressos em píxeis e usam o sistema local de coordenadas da janela.
  • No caso de um campo ou de uma variável de imagem, `MouseX` e `MouseY` retornam as coordenadas locais de um mouse clique nos eventos formulário [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) e [`On Mouse Up`](../Events/onMouseUp.md). As coordenadas locais do cursor do mouse também são retornadas nos eventos formulário [`On Mouse Enter`](../Events/onMouseEnter.md) e [`On Mouse Move`](../Events/onMouseMove.md). Para obter mais informações, consulte as [Coordenadas de Mouse em uma imagem](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | -| `KeyCode` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definido como o código de caractere da tecla que acabou de ser pressionada. Se a chave for uma chave de função, `KeyCode` é definido como um código especial. | -| `Modifiers` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir para as teclas modificadoras do teclado (Ctrl/Comando, Alt/Option, Shift, Caps Lock). | -| `MouseProc` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Defina o número do processo em que o último evento teve lugar | +| Nome da variável sistema | Tipo | Descrição | +| ------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `OK` | Integer | Geralmente definido como 1 após um comando ter exibido uma caixa de diálogo e o usuário clicou no botão **OK** e em 0 se eles clicarem em **Cancelar**. Some commands also modify the value of the `OK` system variable when a operation is successfully executed. | +| `Document` | Text | Contém o "nome longo" (caminho completo) do último arquivo aberto ou criado usando comandos como [Documento aberto](../commands-legacy/open-document.md) ou [ARQUIVO ARQUIVO](../commands/select-log-file.md). | +| `FldDelimit`, `RecDelimit` | Integer | Contém os códigos de caracteres que serão usados respectivamente como um separador de campos (padrão é Tab (9)) e o separador de registros (padrão é retorno do carro (13)) quando importar ou exportar texto. Para usar um separador diferente, atribua um novo valor à variável do sistema. | +| `Error`, `Error line` | Integer | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `Error method`, `Error formula` | Text | Usado em um método de captura de erro instalado pelo comando [`ON ERR CALL`](../commands-legacy/on-err-call.md). Veja [Tratamento de erros no método](../Concepts/error-handling.md#handling-errors-within-the-method). | +| `MouseDown` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir como 1 quando o botão do mouse for pressionado, caso contrário será definido como 0. | +| `MouseX`, `MouseY` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md).
  • Em um evento `MouseDown=1`, `MouseX` e `MouseY` são respectivamente definidos como coordenadas verticais e horizontais do clique. Ambos os valores são expressos em píxeis e usam o sistema local de coordenadas da janela.
  • No caso de um campo ou de uma variável de imagem, `MouseX` e `MouseY` retornam as coordenadas locais de um mouse clique nos eventos formulário [`On Clicked`](../Events/onClicked.md), [`On Double Clicked`](../Events/onDoubleClicked.md) e [`On Mouse Up`](../Events/onMouseUp.md). As coordenadas locais do cursor do mouse também são retornadas nos eventos formulário [`On Mouse Enter`](../Events/onMouseEnter.md) e [`On Mouse Move`](../Events/onMouseMove.md). Para obter mais informações, consulte as [Coordenadas de Mouse em uma imagem](../FormEditor/pictures.md#mouse-coordinates-in-a-picture).
  • | +| `KeyCode` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definido como o código de caractere da tecla que acabou de ser pressionada. Se a chave for uma chave de função, `KeyCode` é definido como um código especial. | +| `Modifiers` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Definir para as teclas modificadoras do teclado (Ctrl/Comando, Alt/Option, Shift, Caps Lock). | +| `MouseProc` | Integer | Usado em um método instalado pelo comando [`ON EVENT CALL`](../commands-legacy/on-event-call.md). Defina o número do processo em que o último evento teve lugar | :::note diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index d95347972ed07a..05cea3c51f7f7a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -24,7 +24,7 @@ You cannot directly trigger event function execution. Events are called automati :::info Compatibility note -ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. +ORDA entity events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). ::: @@ -420,7 +420,9 @@ If (This.userManualPath#"") // The user manual document file is created on the disk // This may fail if no more space is available Try - $fileCreated:=$userManualFile.create() + // The file content has been generated and stored in a map in Storage.docMap previously + $docInfo:=Storage.docMap.query("name = :1"; This.name).first() + $userManualFile.setContent($docInfo.content) Catch // No more room on disk for example $result:={/ @@ -434,6 +436,12 @@ return $result ``` +:::note + +The content of the file is generated outside the `saving` event because it can be time consuming. + +::: + ### `Function event afterSave` #### Sintaxe From 91c309c698e7173c877113318e846adedb3f5f93 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 19 Nov 2025 10:41:20 +0100 Subject: [PATCH 31/75] constants added to open window command --- docs/commands-legacy/open-window.md | 52 ++++++++++++++----- .../commands-legacy/open-window.md | 52 ++++++++++++++----- .../version-21/commands-legacy/open-window.md | 52 ++++++++++++++----- 3 files changed, 114 insertions(+), 42 deletions(-) diff --git a/docs/commands-legacy/open-window.md b/docs/commands-legacy/open-window.md index 6ad8d7be718119..76f36f3538c8e6 100644 --- a/docs/commands-legacy/open-window.md +++ b/docs/commands-legacy/open-window.md @@ -38,7 +38,30 @@ If you pass -1 in both *right* and *bottom,* you instruct 4D to automatically si **Important:** This automatic sizing of the window will occur only if you made a prior call to [FORM SET INPUT](form-set-input.md) for the form to be displayed, and if you passed the \* optional parameter to [FORM SET INPUT](form-set-input.md). -* The *type* parameter is optional. It represents the type of window you want to display, and corresponds to the different windows shown in the section *Window Types (compatibility)* (constants of the *Open Window* theme). If the window type is negative, the window created is a floating window. If the type is not specified, type 1 is used by default. +* The *type* parameter is optional. It represents the type of window you want to display. If the window type is negative, the window created is a floating window (if supported). If the type is not specified, type 1 is used by default. The following constants of the *Open Window* theme are supported: + +|Constant|Comment| +|---|---| +|Alternate dialog box|Can be a floating window| +|Has full screen mode Mac|Option to add to a document type window on macOS only (ex: `Plain form window+Form has full screen mode Mac`)| +|Modal dialog box || +|Movable dialog box |Can be a floating window| +|Palette window|Can be a floating window
  • Not resizable: `-(Palette window+2)` (Windows) or ` -Palette window` (macOS)
  • Resizable: `-(Palette window+6)`
  • | +|Plain dialog box |Can be a floating window| +|Plain fixed size window|| +|Plain no zoom box window|| +|Pop up window|| +|Plain window|| +|Resizable sheet window|| +|Round corner window || +|Sheet window|| +|Texture appearance|Option to be added to a window type on macOS only. Supported types: `Plain window`, `Plain no zoom box window`, `Plain fixed size window`, `Movable dialog box`, `Round corner window`| + + + + + + * The *title* parameter is the optional title for the window If you pass an empty string ("") in *title,* you instruct 4D to use the Window Title set in the Design environment Form Properties window for the form to be displayed. @@ -47,7 +70,7 @@ If you pass an empty string ("") in *title,* you instruct 4D to use the Window T * The *controlMenuBox* parameter is the optional Control-menu box method for the window. If this parameter is specified, a Control-menu box (Windows) or a Close Box (Macintosh) is added to the window. When the user double-clicks the Control-menu box (Windows) or clicks on the Close Box (Macintosh), the method passed in *controlMenuBox* is called. -**Note:** You can also manage the closing of the window from within the form method of the form displayed in the window when an On Close Box event occurs. For more information, see the command [Form event code](../commands/form-event-code.md). +**Note:** You can also manage the closing of the window from within the form method of the form displayed in the window when an `On Close Box` event occurs. For more information, see the command [Form event code](../commands/form-event-code.md). If more than one window is open for a process, the last window opened is the active (frontmost) window for that process. Only information within the active window can be modified. Any other windows can be viewed. When the user types, the active window will always come to the front, if it is not already there. @@ -61,21 +84,19 @@ The following project method opens a window centered in the main window (Windows ```4d   // OPEN CENTERED WINDOW project method -  // $1 – Window width -  // $2 – Window height -  // $3 – Window type (optional) -  // $4 – Window title (optional) + #DECLARE($width : Integer; $height : Integer; $type : Integer; $title : Text) + var $SW; $SH; $WW; $WH : Integer  $SW:=Screen width\2  $SH:=(Screen height\2) - $WW:=$1\2 - $WH:=$2\2 + $WW:=$width\2 + $WH:=$height\2  Case of     :(Count parameters=2)        Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH)     :(Count parameters=3) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type)     :(Count parameters=4) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type;$title)  End case ``` @@ -95,7 +116,8 @@ After the project method is written, you can use it this way: The following example opens a floating window that has a Control-menu box (Windows) or Close Box (Macintosh) method. The window is opened in the upper right hand corner of the application window. ```4d - $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette") + var $myWindow : Integer + $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette")  DIALOG([Dialogs];"Color Palette") ``` @@ -110,7 +132,8 @@ The CloseColorPalette method calls the [CANCEL](cancel.md) command: The following example opens a window whose size and title come from the properties of the form displayed in the window: ```4d - FORM SET INPUT([Customers];"Add Records";*) +  var $myWindow : Integer + FORM SET INPUT([Customers];"Add Records";*)  $myWindow:=Open window(10;80;-1;-1;Plain window;"")  Repeat     ADD RECORD([Customers]) @@ -124,7 +147,8 @@ The following example opens a window whose size and title come from the properti This example illustrates the “delay” mechanism for displaying sheet windows under macOS: ```4d - $myWindow:=Open window(10;10;400;400;Sheet window) +  var $myWindow : Integer + $myWindow:=Open window(10;10;400;400;Sheet window)   //For the moment, the window is created but remains hidden  DIALOG([Table];"dialForm")   //The On Load event is generated then the sheet window is displayed; it "drops down" from the bottom @@ -135,7 +159,7 @@ This example illustrates the “delay” mechanism for displaying sheet windows [CLOSE WINDOW](close-window.md) [Open form window](open-form-window.md) -*Open Window* + ## Properties diff --git a/versioned_docs/version-20-R10/commands-legacy/open-window.md b/versioned_docs/version-20-R10/commands-legacy/open-window.md index 6ad8d7be718119..76f36f3538c8e6 100644 --- a/versioned_docs/version-20-R10/commands-legacy/open-window.md +++ b/versioned_docs/version-20-R10/commands-legacy/open-window.md @@ -38,7 +38,30 @@ If you pass -1 in both *right* and *bottom,* you instruct 4D to automatically si **Important:** This automatic sizing of the window will occur only if you made a prior call to [FORM SET INPUT](form-set-input.md) for the form to be displayed, and if you passed the \* optional parameter to [FORM SET INPUT](form-set-input.md). -* The *type* parameter is optional. It represents the type of window you want to display, and corresponds to the different windows shown in the section *Window Types (compatibility)* (constants of the *Open Window* theme). If the window type is negative, the window created is a floating window. If the type is not specified, type 1 is used by default. +* The *type* parameter is optional. It represents the type of window you want to display. If the window type is negative, the window created is a floating window (if supported). If the type is not specified, type 1 is used by default. The following constants of the *Open Window* theme are supported: + +|Constant|Comment| +|---|---| +|Alternate dialog box|Can be a floating window| +|Has full screen mode Mac|Option to add to a document type window on macOS only (ex: `Plain form window+Form has full screen mode Mac`)| +|Modal dialog box || +|Movable dialog box |Can be a floating window| +|Palette window|Can be a floating window
  • Not resizable: `-(Palette window+2)` (Windows) or ` -Palette window` (macOS)
  • Resizable: `-(Palette window+6)`
  • | +|Plain dialog box |Can be a floating window| +|Plain fixed size window|| +|Plain no zoom box window|| +|Pop up window|| +|Plain window|| +|Resizable sheet window|| +|Round corner window || +|Sheet window|| +|Texture appearance|Option to be added to a window type on macOS only. Supported types: `Plain window`, `Plain no zoom box window`, `Plain fixed size window`, `Movable dialog box`, `Round corner window`| + + + + + + * The *title* parameter is the optional title for the window If you pass an empty string ("") in *title,* you instruct 4D to use the Window Title set in the Design environment Form Properties window for the form to be displayed. @@ -47,7 +70,7 @@ If you pass an empty string ("") in *title,* you instruct 4D to use the Window T * The *controlMenuBox* parameter is the optional Control-menu box method for the window. If this parameter is specified, a Control-menu box (Windows) or a Close Box (Macintosh) is added to the window. When the user double-clicks the Control-menu box (Windows) or clicks on the Close Box (Macintosh), the method passed in *controlMenuBox* is called. -**Note:** You can also manage the closing of the window from within the form method of the form displayed in the window when an On Close Box event occurs. For more information, see the command [Form event code](../commands/form-event-code.md). +**Note:** You can also manage the closing of the window from within the form method of the form displayed in the window when an `On Close Box` event occurs. For more information, see the command [Form event code](../commands/form-event-code.md). If more than one window is open for a process, the last window opened is the active (frontmost) window for that process. Only information within the active window can be modified. Any other windows can be viewed. When the user types, the active window will always come to the front, if it is not already there. @@ -61,21 +84,19 @@ The following project method opens a window centered in the main window (Windows ```4d   // OPEN CENTERED WINDOW project method -  // $1 – Window width -  // $2 – Window height -  // $3 – Window type (optional) -  // $4 – Window title (optional) + #DECLARE($width : Integer; $height : Integer; $type : Integer; $title : Text) + var $SW; $SH; $WW; $WH : Integer  $SW:=Screen width\2  $SH:=(Screen height\2) - $WW:=$1\2 - $WH:=$2\2 + $WW:=$width\2 + $WH:=$height\2  Case of     :(Count parameters=2)        Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH)     :(Count parameters=3) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type)     :(Count parameters=4) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type;$title)  End case ``` @@ -95,7 +116,8 @@ After the project method is written, you can use it this way: The following example opens a floating window that has a Control-menu box (Windows) or Close Box (Macintosh) method. The window is opened in the upper right hand corner of the application window. ```4d - $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette") + var $myWindow : Integer + $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette")  DIALOG([Dialogs];"Color Palette") ``` @@ -110,7 +132,8 @@ The CloseColorPalette method calls the [CANCEL](cancel.md) command: The following example opens a window whose size and title come from the properties of the form displayed in the window: ```4d - FORM SET INPUT([Customers];"Add Records";*) +  var $myWindow : Integer + FORM SET INPUT([Customers];"Add Records";*)  $myWindow:=Open window(10;80;-1;-1;Plain window;"")  Repeat     ADD RECORD([Customers]) @@ -124,7 +147,8 @@ The following example opens a window whose size and title come from the properti This example illustrates the “delay” mechanism for displaying sheet windows under macOS: ```4d - $myWindow:=Open window(10;10;400;400;Sheet window) +  var $myWindow : Integer + $myWindow:=Open window(10;10;400;400;Sheet window)   //For the moment, the window is created but remains hidden  DIALOG([Table];"dialForm")   //The On Load event is generated then the sheet window is displayed; it "drops down" from the bottom @@ -135,7 +159,7 @@ This example illustrates the “delay” mechanism for displaying sheet windows [CLOSE WINDOW](close-window.md) [Open form window](open-form-window.md) -*Open Window* + ## Properties diff --git a/versioned_docs/version-21/commands-legacy/open-window.md b/versioned_docs/version-21/commands-legacy/open-window.md index 6ad8d7be718119..76f36f3538c8e6 100644 --- a/versioned_docs/version-21/commands-legacy/open-window.md +++ b/versioned_docs/version-21/commands-legacy/open-window.md @@ -38,7 +38,30 @@ If you pass -1 in both *right* and *bottom,* you instruct 4D to automatically si **Important:** This automatic sizing of the window will occur only if you made a prior call to [FORM SET INPUT](form-set-input.md) for the form to be displayed, and if you passed the \* optional parameter to [FORM SET INPUT](form-set-input.md). -* The *type* parameter is optional. It represents the type of window you want to display, and corresponds to the different windows shown in the section *Window Types (compatibility)* (constants of the *Open Window* theme). If the window type is negative, the window created is a floating window. If the type is not specified, type 1 is used by default. +* The *type* parameter is optional. It represents the type of window you want to display. If the window type is negative, the window created is a floating window (if supported). If the type is not specified, type 1 is used by default. The following constants of the *Open Window* theme are supported: + +|Constant|Comment| +|---|---| +|Alternate dialog box|Can be a floating window| +|Has full screen mode Mac|Option to add to a document type window on macOS only (ex: `Plain form window+Form has full screen mode Mac`)| +|Modal dialog box || +|Movable dialog box |Can be a floating window| +|Palette window|Can be a floating window
  • Not resizable: `-(Palette window+2)` (Windows) or ` -Palette window` (macOS)
  • Resizable: `-(Palette window+6)`
  • | +|Plain dialog box |Can be a floating window| +|Plain fixed size window|| +|Plain no zoom box window|| +|Pop up window|| +|Plain window|| +|Resizable sheet window|| +|Round corner window || +|Sheet window|| +|Texture appearance|Option to be added to a window type on macOS only. Supported types: `Plain window`, `Plain no zoom box window`, `Plain fixed size window`, `Movable dialog box`, `Round corner window`| + + + + + + * The *title* parameter is the optional title for the window If you pass an empty string ("") in *title,* you instruct 4D to use the Window Title set in the Design environment Form Properties window for the form to be displayed. @@ -47,7 +70,7 @@ If you pass an empty string ("") in *title,* you instruct 4D to use the Window T * The *controlMenuBox* parameter is the optional Control-menu box method for the window. If this parameter is specified, a Control-menu box (Windows) or a Close Box (Macintosh) is added to the window. When the user double-clicks the Control-menu box (Windows) or clicks on the Close Box (Macintosh), the method passed in *controlMenuBox* is called. -**Note:** You can also manage the closing of the window from within the form method of the form displayed in the window when an On Close Box event occurs. For more information, see the command [Form event code](../commands/form-event-code.md). +**Note:** You can also manage the closing of the window from within the form method of the form displayed in the window when an `On Close Box` event occurs. For more information, see the command [Form event code](../commands/form-event-code.md). If more than one window is open for a process, the last window opened is the active (frontmost) window for that process. Only information within the active window can be modified. Any other windows can be viewed. When the user types, the active window will always come to the front, if it is not already there. @@ -61,21 +84,19 @@ The following project method opens a window centered in the main window (Windows ```4d   // OPEN CENTERED WINDOW project method -  // $1 – Window width -  // $2 – Window height -  // $3 – Window type (optional) -  // $4 – Window title (optional) + #DECLARE($width : Integer; $height : Integer; $type : Integer; $title : Text) + var $SW; $SH; $WW; $WH : Integer  $SW:=Screen width\2  $SH:=(Screen height\2) - $WW:=$1\2 - $WH:=$2\2 + $WW:=$width\2 + $WH:=$height\2  Case of     :(Count parameters=2)        Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH)     :(Count parameters=3) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type)     :(Count parameters=4) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type;$title)  End case ``` @@ -95,7 +116,8 @@ After the project method is written, you can use it this way: The following example opens a floating window that has a Control-menu box (Windows) or Close Box (Macintosh) method. The window is opened in the upper right hand corner of the application window. ```4d - $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette") + var $myWindow : Integer + $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette")  DIALOG([Dialogs];"Color Palette") ``` @@ -110,7 +132,8 @@ The CloseColorPalette method calls the [CANCEL](cancel.md) command: The following example opens a window whose size and title come from the properties of the form displayed in the window: ```4d - FORM SET INPUT([Customers];"Add Records";*) +  var $myWindow : Integer + FORM SET INPUT([Customers];"Add Records";*)  $myWindow:=Open window(10;80;-1;-1;Plain window;"")  Repeat     ADD RECORD([Customers]) @@ -124,7 +147,8 @@ The following example opens a window whose size and title come from the properti This example illustrates the “delay” mechanism for displaying sheet windows under macOS: ```4d - $myWindow:=Open window(10;10;400;400;Sheet window) +  var $myWindow : Integer + $myWindow:=Open window(10;10;400;400;Sheet window)   //For the moment, the window is created but remains hidden  DIALOG([Table];"dialForm")   //The On Load event is generated then the sheet window is displayed; it "drops down" from the bottom @@ -135,7 +159,7 @@ This example illustrates the “delay” mechanism for displaying sheet windows [CLOSE WINDOW](close-window.md) [Open form window](open-form-window.md) -*Open Window* + ## Properties From 53288259ebab49948981d078f6fa5449618c6248 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 19 Nov 2025 14:55:06 +0100 Subject: [PATCH 32/75] fix link blog post web area --- docs/FormObjects/webArea_overview.md | 6 ++++-- .../version-20-R10/FormObjects/webArea_overview.md | 6 ++++-- versioned_docs/version-21/FormObjects/webArea_overview.md | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/FormObjects/webArea_overview.md b/docs/FormObjects/webArea_overview.md index b2a9370819a36f..aaa2f7f8cb3736 100644 --- a/docs/FormObjects/webArea_overview.md +++ b/docs/FormObjects/webArea_overview.md @@ -346,9 +346,11 @@ The default 4DCEFParameters.json file contains the following switches: } ``` -### See also +:::info Related blog post -[Specify your own parameters to initialize the embedded web area (blog post)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/versioned_docs/version-20-R10/FormObjects/webArea_overview.md b/versioned_docs/version-20-R10/FormObjects/webArea_overview.md index 777bd0077cfb59..4428a7ce4113d9 100644 --- a/versioned_docs/version-20-R10/FormObjects/webArea_overview.md +++ b/versioned_docs/version-20-R10/FormObjects/webArea_overview.md @@ -341,9 +341,11 @@ The default 4DCEFParameters.json file contains the following switches: } ``` -### See also +:::info Related blog post -[Specify your own parameters to initialize the embedded web area (blog post)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/versioned_docs/version-21/FormObjects/webArea_overview.md b/versioned_docs/version-21/FormObjects/webArea_overview.md index b2a9370819a36f..aaa2f7f8cb3736 100644 --- a/versioned_docs/version-21/FormObjects/webArea_overview.md +++ b/versioned_docs/version-21/FormObjects/webArea_overview.md @@ -346,9 +346,11 @@ The default 4DCEFParameters.json file contains the following switches: } ``` -### See also +:::info Related blog post -[Specify your own parameters to initialize the embedded web area (blog post)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: From 2f949ab78cebb0a9644d72be3830ef9fa982b88e Mon Sep 17 00:00:00 2001 From: sandritica <136651682+sandritica@users.noreply.github.com> Date: Thu, 20 Nov 2025 05:45:52 -0500 Subject: [PATCH 33/75] ES Edits in Open window command, Edit in blob to print settings and License usage (#3001) * Update new-process.md * Update new-process.md * Update register-client.md * Update register-client.md * Update register-client.md * Update 4d-write-pro-attributes.md * Update 4d-write-pro-attributes.md * Update 4d-write-pro-attributes.md * Update wp-new-style-sheet.md * Update wp-new-style-sheet.md * Update wp-new-style-sheet.md * Update get-database-parameter.md * Update set-database-parameter.md * Update set-database-parameter.md * Update set-database-parameter.md * Update get-database-parameter.md * Update get-database-parameter.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md * Update license-usage.md * Update license-usage.md * Update license-usage.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md * Update open-window.md * Update open-window.md * Update open-window.md --- .../commands-legacy/blob-to-print-settings.md | 1 - .../current/commands-legacy/license-usage.md | 6 ++ .../current/commands-legacy/open-window.md | 65 ++++++++++++------- .../commands-legacy/blob-to-print-settings.md | 1 - .../commands-legacy/license-usage.md | 6 ++ .../commands-legacy/open-window.md | 65 ++++++++++++------- .../commands-legacy/blob-to-print-settings.md | 1 - .../commands-legacy/license-usage.md | 6 ++ .../version-21/commands-legacy/open-window.md | 65 ++++++++++++------- 9 files changed, 147 insertions(+), 69 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md index 41a06864f9d2f0..cce5b132486dd4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/blob-to-print-settings.md @@ -34,7 +34,6 @@ El comando devuelve uno de los siguientes códigos de estado: * 0: ninguna impresora actual está seleccionada (en este caso, el comando no hace nada), * 1: el BLOB se ha cargado correctamente, * 2: el BLOB se ha cargado correctamente, pero el nombre de la impresora actual ha cambiado(\*) -**Nota:** Code (2) siempre se devuelve si el BLOB fue creado por el comando 4D Pack , incluso si el nombre de la impresora no cambió, ya que esta información no se incluyó en los BLOBs 4D Pack. (\*) Los parámetros dependen de la impresora actual seleccionada en el momento en que el BLOB se guardó. La aplicación de estos valores en otra impresora es soportada si ambas impresoras son del mismo modelo. Si las impresoras son diferentes, se restaurarán sólo los parámetros comunes. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/license-usage.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/license-usage.md index 3a43b060b8b66a..167f02e795b993 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/license-usage.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/license-usage.md @@ -17,6 +17,12 @@ displayed_sidebar: docs El comando **License usage** devuelve una colección de objetos que contienen información sobre las licencias retenidas. +:::note + +Este comando solo se puede ejecutar en 4D Server. Devuelve `null` cuando se llama desde otro contexto. + +::: + Cada objeto de la colección devuelta tiene los siguientes atributos: | **Nombre de la propiedad** | **Tipo** | **Descripción** | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/open-window.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/open-window.md index ccb1ec0d250f12..dec072d5bf6ea7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/open-window.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/open-window.md @@ -38,7 +38,30 @@ Si pasa -1 en *derecha* e *inferior,* le indica a 4D que redimensione automátic **Importante:** este dimensionamiento automático de la ventana ocurrirá únicamente si realiza una llamada previa a [FORM SET INPUT](form-set-input.md) para el formulario a mostrar en la ventana y si le pasa el parámetro opcional \* a [FORM SET INPUT](form-set-input.md). -* El parámetro *tipo* es opcional y define el tipo de ventana que quiere mostrar, y corresponde a las diferentes ventanas presentadas en la sección . Si el tipo pasado es negativo, la ventana será flotante. Si el tipo no se especifica, el tipo 1 se utiliza por defecto. +El parámetro *tipo* es opcional. Representa el tipo de ventana que desea mostrar. Si el tipo de ventana es negativo, la ventana creada es una ventana flotante (si es compatible). Si no se especifica el tipo, se utiliza el tipo 1 de forma predeterminada. Se admiten las siguientes constantes del tema *Abrir ventana*: + +|Constante|Comentario| +|---|---| +|Alternate dialog box|Puede utilizarse en ventana flotante| +|Has full screen mode Mac|Opción para añadir a una ventana de tipo documento solo en macOS (por ejemplo: `Plain form window+Form has full screen mode Mac`)| +|Modal dialog box || +|Movable dialog box |Puede utilizarse en ventana flotante| +|Palette window|Can be a floating window
  • No redimensionable: `-(Palette window+2)` (Windows) o ` -Palette window` (macOS)
  • Redimensionable: `-(Palette window+6)`
  • | +|Plain dialog box |Puede utilizarse en ventana flotante| +|Plain fixed size window|| +|Plain no zoom box window|| +|Pop up window|| +|Plain window|| +|Resizable sheet window|| +|Round corner window || +|Sheet window|| +|Texture appearance|Opción que se añadirá a un tipo de ventana solo en macOS. Tipos soportados: `Plain window`, `Plain no zoom box window`, `Plain fixed size window`, `Movable dialog box`, `Round corner window`| + + + + + + * El parámetro *titulo* indica el título opcional de la ventana Si pasa una cadena vacía ("") en *titulo,* le indica a 4D que utilice los valores de introducidos en el área Nombre de la ventana de la ventana de Propiedades del formulario en el entorno Diseño para el título del formulario a mostrar en la ventana. @@ -47,7 +70,7 @@ Si pasa una cadena vacía ("") en *titulo,* le indica a 4D que utilice los valor * El parámetro *casillaCerrar* es opcional y designa el método para cerrar la ventana. Si se especifica este parámetro, la casilla del menú Control (Windows) o la casilla Cerrar (Macintosh) se añade a la ventana. Cuando el usuario hace doble clic en la casilla de menú Control (Windows) o clic en la Casilla cerrar (Macintosh), se llama al método pasado en *casillaCerrar*. -**Nota:** también puede administrar el cierre de la ventana desde el método del formulario mostrado en la ventana cuando ocurre un evento On Close Box. Para mayor información, consulte el comando [Form event code](../commands/form-event-code.md). +**Nota:** también puede administrar el cierre de la ventana desde el método del formulario mostrado en la ventana cuando ocurre un evento `On Close Box`. Para mayor información, consulte el comando [Form event code](../commands/form-event-code.md). Si se abre más de una ventana para un proceso, la última ventana abierta es la ventana activa (del primer plano) para ese proceso. Sólo puede modificarse la información dentro de la ventana activa. Todas las demás ventanas pueden ser visualizadas. Cuando el usuario digita, la ventana activa siempre pasará al primer plano, si aún no está ahí. @@ -60,22 +83,20 @@ Los formularios se muestran al interior de una ventana abierta. El texto pasado El siguiente método de proyecto abre una ventana centrada en la ventana en la ventana principal (Windows) o en la pantalla principal (Macintosh). Note que puede aceptar dos, tres, o cuatro parámetros: ```4d -  // Método de proyecto OPEN CENTERED WINDOW -  // $1 – Ancho de la ventana -  // $2 – Alto de la ventana -  // $3 – Tipo de la ventana (opcional) -  // $4 – Título de la ventana (opcional) +  // Método proyecto OPEN CENTERED WINDOW +  #DECLARE($width : Integer; $height : Integer; $type : Integer; $title : Text) + var $SW; $SH; $WW; $WH : Integer  $SW:=Screen width\2  $SH:=(Screen height\2) - $WW:=$1\2 - $WH:=$2\2 + $WW:=$width\2 + $WH:=$height\2  Case of     :(Count parameters=2)        Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH)     :(Count parameters=3) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type)     :(Count parameters=4) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type;$title)  End case ``` @@ -95,7 +116,8 @@ Una vez escrito el método de proyecto, puede utilizarlo de esta forma: El siguiente ejemplo abre una ventana flotante que tiene un casilla de menú Control (Windows) o una casilla de cerrar (Macintosh). La ventana se abre en la esquina superior derecha de la ventana de la aplicación. ```4d - $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette") +var $myWindow : Integer + $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette")  DIALOG([Dialogs];"Color Palette") ``` @@ -105,20 +127,19 @@ El método CloseColorPalette llama al comando [CANCEL](cancel.md):  CANCEL ``` - ## Ejemplo 3 El siguiente ejemplo abre una ventana cuyo tamaño y título provienen de las propiedades del formulario mostrado en la ventana: ```4d - ORM SET INPUT([Customers];"Add Records";*) - $myWindow:=Open window(10;80;-1;-1;Plain window;"") +  var $myWindow : Integer + FORM SET INPUT([Customers];"Add Records";*) + $myWindow:=Open window(10;80;-1;-1;Plain window;"")  Repeat     ADD RECORD([Customers])  Until(OK=0) ``` - **Recuerde**: para que la función **Open window** utilice automáticamente las propiedades del formulario, debe llamar a [FORM SET INPUT](form-set-input.md) con el parámetro opcional *\** y las propiedades del formulario deben haber sido definidas en función de esta utilización en el entorno Diseño. ## Ejemplo 4 @@ -126,23 +147,23 @@ El siguiente ejemplo abre una ventana cuyo tamaño y título provienen de las pr Este ejemplo ilustra el mecanismo de “retraso” de mostrar ventanas bajo macOS: ```4d - $miVentana:=Open window(10;10;400;400;Sheet window) +  var $myWindow : Integer + $myWindow:=Open window(10;10;400;400;Sheet window)   //Por el momento, se crea la ventana pero permanece oculta - DIALOG([Tabla];"formDial") -  //El evento On Load se genera luego se muestra la ventana; "desciende" de debajo de la barra de título + DIALOG([Table];"dialForm") +  //El evento On Load se genera luego se muestra la ventana; "desciende" de debajo de + //la barra de título ``` ## Ver también [CLOSE WINDOW](close-window.md) -*Crear ventana* [Open form window](open-form-window.md) + ## Propiedades | | | | --- | --- | | Número de comando | 153 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md index 41a06864f9d2f0..cce5b132486dd4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/blob-to-print-settings.md @@ -34,7 +34,6 @@ El comando devuelve uno de los siguientes códigos de estado: * 0: ninguna impresora actual está seleccionada (en este caso, el comando no hace nada), * 1: el BLOB se ha cargado correctamente, * 2: el BLOB se ha cargado correctamente, pero el nombre de la impresora actual ha cambiado(\*) -**Nota:** Code (2) siempre se devuelve si el BLOB fue creado por el comando 4D Pack , incluso si el nombre de la impresora no cambió, ya que esta información no se incluyó en los BLOBs 4D Pack. (\*) Los parámetros dependen de la impresora actual seleccionada en el momento en que el BLOB se guardó. La aplicación de estos valores en otra impresora es soportada si ambas impresoras son del mismo modelo. Si las impresoras son diferentes, se restaurarán sólo los parámetros comunes. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/license-usage.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/license-usage.md index 3a43b060b8b66a..167f02e795b993 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/license-usage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/license-usage.md @@ -17,6 +17,12 @@ displayed_sidebar: docs El comando **License usage** devuelve una colección de objetos que contienen información sobre las licencias retenidas. +:::note + +Este comando solo se puede ejecutar en 4D Server. Devuelve `null` cuando se llama desde otro contexto. + +::: + Cada objeto de la colección devuelta tiene los siguientes atributos: | **Nombre de la propiedad** | **Tipo** | **Descripción** | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/open-window.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/open-window.md index ccb1ec0d250f12..dec072d5bf6ea7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/open-window.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/open-window.md @@ -38,7 +38,30 @@ Si pasa -1 en *derecha* e *inferior,* le indica a 4D que redimensione automátic **Importante:** este dimensionamiento automático de la ventana ocurrirá únicamente si realiza una llamada previa a [FORM SET INPUT](form-set-input.md) para el formulario a mostrar en la ventana y si le pasa el parámetro opcional \* a [FORM SET INPUT](form-set-input.md). -* El parámetro *tipo* es opcional y define el tipo de ventana que quiere mostrar, y corresponde a las diferentes ventanas presentadas en la sección . Si el tipo pasado es negativo, la ventana será flotante. Si el tipo no se especifica, el tipo 1 se utiliza por defecto. +El parámetro *tipo* es opcional. Representa el tipo de ventana que desea mostrar. Si el tipo de ventana es negativo, la ventana creada es una ventana flotante (si es compatible). Si no se especifica el tipo, se utiliza el tipo 1 de forma predeterminada. Se admiten las siguientes constantes del tema *Abrir ventana*: + +|Constante|Comentario| +|---|---| +|Alternate dialog box|Puede utilizarse en ventana flotante| +|Has full screen mode Mac|Opción para añadir a una ventana de tipo documento solo en macOS (por ejemplo: `Plain form window+Form has full screen mode Mac`)| +|Modal dialog box || +|Movable dialog box |Puede utilizarse en ventana flotante| +|Palette window|Can be a floating window
  • No redimensionable: `-(Palette window+2)` (Windows) o ` -Palette window` (macOS)
  • Redimensionable: `-(Palette window+6)`
  • | +|Plain dialog box |Puede utilizarse en ventana flotante| +|Plain fixed size window|| +|Plain no zoom box window|| +|Pop up window|| +|Plain window|| +|Resizable sheet window|| +|Round corner window || +|Sheet window|| +|Texture appearance|Opción que se añadirá a un tipo de ventana solo en macOS. Tipos soportados: `Plain window`, `Plain no zoom box window`, `Plain fixed size window`, `Movable dialog box`, `Round corner window`| + + + + + + * El parámetro *titulo* indica el título opcional de la ventana Si pasa una cadena vacía ("") en *titulo,* le indica a 4D que utilice los valores de introducidos en el área Nombre de la ventana de la ventana de Propiedades del formulario en el entorno Diseño para el título del formulario a mostrar en la ventana. @@ -47,7 +70,7 @@ Si pasa una cadena vacía ("") en *titulo,* le indica a 4D que utilice los valor * El parámetro *casillaCerrar* es opcional y designa el método para cerrar la ventana. Si se especifica este parámetro, la casilla del menú Control (Windows) o la casilla Cerrar (Macintosh) se añade a la ventana. Cuando el usuario hace doble clic en la casilla de menú Control (Windows) o clic en la Casilla cerrar (Macintosh), se llama al método pasado en *casillaCerrar*. -**Nota:** también puede administrar el cierre de la ventana desde el método del formulario mostrado en la ventana cuando ocurre un evento On Close Box. Para mayor información, consulte el comando [Form event code](../commands/form-event-code.md). +**Nota:** también puede administrar el cierre de la ventana desde el método del formulario mostrado en la ventana cuando ocurre un evento `On Close Box`. Para mayor información, consulte el comando [Form event code](../commands/form-event-code.md). Si se abre más de una ventana para un proceso, la última ventana abierta es la ventana activa (del primer plano) para ese proceso. Sólo puede modificarse la información dentro de la ventana activa. Todas las demás ventanas pueden ser visualizadas. Cuando el usuario digita, la ventana activa siempre pasará al primer plano, si aún no está ahí. @@ -60,22 +83,20 @@ Los formularios se muestran al interior de una ventana abierta. El texto pasado El siguiente método de proyecto abre una ventana centrada en la ventana en la ventana principal (Windows) o en la pantalla principal (Macintosh). Note que puede aceptar dos, tres, o cuatro parámetros: ```4d -  // Método de proyecto OPEN CENTERED WINDOW -  // $1 – Ancho de la ventana -  // $2 – Alto de la ventana -  // $3 – Tipo de la ventana (opcional) -  // $4 – Título de la ventana (opcional) +  // Método proyecto OPEN CENTERED WINDOW +  #DECLARE($width : Integer; $height : Integer; $type : Integer; $title : Text) + var $SW; $SH; $WW; $WH : Integer  $SW:=Screen width\2  $SH:=(Screen height\2) - $WW:=$1\2 - $WH:=$2\2 + $WW:=$width\2 + $WH:=$height\2  Case of     :(Count parameters=2)        Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH)     :(Count parameters=3) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type)     :(Count parameters=4) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type;$title)  End case ``` @@ -95,7 +116,8 @@ Una vez escrito el método de proyecto, puede utilizarlo de esta forma: El siguiente ejemplo abre una ventana flotante que tiene un casilla de menú Control (Windows) o una casilla de cerrar (Macintosh). La ventana se abre en la esquina superior derecha de la ventana de la aplicación. ```4d - $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette") +var $myWindow : Integer + $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette")  DIALOG([Dialogs];"Color Palette") ``` @@ -105,20 +127,19 @@ El método CloseColorPalette llama al comando [CANCEL](cancel.md):  CANCEL ``` - ## Ejemplo 3 El siguiente ejemplo abre una ventana cuyo tamaño y título provienen de las propiedades del formulario mostrado en la ventana: ```4d - ORM SET INPUT([Customers];"Add Records";*) - $myWindow:=Open window(10;80;-1;-1;Plain window;"") +  var $myWindow : Integer + FORM SET INPUT([Customers];"Add Records";*) + $myWindow:=Open window(10;80;-1;-1;Plain window;"")  Repeat     ADD RECORD([Customers])  Until(OK=0) ``` - **Recuerde**: para que la función **Open window** utilice automáticamente las propiedades del formulario, debe llamar a [FORM SET INPUT](form-set-input.md) con el parámetro opcional *\** y las propiedades del formulario deben haber sido definidas en función de esta utilización en el entorno Diseño. ## Ejemplo 4 @@ -126,23 +147,23 @@ El siguiente ejemplo abre una ventana cuyo tamaño y título provienen de las pr Este ejemplo ilustra el mecanismo de “retraso” de mostrar ventanas bajo macOS: ```4d - $miVentana:=Open window(10;10;400;400;Sheet window) +  var $myWindow : Integer + $myWindow:=Open window(10;10;400;400;Sheet window)   //Por el momento, se crea la ventana pero permanece oculta - DIALOG([Tabla];"formDial") -  //El evento On Load se genera luego se muestra la ventana; "desciende" de debajo de la barra de título + DIALOG([Table];"dialForm") +  //El evento On Load se genera luego se muestra la ventana; "desciende" de debajo de + //la barra de título ``` ## Ver también [CLOSE WINDOW](close-window.md) -*Crear ventana* [Open form window](open-form-window.md) + ## Propiedades | | | | --- | --- | | Número de comando | 153 | | Hilo seguro | ✗ | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md index 41a06864f9d2f0..cce5b132486dd4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/blob-to-print-settings.md @@ -34,7 +34,6 @@ El comando devuelve uno de los siguientes códigos de estado: * 0: ninguna impresora actual está seleccionada (en este caso, el comando no hace nada), * 1: el BLOB se ha cargado correctamente, * 2: el BLOB se ha cargado correctamente, pero el nombre de la impresora actual ha cambiado(\*) -**Nota:** Code (2) siempre se devuelve si el BLOB fue creado por el comando 4D Pack , incluso si el nombre de la impresora no cambió, ya que esta información no se incluyó en los BLOBs 4D Pack. (\*) Los parámetros dependen de la impresora actual seleccionada en el momento en que el BLOB se guardó. La aplicación de estos valores en otra impresora es soportada si ambas impresoras son del mismo modelo. Si las impresoras son diferentes, se restaurarán sólo los parámetros comunes. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/license-usage.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/license-usage.md index 3a43b060b8b66a..167f02e795b993 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/license-usage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/license-usage.md @@ -17,6 +17,12 @@ displayed_sidebar: docs El comando **License usage** devuelve una colección de objetos que contienen información sobre las licencias retenidas. +:::note + +Este comando solo se puede ejecutar en 4D Server. Devuelve `null` cuando se llama desde otro contexto. + +::: + Cada objeto de la colección devuelta tiene los siguientes atributos: | **Nombre de la propiedad** | **Tipo** | **Descripción** | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/open-window.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/open-window.md index ccb1ec0d250f12..dec072d5bf6ea7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/open-window.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/open-window.md @@ -38,7 +38,30 @@ Si pasa -1 en *derecha* e *inferior,* le indica a 4D que redimensione automátic **Importante:** este dimensionamiento automático de la ventana ocurrirá únicamente si realiza una llamada previa a [FORM SET INPUT](form-set-input.md) para el formulario a mostrar en la ventana y si le pasa el parámetro opcional \* a [FORM SET INPUT](form-set-input.md). -* El parámetro *tipo* es opcional y define el tipo de ventana que quiere mostrar, y corresponde a las diferentes ventanas presentadas en la sección . Si el tipo pasado es negativo, la ventana será flotante. Si el tipo no se especifica, el tipo 1 se utiliza por defecto. +El parámetro *tipo* es opcional. Representa el tipo de ventana que desea mostrar. Si el tipo de ventana es negativo, la ventana creada es una ventana flotante (si es compatible). Si no se especifica el tipo, se utiliza el tipo 1 de forma predeterminada. Se admiten las siguientes constantes del tema *Abrir ventana*: + +|Constante|Comentario| +|---|---| +|Alternate dialog box|Puede utilizarse en ventana flotante| +|Has full screen mode Mac|Opción para añadir a una ventana de tipo documento solo en macOS (por ejemplo: `Plain form window+Form has full screen mode Mac`)| +|Modal dialog box || +|Movable dialog box |Puede utilizarse en ventana flotante| +|Palette window|Can be a floating window
  • No redimensionable: `-(Palette window+2)` (Windows) o ` -Palette window` (macOS)
  • Redimensionable: `-(Palette window+6)`
  • | +|Plain dialog box |Puede utilizarse en ventana flotante| +|Plain fixed size window|| +|Plain no zoom box window|| +|Pop up window|| +|Plain window|| +|Resizable sheet window|| +|Round corner window || +|Sheet window|| +|Texture appearance|Opción que se añadirá a un tipo de ventana solo en macOS. Tipos soportados: `Plain window`, `Plain no zoom box window`, `Plain fixed size window`, `Movable dialog box`, `Round corner window`| + + + + + + * El parámetro *titulo* indica el título opcional de la ventana Si pasa una cadena vacía ("") en *titulo,* le indica a 4D que utilice los valores de introducidos en el área Nombre de la ventana de la ventana de Propiedades del formulario en el entorno Diseño para el título del formulario a mostrar en la ventana. @@ -47,7 +70,7 @@ Si pasa una cadena vacía ("") en *titulo,* le indica a 4D que utilice los valor * El parámetro *casillaCerrar* es opcional y designa el método para cerrar la ventana. Si se especifica este parámetro, la casilla del menú Control (Windows) o la casilla Cerrar (Macintosh) se añade a la ventana. Cuando el usuario hace doble clic en la casilla de menú Control (Windows) o clic en la Casilla cerrar (Macintosh), se llama al método pasado en *casillaCerrar*. -**Nota:** también puede administrar el cierre de la ventana desde el método del formulario mostrado en la ventana cuando ocurre un evento On Close Box. Para mayor información, consulte el comando [Form event code](../commands/form-event-code.md). +**Nota:** también puede administrar el cierre de la ventana desde el método del formulario mostrado en la ventana cuando ocurre un evento `On Close Box`. Para mayor información, consulte el comando [Form event code](../commands/form-event-code.md). Si se abre más de una ventana para un proceso, la última ventana abierta es la ventana activa (del primer plano) para ese proceso. Sólo puede modificarse la información dentro de la ventana activa. Todas las demás ventanas pueden ser visualizadas. Cuando el usuario digita, la ventana activa siempre pasará al primer plano, si aún no está ahí. @@ -60,22 +83,20 @@ Los formularios se muestran al interior de una ventana abierta. El texto pasado El siguiente método de proyecto abre una ventana centrada en la ventana en la ventana principal (Windows) o en la pantalla principal (Macintosh). Note que puede aceptar dos, tres, o cuatro parámetros: ```4d -  // Método de proyecto OPEN CENTERED WINDOW -  // $1 – Ancho de la ventana -  // $2 – Alto de la ventana -  // $3 – Tipo de la ventana (opcional) -  // $4 – Título de la ventana (opcional) +  // Método proyecto OPEN CENTERED WINDOW +  #DECLARE($width : Integer; $height : Integer; $type : Integer; $title : Text) + var $SW; $SH; $WW; $WH : Integer  $SW:=Screen width\2  $SH:=(Screen height\2) - $WW:=$1\2 - $WH:=$2\2 + $WW:=$width\2 + $WH:=$height\2  Case of     :(Count parameters=2)        Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH)     :(Count parameters=3) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type)     :(Count parameters=4) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type;$title)  End case ``` @@ -95,7 +116,8 @@ Una vez escrito el método de proyecto, puede utilizarlo de esta forma: El siguiente ejemplo abre una ventana flotante que tiene un casilla de menú Control (Windows) o una casilla de cerrar (Macintosh). La ventana se abre en la esquina superior derecha de la ventana de la aplicación. ```4d - $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette") +var $myWindow : Integer + $myWindow:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"CloseColorPalette")  DIALOG([Dialogs];"Color Palette") ``` @@ -105,20 +127,19 @@ El método CloseColorPalette llama al comando [CANCEL](cancel.md):  CANCEL ``` - ## Ejemplo 3 El siguiente ejemplo abre una ventana cuyo tamaño y título provienen de las propiedades del formulario mostrado en la ventana: ```4d - ORM SET INPUT([Customers];"Add Records";*) - $myWindow:=Open window(10;80;-1;-1;Plain window;"") +  var $myWindow : Integer + FORM SET INPUT([Customers];"Add Records";*) + $myWindow:=Open window(10;80;-1;-1;Plain window;"")  Repeat     ADD RECORD([Customers])  Until(OK=0) ``` - **Recuerde**: para que la función **Open window** utilice automáticamente las propiedades del formulario, debe llamar a [FORM SET INPUT](form-set-input.md) con el parámetro opcional *\** y las propiedades del formulario deben haber sido definidas en función de esta utilización en el entorno Diseño. ## Ejemplo 4 @@ -126,23 +147,23 @@ El siguiente ejemplo abre una ventana cuyo tamaño y título provienen de las pr Este ejemplo ilustra el mecanismo de “retraso” de mostrar ventanas bajo macOS: ```4d - $miVentana:=Open window(10;10;400;400;Sheet window) +  var $myWindow : Integer + $myWindow:=Open window(10;10;400;400;Sheet window)   //Por el momento, se crea la ventana pero permanece oculta - DIALOG([Tabla];"formDial") -  //El evento On Load se genera luego se muestra la ventana; "desciende" de debajo de la barra de título + DIALOG([Table];"dialForm") +  //El evento On Load se genera luego se muestra la ventana; "desciende" de debajo de + //la barra de título ``` ## Ver también [CLOSE WINDOW](close-window.md) -*Crear ventana* [Open form window](open-form-window.md) + ## Propiedades | | | | --- | --- | | Número de comando | 153 | | Hilo seguro | ✗ | - - From c665bcf339eacb4b94f08a412781e3ff788aa481 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 20 Nov 2025 11:46:23 +0100 Subject: [PATCH 34/75] New Crowdin updates (#3002) * New translations webarea_overview.md (French) * New translations webarea_overview.md (French) * New translations webarea_overview.md (French) * New translations webarea_overview.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations clientserver.md (Japanese) * New translations forms.md (Japanese) * New translations sessions.md (Japanese) * New translations webarea_overview.md (Japanese) * New translations orda-events.md (Japanese) * New translations webarea_overview.md (Japanese) * New translations orda-events.md (Japanese) * New translations sessions.md (Japanese) * New translations http-rules.md (Japanese) * New translations clientserver.md (Japanese) * New translations forms.md (Japanese) * New translations webarea_overview.md (Japanese) * New translations orda-events.md (Japanese) * New translations http-rules.md (Japanese) * New translations sessions.md (Japanese) * New translations webarea_overview.md (Portuguese, Brazilian) * New translations webarea_overview.md (Portuguese, Brazilian) * New translations webarea_overview.md (Portuguese, Brazilian) * New translations orda-events.md (Japanese) * New translations orda-events.md (Japanese) * New translations orda-events.md (Japanese) --- .../current/FormObjects/webArea_overview.md | 8 +- .../FormObjects/webArea_overview.md | 8 +- .../FormObjects/webArea_overview.md | 8 +- .../current/FormObjects/webArea_overview.md | 8 +- .../FormObjects/webArea_overview.md | 8 +- .../FormObjects/webArea_overview.md | 8 +- .../current/Desktop/clientServer.md | 2 +- .../current/FormEditor/forms.md | 2 +- .../current/FormObjects/webArea_overview.md | 8 +- .../current/ORDA/orda-events.md | 153 +++++++++-------- .../current/WebServer/http-rules.md | 2 +- .../current/WebServer/sessions.md | 2 +- .../FormObjects/webArea_overview.md | 8 +- .../version-20-R10/ORDA/orda-events.md | 75 +++++---- .../version-20-R10/WebServer/sessions.md | 2 +- .../version-21/Desktop/clientServer.md | 2 +- .../version-21/FormEditor/forms.md | 2 +- .../FormObjects/webArea_overview.md | 8 +- .../version-21/ORDA/orda-events.md | 155 +++++++++--------- .../version-21/WebServer/http-rules.md | 2 +- .../version-21/WebServer/sessions.md | 2 +- .../current/FormObjects/webArea_overview.md | 8 +- .../FormObjects/webArea_overview.md | 8 +- .../FormObjects/webArea_overview.md | 8 +- 24 files changed, 259 insertions(+), 238 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md index 649f7739c0fabc..c272db7f19ea66 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md @@ -24,7 +24,7 @@ Se pueden asociar dos variables específicas a cada área web: - [`URL`](properties_WebArea.md#url) --para controlar la URL mostrada por el área web - [`Progression`](properties_WebArea.md#progression) -- para controlar el porcentaje de carga de la página mostrada en el área web. -> A partir de 4D v19 R5, la variable Progression ya no se actualiza en las Áreas Web que utilizan el [motor de renderizado del sistema Windows](./webArea_overview.md#web-rendering-engine). +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Motor de renderización web @@ -338,9 +338,11 @@ El archivo 4DCEFParameters.json por defecto contiene los siguientes cambios: } ``` -### Ver también +:::info Entrada de blog relacionada -[Especifique sus propios parámetros para inicializar el área web integrada (entrada de blog)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md index 008310d5b2f8a3..2358ca4e00a38d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md @@ -18,7 +18,7 @@ Se pueden asociar dos variables específicas a cada área web: - [`URL`](properties_WebArea.md#url) --para controlar la URL mostrada por el área web - [`Progression`](properties_WebArea.md#progression) -- para controlar el porcentaje de carga de la página mostrada en el área web. -> A partir de 4D v19 R5, la variable Progression ya no se actualiza en las Áreas Web que utilizan el [motor de renderizado del sistema Windows](./webArea_overview.md#web-rendering-engine). +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Motor de renderización web @@ -332,9 +332,11 @@ El archivo 4DCEFParameters.json por defecto contiene los siguientes cambios: } ``` -### Ver también +:::info Entrada de blog relacionada -[Especifique sus propios parámetros para inicializar el área web integrada (entrada de blog)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md index 649f7739c0fabc..c272db7f19ea66 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md @@ -24,7 +24,7 @@ Se pueden asociar dos variables específicas a cada área web: - [`URL`](properties_WebArea.md#url) --para controlar la URL mostrada por el área web - [`Progression`](properties_WebArea.md#progression) -- para controlar el porcentaje de carga de la página mostrada en el área web. -> A partir de 4D v19 R5, la variable Progression ya no se actualiza en las Áreas Web que utilizan el [motor de renderizado del sistema Windows](./webArea_overview.md#web-rendering-engine). +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Motor de renderización web @@ -338,9 +338,11 @@ El archivo 4DCEFParameters.json por defecto contiene los siguientes cambios: } ``` -### Ver también +:::info Entrada de blog relacionada -[Especifique sus propios parámetros para inicializar el área web integrada (entrada de blog)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md b/i18n/fr/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md index 1f47e1e9918d0c..3eec516ac20cfe 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md @@ -24,7 +24,7 @@ Deux variables spécifiques sont automatiquement associées à chaque zone web : - [`URL`](properties_WebArea.md#url) --pour contrôler l'URL affichée par la zone web - [`Progression`](properties_WebArea.md#progression) -- pour contrôler le pourcentage de chargement de la page affichée dans la zone web. -> Depuis 4D 19 R5, la variable Progression n'est plus mise à jour dans les zones Web utilisant le [moteur de rendu système Windows](./webArea_overview.md#web-rendering-engine). +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Moteur de rendu Web @@ -338,9 +338,11 @@ Le fichier 4DCEFParameters.json par défaut contient les commutateurs suivants : } ``` -### Voir également +:::info Article(s) de blog sur le sujet -[Spécifiez vos propres paramètres pour initialiser la zone web intégrée (article de blog)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md index 1746d5553ed594..4de88a0d4c1b6b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md @@ -18,7 +18,7 @@ Deux variables spécifiques sont automatiquement associées à chaque zone web : - [`URL`](properties_WebArea.md#url) --pour contrôler l'URL affichée par la zone web - [`Progression`](properties_WebArea.md#progression) -- pour contrôler le pourcentage de chargement de la page affichée dans la zone web. -> Depuis 4D 19 R5, la variable Progression n'est plus mise à jour dans les zones Web utilisant le [moteur de rendu système Windows](./webArea_overview.md#web-rendering-engine). +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Moteur de rendu Web @@ -332,9 +332,11 @@ Le fichier 4DCEFParameters.json par défaut contient les commutateurs suivants : } ``` -### Voir également +:::info Article(s) de blog sur le sujet -[Spécifiez vos propres paramètres pour initialiser la zone web intégrée (article de blog)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md index 1f47e1e9918d0c..3eec516ac20cfe 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md @@ -24,7 +24,7 @@ Deux variables spécifiques sont automatiquement associées à chaque zone web : - [`URL`](properties_WebArea.md#url) --pour contrôler l'URL affichée par la zone web - [`Progression`](properties_WebArea.md#progression) -- pour contrôler le pourcentage de chargement de la page affichée dans la zone web. -> Depuis 4D 19 R5, la variable Progression n'est plus mise à jour dans les zones Web utilisant le [moteur de rendu système Windows](./webArea_overview.md#web-rendering-engine). +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Moteur de rendu Web @@ -338,9 +338,11 @@ Le fichier 4DCEFParameters.json par défaut contient les commutateurs suivants : } ``` -### Voir également +:::info Article(s) de blog sur le sujet -[Spécifiez vos propres paramètres pour initialiser la zone web intégrée (article de blog)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Desktop/clientServer.md b/i18n/ja/docusaurus-plugin-content-docs/current/Desktop/clientServer.md index 740429e4ec9d80..d2fb494d4bbf85 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Desktop/clientServer.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Desktop/clientServer.md @@ -128,7 +128,7 @@ Note that [privileges](../ORDA/privileges.md) should be set in the session befor Shared sessions are handled through [OTP tokens](../WebServer/sessions.md#session-token-otp). After you created an OTP token on the server for the user session, you add the token (through the `$4DSID` parameter value) to web requests sent from web areas containing Qodly pages so that the user session on the server is identified and shared. On the web server side, if a web request contains an *OTP id* in the $4DSID parameter, the session corresponding to this OTP token is used. -:::tip Related blog post +:::tip 関連したblog 記事 [Share your 4D remote client session with web accesses](https://blog.4d.com/share-your-4d-remote-client-session-with-web-accesses) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md index d460a48eb79567..c439e23e779f13 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md @@ -118,7 +118,7 @@ This feature can only be used on Windows. On macOS, it is ignored. ::: -:::tip Related blog post +:::tip 関連したblog 記事 [Modernize your 4D interfaces with Fluent UI](https://blog.4d.com/modernize-your-4d-interfaces-with-fluent-ui) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md b/i18n/ja/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md index d6396cd9496efe..6c9da5c5740b5f 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md @@ -24,7 +24,7 @@ Webエリアには 2つの特別な変数が自動で割り当てられます: - [`URL`](properties_WebArea.md#url) --Web エリアが表示するURL をコントロールします。 - [`Progression`](properties_WebArea.md#progression) -- Web エリア内に表示されているページのロード率をコントロールします。 -> 4D v19 R5 以降、Progression 変数は、[Windows のシステムレンダリングエンジン](./webArea_overview.md#Webレンダリングエンジン) を使用しているWeb エリアにおいては更新されなくなりました。 +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Webレンダリングエンジン @@ -338,9 +338,11 @@ Webインスペクターを表示させるには、`WA OPEN WEB INSPECTOR` コ } ``` -### 参照 +:::info 関連したblog 記事 -[Specify your own parameters to initialize the embedded web area (blog 記事)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index cc909bcea59ea6..e0066e085544e8 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -110,13 +110,13 @@ ORDA [`constructor()`](./ordaClasses.md#class-constructor) 関数は必ずクラ | seriousError | Boolean | validate イベントでのみ使用されます(以下参照)。
  • `True`: [深刻(予測不能)なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不能なエラー) を作成し、例外をトリガーします。 `dk status serious validation error` ステータスを追加します
  • `False`: creates only a [静か(予測可能) なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー) のみを作成します。 `dk status validation failed` ステータスを追加します
  • | 可能(デフォルトはfalse) | | componentSignature | Text | 常に "DBEV" | × | -- [Serious errors](../Concepts/error-handling.md#predictable-vs-unpredictable-errors) are stacked in the `errors` collection property of the **Result object** returned by the [`save()`](../API/EntityClass.md#save) or [`drop()`](../API/EntityClass.md#drop) functions. -- In case of an error triggered by a **validate** event, the `seriousError` property allows you to choose the level of the error to generate: - - If **true**: a serious error is thrown and should be handled by the [error processing code](../Concepts/error-handling.md#predictable-vs-unpredictable-errors), such as a [try catch](../Concepts/error-handling.md#trycatchend-try). In the result object of the calling function, `status` gets `dk status serious validation error` and `statusText` gets "Serious Validation Error". The error is raised at the end of the event and reach the client requesting the save/drop action (REST client for example). - - If **false** (default): a [silent (predictable) error is generated](../Concepts/error-handling.md#predictable-vs-unpredictable-errors). It does not trigger any exception and is not stacked in the errors returned by the [`Last errors`](../commands/last-errors.md) command. In the result object of the calling function, `status` gets `dk status validation failed` and `statusText` gets "Mild Validation Error". -- In case of an error triggered by a **saving/dropping** event, when an error object is returned, the error is always raised as a serious error whatever the `seriousError` property value. +- [深刻なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー) は[`save()`](../API/EntityClass.md#save) または [`drop()`](../API/EntityClass.md#drop) 関数から返される **Result オブジェクト** の `errors` コレクションプロパティにスタックされます。 +- **validate** イベントによってトリガーされたエラーの場合、 `seriousError` プロパティを使用することで生成するエラーのレベルを選択することができます: + - **true** の場合: 深刻なエラーが生成され、[try catch](../Concepts/error-handling.md#trycatchend-try)などの[エラー処理コード](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー) によって管理される必要があります。 呼び出した関数のresult オブジェクトでは、`status` には `dk status serious validation error` が入り、 `statusText` には "Serious Validation Error" が入ります。 エラーはイベントの終わりに生成され、保存/ドロップアクションをリクエストしているクライアント(例えばREST クライアントなど)に届きます。 + - **false** (デフォルト)の場合: [静か(予測可能) なエラーが生成されます](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー)。 これは例外はトリガーせず、また[`Last errors`](../commands/last-errors.md) コマンドから返されるエラーの中にはスタックされません。 呼び出した関数のresult オブジェクトでは、`status` には `dk status validation failed` が入り、 `statusText` には "Mild Validation Error" が入ります。 +- **保存時/ドロップ時** のイベントによってトリガーされたエラーの場合、エラーオブジェクトが返されると、 `seriousError` プロパティの値に関わらず、エラーは常に深刻なエラーとして生成されます。 -## Event function description +## イベント関数の詳細 ### `Function event touched` @@ -125,39 +125,39 @@ ORDA [`constructor()`](./ordaClasses.md#class-constructor) 関数は必ずクラ ```4d {local} Function event touched($event : Object) {local} Function event touched ($event : Object) -// code +// コード ``` -This event is triggered each time a value is modified in the entity. +このイベントはエンティティ内の値が編集されるたびにトリガーされます。 -- If you defined the function at the entity level (first syntax), it is triggered for modifications on any attribute of the entity. -- If you defined the function at the attribute level (second syntax), it is triggered only for modifications on this attribute. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性における変更に対してトリガーされます。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対する変更に対してのみトリガーされます。 -This event is triggered as soon as the 4D Server / 4D engine can detect a modification of attribute value which can be due to the following actions: +このイベントは4D Server / 4Dエンジンが属性値の変更を検知するとすぐにトリガーされます。この変更は、以下のようなアクションによって引き起こされます: -- in **client/server with the [`local` keyword](../ORDA/ordaClasses.md#local-functions)** or in **4D single-user**: - - the user sets a value on a 4D form, - - the 4D code makes an assignment with the `:=` operator. The event is also triggered in case of self-assignment (`$entity.attribute:=$entity.attribute`). -- in **client/server without the `local` keyword**: some 4D code that makes an assignment with the `:=` operator is [executed on the server](../commands-legacy/execute-on-server.md). -- **`local` キーワードを使用しないクライアント/サーバー**、**[Qodly アプリケーション](https://developer.4d.com/qodly)** および **[リモートデータストア](../commands/open-datastore.md)**: ORDA 関数(エンティティ上の関数あるいはエンティティを引数として使用する関数)を呼び出した場合にはエンティティは4D Server 受信されます。 It means that you might have to implement a *refresh* or *preview* function on the remote application that sends an ORDA request to the server and triggers the event. -- with the REST server: the value is received on the REST server with a [REST request](../REST/$method.md#methodupdate) (`$method=update`) +- **[`local` キーワード](../ORDA/ordaClasses.md#local関数) を使用したクライアント/サーバー** あるいは **シングルユーザーモードの4D**: + - ユーザーが4D フォーム上で値を設定した + - 4D コードが `:=` 演算子によって代入を行った。 このイベントは自己代入の場合にもトリガーされます(`$entity.attribute:=$entity.attribute`)。 +- **`local` キーワード を使用しないクライアント/サーバー**: `:=` 演算子によって代入を行う一部の4D コードは、[サーバー上で実行されます](../commands-legacy/execute-on-server.md)。 +- **`local` キーワードを使用しないクライアント/サーバー**、**[Qodly アプリケーション](https://developer.4d.com/qodly)** および **[リモートデータストア](../commands/open-datastore.md)**: ORDA 関数(エンティティ上の関数あるいはエンティティを引数として使用する関数)を呼び出した場合にはエンティティは4D Server 受信されます。 これはつまり、リモートアプリケーション側に*refresh* あるいは *preview* 関数を実装することでORDA リクエストをサーバーに送信し、イベントをトリガーするようにする必要があるかもしれない、ということです。 +- REST サーバー: 値は REST サーバーに、[REST リクエスト](../REST/$method.md#methodupdate) (`$method=update`) とともに受信されます。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -If this function [throws](../commands/throw) an error, it will not stop the undergoing action. +この関数がエラーを[throw](../commands/throw) する場合でも、進行中のアクションは停止しません。 :::note -This event is also triggered: +このイベントは以下の場合にもトリガーされます: -- when attributes are assigned by the [`constructor()`](./ordaClasses.md#class-constructor-1) event, -- when attributes are edited through the [Data Explorer](../Admin/dataExplorer.md). +- 属性の値が [`constructor()`](./ordaClasses.md#class-constructor-1) イベントによって代入された場合 +- 属性の値が [データエクスプローラー](../Admin/dataExplorer.md) を通して編集された場合。 ::: #### 例題 1 -You want to uppercase all text attributes of an entity when it is updated. +エンティティが更新されたときに、エンティティ内のテキスト属性を全て大文字に変換したい場合を考えます。 ```4d //ProductsEntity class @@ -170,11 +170,11 @@ Function event touched($event : Object) #### 例題 2 -The "touched" event is useful when it is not possible to write indexed query code in [`Function query()`](./ordaClasses.md#function-query-attributename) for a [computed attribute](./ordaClasses.md#computed-attributes). +"touched" イベントは、[計算属性](./ordaClasses.md#計算属性)に対して[`Function query()`](./ordaClasses.md#function-query-attributename) 内でインデックスクエリコードを書くことが不可能な場合にとても有用です。 -This is the case for example, when your [`query`](./ordaClasses.md#function-query-attributename) function has to compare the value of different attributes from the same entity with each other. You must use formulas in the returned ORDA query -- which triggers sequential queries. +これは例えば、[`query`](./ordaClasses.md#function-query-attributename) 関数が同じエンティティの異なる属性の値どうしを比較したいような場合です。 これは返されたORDA クエリ内でフォーミュラを使う必要があり、結果としてシーケンシャルクエリをトリガーすることになります。 -To fully understand this case, let's examine the following two calculated attributes: +このような場合を完全に理解するために、以下の2つの計算属性について調べてみましょう: ```4d Function get onGoing() : Boolean @@ -184,9 +184,9 @@ Function get sameDay() : Boolean return (This.departureDate=This.arrivalDate) ``` -Even though they are very similar, these functions cannot be associated with identical queries because they do not compare the same types of values. The first compares attributes to a given value, while the second compares attributes to each other. +たとえ非常に似ていたとしても、これらのクエリは同じ型の値を比較している訳ではないため、これらの関数を同一のクエリと関連づけることはできません。 前者は属性を与えられた値と比較する一方、後者は属性どうしを比較します。 -- For the *onGoing* attribute, the [`query`](./ordaClasses.md#function-query-attributename) function is simple to write and uses indexed attributes: +- *onGoing* 属性に対しては、[`query`](./ordaClasses.md#function-query-attributename) 関数をシンプルに書くことができ、またインデックス付きの属性を使用します: ```4d Function query onGoing($event : Object) : Object @@ -207,12 +207,12 @@ Function query onGoing($event : Object) : Object End case $myQuery:=($onGoingValue) ? "departureDate <= :1 AND arrivalDate >= :1" : "departureDate > :1 OR arrivalDate < :1" - // the ORDA query string uses indexed attributes, it will be indexed + // ORDA クエリ文字列はインデックス付き属性を使用するので、インデックスがつけられます $parameters.push(Current date) return {query: $myQuery; parameters: $parameters} ``` -- For the *sameDay* attribute, the [`query`](./ordaClasses.md#function-query-attributename) function requires an ORDA query based on formulas and will be sequential: +- *sameDay* 属性に対しては、[`query`](./ordaClasses.md#function-query-attributename) 関数はフォーミュラに基づいたORDA クエリを必要とするため、検索はシーケンシャルに行われます: ```4d Function query sameDay($event : Object) : Text @@ -230,11 +230,11 @@ Function query sameDay($event : Object) : Text End case return ($sameDayValue) ? "eval(This.departureDate = This.arrivalDate)" : "eval(This.departureDate != This.arrivalDate)" - // the ORDA query string uses a formula, it will not be indexed + // ORDA クエリ文字列はフォーミュラを使用するため、インデックスはつけられません ``` -- Using a **scalar** *sameDay* attribute updated when other attributes are "touched" will save time: +- しかし他の属性が"タッチ"されたときに更新される**スカラー値の** *sameDay* 属性を使用することで、時間を節約することができます: ```4d //BookingEntity class @@ -250,7 +250,7 @@ Function event touched arrivalDate($event : Object) ``` -#### Example 3 (diagram): Client/server with the `local` keyword: +#### 例題 3 (図): `local` キーワードを用いたクライアント/サーバー: ```mermaid @@ -261,15 +261,15 @@ sequenceDiagram Client->>+Client: $people.lastname:="Brown" Note over Client: local Function event touched lastname($event : Object)
    This.lastname:=Uppercase(This.lastname) -Note over Client:$people.lastname is uppercased +Note over Client:$people.lastname は大文字に変換されます Client->>+Server: $people.apply() - Note over Server: The $people entity is received with the lastname attribute uppercased + Note over Server: $people エンティティは lastname 属性が大文字に変換された状態で受信されます ``` -#### Example 4 (diagram): Client/server without the `local` keyword +#### 例題 4 (図): `local` キーワードを用いないクライアント/サーバー ```mermaid @@ -279,37 +279,36 @@ sequenceDiagram Client->>+Client: $people.lastname:="Brown" - Note over Client:$people.lastname is not uppercased + Note over Client:$people.lastname は大文字に変換されません Client->>+Server: $people.apply() Note over Server: Function event touched lastname($event : Object)
    This.lastname:=Uppercase(This.lastname) - Server-->>-Client: The $people entity is updated - - Note over Client:$people.lastname is uppercased + Server-->>-Client: $people エンティティが更新されます + Note over Client:$people.lastname は大文字に変換されます。 ``` -#### Example 5 (diagram): Qodly application +#### 例題 5 (図): Qodly アプリケーション ```mermaid sequenceDiagram -Qodly page->>+ Server: Get an entity into the People Qodly source +Qodly page->>+ Server: エンティティをPeople Qodlyソースへと受け取る -Qodly page->>+Qodly page: The user updates People.lastname +Qodly page->>+Qodly page: ユーザーが People.lastname を更新する -Note over Qodly page: The People Qodly source lastname attribute is not uppercased +Note over Qodly page: People Qodly ソースの lastname 属性は大文字に変換されていません Qodly page->>+ Server: Function call People.apply() Note over Server: Function event touched lastname($event : Object)
    This.lastname:=Uppercase(This.lastname) -Server-->>-Qodly page: The People Qodly source is updated -Note over Qodly page: The People Qodly source lastname attribute is uppercased +Server-->>-Qodly page: People Qodly ソースが更新されます +Note over Qodly page: People Qodly ソースの lastname 属性が大文字に変換されます ``` @@ -321,47 +320,47 @@ Note over Qodly page: The People Qodly source lastname attribute is uppercased ```4d Function event validateSave($event : Object) Function event validateSave ($event : Object) -// code +// コード ``` -This event is triggered each time an entity is about to be saved. +このイベントは、エンティティが保存されようとするたびに毎回トリガーされます。 -- if you defined the function at the entity level (first syntax), it is called for any attribute of the entity. -- if you defined the function at the attribute level (second syntax), it is called only for this attribute. This function is **not** executed if the attribute has not been touched in the entity. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 この関数は、エンティティ内の指定した属性がタッチされていない場合には、実行**されません**。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -This event is triggered by the following functions: +このイベントは、以下の関数によってトリガーされます: - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) -This event is triggered **before** the entity is actually saved and lets you check data consistency so that you can stop the action if needed. For example, you can check in this event that "departure date" < "arrival date". +このイベントは、エンティティが実際に保存される **前に** トリガーされるため、データの一貫性をチェックし、必要であればアクションを停止することができます。 例えば、このイベントを使用して、 "出発日" < "到着日" であることをチェックすることができます。 -To stop the action, the code of the function must return an [error object](#error-object). +アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 :::note -It is not recommended to update the entity within this function (using `This`). +この関数内において(`This` を使用して)エンティティを更新することは推奨されません。 ::: #### 例題 -In this example, it is not allowed to save a product with a margin lower than 50%. In case of an invalid price attribute, you return an error object and thus, stop the save action. +この例では、マージンが50% 未満の製品を保存することは許可されていません。 無効な price 属性の場合、エラーオブジェクトを換えし、保存アクションを停止します。 ```4d // ProductsEntity class // -// validateSave event at attribute level +// 属性レベルの validateSave イベント Function event validateSave margin($event : Object) : Object var $result : Object -//The user can't create a product whose margin is < 50% +// ユーザーは margin が50% 未満の製品を作成することはできません If (This.margin<50) - $result:={errCode: 1; message: "The validation of this product failed"; \ - extraDescription: {info: "The margin of this product ("+String(This.margin)+") is lower than 50%"}; seriousError: False} + $result:={errCode: 1; message: "製品の検証に失敗しました"; \ + extraDescription: {info: "この製品のマージンの ("+String(This.margin)+") が 50%" 未満になっています}; seriousError: False} End if return $result @@ -374,17 +373,17 @@ return $result ```4d Function event saving($event : Object) Function event saving ($event : Object) -// code +// コード ``` -This event is triggered each time an entity is being saved. +このイベントはエンティティが保存されるたびにトリガーされます。 -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. The function is executed even if no attribute has been touched in the entity (e.g. in case of sending data to an external app each time a save is done). -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. The function is **not** executed if the attribute has not been touched in the entity. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 この関数はエンティティ内でどの属性もタッチされていない場合でも実行されます(例: 保存されるたびに外部アプリへとデータを送信する場合など)。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 この関数は、エンティティ内の指定した属性がタッチされていない場合には、実行**されません**。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -This event is triggered by the following functions: +このイベントは、以下の関数によってトリガーされます: - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) @@ -399,7 +398,7 @@ The business logic should raise errors which can't be detected during the `valid During the save action, 4D engine errors can be raised (index, stamp has changed, not enough space on disk). -To stop the action, the code of the function must return an [error object](#error-object). +アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 @@ -455,7 +454,7 @@ This event is triggered just after an entity is saved in the data file, when at This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. For example, it can be used to send a confirmation email after data have been saved. Or, in case of error while saving data, it can make a rollback to restore a consistent state of data. -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 - To avoid infinite loops, calling a [`save()`](../API/EntityClass.md#save) on the current entity (through `This`) in this function is **not allowed**. It will raise an error. - Throwing an [error object](#error-object) is **not supported** by this function. @@ -493,10 +492,10 @@ Function event validateDrop ($event : Object) This event is triggered each time an entity is about to be dropped. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 This event is triggered by the following features: @@ -506,7 +505,7 @@ This event is triggered by the following features: This event is triggered **before** the entity is actually dropped, allowing you to check data consistency and if necessary, to stop the drop action. -To stop the action, the code of the function must return an [error object](#error-object). +アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 @@ -540,10 +539,10 @@ Function event dropping ($event : Object) This event is triggered each time an entity is being dropped. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 This event is triggered by the following features: @@ -559,7 +558,7 @@ The business logic should raise errors which cannot be detected during the `vali ::: -To stop the action, the code of the function must return an [error object](#error-object). +アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 @@ -601,7 +600,7 @@ This event is triggered just after an entity is dropped. This event is useful after dropping data to propagate the drop action outside the application or to execute administration tasks. For example, it can be used to send a cancellation email after data have been dropped. Or, in case of error while dropping data, it can log an information for the administrator to check data consistency. -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 - To avoid infinite loops, calling a [`drop()`](../API/EntityClass.md#drop) on the current entity (through `This`) in this function is **not allowed**. It will raise an error. - Throwing an [error object](#error-object) is **not supported** by this function. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-rules.md b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-rules.md index 6f6e8aacb4e491..9b152c29bb5728 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-rules.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-rules.md @@ -220,7 +220,7 @@ $return:=WEB Server.start($settings) ``` -:::tip Related blog post +:::tip 関連したblog 記事 [New Way to Control Your HTTP Responses](https://blog.4d.com/new-way-to-control-your-http-responses/) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md index aec14fa9fb346b..a6ab2ad0e930de 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -12,7 +12,7 @@ Webセッションでは、以下のことが可能です: - セッションの [.storage](../API/SessionClass.md#storage) を使用して、Webクライアントのプロセス間でデータを保存および共有。 - セッションを実行しているユーザーに権限を関連付ける。 -:::tip Related blog post +:::tip 関連したblog 記事 [高度な Webアプリケーションに対応したスケーラブルセッション](https://blog.4d.com/ja/scalable-sessions-for-advanced-web-applications/) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md index d094eda7a25d36..0f3cd5d873c008 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md @@ -18,7 +18,7 @@ Webエリアには 2つの特別な変数が自動で割り当てられます: - [`URL`](properties_WebArea.md#url) --Web エリアが表示するURL をコントロールします。 - [`Progression`](properties_WebArea.md#progression) -- Web エリア内に表示されているページのロード率をコントロールします。 -> 4D v19 R5 以降、Progression 変数は、[Windows のシステムレンダリングエンジン](./webArea_overview.md#Webレンダリングエンジン) を使用しているWeb エリアにおいては更新されなくなりました。 +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Webレンダリングエンジン @@ -332,9 +332,11 @@ Webインスペクターを表示させるには、`WA OPEN WEB INSPECTOR` コ } ``` -### 参照 +:::info 関連したblog 記事 -[Specify your own parameters to initialize the embedded web area (blog 記事)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md index f5670319110839..e0488d449e271a 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md @@ -73,7 +73,7 @@ ORDA [`constructor()`](./ordaClasses.md#class-constructor) 関数は必ずクラ | *attributeName* | 属性に関するイベントのみ | 文字列 | 属性名 (*例* "firstname") | | *dataClassName* | 常に | 文字列 | データクラス名 (*例* "Company") | -## Event function description +## イベント関数の詳細 ### `Function event touched` @@ -82,39 +82,39 @@ ORDA [`constructor()`](./ordaClasses.md#class-constructor) 関数は必ずクラ ```4d {local} Function event touched($event : Object) {local} Function event touched ($event : Object) -// code +// コード ``` -This event is triggered each time a value is modified in the entity. +このイベントはエンティティ内の値が編集されるたびにトリガーされます。 - 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性における変更に対してトリガーされます。 - 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対する変更に対してのみトリガーされます。 -This event is triggered as soon as the 4D Server / 4D engine can detect a modification of attribute value which can be due to the following actions: +このイベントは4D Server / 4Dエンジンが属性値の変更を検知するとすぐにトリガーされます。この変更は、以下のようなアクションによって引き起こされます: -- in **client/server with the [`local` keyword](../ORDA/ordaClasses.md#local-functions)** or in **4D single-user**: - - the user sets a value on a 4D form, - - the 4D code makes an assignment with the `:=` operator. The event is also triggered in case of self-assignment (`$entity.attribute:=$entity.attribute`). -- in **client/server without the `local` keyword**: some 4D code that makes an assignment with the `:=` operator is [executed on the server](../commands-legacy/execute-on-server.md). -- **`local` キーワードを使用しないクライアント/サーバー**、**[Qodly アプリケーション](https://developer.qodly.com/docs)** および **[リモートデータストア](../commands/open-datastore.md)**: ORDA 関数(エンティティ上の関数あるいはエンティティを引数として使用する関数)を呼び出した場合にはエンティティは4D Server に受信されます。 It means that you might have to implement a *refresh* or *preview* function on the remote application that sends an ORDA request to the server and triggers the event. -- with the REST server: the value is received on the REST server with a [REST request](../REST/$method.md#methodupdate) (`$method=update`) +- **[`local` キーワード](../ORDA/ordaClasses.md#local関数) を使用したクライアント/サーバー** あるいは **シングルユーザーモードの4D**: + - ユーザーが4D フォーム上で値を設定した + - 4D コードが `:=` 演算子によって代入を行った。 このイベントは自己代入の場合にもトリガーされます(`$entity.attribute:=$entity.attribute`)。 +- **`local` キーワード を使用しないクライアント/サーバー**: `:=` 演算子によって代入を行う一部の4D コードは、[サーバー上で実行されます](../commands-legacy/execute-on-server.md)。 +- **`local` キーワードを使用しないクライアント/サーバー**、**[Qodly アプリケーション](https://developer.qodly.com/docs)** および **[リモートデータストア](../commands/open-datastore.md)**: ORDA 関数(エンティティ上の関数あるいはエンティティを引数として使用する関数)を呼び出した場合にはエンティティは4D Server に受信されます。 これはつまり、リモートアプリケーション側に*refresh* あるいは *preview* 関数を実装することでORDA リクエストをサーバーに送信し、イベントをトリガーするようにする必要があるかもしれない、ということです。 +- REST サーバー: 値は REST サーバーに、[REST リクエスト](../REST/$method.md#methodupdate) (`$method=update`) とともに受信されます。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 このイベントがエラーを[throw](../commands-legacy/throw.md) する場合でも、進行中のアクションは停止しません。 :::note -This event is also triggered: +このイベントは以下の場合にもトリガーされます: -- when attributes are assigned by the [`constructor()`](./ordaClasses.md#class-constructor-1) event, -- when attributes are edited through the [Data Explorer](../Admin/dataExplorer.md). +- 属性の値が [`constructor()`](./ordaClasses.md#class-constructor-1) イベントによって代入された場合 +- 属性の値が [データエクスプローラー](../Admin/dataExplorer.md) を通して編集された場合。 ::: #### 例題 1 -You want to uppercase all text attributes of an entity when it is updated. +エンティティが更新されたときに、エンティティ内のテキスト属性を全て大文字に変換したい場合を考えます。 ```4d //ProductsEntity class @@ -127,11 +127,11 @@ Function event touched($event : Object) #### 例題 2 -The "touched" event is useful when it is not possible to write indexed query code in [`Function query()`](./ordaClasses.md#function-query-attributename) for a [computed attribute](./ordaClasses.md#computed-attributes). +"touched" イベントは、[計算属性](./ordaClasses.md#計算属性)に対して[`Function query()`](./ordaClasses.md#function-query-attributename) 内でインデックスクエリコードを書くことが不可能な場合にとても有用です。 -This is the case for example, when your [`query`](./ordaClasses.md#function-query-attributename) function has to compare the value of different attributes from the same entity with each other. You must use formulas in the returned ORDA query -- which triggers sequential queries. +これは例えば、[`query`](./ordaClasses.md#function-query-attributename) 関数が同じエンティティの異なる属性の値どうしを比較したいような場合です。 これは返されたORDA クエリ内でフォーミュラを使う必要があり、結果としてシーケンシャルクエリをトリガーすることになります。 -To fully understand this case, let's examine the following two calculated attributes: +このような場合を完全に理解するために、以下の2つの計算属性について調べてみましょう: ```4d Function get onGoing() : Boolean @@ -141,9 +141,9 @@ Function get sameDay() : Boolean return (This.departureDate=This.arrivalDate) ``` -Even though they are very similar, these functions cannot be associated with identical queries because they do not compare the same types of values. The first compares attributes to a given value, while the second compares attributes to each other. +たとえ非常に似ていたとしても、これらのクエリは同じ型の値を比較している訳ではないため、これらの関数を同一のクエリと関連づけることはできません。 前者は属性を与えられた値と比較する一方、後者は属性どうしを比較します。 -- For the *onGoing* attribute, the [`query`](./ordaClasses.md#function-query-attributename) function is simple to write and uses indexed attributes: +- *onGoing* 属性に対しては、[`query`](./ordaClasses.md#function-query-attributename) 関数をシンプルに書くことができ、またインデックス付きの属性を使用します: ```4d Function query onGoing($event : Object) : Object @@ -164,12 +164,12 @@ Function query onGoing($event : Object) : Object End case $myQuery:=($onGoingValue) ? "departureDate <= :1 AND arrivalDate >= :1" : "departureDate > :1 OR arrivalDate < :1" - // the ORDA query string uses indexed attributes, it will be indexed + // ORDA クエリ文字列はインデックス付き属性を使用するので、インデックスがつけられます $parameters.push(Current date) return {query: $myQuery; parameters: $parameters} ``` -- For the *sameDay* attribute, the [`query`](./ordaClasses.md#function-query-attributename) function requires an ORDA query based on formulas and will be sequential: +- *sameDay* 属性に対しては、[`query`](./ordaClasses.md#function-query-attributename) 関数はフォーミュラに基づいたORDA クエリを必要とするため、検索はシーケンシャルに行われます: ```4d Function query sameDay($event : Object) : Text @@ -187,11 +187,11 @@ Function query sameDay($event : Object) : Text End case return ($sameDayValue) ? "eval(This.departureDate = This.arrivalDate)" : "eval(This.departureDate != This.arrivalDate)" - // the ORDA query string uses a formula, it will not be indexed + // ORDA クエリ文字列はフォーミュラを使用するため、インデックスはつけられません ``` -- Using a **scalar** *sameDay* attribute updated when other attributes are "touched" will save time: +- しかし他の属性が"タッチ"されたときに更新される**スカラー値の** *sameDay* 属性を使用することで、時間を節約することができます: ```4d //BookingEntity class @@ -207,7 +207,7 @@ Function event touched arrivalDate($event : Object) ``` -#### Example 3 (diagram): Client/server with the `local` keyword: +#### 例題 3 (図): `local` キーワードを用いたクライアント/サーバー: ```mermaid @@ -218,15 +218,15 @@ sequenceDiagram Client->>+Client: $people.lastname:="Brown" Note over Client: local Function event touched lastname($event : Object)
    This.lastname:=Uppercase(This.lastname) -Note over Client:$people.lastname is uppercased +Note over Client:$people.lastname は大文字に変換されます Client->>+Server: $people.apply() - Note over Server: The $people entity is received with the lastname attribute uppercased + Note over Server: $people エンティティは lastname 属性が大文字に変換された状態で受信されます ``` -#### Example 4 (diagram): Client/server without the `local` keyword +#### 例題 4 (図): `local` キーワードを用いないクライアント/サーバー ```mermaid @@ -236,37 +236,36 @@ sequenceDiagram Client->>+Client: $people.lastname:="Brown" - Note over Client:$people.lastname is not uppercased + Note over Client:$people.lastname は大文字に変換されません Client->>+Server: $people.apply() Note over Server: Function event touched lastname($event : Object)
    This.lastname:=Uppercase(This.lastname) - Server-->>-Client: The $people entity is updated - - Note over Client:$people.lastname is uppercased + Server-->>-Client: $people エンティティが更新されます + Note over Client:$people.lastname は大文字に変換されます。 ``` -#### Example 5 (diagram): Qodly application +#### 例題 5 (図): Qodly アプリケーション ```mermaid sequenceDiagram -Qodly page->>+ Server: Get an entity into the People Qodly source +Qodly page->>+ Server: エンティティをPeople Qodlyソースへと受け取る -Qodly page->>+Qodly page: The user updates People.lastname +Qodly page->>+Qodly page: ユーザーが People.lastname を更新する -Note over Qodly page: The People Qodly source lastname attribute is not uppercased +Note over Qodly page: People Qodly ソースの lastname 属性は大文字に変換されていません Qodly page->>+ Server: Function call People.apply() Note over Server: Function event touched lastname($event : Object)
    This.lastname:=Uppercase(This.lastname) -Server-->>-Qodly page: The People Qodly source is updated -Note over Qodly page: The People Qodly source lastname attribute is uppercased +Server-->>-Qodly page: People Qodly ソースが更新されます +Note over Qodly page: People Qodly ソースの lastname 属性が大文字に変換されます ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index d2391813312363..8a68b4fdf38b53 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -12,7 +12,7 @@ Webセッションでは、以下のことが可能です: - セッションの [.storage](../API/SessionClass.md#storage) を使用して、Webクライアントのプロセス間でデータを保存および共有。 - セッションを実行しているユーザーに権限を関連付ける。 -:::tip Related blog post +:::tip 関連したblog 記事 [高度な Webアプリケーションに対応したスケーラブルセッション](https://blog.4d.com/ja/scalable-sessions-for-advanced-web-applications/) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md index 740429e4ec9d80..d2fb494d4bbf85 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Desktop/clientServer.md @@ -128,7 +128,7 @@ Note that [privileges](../ORDA/privileges.md) should be set in the session befor Shared sessions are handled through [OTP tokens](../WebServer/sessions.md#session-token-otp). After you created an OTP token on the server for the user session, you add the token (through the `$4DSID` parameter value) to web requests sent from web areas containing Qodly pages so that the user session on the server is identified and shared. On the web server side, if a web request contains an *OTP id* in the $4DSID parameter, the session corresponding to this OTP token is used. -:::tip Related blog post +:::tip 関連したblog 記事 [Share your 4D remote client session with web accesses](https://blog.4d.com/share-your-4d-remote-client-session-with-web-accesses) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md index d460a48eb79567..c439e23e779f13 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md @@ -118,7 +118,7 @@ This feature can only be used on Windows. On macOS, it is ignored. ::: -:::tip Related blog post +:::tip 関連したblog 記事 [Modernize your 4D interfaces with Fluent UI](https://blog.4d.com/modernize-your-4d-interfaces-with-fluent-ui) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md index 8ca42d96925e4b..8f1612257d310e 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md @@ -24,7 +24,7 @@ Webエリアには 2つの特別な変数が自動で割り当てられます: - [`URL`](properties_WebArea.md#url) --Web エリアが表示するURL をコントロールします。 - [`Progression`](properties_WebArea.md#progression) -- Web エリア内に表示されているページのロード率をコントロールします。 -> 4D v19 R5 以降、Progression 変数は、[Windows のシステムレンダリングエンジン](./webArea_overview.md#Webレンダリングエンジン) を使用しているWeb エリアにおいては更新されなくなりました。 +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Webレンダリングエンジン @@ -338,9 +338,11 @@ Webインスペクターを表示させるには、`WA OPEN WEB INSPECTOR` コ } ``` -### 参照 +:::info 関連したblog 記事 -[Specify your own parameters to initialize the embedded web area (blog 記事)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index 1dbf369a2ddef6..e0066e085544e8 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -16,7 +16,7 @@ title: エンティティイベント イベント関数の実行は直接トリガーすることはできません。 イベントは、ユーザーアクションや、エンティティまたはその属性に対するコードを通して実行された操作に基づいて、ORDA によって自動的に呼び出されます。 -:::tip Related blog post +:::tip 関連したblog 記事 [ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-database-operations) @@ -110,13 +110,13 @@ ORDA [`constructor()`](./ordaClasses.md#class-constructor) 関数は必ずクラ | seriousError | Boolean | validate イベントでのみ使用されます(以下参照)。
  • `True`: [深刻(予測不能)なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不能なエラー) を作成し、例外をトリガーします。 `dk status serious validation error` ステータスを追加します
  • `False`: creates only a [静か(予測可能) なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー) のみを作成します。 `dk status validation failed` ステータスを追加します
  • | 可能(デフォルトはfalse) | | componentSignature | Text | 常に "DBEV" | × | -- [Serious errors](../Concepts/error-handling.md#predictable-vs-unpredictable-errors) are stacked in the `errors` collection property of the **Result object** returned by the [`save()`](../API/EntityClass.md#save) or [`drop()`](../API/EntityClass.md#drop) functions. -- In case of an error triggered by a **validate** event, the `seriousError` property allows you to choose the level of the error to generate: - - If **true**: a serious error is thrown and should be handled by the [error processing code](../Concepts/error-handling.md#predictable-vs-unpredictable-errors), such as a [try catch](../Concepts/error-handling.md#trycatchend-try). In the result object of the calling function, `status` gets `dk status serious validation error` and `statusText` gets "Serious Validation Error". The error is raised at the end of the event and reach the client requesting the save/drop action (REST client for example). - - If **false** (default): a [silent (predictable) error is generated](../Concepts/error-handling.md#predictable-vs-unpredictable-errors). It does not trigger any exception and is not stacked in the errors returned by the [`Last errors`](../commands/last-errors.md) command. In the result object of the calling function, `status` gets `dk status validation failed` and `statusText` gets "Mild Validation Error". -- In case of an error triggered by a **saving/dropping** event, when an error object is returned, the error is always raised as a serious error whatever the `seriousError` property value. +- [深刻なエラー](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー) は[`save()`](../API/EntityClass.md#save) または [`drop()`](../API/EntityClass.md#drop) 関数から返される **Result オブジェクト** の `errors` コレクションプロパティにスタックされます。 +- **validate** イベントによってトリガーされたエラーの場合、 `seriousError` プロパティを使用することで生成するエラーのレベルを選択することができます: + - **true** の場合: 深刻なエラーが生成され、[try catch](../Concepts/error-handling.md#trycatchend-try)などの[エラー処理コード](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー) によって管理される必要があります。 呼び出した関数のresult オブジェクトでは、`status` には `dk status serious validation error` が入り、 `statusText` には "Serious Validation Error" が入ります。 エラーはイベントの終わりに生成され、保存/ドロップアクションをリクエストしているクライアント(例えばREST クライアントなど)に届きます。 + - **false** (デフォルト)の場合: [静か(予測可能) なエラーが生成されます](../Concepts/error-handling.md#予測可能なエラーvs予測不可なエラー)。 これは例外はトリガーせず、また[`Last errors`](../commands/last-errors.md) コマンドから返されるエラーの中にはスタックされません。 呼び出した関数のresult オブジェクトでは、`status` には `dk status validation failed` が入り、 `statusText` には "Mild Validation Error" が入ります。 +- **保存時/ドロップ時** のイベントによってトリガーされたエラーの場合、エラーオブジェクトが返されると、 `seriousError` プロパティの値に関わらず、エラーは常に深刻なエラーとして生成されます。 -## Event function description +## イベント関数の詳細 ### `Function event touched` @@ -125,39 +125,39 @@ ORDA [`constructor()`](./ordaClasses.md#class-constructor) 関数は必ずクラ ```4d {local} Function event touched($event : Object) {local} Function event touched ($event : Object) -// code +// コード ``` -This event is triggered each time a value is modified in the entity. +このイベントはエンティティ内の値が編集されるたびにトリガーされます。 -- If you defined the function at the entity level (first syntax), it is triggered for modifications on any attribute of the entity. -- If you defined the function at the attribute level (second syntax), it is triggered only for modifications on this attribute. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性における変更に対してトリガーされます。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対する変更に対してのみトリガーされます。 -This event is triggered as soon as the 4D Server / 4D engine can detect a modification of attribute value which can be due to the following actions: +このイベントは4D Server / 4Dエンジンが属性値の変更を検知するとすぐにトリガーされます。この変更は、以下のようなアクションによって引き起こされます: -- in **client/server with the [`local` keyword](../ORDA/ordaClasses.md#local-functions)** or in **4D single-user**: - - the user sets a value on a 4D form, - - the 4D code makes an assignment with the `:=` operator. The event is also triggered in case of self-assignment (`$entity.attribute:=$entity.attribute`). -- in **client/server without the `local` keyword**: some 4D code that makes an assignment with the `:=` operator is [executed on the server](../commands-legacy/execute-on-server.md). -- **`local` キーワードを使用しないクライアント/サーバー**、**[Qodly アプリケーション](https://developer.4d.com/qodly)** および **[リモートデータストア](../commands/open-datastore.md)**: ORDA 関数(エンティティ上の関数あるいはエンティティを引数として使用する関数)を呼び出した場合にはエンティティは4D Server 受信されます。 It means that you might have to implement a *refresh* or *preview* function on the remote application that sends an ORDA request to the server and triggers the event. -- with the REST server: the value is received on the REST server with a [REST request](../REST/$method.md#methodupdate) (`$method=update`) +- **[`local` キーワード](../ORDA/ordaClasses.md#local関数) を使用したクライアント/サーバー** あるいは **シングルユーザーモードの4D**: + - ユーザーが4D フォーム上で値を設定した + - 4D コードが `:=` 演算子によって代入を行った。 このイベントは自己代入の場合にもトリガーされます(`$entity.attribute:=$entity.attribute`)。 +- **`local` キーワード を使用しないクライアント/サーバー**: `:=` 演算子によって代入を行う一部の4D コードは、[サーバー上で実行されます](../commands-legacy/execute-on-server.md)。 +- **`local` キーワードを使用しないクライアント/サーバー**、**[Qodly アプリケーション](https://developer.4d.com/qodly)** および **[リモートデータストア](../commands/open-datastore.md)**: ORDA 関数(エンティティ上の関数あるいはエンティティを引数として使用する関数)を呼び出した場合にはエンティティは4D Server 受信されます。 これはつまり、リモートアプリケーション側に*refresh* あるいは *preview* 関数を実装することでORDA リクエストをサーバーに送信し、イベントをトリガーするようにする必要があるかもしれない、ということです。 +- REST サーバー: 値は REST サーバーに、[REST リクエスト](../REST/$method.md#methodupdate) (`$method=update`) とともに受信されます。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -If this function [throws](../commands/throw) an error, it will not stop the undergoing action. +この関数がエラーを[throw](../commands/throw) する場合でも、進行中のアクションは停止しません。 :::note -This event is also triggered: +このイベントは以下の場合にもトリガーされます: -- when attributes are assigned by the [`constructor()`](./ordaClasses.md#class-constructor-1) event, -- when attributes are edited through the [Data Explorer](../Admin/dataExplorer.md). +- 属性の値が [`constructor()`](./ordaClasses.md#class-constructor-1) イベントによって代入された場合 +- 属性の値が [データエクスプローラー](../Admin/dataExplorer.md) を通して編集された場合。 ::: #### 例題 1 -You want to uppercase all text attributes of an entity when it is updated. +エンティティが更新されたときに、エンティティ内のテキスト属性を全て大文字に変換したい場合を考えます。 ```4d //ProductsEntity class @@ -170,11 +170,11 @@ Function event touched($event : Object) #### 例題 2 -The "touched" event is useful when it is not possible to write indexed query code in [`Function query()`](./ordaClasses.md#function-query-attributename) for a [computed attribute](./ordaClasses.md#computed-attributes). +"touched" イベントは、[計算属性](./ordaClasses.md#計算属性)に対して[`Function query()`](./ordaClasses.md#function-query-attributename) 内でインデックスクエリコードを書くことが不可能な場合にとても有用です。 -This is the case for example, when your [`query`](./ordaClasses.md#function-query-attributename) function has to compare the value of different attributes from the same entity with each other. You must use formulas in the returned ORDA query -- which triggers sequential queries. +これは例えば、[`query`](./ordaClasses.md#function-query-attributename) 関数が同じエンティティの異なる属性の値どうしを比較したいような場合です。 これは返されたORDA クエリ内でフォーミュラを使う必要があり、結果としてシーケンシャルクエリをトリガーすることになります。 -To fully understand this case, let's examine the following two calculated attributes: +このような場合を完全に理解するために、以下の2つの計算属性について調べてみましょう: ```4d Function get onGoing() : Boolean @@ -184,9 +184,9 @@ Function get sameDay() : Boolean return (This.departureDate=This.arrivalDate) ``` -Even though they are very similar, these functions cannot be associated with identical queries because they do not compare the same types of values. The first compares attributes to a given value, while the second compares attributes to each other. +たとえ非常に似ていたとしても、これらのクエリは同じ型の値を比較している訳ではないため、これらの関数を同一のクエリと関連づけることはできません。 前者は属性を与えられた値と比較する一方、後者は属性どうしを比較します。 -- For the *onGoing* attribute, the [`query`](./ordaClasses.md#function-query-attributename) function is simple to write and uses indexed attributes: +- *onGoing* 属性に対しては、[`query`](./ordaClasses.md#function-query-attributename) 関数をシンプルに書くことができ、またインデックス付きの属性を使用します: ```4d Function query onGoing($event : Object) : Object @@ -207,12 +207,12 @@ Function query onGoing($event : Object) : Object End case $myQuery:=($onGoingValue) ? "departureDate <= :1 AND arrivalDate >= :1" : "departureDate > :1 OR arrivalDate < :1" - // the ORDA query string uses indexed attributes, it will be indexed + // ORDA クエリ文字列はインデックス付き属性を使用するので、インデックスがつけられます $parameters.push(Current date) return {query: $myQuery; parameters: $parameters} ``` -- For the *sameDay* attribute, the [`query`](./ordaClasses.md#function-query-attributename) function requires an ORDA query based on formulas and will be sequential: +- *sameDay* 属性に対しては、[`query`](./ordaClasses.md#function-query-attributename) 関数はフォーミュラに基づいたORDA クエリを必要とするため、検索はシーケンシャルに行われます: ```4d Function query sameDay($event : Object) : Text @@ -230,11 +230,11 @@ Function query sameDay($event : Object) : Text End case return ($sameDayValue) ? "eval(This.departureDate = This.arrivalDate)" : "eval(This.departureDate != This.arrivalDate)" - // the ORDA query string uses a formula, it will not be indexed + // ORDA クエリ文字列はフォーミュラを使用するため、インデックスはつけられません ``` -- Using a **scalar** *sameDay* attribute updated when other attributes are "touched" will save time: +- しかし他の属性が"タッチ"されたときに更新される**スカラー値の** *sameDay* 属性を使用することで、時間を節約することができます: ```4d //BookingEntity class @@ -250,7 +250,7 @@ Function event touched arrivalDate($event : Object) ``` -#### Example 3 (diagram): Client/server with the `local` keyword: +#### 例題 3 (図): `local` キーワードを用いたクライアント/サーバー: ```mermaid @@ -261,15 +261,15 @@ sequenceDiagram Client->>+Client: $people.lastname:="Brown" Note over Client: local Function event touched lastname($event : Object)
    This.lastname:=Uppercase(This.lastname) -Note over Client:$people.lastname is uppercased +Note over Client:$people.lastname は大文字に変換されます Client->>+Server: $people.apply() - Note over Server: The $people entity is received with the lastname attribute uppercased + Note over Server: $people エンティティは lastname 属性が大文字に変換された状態で受信されます ``` -#### Example 4 (diagram): Client/server without the `local` keyword +#### 例題 4 (図): `local` キーワードを用いないクライアント/サーバー ```mermaid @@ -279,37 +279,36 @@ sequenceDiagram Client->>+Client: $people.lastname:="Brown" - Note over Client:$people.lastname is not uppercased + Note over Client:$people.lastname は大文字に変換されません Client->>+Server: $people.apply() Note over Server: Function event touched lastname($event : Object)
    This.lastname:=Uppercase(This.lastname) - Server-->>-Client: The $people entity is updated - - Note over Client:$people.lastname is uppercased + Server-->>-Client: $people エンティティが更新されます + Note over Client:$people.lastname は大文字に変換されます。 ``` -#### Example 5 (diagram): Qodly application +#### 例題 5 (図): Qodly アプリケーション ```mermaid sequenceDiagram -Qodly page->>+ Server: Get an entity into the People Qodly source +Qodly page->>+ Server: エンティティをPeople Qodlyソースへと受け取る -Qodly page->>+Qodly page: The user updates People.lastname +Qodly page->>+Qodly page: ユーザーが People.lastname を更新する -Note over Qodly page: The People Qodly source lastname attribute is not uppercased +Note over Qodly page: People Qodly ソースの lastname 属性は大文字に変換されていません Qodly page->>+ Server: Function call People.apply() Note over Server: Function event touched lastname($event : Object)
    This.lastname:=Uppercase(This.lastname) -Server-->>-Qodly page: The People Qodly source is updated -Note over Qodly page: The People Qodly source lastname attribute is uppercased +Server-->>-Qodly page: People Qodly ソースが更新されます +Note over Qodly page: People Qodly ソースの lastname 属性が大文字に変換されます ``` @@ -321,47 +320,47 @@ Note over Qodly page: The People Qodly source lastname attribute is uppercased ```4d Function event validateSave($event : Object) Function event validateSave ($event : Object) -// code +// コード ``` -This event is triggered each time an entity is about to be saved. +このイベントは、エンティティが保存されようとするたびに毎回トリガーされます。 -- if you defined the function at the entity level (first syntax), it is called for any attribute of the entity. -- if you defined the function at the attribute level (second syntax), it is called only for this attribute. This function is **not** executed if the attribute has not been touched in the entity. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 この関数は、エンティティ内の指定した属性がタッチされていない場合には、実行**されません**。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -This event is triggered by the following functions: +このイベントは、以下の関数によってトリガーされます: - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) -This event is triggered **before** the entity is actually saved and lets you check data consistency so that you can stop the action if needed. For example, you can check in this event that "departure date" < "arrival date". +このイベントは、エンティティが実際に保存される **前に** トリガーされるため、データの一貫性をチェックし、必要であればアクションを停止することができます。 例えば、このイベントを使用して、 "出発日" < "到着日" であることをチェックすることができます。 -To stop the action, the code of the function must return an [error object](#error-object). +アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 :::note -It is not recommended to update the entity within this function (using `This`). +この関数内において(`This` を使用して)エンティティを更新することは推奨されません。 ::: #### 例題 -In this example, it is not allowed to save a product with a margin lower than 50%. In case of an invalid price attribute, you return an error object and thus, stop the save action. +この例では、マージンが50% 未満の製品を保存することは許可されていません。 無効な price 属性の場合、エラーオブジェクトを換えし、保存アクションを停止します。 ```4d // ProductsEntity class // -// validateSave event at attribute level +// 属性レベルの validateSave イベント Function event validateSave margin($event : Object) : Object var $result : Object -//The user can't create a product whose margin is < 50% +// ユーザーは margin が50% 未満の製品を作成することはできません If (This.margin<50) - $result:={errCode: 1; message: "The validation of this product failed"; \ - extraDescription: {info: "The margin of this product ("+String(This.margin)+") is lower than 50%"}; seriousError: False} + $result:={errCode: 1; message: "製品の検証に失敗しました"; \ + extraDescription: {info: "この製品のマージンの ("+String(This.margin)+") が 50%" 未満になっています}; seriousError: False} End if return $result @@ -374,17 +373,17 @@ return $result ```4d Function event saving($event : Object) Function event saving ($event : Object) -// code +// コード ``` -This event is triggered each time an entity is being saved. +このイベントはエンティティが保存されるたびにトリガーされます。 -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. The function is executed even if no attribute has been touched in the entity (e.g. in case of sending data to an external app each time a save is done). -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. The function is **not** executed if the attribute has not been touched in the entity. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 この関数はエンティティ内でどの属性もタッチされていない場合でも実行されます(例: 保存されるたびに外部アプリへとデータを送信する場合など)。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 この関数は、エンティティ内の指定した属性がタッチされていない場合には、実行**されません**。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -This event is triggered by the following functions: +このイベントは、以下の関数によってトリガーされます: - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) @@ -399,7 +398,7 @@ The business logic should raise errors which can't be detected during the `valid During the save action, 4D engine errors can be raised (index, stamp has changed, not enough space on disk). -To stop the action, the code of the function must return an [error object](#error-object). +アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 @@ -455,7 +454,7 @@ This event is triggered just after an entity is saved in the data file, when at This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. For example, it can be used to send a confirmation email after data have been saved. Or, in case of error while saving data, it can make a rollback to restore a consistent state of data. -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 - To avoid infinite loops, calling a [`save()`](../API/EntityClass.md#save) on the current entity (through `This`) in this function is **not allowed**. It will raise an error. - Throwing an [error object](#error-object) is **not supported** by this function. @@ -493,10 +492,10 @@ Function event validateDrop ($event : Object) This event is triggered each time an entity is about to be dropped. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 This event is triggered by the following features: @@ -506,7 +505,7 @@ This event is triggered by the following features: This event is triggered **before** the entity is actually dropped, allowing you to check data consistency and if necessary, to stop the drop action. -To stop the action, the code of the function must return an [error object](#error-object). +アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 @@ -540,10 +539,10 @@ Function event dropping ($event : Object) This event is triggered each time an entity is being dropped. -- If you defined the function at the entity level (first syntax), it is called for any attribute of the entity. -- If you defined the function at the attribute level (second syntax), it is called only for this attribute. +- 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 +- 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 This event is triggered by the following features: @@ -559,7 +558,7 @@ The business logic should raise errors which cannot be detected during the `vali ::: -To stop the action, the code of the function must return an [error object](#error-object). +アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 @@ -601,7 +600,7 @@ This event is triggered just after an entity is dropped. This event is useful after dropping data to propagate the drop action outside the application or to execute administration tasks. For example, it can be used to send a cancellation email after data have been dropped. Or, in case of error while dropping data, it can log an information for the administrator to check data consistency. -The function receives an [*event* object](#event-parameter) as parameter. +関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 - To avoid infinite loops, calling a [`drop()`](../API/EntityClass.md#drop) on the current entity (through `This`) in this function is **not allowed**. It will raise an error. - Throwing an [error object](#error-object) is **not supported** by this function. diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md index 6f6e8aacb4e491..9b152c29bb5728 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md @@ -220,7 +220,7 @@ $return:=WEB Server.start($settings) ``` -:::tip Related blog post +:::tip 関連したblog 記事 [New Way to Control Your HTTP Responses](https://blog.4d.com/new-way-to-control-your-http-responses/) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index aec14fa9fb346b..a6ab2ad0e930de 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -12,7 +12,7 @@ Webセッションでは、以下のことが可能です: - セッションの [.storage](../API/SessionClass.md#storage) を使用して、Webクライアントのプロセス間でデータを保存および共有。 - セッションを実行しているユーザーに権限を関連付ける。 -:::tip Related blog post +:::tip 関連したblog 記事 [高度な Webアプリケーションに対応したスケーラブルセッション](https://blog.4d.com/ja/scalable-sessions-for-advanced-web-applications/) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md b/i18n/pt/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md index cf628197f3b95b..a4de35f798af6b 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md @@ -24,7 +24,7 @@ Duas variáveis específicas podem ser associadas a cada área web: - [`URL`](properties_WebArea.md#url) -- para controlar a URL exibida pela área Web - [`Progression`](properties_WebArea.md#progression) -- para controlar a porcentagem de carregamento da página exibida na área Web. -> A partir do 4D v19 R5, a variável Progression não é mais atualizada em Web Areas usando o [mecanismo de renderização do sistema Windows](./webArea_overview.md#web-rendering-engine). +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Motor de renderização Web @@ -338,9 +338,11 @@ O arquivo 4DCEFParameters.json padrão contém os seguintes botões: } ``` -### Veja também +:::info Related blog post -[Especifique seus próprios parâmetros para inicializar a área Web incorporada (postagem no blog)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md index 00dc4d05967a4d..0ce1ecd44a2251 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md @@ -18,7 +18,7 @@ Duas variáveis específicas podem ser associadas a cada área web: - [`URL`](properties_WebArea.md#url) -- para controlar a URL exibida pela área Web - [`Progression`](properties_WebArea.md#progression) -- para controlar a porcentagem de carregamento da página exibida na área Web. -> A partir do 4D v19 R5, a variável Progression não é mais atualizada em Web Areas usando o [mecanismo de renderização do sistema Windows](./webArea_overview.md#web-rendering-engine). +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Motor de renderização Web @@ -332,9 +332,11 @@ O arquivo 4DCEFParameters.json padrão contém os seguintes botões: } ``` -### Veja também +:::info Related blog post -[Especifique seus próprios parâmetros para inicializar a área Web incorporada (postagem no blog)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md index cf628197f3b95b..a4de35f798af6b 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md @@ -24,7 +24,7 @@ Duas variáveis específicas podem ser associadas a cada área web: - [`URL`](properties_WebArea.md#url) -- para controlar a URL exibida pela área Web - [`Progression`](properties_WebArea.md#progression) -- para controlar a porcentagem de carregamento da página exibida na área Web. -> A partir do 4D v19 R5, a variável Progression não é mais atualizada em Web Areas usando o [mecanismo de renderização do sistema Windows](./webArea_overview.md#web-rendering-engine). +> As of 4D 19 R5, the Progression variable is no longer updated in Web Areas using the [Windows system rendering engine](./webArea_overview.md#web-rendering-engine). ### Motor de renderização Web @@ -338,9 +338,11 @@ O arquivo 4DCEFParameters.json padrão contém os seguintes botões: } ``` -### Veja também +:::info Related blog post -[Especifique seus próprios parâmetros para inicializar a área Web incorporada (postagem no blog)](https://blog.4d.com/specify-your-own-parameters-to-initialize-the-embedded-web-area) +[Custom Parameters for Initializing Embedded Web Area](https://blog.4d.com/custom-parameters-for-initializing-embedded-web-area/) + +::: From ad253c294bd1746d9c519a41bfce1381d3fb5397 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 20 Nov 2025 16:47:49 +0100 Subject: [PATCH 35/75] fix tips --- docs/WebServer/sessions.md | 4 ++-- .../current/WebServer/sessions.md | 4 ++-- .../version-20-R10/WebServer/sessions.md | 2 +- .../version-21/WebServer/sessions.md | 4 ++-- .../current/WebServer/sessions.md | 4 ++-- .../version-20-R10/WebServer/sessions.md | 2 +- .../version-21/WebServer/sessions.md | 4 ++-- .../current/WebServer/sessions.md | 4 ++-- .../version-20-R10/WebServer/sessions.md | 2 +- .../version-21/WebServer/sessions.md | 4 ++-- .../current/WebServer/sessions.md | 4 ++-- .../version-20-R10/WebServer/sessions.md | 2 +- .../version-21/WebServer/sessions.md | 4 ++-- versioned_docs/version-20-R10/WebServer/sessions.md | 2 +- versioned_docs/version-21/WebServer/sessions.md | 4 ++-- 15 files changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/WebServer/sessions.md b/docs/WebServer/sessions.md index d0a2bd033577be..87725a2d4919c6 100644 --- a/docs/WebServer/sessions.md +++ b/docs/WebServer/sessions.md @@ -209,7 +209,7 @@ Else End if ``` -:::tips Related blog posts +:::tip Related blog posts [Scalable sessions for advanced web applications](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) @@ -221,7 +221,7 @@ The 4D web server allows you to generate, share, and use OTP (One-Time Passcode) In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. The callback link includes the OTP token, so that the session which triggered the callback is loaded along with its data and privileges. This principle allows you to share the same session on multiple devices. Thanks to this architecture, the [session cookie](#session-implementation) is not exposed on the network, which eliminates the risk of man-in-the-middle attack. -:::tips Related blog posts +:::tip Related blog posts [Connect Your Web Apps to Third-Party Systems](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md index ae2eec52be1b58..94acf76215ffbc 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips Entradas de blog relacionadas +:::tip Entradas de blog relacionadas [Sesiones escalables para aplicaciones web avanzadas](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) @@ -213,7 +213,7 @@ El servidor web 4D le permite generar, compartir y utilizar tokens de sesión OT In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Normalmente, una aplicación de terceros envía un correo electrónico de confirmación que contiene un enlace de retrollamada en el que el usuario tiene que hacer clic. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. -:::tips Entradas de blog relacionadas +:::tip Entradas de blog relacionadas [Conecte sus aplicaciones web a sistemas de terceros](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index 1c57acedaefb02..cf67617260a18d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips Entradas de blog relacionadas +:::tip Entradas de blog relacionadas [Sesiones escalables para aplicaciones web avanzadas](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index ae2eec52be1b58..94acf76215ffbc 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips Entradas de blog relacionadas +:::tip Entradas de blog relacionadas [Sesiones escalables para aplicaciones web avanzadas](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) @@ -213,7 +213,7 @@ El servidor web 4D le permite generar, compartir y utilizar tokens de sesión OT In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Normalmente, una aplicación de terceros envía un correo electrónico de confirmación que contiene un enlace de retrollamada en el que el usuario tiene que hacer clic. El enlace de retrollamada incluye el token OTP, para que la sesión que activó la retrollamada se cargue junto con sus datos y privilegios. This principle allows you to share the same session on multiple devices. Gracias a esta arquitectura, la [cookie de sesión](#session-implementation) no está expuesta en la red, lo que elimina el riesgo de un ataque de hombre en el medio. -:::tips Entradas de blog relacionadas +:::tip Entradas de blog relacionadas [Conecte sus aplicaciones web a sistemas de terceros](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/sessions.md index 20caa69023fa0f..693d469183f39d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips Articles de blog sur le sujet +:::tip Articles de blog sur le sujet [Sessions évolutives pour applications web avancées](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) @@ -213,7 +213,7 @@ Le serveur web 4D vous permet de générer, de partager et d'utiliser des tokens Dans 4D, les tokens de session OTP sont utiles pour appeler des URL externes et être rappelé dans un autre navigateur ou appareil (mobile/ordinateur). Généralement, une application tierce envoie un courriel de confirmation contenant un lien de rappel sur lequel l'utilisateur doit cliquer. Le lien de rappel inclut le token OTP, de sorte que la session qui a déclenché le rappel est chargée avec ses données et ses privilèges. Ce principe vous permet de partager la même session sur plusieurs appareils. Grâce à cette architecture, le [cookie de session] (#session-implementation) n'est pas exposé sur le réseau, ce qui élimine le risque d'une attaque de type "man-in-the-middle". -:::tips Articles de blog sur le sujet +:::tip Articles de blog sur le sujet [Connectez vos applications Web à des systèmes tiers](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index 4e83fc460e136d..6abebd4d37060d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips Articles de blog sur le sujet +:::tip Articles de blog sur le sujet [Sessions évolutives pour applications web avancées](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index 20caa69023fa0f..693d469183f39d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips Articles de blog sur le sujet +:::tip Articles de blog sur le sujet [Sessions évolutives pour applications web avancées](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) @@ -213,7 +213,7 @@ Le serveur web 4D vous permet de générer, de partager et d'utiliser des tokens Dans 4D, les tokens de session OTP sont utiles pour appeler des URL externes et être rappelé dans un autre navigateur ou appareil (mobile/ordinateur). Généralement, une application tierce envoie un courriel de confirmation contenant un lien de rappel sur lequel l'utilisateur doit cliquer. Le lien de rappel inclut le token OTP, de sorte que la session qui a déclenché le rappel est chargée avec ses données et ses privilèges. Ce principe vous permet de partager la même session sur plusieurs appareils. Grâce à cette architecture, le [cookie de session] (#session-implementation) n'est pas exposé sur le réseau, ce qui élimine le risque d'une attaque de type "man-in-the-middle". -:::tips Articles de blog sur le sujet +:::tip Articles de blog sur le sujet [Connectez vos applications Web à des systèmes tiers](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md index a6ab2ad0e930de..f690ad94acf3e2 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips 関連したblog 記事 +:::tip 関連したblog 記事 [高度な Webアプリケーションに対応したスケーラブルセッション](https://blog.4d.com/ja/scalable-sessions-for-advanced-web-applications/) @@ -213,7 +213,7 @@ End if 4D では、OTP セッショントークンは外部URL を呼び出して、それが他のブラウザや他のデバイス(モバイル/PC) でコールバックされる場合に特に有用です。 通常、こういったサードパーティアプリケーションはコールバックリンクが入った確認メールを送信してきて、ユーザーはこれをクリックする必要があります。 コールバックリンクにはOTP トークンが含まれており、そのコールバックをトリガーしたセッションは、そのデータと権限とともにロードされます。 この原理により、同じセッションを複数のデバイス間で共有することができます。 このアーキテクチャーのおかげで、[セッションクッキー](#session-implementation) はネットワークに公開されることはないため、中間者攻撃のリスクを排除することができます。 -:::tips 関連したblog 記事 +:::tip 関連したblog 記事 [Connect Your Web Apps to Third-Party Systems](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index 8a68b4fdf38b53..f6a0d04e73bd4d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips 関連したblog 記事 +:::tip 関連したblog 記事 [高度な Webアプリケーションに対応したスケーラブルセッション](https://blog.4d.com/ja/scalable-sessions-for-advanced-web-applications/) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index a6ab2ad0e930de..f690ad94acf3e2 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips 関連したblog 記事 +:::tip 関連したblog 記事 [高度な Webアプリケーションに対応したスケーラブルセッション](https://blog.4d.com/ja/scalable-sessions-for-advanced-web-applications/) @@ -213,7 +213,7 @@ End if 4D では、OTP セッショントークンは外部URL を呼び出して、それが他のブラウザや他のデバイス(モバイル/PC) でコールバックされる場合に特に有用です。 通常、こういったサードパーティアプリケーションはコールバックリンクが入った確認メールを送信してきて、ユーザーはこれをクリックする必要があります。 コールバックリンクにはOTP トークンが含まれており、そのコールバックをトリガーしたセッションは、そのデータと権限とともにロードされます。 この原理により、同じセッションを複数のデバイス間で共有することができます。 このアーキテクチャーのおかげで、[セッションクッキー](#session-implementation) はネットワークに公開されることはないため、中間者攻撃のリスクを排除することができます。 -:::tips 関連したblog 記事 +:::tip 関連したblog 記事 [Connect Your Web Apps to Third-Party Systems](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/sessions.md index 1a02e189b920b6..d9801682f90175 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips Related blog posts +:::tip Related blog posts [Scalable sessions for advanced web applications](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) @@ -213,7 +213,7 @@ The 4D web server allows you to generate, share, and use OTP (One-Time Passcode) In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. The callback link includes the OTP token, so that the session which triggered the callback is loaded along with its data and privileges. This principle allows you to share the same session on multiple devices. Graças a esta arquitetura, o [cookie de sessão](#session-implementation) não está exposto na rede, o que elimina o risco de ataque do homem-meio. -:::tips Related blog posts +:::tip Related blog posts [Connect Your Web Apps to Third-Party Systems](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index 1dbedd8c5da236..15f85db4d7ad84 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips Related blog posts +:::tip Related blog posts [Scalable sessions for advanced web applications](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index 1a02e189b920b6..d9801682f90175 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -201,7 +201,7 @@ Else End if ``` -:::tips Related blog posts +:::tip Related blog posts [Scalable sessions for advanced web applications](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) @@ -213,7 +213,7 @@ The 4D web server allows you to generate, share, and use OTP (One-Time Passcode) In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. The callback link includes the OTP token, so that the session which triggered the callback is loaded along with its data and privileges. This principle allows you to share the same session on multiple devices. Graças a esta arquitetura, o [cookie de sessão](#session-implementation) não está exposto na rede, o que elimina o risco de ataque do homem-meio. -:::tips Related blog posts +:::tip Related blog posts [Connect Your Web Apps to Third-Party Systems](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) diff --git a/versioned_docs/version-20-R10/WebServer/sessions.md b/versioned_docs/version-20-R10/WebServer/sessions.md index 1bc9097f9490c2..86026d53cc3691 100644 --- a/versioned_docs/version-20-R10/WebServer/sessions.md +++ b/versioned_docs/version-20-R10/WebServer/sessions.md @@ -209,7 +209,7 @@ Else End if ``` -:::tips Related blog posts +:::tip Related blog posts [Scalable sessions for advanced web applications](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) diff --git a/versioned_docs/version-21/WebServer/sessions.md b/versioned_docs/version-21/WebServer/sessions.md index d0a2bd033577be..87725a2d4919c6 100644 --- a/versioned_docs/version-21/WebServer/sessions.md +++ b/versioned_docs/version-21/WebServer/sessions.md @@ -209,7 +209,7 @@ Else End if ``` -:::tips Related blog posts +:::tip Related blog posts [Scalable sessions for advanced web applications](https://blog.4d.com/scalable-sessions-for-advanced-web-applications/) @@ -221,7 +221,7 @@ The 4D web server allows you to generate, share, and use OTP (One-Time Passcode) In 4D, OTP session tokens are useful when calling external URLs and being called back in another browser or device (mobile/computer). Typically, a third-party application sends a confirmation email containing a callback link on which the user has to click. The callback link includes the OTP token, so that the session which triggered the callback is loaded along with its data and privileges. This principle allows you to share the same session on multiple devices. Thanks to this architecture, the [session cookie](#session-implementation) is not exposed on the network, which eliminates the risk of man-in-the-middle attack. -:::tips Related blog posts +:::tip Related blog posts [Connect Your Web Apps to Third-Party Systems](https://blog.4d.com/connect-your-web-apps-to-third-party-systems/) From 9672172b9d5105e4e8e2e642667d0816eb61146f Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 20 Nov 2025 17:44:46 +0100 Subject: [PATCH 36/75] fix link --- docs/WebServer/sessions.md | 2 +- versioned_docs/version-20-R10/WebServer/sessions.md | 2 +- versioned_docs/version-21/WebServer/sessions.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/WebServer/sessions.md b/docs/WebServer/sessions.md index 87725a2d4919c6..de6ef58170d98c 100644 --- a/docs/WebServer/sessions.md +++ b/docs/WebServer/sessions.md @@ -26,7 +26,7 @@ Web sessions are used for: - calls to the [REST API](../REST/authUsers.md), which are used by [remote datastores](../ORDA/remoteDatastores.md) and [Qodly forms](qodly-studio.md). -## Enabling web sessions +## Enabling web sessions {#enabling-web-sessions} The session management feature can be enabled and disabled on your 4D web server. There are different ways to enable session management: diff --git a/versioned_docs/version-20-R10/WebServer/sessions.md b/versioned_docs/version-20-R10/WebServer/sessions.md index 86026d53cc3691..a8da672b9cecad 100644 --- a/versioned_docs/version-20-R10/WebServer/sessions.md +++ b/versioned_docs/version-20-R10/WebServer/sessions.md @@ -26,7 +26,7 @@ Web sessions are used for: - calls to the [REST API](../REST/authUsers.md), which are used by [remote datastores](../ORDA/remoteDatastores.md) and [Qodly forms](qodly-studio.md). -## Enabling web sessions +## Enabling web sessions {#enabling-web-sessions} The session management feature can be enabled and disabled on your 4D web server. There are different ways to enable session management: diff --git a/versioned_docs/version-21/WebServer/sessions.md b/versioned_docs/version-21/WebServer/sessions.md index 87725a2d4919c6..de6ef58170d98c 100644 --- a/versioned_docs/version-21/WebServer/sessions.md +++ b/versioned_docs/version-21/WebServer/sessions.md @@ -26,7 +26,7 @@ Web sessions are used for: - calls to the [REST API](../REST/authUsers.md), which are used by [remote datastores](../ORDA/remoteDatastores.md) and [Qodly forms](qodly-studio.md). -## Enabling web sessions +## Enabling web sessions {#enabling-web-sessions} The session management feature can be enabled and disabled on your 4D web server. There are different ways to enable session management: From ed47bd6d29bb1e9edbc6ab6751d236e4c8c58dc9 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 20 Nov 2025 18:10:24 +0100 Subject: [PATCH 37/75] Update updates.md --- versioned_docs/version-21/Notes/updates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versioned_docs/version-21/Notes/updates.md b/versioned_docs/version-21/Notes/updates.md index 8448ddca6575b1..6731031f5313d1 100644 --- a/versioned_docs/version-21/Notes/updates.md +++ b/versioned_docs/version-21/Notes/updates.md @@ -42,7 +42,7 @@ Read [**What’s new in 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/), th ::: -- Web services (SOAP): when [scalable sessions](../WebServer/sessions.md#enabling-web-sessions) are enabled, web services now run in [**preemptive processes**](../Develop/preemptive.md) in compiled mode. Make sure your SOAP code is thread-safe. +- Web services (SOAP): when [scalable sessions](../WebServer/sessions.md#enabling-web-sessions) are enabled, web services now run in [**preemptive processes**](../Develop/preemptive.md) in compiled mode. Make sure that your SOAP code is thread-safe and that the session in which it runs has appropriate [privileges](../API/SessionClass.md#setprivileges). - Web server: the support of deprecated `4DSYNC/` and `4DCGI/` URLs is removed. No specific processing is done on these URLs anymore. - Web user sessions are now returned by [`Process activity`](../commands/process-activity.md). - The [`HIGHLIGHT TEXT`](../commands/highlight-text) command is now supported in the context of subforms. From dc0fb201880f2dc7864e9705e80553f88880a98e Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 20 Nov 2025 18:26:33 +0100 Subject: [PATCH 38/75] Feature/aikit file upload (#3003) * update to file uplaod API * after closure * Update overview.md --- docs/Notes/updates.md | 2 + docs/aikit/Classes/OpenAI.md | 3 + docs/aikit/Classes/OpenAIFile.md | 29 +++ docs/aikit/Classes/OpenAIFileDeletedResult.md | 38 ++++ .../aikit/Classes/OpenAIFileListParameters.md | 38 ++++ docs/aikit/Classes/OpenAIFileListResult.md | 67 +++++++ docs/aikit/Classes/OpenAIFileParameters.md | 43 +++++ docs/aikit/Classes/OpenAIFileResult.md | 36 ++++ docs/aikit/Classes/OpenAIFilesAPI.md | 179 ++++++++++++++++++ docs/aikit/Classes/OpenAIMessage.md | 44 ++++- docs/aikit/overview.md | 37 ++++ sidebars.js | 7 + 12 files changed, 520 insertions(+), 3 deletions(-) create mode 100644 docs/aikit/Classes/OpenAIFile.md create mode 100644 docs/aikit/Classes/OpenAIFileDeletedResult.md create mode 100644 docs/aikit/Classes/OpenAIFileListParameters.md create mode 100644 docs/aikit/Classes/OpenAIFileListResult.md create mode 100644 docs/aikit/Classes/OpenAIFileParameters.md create mode 100644 docs/aikit/Classes/OpenAIFileResult.md create mode 100644 docs/aikit/Classes/OpenAIFilesAPI.md diff --git a/docs/Notes/updates.md b/docs/Notes/updates.md index b06a597a3b4f0e..4ee055986374c1 100644 --- a/docs/Notes/updates.md +++ b/docs/Notes/updates.md @@ -10,6 +10,8 @@ Read [**What’s new in 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2 #### Highlights - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). +- 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. + - [**Fixed bug list**](https://bugs.4d.fr/fixedbugslist?version=21_R2): list of all bugs that have been fixed in 4D 21 R2. diff --git a/docs/aikit/Classes/OpenAI.md b/docs/aikit/Classes/OpenAI.md index 8e88ba360ad3cd..7b38b5d3d0ef94 100644 --- a/docs/aikit/Classes/OpenAI.md +++ b/docs/aikit/Classes/OpenAI.md @@ -67,11 +67,14 @@ The API provides access to multiple resources that allow seamless interaction wi | `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | Access to the Images API. | | `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | Access to the Moderations API. | | `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | Access to the Embeddings API. | +| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Access to the Files API. | + ### Example Usage ```4d $client.chat.completions.create(...) $client.images.generate(...) +$client.files.create(...) $client.model.lists(...) ``` diff --git a/docs/aikit/Classes/OpenAIFile.md b/docs/aikit/Classes/OpenAIFile.md new file mode 100644 index 00000000000000..cd5bd659123ffa --- /dev/null +++ b/docs/aikit/Classes/OpenAIFile.md @@ -0,0 +1,29 @@ +--- +id: openaifile +title: OpenAIFile +--- + +# OpenAIFile + +The `OpenAIFile` class represents a file object in the OpenAI API. Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. + +## Properties + +| Property Name | Type | Description | +|------------------|----------|------------------------------------------------------------------| +| `id` | Text | The file identifier, which can be referenced in the API endpoints. | +| `bytes` | Integer | The size of the file, in bytes. | +| `created_at` | Integer | The Unix timestamp (in seconds) for when the file was created. | +| `expires_at` | Integer | The Unix timestamp (in seconds) for when the file will expire. | +| `filename` | Text | The name of the file. | +| `object` | Text | The object type, which is always "file". | +| `purpose` | Text | The intended purpose of the file. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | +| `status` | Text | **Deprecated.** The current status of the file, which can be either `uploaded`, `processed`, or `error`. | +| `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | + +## See also + +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) diff --git a/docs/aikit/Classes/OpenAIFileDeletedResult.md b/docs/aikit/Classes/OpenAIFileDeletedResult.md new file mode 100644 index 00000000000000..fc2f892cf4f05f --- /dev/null +++ b/docs/aikit/Classes/OpenAIFileDeletedResult.md @@ -0,0 +1,38 @@ +--- +id: openaifiledeletedresult +title: OpenAIFileDeletedResult +--- + +# OpenAIFileDeletedResult + +The `OpenAIFileDeletedResult` class contains the result of a file deletion operation. + +## Inherits + +[OpenAIResult](OpenAIResult.md) + +## Computed properties + +| Property | Type | Description | +|-----------|---------------------|-----------------------------------------------------------------------------| +| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Returns the file deletion result from the API response. Returns `Null` if the response doesn't contain a valid result. | + +## Example Usage + +```4d +// Delete a file +var $fileId:="file-abc123" +var $result:=$client.files.delete($fileId; Null) +var $deletionStatus:=$result.deleted + +If ($deletionStatus.deleted) + ALERT("File "+$deletionStatus.id+" was successfully deleted") +Else + ALERT("Failed to delete file") +End if +``` + +## See also + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileDeleted](OpenAIFileDeleted.md) diff --git a/docs/aikit/Classes/OpenAIFileListParameters.md b/docs/aikit/Classes/OpenAIFileListParameters.md new file mode 100644 index 00000000000000..69170cbe169eb1 --- /dev/null +++ b/docs/aikit/Classes/OpenAIFileListParameters.md @@ -0,0 +1,38 @@ +--- +id: openaifilelistparameters +title: OpenAIFileListParameters +--- + +# OpenAIFileListParameters + +The `OpenAIFileListParameters` class contains parameters for listing files in the OpenAI API. + +## Inherits + +[OpenAIParameters](OpenAIParameters.md) + +## Properties + +| Property Name | Type | Required | Default | Description | +|---------------|---------|----------|---------|---------------------------------------------------------------------| +| `after` | Text | Optional | - | A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `after=obj_foo` in order to fetch the next page of the list. | +| `limit` | Integer | Optional | 10000 | A limit on the number of objects to be returned. Limit can range between 1 and 10,000, and the default is 10,000. | +| `order` | Text | Optional | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | +| `purpose` | Text | Optional | - | Only return files with the given purpose. | + +## Example Usage + +```4d +// Get first 100 files with purpose "fine-tune" +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 +$params.purpose:="fine-tune" +$params.order:="desc" + +var $result:=$client.files.list($params) +``` + +## See also + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) diff --git a/docs/aikit/Classes/OpenAIFileListResult.md b/docs/aikit/Classes/OpenAIFileListResult.md new file mode 100644 index 00000000000000..a2d3bb6c67b740 --- /dev/null +++ b/docs/aikit/Classes/OpenAIFileListResult.md @@ -0,0 +1,67 @@ +--- +id: openaifilelistresult +title: OpenAIFileListResult +--- + +# OpenAIFileListResult + +The `OpenAIFileListResult` class contains the result of listing files from the OpenAI API. + +## Inherits + +[OpenAIResult](OpenAIResult.md) + +## Computed properties + +| Property | Type | Description | +|------------|------------|-----------------------------------------------------------------------------| +| `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | +| `first_id` | Text | Returns the ID of the first file in the list, or an empty string if not available. | +| `last_id` | Text | Returns the ID of the last file in the list, or an empty string if not available. | +| `has_more` | Boolean | Indicates if there are more files beyond this page. `True` if there are more files to fetch, `False` otherwise. | + + +## Example Usage + +### Basic Usage + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 + +var $result:=$client.files.list($params) +var $files:=$result.files + +For each ($file; $files) + // Process each OpenAIFile object + // $file.filename -> "salesOverview.pdf" + // $file.bytes -> 175 + // $file.purpose -> "assistants" +End for each +``` + +### Pagination Example + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 + +var $result:=$client.files.list($params) +var $allFiles:=$allFiles.combine($result.files) + +// Continue fetching if there are more files +While ($result.has_more) + $params.after:=$result.last_id + $result:=$client.files.list($params) + $allFiles:=$allFiles.combine($result.files) +End while + +// $allFiles now contains all files from the organization +``` + +## See also + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) \ No newline at end of file diff --git a/docs/aikit/Classes/OpenAIFileParameters.md b/docs/aikit/Classes/OpenAIFileParameters.md new file mode 100644 index 00000000000000..ad3106fbbbb62c --- /dev/null +++ b/docs/aikit/Classes/OpenAIFileParameters.md @@ -0,0 +1,43 @@ +--- +id: openaifileparameters +title: OpenAIFileParameters +--- + +# OpenAIFileParameters + +The `OpenAIFileParameters` class handles parameters for file upload operations. + +## Inherits + +[OpenAIParameters](OpenAIParameters.md) + +## Properties + +| Property Name | Type | Required | Description | +|----------------|--------|----------|--------------------------------------| +| `expires_after` | Object | Optional | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | + +### `expires_after` Object Structure + +The `expires_after` object contains the following properties: + +| Property Name | Type | Description | +|---------------|---------|--------------------------------------| +| `anchor` | Text | Anchor timestamp after which the expiration policy applies. Supported anchors: `created_at`. | +| `seconds` | Integer | The number of seconds after the anchor time that the file will expire. Must be between 3600 (1 hour) and 2592000 (30 days). | + +## Example Usage + +```4d +var $params:=cs.AIKit.OpenAIFileParameters.new() + +// Set expiration after 7 days +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=604800 // 7 days +``` + +## See also + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileResult](OpenAIFileResult.md) diff --git a/docs/aikit/Classes/OpenAIFileResult.md b/docs/aikit/Classes/OpenAIFileResult.md new file mode 100644 index 00000000000000..75544d3bb5d839 --- /dev/null +++ b/docs/aikit/Classes/OpenAIFileResult.md @@ -0,0 +1,36 @@ +--- +id: openaifileresult +title: OpenAIFileResult +--- + +# OpenAIFileResult + +The `OpenAIFileResult` class contains the result of a single file operation (upload or retrieve). + +## Inherits + +[OpenAIResult](OpenAIResult.md) + +## Computed properties + +| Property | Type | Description | +|----------|---------------|-----------------------------------------------------------------------------| +| `file` | [OpenAIFile](OpenAIFile.md) | Returns the file object from the API response. Returns `Null` if the response doesn't contain a valid file. | + +## Example Usage + +```4d +// Upload a file +var $file:=File("/RESOURCES/training-data.jsonl") + +var $result:=$client.files.create($file; "user_data") +var $uploadedFile:=$result.file + +// Retrieve file information +var $retrieveResult:=$client.files.retrieve($uploadedFile.id) +``` + +## See also + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) diff --git a/docs/aikit/Classes/OpenAIFilesAPI.md b/docs/aikit/Classes/OpenAIFilesAPI.md new file mode 100644 index 00000000000000..d2eda174589670 --- /dev/null +++ b/docs/aikit/Classes/OpenAIFilesAPI.md @@ -0,0 +1,179 @@ +--- +id: openaifilesapi +title: OpenAIFilesAPI +--- + + +# OpenAIFilesAPI + +The `OpenAIFilesAPI` class provides functionalities to manage files using OpenAI's API. Files can be uploaded and used across various endpoints including [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning), [Batch](https://platform.openai.com/docs/api-reference/batch) processing, and Vision. + +> **Note:** This API is only compatible with OpenAI. Other providers listed in the [compatible providers](../compatible-openai.md) documentation do not support file management operations. + + +API Reference: + +## File Size Limits + +- **Individual files:** up to 512 MB per file +- **Organization total:** up to 1 TB (cumulative size of all files uploaded by your [organization](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization)) + + +## Functions + +### create() + +**create**(*file* : 4D.File | 4D.Blob; *purpose* : Text; *parameters* : cs.OpenAIFileParameters) : cs.OpenAIFileResult + +Upload a file that can be used across various endpoints. + +**Endpoint:** `POST https://api.openai.com/v1/files` + +| Parameter | Type | Description | +|---------------|--------------------------------|-----------------------------------------------------------| +| `file` | [4D.File](https://developer.4d.com/docs/API/FileClass) or [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | The File or Blob object (not file name) to be uploaded. | +| `purpose` | Text | **Required.** The intended purpose of the uploaded file. | +| `parameters` | [OpenAIFileParameters](OpenAIFileParameters.md) | Optional parameters including expiration policy. | +| Function result | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + +**Throws:** An error if `file` is not a 4D.File or 4D.Blob, or if `purpose` is empty. + +#### Supported Purposes + +- `assistants`: Used in the Assistants API (⚠️ [deprecated by OpenAI](https://platform.openai.com/docs/assistants/whats-new)) +- `batch`: Used in the [Batch API](https://platform.openai.com/docs/api-reference/batch) (expires after 30 days by default) +- `fine-tune`: Used for [fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning) +- `vision`: Images used for vision fine-tuning +- `user_data`: Flexible file type for any purpose +- `evals`: Used for eval data sets + +#### File Format Requirements + +- **Fine-tuning API:** Only supports `.jsonl` files with specific required formats +- **Batch API:** Only supports `.jsonl` files up to 200 MB with specific required format +- **Assistants API:** Supports specific file types (see Assistants Tools guide) +- **Chat Completions API:** PDFs are only supported + +#### Example + +```4d +var $file:=File("/RESOURCES/training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=2592000 // 30 days + +var $result:=$client.files.create($file; "fine-tune"; $params) + +If ($result.success) + var $uploadedFile:=$result.file + // $uploadedFile.id -> "file-abc123" + // $uploadedFile.filename -> "training-data.jsonl" + // $uploadedFile.bytes -> 120000 +End if +``` + +### retrieve() + +**retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult + +Returns information about a specific file. + +**Endpoint:** `GET https://api.openai.com/v1/files/{file_id}` + +| Parameter | Type | Description | +|---------------|--------------------------------|-----------------------------------------------------------| +| `fileId` | Text | **Required.** The ID of the file to retrieve. | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | +| Function result | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + + +**Throws:** An error if `fileId` is empty. + +#### Example + +```4d +var $result:=$client.files.retrieve("file-abc123") + +If ($result.success) + var $file:=$result.file + // $file.filename -> "mydata.jsonl" + // $file.bytes -> 120000 + // $file.purpose -> "fine-tune" +End if +``` + +### list() + +**list**(*parameters* : cs.OpenAIFileListParameters) : cs.OpenAIFileListResult + +Returns a list of files that belong to the user's organization. + +**Endpoint:** `GET https://api.openai.com/v1/files` + +| Parameter | Type | Description | +|---------------|--------------------------------|-----------------------------------------------------------| +| `parameters` | [OpenAIFileListParameters](OpenAIFileListParameters.md) | Optional parameters for filtering and pagination. | +| Function result | [OpenAIFileListResult](OpenAIFileListResult.md) | The file list result | + + +#### Example + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 +$params.order:="desc" + +var $result:=$client.files.list($params) + +If ($result.success) + var $files:=$result.files + // $files.length -> 2 + + For each ($file; $files) + // $file.filename -> "salesOverview.pdf", "puppy.jsonl", etc. + End for each +End if +``` + +### delete() + +**delete**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileDeletedResult + +Delete a file. + +**Endpoint:** `DELETE https://api.openai.com/v1/files/{file_id}` + +| Parameter | Type | Description | +|---------------|--------------------------------|-----------------------------------------------------------| +| `fileId` | Text | **Required.** The ID of the file to delete. | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | +| Function result | [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) | The file deletion result | + + +**Throws:** An error if `fileId` is empty. + +#### Example + +```4d +var $result:=$client.files.delete("file-abc123") + +If ($result.success) + var $status:=$result.deleted + + If ($status.deleted) + ALERT("File deleted successfully") + End if +End if +``` + +## See also + +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) diff --git a/docs/aikit/Classes/OpenAIMessage.md b/docs/aikit/Classes/OpenAIMessage.md index 005eeae0ccb5f1..14c998b7abd232 100644 --- a/docs/aikit/Classes/OpenAIMessage.md +++ b/docs/aikit/Classes/OpenAIMessage.md @@ -36,19 +36,57 @@ The `OpenAIMessage` class represents a structured message containing a role, con Adds an image URL to the content of the message. -## Example Usage -### Create a simple message and attach an image +### addFileId() + +**addFileId**(*fileId* : Text) + +| Parameter | Type | Description | +|------------------|-------|--------------------------------------------| +| *fileId* | Text | The file ID to add to the message.| + +Adds a file reference to the content of the message. If the content is currently text, it will be converted to a collection format. + + + + +## Example Usage +### Basic Text Message ```4d // Create an instance of OpenAIMessage -var $message:=cs.AIKit.OpenAIMessage({role: "user"; content: "Hello!"}) +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Hello!"}) +``` + +### Adding Images + +```4d +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this image:"}) // Add an image URL with details $message.addImageURL("http://example.com/image.jpg"; "high") ``` + +### Adding File + +```4d +// Upload a file with user_data purpose +var $file:=File("/RESOURCES/document.pdf") +var $uploadResult:=$client.files.create($file; "user_data") + +If ($uploadResult.success) + var $uploadedFile:=$uploadResult.file + + // Create message and attach the file using its ID + var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this document:"}) + $message.addFileId($uploadedFile.id) + + // $message.content -> [{type: "text"; text: "Please analyze this document:"}; {type: "file"; file_id: "file-abc123"}] +End if +``` + ### Respond to a tool call message When an assistant needs to use external functions, it generates a message with `tool_calls` to request function execution. diff --git a/docs/aikit/overview.md b/docs/aikit/overview.md index e9772f39bc5ba5..2f94754ba08eec 100644 --- a/docs/aikit/overview.md +++ b/docs/aikit/overview.md @@ -104,6 +104,43 @@ Get one model information by id var $model:=$client.models.retrieve("a model id").model ``` +#### Files + +https://platform.openai.com/docs/api-reference/files + +Upload a file for use with other endpoints + +```4d +var $file:=File("/path/to/your/file.jsonl") +var $result:=$client.files.create($file; "fine-tune") +var $fileId:=$result.file.id +``` + +List all files + +```4d +var $files:=$client.files.list().files +``` + +Retrieve file information + +```4d +var $fileInfo:=$client.files.retrieve($fileId).file +``` + +Delete a file + +```4d +var $deleteResult:=$client.files.delete($fileId) +``` + +:::tip Related blog post + +[Transform Static Documents into Actionable Knowledge with 4D AIKit](https://blog.4d.com/transform-static-documents-into-actionable-knowledge-with-4d-aikit). + +::: + + #### Moderations https://platform.openai.com/docs/api-reference/moderations diff --git a/sidebars.js b/sidebars.js index 64eb809969137c..2738cb9d01f5bb 100644 --- a/sidebars.js +++ b/sidebars.js @@ -3349,6 +3349,13 @@ module.exports = "aikit/Classes/openaiembeddingsparameters", "aikit/Classes/openaiembeddingsresult", "aikit/Classes/openaierror", + "aikit/Classes/openaifile", + "aikit/Classes/openaifiledeletedresult", + "aikit/Classes/openaifilelistparameters", + "aikit/Classes/openaifilelistresult", + "aikit/Classes/openaifileparameters", + "aikit/Classes/openaifileresult", + "aikit/Classes/openaifilesapi", "aikit/Classes/openaiimage", "aikit/Classes/openaiimageparameters", "aikit/Classes/openaiimagesapi", From 6ad749bb1b6c63ec5f018750d085e938615bf969 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 20 Nov 2025 18:51:01 +0100 Subject: [PATCH 39/75] open window FR --- .../current/commands-legacy/open-window.md | 45 ++++++++++++------ .../commands-legacy/open-window.md | 45 ++++++++++++------ .../version-21/commands-legacy/open-window.md | 47 +++++++++++++------ 3 files changed, 94 insertions(+), 43 deletions(-) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/open-window.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/open-window.md index 0a7eb940767333..9f4b980fa4a6ae 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/open-window.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/open-window.md @@ -38,7 +38,24 @@ Si vous passez -1 dans *droite* et *bas*, vous indiquez à 4D qu'il faut redimen **Important :** Ce dimensionnement automatique de la fenêtre n'aura lieu que si vous avez au préalable appelé la commande [FORM SET INPUT](form-set-input.md) pour le formulaire que vous allez afficher dans la fenêtre, et si vous lui avez passé le paramètre optionnel \*. -* Le paramètre *type* est optionnel. Il définit le type de fenêtre que vous souhaitez afficher, et correspond aux différentes fenêtres présentées dans la section *Types de fenêtres (compatibilité)* (constantes du thème *Creer fenetre*). Si le type passé est négatif, la fenêtre sera flottante. Si le type n'est pas spécifié, le type 1 est utilisé par défaut. +* Le paramètre *type* est optionnel. Il définit le type de fenêtre que vous souhaitez afficher. Si le type passé est négatif, la fenêtre sera flottante (si pris en charge). Si le type n'est pas spécifié, le type 1 est utilisé par défaut. Les constantes suivantes du thème "Open window" sont utilisables : + +|Constante|Commentaire| +|---|---| +|Alternate dialog box|Utilisable en fenêtre flottante| +|Has full screen mode Mac|Option à ajouter aux fenêtres de type document sur macOS uniquement (ex : `Plain form window+Form has full screen mode Mac`)| +|Modal dialog box || +|Movable dialog box |Utilisable en fenêtre flottante| +|Palette window|Utilisable en fenêtre flottante
  • Non redimensionnable : `-(Palette window+2)` (Windows) ou ` -Palette window` (macOS)
  • Redimensionnable : `-(Palette window+6)`
  • | +|Plain dialog box |Utilisable en fenêtre flottante| +|Plain fixed size window|| +|Plain no zoom box window|| +|Pop up window|| +|Plain window|| +|Resizable sheet window|| +|Round corner window || +|Sheet window|| +|Texture appearance|Option à ajouter à un type de fenêtre sur macOS uniquement. Types compatibles : `Plain window`, `Plain no zoom box window`, `Plain fixed size window`, `Movable dialog box`, `Round corner window`| * Le paramètre *titre* indique le titre (optionnel) de la fenêtre. Si vous passez une chaîne de caractères vide ("") dans *titre*, vous indiquez à 4D d'utiliser les valeurs saisies dans la zone **Nom de la fenêtre** de la fenêtre des Propriétés du formulaire en mode Développement pour le titre du formulaire que vous allez afficher dans la fenêtre. @@ -58,21 +75,19 @@ La méthode projet suivante ouvre une fenêtre centrée dans la fenêtre princip ```4d   // Méthode projet OUVRIR FENETRE CENTREE -  // $1 – Largeur de la fenêtre -  // $2 – Hauteur de la fenêtre -  // $3 – Type de la fenêtre (optionnel) -  // $4 – Titre de la fenêtre (optionnel) - $SW:=Screen width\2 + #DECLARE($width : Integer; $height : Integer; $type : Integer; $title : Text) + var $SW; $SH; $WW; $WH : Integer + $SW:=Screen width\2  $SH:=(Screen height\2)-10 - $WW:=$1\2 - $WH:=$2\2 + $WW:=$width\2 + $WH:=$height\2  Case of     :(Count parameters=2)        Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH)     :(Count parameters=3) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type)     :(Count parameters=4) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type;$title)  End case ``` @@ -92,7 +107,8 @@ Une fois que cette méthode projet est écrite, vous pouvez l'utiliser de la man L'exemple suivant crée une fenêtre flottante comportant une case de menu système (sous Windows) ou une case de fermeture (sous Mac OS). La fenêtre est créée dans le coin supérieur droit de la fenêtre de l'application. ```4d - $mafenetre:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"caseFermeture") +var $mafenetre : Integer  +$mafenetre:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"caseFermeture")  DIALOG([Dialogues];"Palette de couleurs") ``` @@ -107,7 +123,8 @@ La méthode *caseFermeture* appelle la commande [CANCEL](cancel.md) : L'exemple suivant ouvre une fenêtre dont le titre et la taille proviennent des propriétés du formulaire affiché dans la fenêtre : ```4d - FORM SET INPUT([Clients];"Ajout d'enregistrements";*) + var $mafenetre : Integer  + FORM SET INPUT([Clients];"Ajout d'enregistrements";*)  $mafenetre:=Open window(10;80;-1;-1;Plain window;"")  Repeat     ADD RECORD([Clients]) @@ -123,7 +140,8 @@ L'exemple suivant ouvre une fenêtre dont le titre et la taille proviennent des Cet exemple illustre le mécanisme de “retard” d’affichage des fenêtres feuille sous macOS : ```4d - $maFenêtre:=Open window(10;10;400;400;Sheet window) +  var $mafenetre : Integer  + $mafenetre:=Open window(10;10;400;400;Sheet window)   //A cet instant la fenêtre est créée mais reste invisible  DIALOG([Table];"formDial")   //L’événement Sur chargement est généré puis la fenêtre feuille est affichée, elle "descend" @@ -133,7 +151,6 @@ Cet exemple illustre le mécanisme de “retard” d’affichage des fenêtres f ## Voir aussi [CLOSE WINDOW](close-window.md) -*Creer fenetre* [Open form window](open-form-window.md) ## Propriétés diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/open-window.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/open-window.md index 0a7eb940767333..9f4b980fa4a6ae 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/open-window.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/open-window.md @@ -38,7 +38,24 @@ Si vous passez -1 dans *droite* et *bas*, vous indiquez à 4D qu'il faut redimen **Important :** Ce dimensionnement automatique de la fenêtre n'aura lieu que si vous avez au préalable appelé la commande [FORM SET INPUT](form-set-input.md) pour le formulaire que vous allez afficher dans la fenêtre, et si vous lui avez passé le paramètre optionnel \*. -* Le paramètre *type* est optionnel. Il définit le type de fenêtre que vous souhaitez afficher, et correspond aux différentes fenêtres présentées dans la section *Types de fenêtres (compatibilité)* (constantes du thème *Creer fenetre*). Si le type passé est négatif, la fenêtre sera flottante. Si le type n'est pas spécifié, le type 1 est utilisé par défaut. +* Le paramètre *type* est optionnel. Il définit le type de fenêtre que vous souhaitez afficher. Si le type passé est négatif, la fenêtre sera flottante (si pris en charge). Si le type n'est pas spécifié, le type 1 est utilisé par défaut. Les constantes suivantes du thème "Open window" sont utilisables : + +|Constante|Commentaire| +|---|---| +|Alternate dialog box|Utilisable en fenêtre flottante| +|Has full screen mode Mac|Option à ajouter aux fenêtres de type document sur macOS uniquement (ex : `Plain form window+Form has full screen mode Mac`)| +|Modal dialog box || +|Movable dialog box |Utilisable en fenêtre flottante| +|Palette window|Utilisable en fenêtre flottante
  • Non redimensionnable : `-(Palette window+2)` (Windows) ou ` -Palette window` (macOS)
  • Redimensionnable : `-(Palette window+6)`
  • | +|Plain dialog box |Utilisable en fenêtre flottante| +|Plain fixed size window|| +|Plain no zoom box window|| +|Pop up window|| +|Plain window|| +|Resizable sheet window|| +|Round corner window || +|Sheet window|| +|Texture appearance|Option à ajouter à un type de fenêtre sur macOS uniquement. Types compatibles : `Plain window`, `Plain no zoom box window`, `Plain fixed size window`, `Movable dialog box`, `Round corner window`| * Le paramètre *titre* indique le titre (optionnel) de la fenêtre. Si vous passez une chaîne de caractères vide ("") dans *titre*, vous indiquez à 4D d'utiliser les valeurs saisies dans la zone **Nom de la fenêtre** de la fenêtre des Propriétés du formulaire en mode Développement pour le titre du formulaire que vous allez afficher dans la fenêtre. @@ -58,21 +75,19 @@ La méthode projet suivante ouvre une fenêtre centrée dans la fenêtre princip ```4d   // Méthode projet OUVRIR FENETRE CENTREE -  // $1 – Largeur de la fenêtre -  // $2 – Hauteur de la fenêtre -  // $3 – Type de la fenêtre (optionnel) -  // $4 – Titre de la fenêtre (optionnel) - $SW:=Screen width\2 + #DECLARE($width : Integer; $height : Integer; $type : Integer; $title : Text) + var $SW; $SH; $WW; $WH : Integer + $SW:=Screen width\2  $SH:=(Screen height\2)-10 - $WW:=$1\2 - $WH:=$2\2 + $WW:=$width\2 + $WH:=$height\2  Case of     :(Count parameters=2)        Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH)     :(Count parameters=3) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type)     :(Count parameters=4) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type;$title)  End case ``` @@ -92,7 +107,8 @@ Une fois que cette méthode projet est écrite, vous pouvez l'utiliser de la man L'exemple suivant crée une fenêtre flottante comportant une case de menu système (sous Windows) ou une case de fermeture (sous Mac OS). La fenêtre est créée dans le coin supérieur droit de la fenêtre de l'application. ```4d - $mafenetre:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"caseFermeture") +var $mafenetre : Integer  +$mafenetre:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"caseFermeture")  DIALOG([Dialogues];"Palette de couleurs") ``` @@ -107,7 +123,8 @@ La méthode *caseFermeture* appelle la commande [CANCEL](cancel.md) : L'exemple suivant ouvre une fenêtre dont le titre et la taille proviennent des propriétés du formulaire affiché dans la fenêtre : ```4d - FORM SET INPUT([Clients];"Ajout d'enregistrements";*) + var $mafenetre : Integer  + FORM SET INPUT([Clients];"Ajout d'enregistrements";*)  $mafenetre:=Open window(10;80;-1;-1;Plain window;"")  Repeat     ADD RECORD([Clients]) @@ -123,7 +140,8 @@ L'exemple suivant ouvre une fenêtre dont le titre et la taille proviennent des Cet exemple illustre le mécanisme de “retard” d’affichage des fenêtres feuille sous macOS : ```4d - $maFenêtre:=Open window(10;10;400;400;Sheet window) +  var $mafenetre : Integer  + $mafenetre:=Open window(10;10;400;400;Sheet window)   //A cet instant la fenêtre est créée mais reste invisible  DIALOG([Table];"formDial")   //L’événement Sur chargement est généré puis la fenêtre feuille est affichée, elle "descend" @@ -133,7 +151,6 @@ Cet exemple illustre le mécanisme de “retard” d’affichage des fenêtres f ## Voir aussi [CLOSE WINDOW](close-window.md) -*Creer fenetre* [Open form window](open-form-window.md) ## Propriétés diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/open-window.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/open-window.md index 0a7eb940767333..b5c2a5a2d8ccd2 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/open-window.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/open-window.md @@ -38,7 +38,24 @@ Si vous passez -1 dans *droite* et *bas*, vous indiquez à 4D qu'il faut redimen **Important :** Ce dimensionnement automatique de la fenêtre n'aura lieu que si vous avez au préalable appelé la commande [FORM SET INPUT](form-set-input.md) pour le formulaire que vous allez afficher dans la fenêtre, et si vous lui avez passé le paramètre optionnel \*. -* Le paramètre *type* est optionnel. Il définit le type de fenêtre que vous souhaitez afficher, et correspond aux différentes fenêtres présentées dans la section *Types de fenêtres (compatibilité)* (constantes du thème *Creer fenetre*). Si le type passé est négatif, la fenêtre sera flottante. Si le type n'est pas spécifié, le type 1 est utilisé par défaut. +* Le paramètre *type* est optionnel. Il définit le type de fenêtre que vous souhaitez afficher. Si le type passé est négatif, la fenêtre sera flottante (si pris en charge). Si le type n'est pas spécifié, le type 1 est utilisé par défaut. Les constantes suivantes du thème "Open window" sont utilisables : + +|Constante|Commentaire| +|---|---| +|Alternate dialog box|Utilisable en fenêtre flottante| +|Has full screen mode Mac|Option à ajouter aux fenêtres de type document sur macOS uniquement (ex : `Plain form window+Form has full screen mode Mac`)| +|Modal dialog box || +|Movable dialog box |Utilisable en fenêtre flottante| +|Palette window|Utilisable en fenêtre flottante
  • Non redimensionnable : `-(Palette window+2)` (Windows) ou ` -Palette window` (macOS)
  • Redimensionnable : `-(Palette window+6)`
  • | +|Plain dialog box |Utilisable en fenêtre flottante| +|Plain fixed size window|| +|Plain no zoom box window|| +|Pop up window|| +|Plain window|| +|Resizable sheet window|| +|Round corner window || +|Sheet window|| +|Texture appearance|Option à ajouter à un type de fenêtre sur macOS uniquement. Types compatibles : `Plain window`, `Plain no zoom box window`, `Plain fixed size window`, `Movable dialog box`, `Round corner window`| * Le paramètre *titre* indique le titre (optionnel) de la fenêtre. Si vous passez une chaîne de caractères vide ("") dans *titre*, vous indiquez à 4D d'utiliser les valeurs saisies dans la zone **Nom de la fenêtre** de la fenêtre des Propriétés du formulaire en mode Développement pour le titre du formulaire que vous allez afficher dans la fenêtre. @@ -46,7 +63,7 @@ Si vous passez une chaîne de caractères vide ("") dans *titre*, vous indiquez * Le paramètre *caseFermeture*, optionnel, désigne la méthode de gestion de la fermeture de la fenêtre. Si ce paramètre est passé, la case du menu Système (sous Windows) ou une case de fermeture (sous Mac OS) est ajoutée à la fenêtre. Lorsque l'utilisateur Windows double-clique sur la case du menu Système ou que l'utilisateur Mac OS clique sur la case de fermeture, la méthode passée dans *caseFermeture* est exécutée. -**Note :** Vous pouvez aussi gérer la fermeture à partir de la méthode du formulaire affiché dans la fenêtre pendant l'événement On Close Box. Pour plus d'informations sur ce point, reportez-vous à la commande [Form event code](../commands/form-event-code.md). +**Note :** Vous pouvez aussi gérer la fermeture à partir de la méthode du formulaire affiché dans la fenêtre pendant l'événement `On Close Box`. Pour plus d'informations sur ce point, reportez-vous à la commande [Form event code](../commands/form-event-code.md). Si plusieurs fenêtres sont ouvertes dans le même process, la dernière fenêtre créée est la fenêtre active (de premier plan) du process. Seules les informations situées dans la fenêtre active peuvent être modifiées. Toutes les autres fenêtres peuvent être visualisées. Lorsque l'utilisateur tape une touche du clavier, la fenêtre active vient toujours se placer au premier plan, si elle n'y est pas déjà. @@ -58,21 +75,19 @@ La méthode projet suivante ouvre une fenêtre centrée dans la fenêtre princip ```4d   // Méthode projet OUVRIR FENETRE CENTREE -  // $1 – Largeur de la fenêtre -  // $2 – Hauteur de la fenêtre -  // $3 – Type de la fenêtre (optionnel) -  // $4 – Titre de la fenêtre (optionnel) - $SW:=Screen width\2 + #DECLARE($width : Integer; $height : Integer; $type : Integer; $title : Text) + var $SW; $SH; $WW; $WH : Integer + $SW:=Screen width\2  $SH:=(Screen height\2)-10 - $WW:=$1\2 - $WH:=$2\2 + $WW:=$width\2 + $WH:=$height\2  Case of     :(Count parameters=2)        Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH)     :(Count parameters=3) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type)     :(Count parameters=4) -       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$3;$4) +       Open window($SW-$WW;$SH-$WH;$SW+$WW;$SH+$WH;$type;$title)  End case ``` @@ -92,7 +107,8 @@ Une fois que cette méthode projet est écrite, vous pouvez l'utiliser de la man L'exemple suivant crée une fenêtre flottante comportant une case de menu système (sous Windows) ou une case de fermeture (sous Mac OS). La fenêtre est créée dans le coin supérieur droit de la fenêtre de l'application. ```4d - $mafenetre:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"caseFermeture") +var $mafenetre : Integer  +$mafenetre:=Open window(Screen width-149;33;Screen width-4;178;-Palette window;"";"caseFermeture")  DIALOG([Dialogues];"Palette de couleurs") ``` @@ -107,7 +123,8 @@ La méthode *caseFermeture* appelle la commande [CANCEL](cancel.md) : L'exemple suivant ouvre une fenêtre dont le titre et la taille proviennent des propriétés du formulaire affiché dans la fenêtre : ```4d - FORM SET INPUT([Clients];"Ajout d'enregistrements";*) + var $mafenetre : Integer  + FORM SET INPUT([Clients];"Ajout d'enregistrements";*)  $mafenetre:=Open window(10;80;-1;-1;Plain window;"")  Repeat     ADD RECORD([Clients]) @@ -123,7 +140,8 @@ L'exemple suivant ouvre une fenêtre dont le titre et la taille proviennent des Cet exemple illustre le mécanisme de “retard” d’affichage des fenêtres feuille sous macOS : ```4d - $maFenêtre:=Open window(10;10;400;400;Sheet window) +  var $mafenetre : Integer  + $mafenetre:=Open window(10;10;400;400;Sheet window)   //A cet instant la fenêtre est créée mais reste invisible  DIALOG([Table];"formDial")   //L’événement Sur chargement est généré puis la fenêtre feuille est affichée, elle "descend" @@ -133,7 +151,6 @@ Cet exemple illustre le mécanisme de “retard” d’affichage des fenêtres f ## Voir aussi [CLOSE WINDOW](close-window.md) -*Creer fenetre* [Open form window](open-form-window.md) ## Propriétés From 4751f7f8bfeb292b5568ba712ed496cd280f3953 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 21 Nov 2025 09:49:38 +0100 Subject: [PATCH 40/75] New Crowdin updates (#3004) * New translations updates.md (French) * New translations sessions.md (French) * New translations openai.md (French) * New translations openaimessage.md (French) * New translations overview.md (French) * New translations sessions.md (French) * New translations updates.md (French) * New translations sessions.md (French) * New translations updates.md (Spanish) * New translations parameters.md (Spanish) * New translations classes.md (Spanish) * New translations properties_listbox.md (Spanish) * New translations updates.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations sessions.md (Spanish) * New translations webserverconfig.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations web.md (Spanish) * New translations openai.md (Spanish) * New translations openaimessage.md (Spanish) * New translations overview.md (Spanish) * New translations properties_listbox.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations sessions.md (Spanish) * New translations parameters.md (Spanish) * New translations properties_listbox.md (Spanish) * New translations web.md (Spanish) * New translations updates.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations sessions.md (Spanish) * New translations webserverconfig.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations updates.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations sessions.md (Japanese) * New translations openai.md (Japanese) * New translations openaimessage.md (Japanese) * New translations overview.md (Japanese) * New translations orda-events.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations sessions.md (Japanese) * New translations updates.md (Japanese) * New translations orda-events.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations sessions.md (Japanese) * New translations updates.md (Portuguese, Brazilian) * New translations sessions.md (Portuguese, Brazilian) * New translations openai.md (Portuguese, Brazilian) * New translations openaimessage.md (Portuguese, Brazilian) * New translations overview.md (Portuguese, Brazilian) * New translations sessions.md (Portuguese, Brazilian) * New translations updates.md (Portuguese, Brazilian) * New translations sessions.md (Portuguese, Brazilian) * New translations openaifile.md (French) * New translations openaifiledeletedresult.md (French) * New translations openaifilelistparameters.md (French) * New translations openaifilelistresult.md (French) * New translations openaifileparameters.md (French) * New translations openaifileresult.md (French) * New translations openaifilesapi.md (French) * New translations openaifile.md (Spanish) * New translations openaifiledeletedresult.md (Spanish) * New translations openaifilelistparameters.md (Spanish) * New translations openaifilelistresult.md (Spanish) * New translations openaifileparameters.md (Spanish) * New translations openaifileresult.md (Spanish) * New translations openaifilesapi.md (Spanish) * New translations openaifile.md (Japanese) * New translations openaifiledeletedresult.md (Japanese) * New translations openaifilelistparameters.md (Japanese) * New translations openaifilelistresult.md (Japanese) * New translations openaifileparameters.md (Japanese) * New translations openaifileresult.md (Japanese) * New translations openaifilesapi.md (Japanese) * New translations openaifile.md (Portuguese, Brazilian) * New translations openaifiledeletedresult.md (Portuguese, Brazilian) * New translations openaifilelistparameters.md (Portuguese, Brazilian) * New translations openaifilelistresult.md (Portuguese, Brazilian) * New translations openaifileparameters.md (Portuguese, Brazilian) * New translations openaifileresult.md (Portuguese, Brazilian) * New translations openaifilesapi.md (Portuguese, Brazilian) * New translations parameters.md (Spanish) * New translations ordaclasses.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations ordaclasses.md (Japanese) --- .../current/FormObjects/properties_ListBox.md | 2 +- .../current/Notes/updates.md | 3 + .../current/ORDA/ordaClasses.md | 2 +- .../current/ORDA/privileges.md | 8 +- .../current/WebServer/sessions.md | 2 +- .../current/WebServer/webServerConfig.md | 2 +- .../current/WritePro/writeprointerface.md | 2 +- .../current/aikit/Classes/OpenAI.md | 2 + .../current/aikit/Classes/OpenAIFile.md | 29 +++ .../aikit/Classes/OpenAIFileDeletedResult.md | 38 ++++ .../aikit/Classes/OpenAIFileListParameters.md | 38 ++++ .../aikit/Classes/OpenAIFileListResult.md | 66 +++++++ .../aikit/Classes/OpenAIFileParameters.md | 43 +++++ .../current/aikit/Classes/OpenAIFileResult.md | 36 ++++ .../current/aikit/Classes/OpenAIFilesAPI.md | 173 ++++++++++++++++++ .../current/aikit/Classes/OpenAIMessage.md | 38 +++- .../current/aikit/overview.md | 36 ++++ .../current/settings/web.md | 2 +- .../version-19/Concepts/parameters.md | 2 +- .../FormObjects/properties_ListBox.md | 2 +- .../version-20-R10/ORDA/ordaClasses.md | 2 +- .../version-20-R10/WebServer/sessions.md | 2 +- .../version-20/Concepts/parameters.md | 2 +- .../version-20/Notes/updates.md | 6 +- .../version-20/ViewPro/classes.md | 4 +- .../version-21/Concepts/parameters.md | 2 +- .../FormObjects/properties_ListBox.md | 2 +- .../version-21/Notes/updates.md | 2 +- .../version-21/ORDA/ordaClasses.md | 2 +- .../version-21/ORDA/privileges.md | 8 +- .../version-21/WebServer/sessions.md | 2 +- .../version-21/WebServer/webServerConfig.md | 2 +- .../version-21/WritePro/writeprointerface.md | 2 +- .../version-21/settings/web.md | 2 +- .../current/Notes/updates.md | 3 + .../current/WebServer/sessions.md | 2 +- .../current/aikit/Classes/OpenAI.md | 2 + .../current/aikit/Classes/OpenAIFile.md | 29 +++ .../aikit/Classes/OpenAIFileDeletedResult.md | 38 ++++ .../aikit/Classes/OpenAIFileListParameters.md | 38 ++++ .../aikit/Classes/OpenAIFileListResult.md | 66 +++++++ .../aikit/Classes/OpenAIFileParameters.md | 43 +++++ .../current/aikit/Classes/OpenAIFileResult.md | 36 ++++ .../current/aikit/Classes/OpenAIFilesAPI.md | 173 ++++++++++++++++++ .../current/aikit/Classes/OpenAIMessage.md | 44 ++++- .../current/aikit/overview.md | 36 ++++ .../version-20-R10/WebServer/sessions.md | 2 +- .../version-21/Notes/updates.md | 2 +- .../version-21/WebServer/sessions.md | 2 +- .../current/Notes/updates.md | 3 + .../current/ORDA/orda-events.md | 98 +++++----- .../current/ORDA/ordaClasses.md | 76 ++++---- .../current/WebServer/sessions.md | 2 +- .../current/aikit/Classes/OpenAI.md | 16 +- .../current/aikit/Classes/OpenAIFile.md | 29 +++ .../aikit/Classes/OpenAIFileDeletedResult.md | 38 ++++ .../aikit/Classes/OpenAIFileListParameters.md | 38 ++++ .../aikit/Classes/OpenAIFileListResult.md | 66 +++++++ .../aikit/Classes/OpenAIFileParameters.md | 43 +++++ .../current/aikit/Classes/OpenAIFileResult.md | 36 ++++ .../current/aikit/Classes/OpenAIFilesAPI.md | 173 ++++++++++++++++++ .../current/aikit/Classes/OpenAIMessage.md | 42 ++++- .../current/aikit/overview.md | 36 ++++ .../version-20-R10/ORDA/ordaClasses.md | 76 ++++---- .../version-20-R10/WebServer/sessions.md | 2 +- .../version-21/Notes/updates.md | 2 +- .../version-21/ORDA/orda-events.md | 98 +++++----- .../version-21/ORDA/ordaClasses.md | 76 ++++---- .../version-21/WebServer/sessions.md | 2 +- .../current/Notes/updates.md | 3 + .../current/WebServer/sessions.md | 2 +- .../current/aikit/Classes/OpenAI.md | 2 + .../current/aikit/Classes/OpenAIFile.md | 29 +++ .../aikit/Classes/OpenAIFileDeletedResult.md | 38 ++++ .../aikit/Classes/OpenAIFileListParameters.md | 38 ++++ .../aikit/Classes/OpenAIFileListResult.md | 66 +++++++ .../aikit/Classes/OpenAIFileParameters.md | 43 +++++ .../current/aikit/Classes/OpenAIFileResult.md | 36 ++++ .../current/aikit/Classes/OpenAIFilesAPI.md | 173 ++++++++++++++++++ .../current/aikit/Classes/OpenAIMessage.md | 38 +++- .../current/aikit/overview.md | 36 ++++ .../version-20-R10/WebServer/sessions.md | 2 +- .../version-21/Notes/updates.md | 2 +- .../version-21/WebServer/sessions.md | 2 +- 84 files changed, 2268 insertions(+), 276 deletions(-) create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_ListBox.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_ListBox.md index 01a04636cf534f..8fad6d483e7b51 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_ListBox.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_ListBox.md @@ -78,7 +78,7 @@ Para las dos últimas acciones, el evento formulario `On Open Detail` también s --- -## Highlight Set {#highlight-set} +## Conjunto resaltado {#highlight-set} `List box del tipo selección` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md index 6eeebff3e41b72..aea403ab3bf6b4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,6 +10,9 @@ Lea [**Novedades en 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2/), #### Lo más destacado - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). + +- 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. + - [**Lista de bugs corregidos**](https://bugs.4d.fr/fixedbugslist?version=21_R2): lista de todos los bugs que se han corregido en 4D 21 R2. #### Cambios de comportamiento diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index 669de5f11a80eb..96c61be07c7447 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -930,7 +930,7 @@ $arch.save() //courseName y name son "Archaeology II" For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Remote requests are: +Las peticiones remotas son: - Las peticiones enviadas por las aplicaciones 4D remotas conectadas a través de `Open datastore` - REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md index 02c55b6fb10e2f..d1a1d185b52ba1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -27,11 +27,11 @@ Si un usuario intenta ejecutar una acción y no tiene los derechos de acceso ade Puede asignar acciones de permiso específicas a los siguientes recursos en su proyecto: -- the [datastore](../ORDA/dsMapping.md#datastore) -- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- el [datastore](../ORDA/dsMapping.md#datastore) +- las [clases de datos](../ORDA/dsMapping.md#dataclass) - [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) - functions of the [data model classes](../ORDA/ordaClasses.md) -- [singleton](../REST/$singleton.md) functions +- funciones [singleton](../REST/$singleton.md) Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma en que se acceda), 4D verifica que la sesión tenga los permisos apropiados y rechaza el acceso si no está autorizado. @@ -190,7 +190,7 @@ El archivo `roles.json` describe todos los parámetros de seguridad web del proy :::caution Recordatorio - El nombre de privilegio "WebAdmin" está reservado a la aplicación. No se recomienda utilizar este nombre para los privilegios personalizados. -- `privileges` and `roles` names are case-insensitive. +- los nombres de `privileges` y `roles` no son sensibles a mayúsculas y minúsculas. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md index 94acf76215ffbc..1f93da7931a3b2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -25,7 +25,7 @@ Las sesiones web se utilizan para: - [Aplicaciones web](gettingStarted.md) enviando peticiones http (incluyendo peticiones [SOAP Web services](../commands/theme/Web_Services_Server.md) y [/4DACTION](../WebServer/httpRequests.md#4daction)), - llamadas a la [REST API](../REST/authUsers.md), que utilizan [datastores remotos](../ORDA/remoteDatastores.md) y [formularios Qodly](qodly-studio.md). -## Habilitando sesiones web +## Activando sesiones web {#enabling-web-sessions} La funcionalidad de gestión de sesiones puede ser activada y desactivada en su servidor web 4D. Hay diferentes maneras de habilitar la gestión de la sesión: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/webServerConfig.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/webServerConfig.md index 22056b4f4e48a2..39361baf4edd38 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/webServerConfig.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/webServerConfig.md @@ -603,7 +603,7 @@ Los parámetros siguientes siguen siendo compatibles, pero se basan en funcional Estado de validación de la dirección IP para las cookies de sesión. Por razones de seguridad, por defecto el servidor web 4D verifica la dirección IP de cada solicitud que contiene una cookie de sesión y la rechaza si esta dirección no coincide con la dirección IP utilizada para crear la cookie. En algunas aplicaciones específicas, es posible que desee desactivar esta validación y aceptar las cookies de sesión, incluso cuando sus direcciones IP no coinciden. Por ejemplo, cuando los dispositivos móviles cambian entre las redes Wifi y 4G/5G, su dirección IP cambiará. En este caso, debe pasar 0 en esta opción para permitir que los clientes puedan seguir utilizando sus sesiones web aunque las direcciones IP cambien. Tenga en cuenta que este parámetro reduce el nivel de seguridad de su aplicación. Cuando se modifica, esta configuración es efectiva inmediatamente (no es necesario reiniciar el servidor HTTP). -### Generic Web User +### Usuario web genérico This option allows you to designate a user, previously defined in the [4D password table](../Users/handling_users_groups.md), as a "Generic Web User". In this case, each browser allowed to connect to the database gets access authorizations and restrictions associated with this user. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index 72146ab7f99e17..b49cfefe64375a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -8,7 +8,7 @@ slug: /WritePro/write-pro-interface Un desarrollador 4D puede implementar fácilmente estas paletas en su aplicación. Así, los usuarios finales pueden gestionar todas las propiedades de 4D Write Pro, como las fuentes, la alineación del texto, los marcadores, la disposición de las tablas y los marcos. -## Installation & documentation +## Instalación y documentación 4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md index 5cc5cd870dca4c..f185aa3849bf86 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md @@ -67,11 +67,13 @@ La API ofrece acceso a múltiples recursos que permiten una interacción perfect | `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | Acceso a la API Images. | | `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | Acceso a la API de moderaciones. | | `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | Acceso a la API Embeddings. | +| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Access to the Files API. | ### Ejemplo de Uso ```4d $client.chat.completions.create(...) $client.images.generate(...) +$client.files.create(...) $client.model.lists(...) ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md new file mode 100644 index 00000000000000..a2c81f27a2e0f5 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md @@ -0,0 +1,29 @@ +--- +id: openaifile +title: OpenAIFile +--- + +# OpenAIFile + +The `OpenAIFile` class represents a file object in the OpenAI API. Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. + +## Propiedades + +| Nombre de la propiedad | Tipo | Descripción | +| ---------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | The file identifier, which can be referenced in the API endpoints. | +| `bytes` | Integer | El tamaño del archivo, en bytes. | +| `created_at` | Integer | The Unix timestamp (in seconds) for when the file was created. | +| `expires_at` | Integer | The Unix timestamp (in seconds) for when the file will expire. | +| `filename` | Text | El nombre del archivo. | +| `object` | Text | The object type, which is always "file". | +| `purpose` | Text | The intended purpose of the file. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | +| `status` | Text | **Deprecated.** The current status of the file, which can be either `uploaded`, `processed`, or `error`. | +| `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | + +## Ver también + +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md new file mode 100644 index 00000000000000..44d6daba23f279 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md @@ -0,0 +1,38 @@ +--- +id: openaifiledeletedresult +title: OpenAIFileDeletedResult +--- + +# OpenAIFileDeletedResult + +The `OpenAIFileDeletedResult` class contains the result of a file deletion operation. + +## Hereda + +[OpenAIResult](OpenAIResult.md) + +## Propiedades calculadas + +| Propiedad | Tipo | Descripción | +| --------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Returns the file deletion result from the API response. Returns `Null` if the response doesn't contain a valid result. | + +## Ejemplo de Uso + +```4d +// Delete a file +var $fileId:="file-abc123" +var $result:=$client.files.delete($fileId; Null) +var $deletionStatus:=$result.deleted + +If ($deletionStatus.deleted) + ALERT("File "+$deletionStatus.id+" was successfully deleted") +Else + ALERT("Failed to delete file") +End if +``` + +## Ver también + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileDeleted](OpenAIFileDeleted.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md new file mode 100644 index 00000000000000..986a8c0ebf1b56 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md @@ -0,0 +1,38 @@ +--- +id: openaifilelistparameters +title: OpenAIFileListParameters +--- + +# OpenAIFileListParameters + +The `OpenAIFileListParameters` class contains parameters for listing files in the OpenAI API. + +## Hereda + +[OpenAIParameters](OpenAIParameters.md) + +## Propiedades + +| Nombre de la propiedad | Tipo | Requerido | Por defecto | Descripción | +| ---------------------- | ------- | --------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `after` | Text | Opcional | - | Un cursor para utilizar en la paginación. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `after=obj_foo` in order to fetch the next page of the list. | +| `limit` | Integer | Opcional | 10000 | Un límite en el número de objetos a devolver. Limit can range between 1 and 10,000, and the default is 10,000. | +| `order` | Text | Opcional | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | +| `purpose` | Text | Opcional | - | Devuelve sólo los archivos con la finalidad indicada. | + +## Ejemplo de Uso + +```4d +// Get first 100 files with purpose "fine-tune" +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 +$params.purpose:="fine-tune" +$params.order:="desc" + +var $result:=$client.files.list($params) +``` + +## Ver también + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md new file mode 100644 index 00000000000000..dc92c30d761a48 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md @@ -0,0 +1,66 @@ +--- +id: openaifilelistresult +title: OpenAIFileListResult +--- + +# OpenAIFileListResult + +The `OpenAIFileListResult` class contains the result of listing files from the OpenAI API. + +## Hereda + +[OpenAIResult](OpenAIResult.md) + +## Propiedades calculadas + +| Propiedad | Tipo | Descripción | +| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | +| `first_id` | Text | Returns the ID of the first file in the list, or an empty string if not available. | +| `last_id` | Text | Returns the ID of the last file in the list, or an empty string if not available. | +| `has_more` | Boolean | Indica si hay más archivos más allá de esta página. `True` if there are more files to fetch, `False` otherwise. | + +## Ejemplo de Uso + +### Uso básico + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 + +var $result:=$client.files.list($params) +var $files:=$result.files + +For each ($file; $files) + // Process each OpenAIFile object + // $file.filename -> "salesOverview.pdf" + // $file.bytes -> 175 + // $file.purpose -> "assistants" +End for each +``` + +### Pagination Example + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 + +var $result:=$client.files.list($params) +var $allFiles:=$allFiles.combine($result.files) + +// Continue fetching if there are more files +While ($result.has_more) + $params.after:=$result.last_id + $result:=$client.files.list($params) + $allFiles:=$allFiles.combine($result.files) +End while + +// $allFiles now contains all files from the organization +``` + +## Ver también + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md new file mode 100644 index 00000000000000..aab077253ede67 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -0,0 +1,43 @@ +--- +id: openaifileparameters +title: OpenAIFileParameters +--- + +# OpenAIFileParameters + +The `OpenAIFileParameters` class handles parameters for file upload operations. + +## Hereda + +[OpenAIParameters](OpenAIParameters.md) + +## Propiedades + +| Nombre de la propiedad | Tipo | Requerido | Descripción | +| ---------------------- | ------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `expires_after` | Object | Opcional | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | + +### `expires_after` Object Structure + +El objeto `expires_after` contiene las siguientes propiedades: + +| Nombre de la propiedad | Tipo | Descripción | +| ---------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `anchor` | Text | Anchor timestamp after which the expiration policy applies. Supported anchors: `created_at`. | +| `seconds` | Integer | The number of seconds after the anchor time that the file will expire. Must be between 3600 (1 hour) and 2592000 (30 days). | + +## Ejemplo de Uso + +```4d +var $params:=cs.AIKit.OpenAIFileParameters.new() + +// Set expiration after 7 days +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=604800 // 7 days +``` + +## Ver también + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileResult](OpenAIFileResult.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md new file mode 100644 index 00000000000000..f42d964305008a --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md @@ -0,0 +1,36 @@ +--- +id: openaifileresult +title: OpenAIFileResult +--- + +# OpenAIFileResult + +The `OpenAIFileResult` class contains the result of a single file operation (upload or retrieve). + +## Hereda + +[OpenAIResult](OpenAIResult.md) + +## Propiedades calculadas + +| Propiedad | Tipo | Descripción | +| --------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `file` | [OpenAIFile](OpenAIFile.md) | Devuelve el objeto de archivo de la respuesta de la API. Returns `Null` if the response doesn't contain a valid file. | + +## Ejemplo de Uso + +```4d +// Upload a file +var $file:=File("/RESOURCES/training-data.jsonl") + +var $result:=$client.files.create($file; "user_data") +var $uploadedFile:=$result.file + +// Retrieve file information +var $retrieveResult:=$client.files.retrieve($uploadedFile.id) +``` + +## Ver también + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md new file mode 100644 index 00000000000000..efa19c52ff5153 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -0,0 +1,173 @@ +--- +id: openaifilesapi +title: OpenAIFilesAPI +--- + +# OpenAIFilesAPI + +The `OpenAIFilesAPI` class provides functionalities to manage files using OpenAI's API. Files can be uploaded and used across various endpoints including [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning), [Batch](https://platform.openai.com/docs/api-reference/batch) processing, and Vision. + +> **Nota:** esta API sólo es compatible con OpenAI. Other providers listed in the [compatible providers](../compatible-openai.md) documentation do not support file management operations. + +API Reference: + +## File Size Limits + +- **Archivos individuales:** hasta 512 MB por archivo +- **Organization total:** up to 1 TB (cumulative size of all files uploaded by your [organization](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization)) + +## Funciones + +### create() + +**create**(*file* : 4D.File | 4D.Blob; *purpose* : Text; *parameters* : cs.OpenAIFileParameters) : cs.OpenAIFileResult + +Upload a file that can be used across various endpoints. + +**Endpoint:** `POST https://api.openai.com/v1/files` + +| Parámetros | Tipo | Descripción | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `file` | [4D.File](https://developer.4d.com/docs/API/FileClass) or [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | The File or Blob object (not file name) to be uploaded. | +| `purpose` | Text | **Required.** The intended purpose of the uploaded file. | +| `parámetros` | [OpenAIFileParameters](OpenAIFileParameters.md) | Parámetros opcionales, incluida la política de expiración. | +| Resultado | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + +**Throws:** An error if `file` is not a 4D.File or 4D.Blob, or if `purpose` is empty. + +#### Supported Purposes + +- `assistants`: Used in the Assistants API (⚠️ [deprecated by OpenAI](https://platform.openai.com/docs/assistants/whats-new)) +- `batch`: Used in the [Batch API](https://platform.openai.com/docs/api-reference/batch) (expires after 30 days by default) +- `fine-tune`: Used for [fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning) +- `vision`: imágenes utilizadas para afinar la visión +- `user_data`: tipo de archivo flexible para cualquier propósito +- `evals`: Used for eval data sets + +#### File Format Requirements + +- **Fine-tuning API:** Only supports `.jsonl` files with specific required formats +- **Batch API:** Only supports `.jsonl` files up to 200 MB with specific required format +- **Assistants API:** Supports specific file types (see Assistants Tools guide) +- **API de finalización de chat:** sólo se admiten archivos PDF + +#### Ejemplo + +```4d +var $file:=File("/RESOURCES/training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=2592000 // 30 days + +var $result:=$client.files.create($file; "fine-tune"; $params) + +If ($result.success) + var $uploadedFile:=$result.file + // $uploadedFile.id -> "file-abc123" + // $uploadedFile.filename -> "training-data.jsonl" + // $uploadedFile.bytes -> 120000 +End if +``` + +### retrieve() + +**retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult + +Devuelve información sobre un archivo específico. + +**Endpoint:** `GET https://api.openai.com/v1/files/{file_id}` + +| Parámetros | Tipo | Descripción | +| ------------ | --------------------------------------- | ----------------------------------------------------------------------------- | +| `fileId` | Text | **Requerido.** El ID del archivo a recuperar. | +| `parámetros` | [OpenAIParameters](OpenAIParameters.md) | Parámetros opcionales para la solicitud. | +| Resultado | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + +**Throws:** An error if `fileId` is empty. + +#### Ejemplo + +```4d +var $result:=$client.files.retrieve("file-abc123") + +If ($result.success) + var $file:=$result.file + // $file.filename -> "mydata.jsonl" + // $file.bytes -> 120000 + // $file.purpose -> "fine-tune" +End if +``` + +### lista() + +**list**(*parameters* : cs.OpenAIFileListParameters) : cs.OpenAIFileListResult + +Returns a list of files that belong to the user's organization. + +**Endpoint:** `GET https://api.openai.com/v1/files` + +| Parámetros | Tipo | Descripción | +| ------------ | ------------------------------------------------------- | ----------------------------------------------------------------------- | +| `parámetros` | [OpenAIFileListParameters](OpenAIFileListParameters.md) | Parámetros opcionales para el filtrado y la paginación. | +| Resultado | [OpenAIFileListResult](OpenAIFileListResult.md) | The file list result | + +#### Ejemplo + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 +$params.order:="desc" + +var $result:=$client.files.list($params) + +If ($result.success) + var $files:=$result.files + // $files.length -> 2 + + For each ($file; $files) + // $file.filename -> "salesOverview.pdf", "puppy.jsonl", etc. + End for each +End if +``` + +### delete() + +**delete**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileDeletedResult + +Eliminar un archivo. + +**Endpoint:** `DELETE https://api.openai.com/v1/files/{file_id}` + +| Parámetros | Tipo | Descripción | +| ------------ | ----------------------------------------------------- | -------------------------------------------------------------------------- | +| `fileId` | Text | **Requerido.** el ID del archivo a borrar. | +| `parámetros` | [OpenAIParameters](OpenAIParameters.md) | Parámetros opcionales para la solicitud. | +| Resultado | [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) | The file deletion result | + +**Throws:** An error if `fileId` is empty. + +#### Ejemplo + +```4d +var $result:=$client.files.delete("file-abc123") + +If ($result.success) + var $status:=$result.deleted + + If ($status.deleted) + ALERT("File deleted successfully") + End if +End if +``` + +## Ver también + +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index 340462dceeb399..4fb9a34e1c7733 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -36,18 +36,52 @@ La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, Añade una URL de imagen al contenido del mensaje. +### addFileId() + +**addFileId**(*fileId* : Text) + +| Parámetros | Tipo | Descripción | +| ---------- | ---- | ------------------------------------------------------------ | +| *fileId* | Text | El ID del archivo que se añadirá al mensaje. | + +Añade una referencia de archivo al contenido del mensaje. If the content is currently text, it will be converted to a collection format. + ## Ejemplo de Uso -### Crear un mensaje simple y adjuntar una imagen +### Basic Text Message ```4d // Create an instance of OpenAIMessage -var $message:=cs.AIKit.OpenAIMessage({role: "user"; content: "Hello!"}) +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Hello!"}) +``` + +### Añadir imágenes + +```4d +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this image:"}) // Add an image URL with details $message.addImageURL("http://example.com/image.jpg"; "high") ``` +### Añadir archivo + +```4d +// Upload a file with user_data purpose +var $file:=File("/RESOURCES/document.pdf") +var $uploadResult:=$client.files.create($file; "user_data") + +If ($uploadResult.success) + var $uploadedFile:=$uploadResult.file + + // Create message and attach the file using its ID + var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this document:"}) + $message.addFileId($uploadedFile.id) + + // $message.content -> [{type: "text"; text: "Please analyze this document:"}; {type: "file"; file_id: "file-abc123"}] +End if +``` + ### Responder a un mensaje de llamada de herramienta Cuando un asistente necesita utilizar las funciones externas, genera un mensaje con `tool_calls` para solicitar la ejecución de la función. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/overview.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/overview.md index 5e5fb290cb27f3..29010b1bd1e2d3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/overview.md @@ -103,6 +103,42 @@ Obtener información de un modelo por id var $model:=$client.models.retrieve("a model id").model ``` +#### Files + +https://platform.openai.com/docs/api-reference/files + +Cargar un archivo para utilizarlo con otros terminales + +```4d +var $file:=File("/path/to/your/file.jsonl") +var $result:=$client.files.create($file; "fine-tune") +var $fileId:=$result.file.id +``` + +List all files + +```4d +var $files:=$client.files.list().files +``` + +Retrieve file information + +```4d +var $fileInfo:=$client.files.retrieve($fileId).file +``` + +Eliminar un archivo + +```4d +var $deleteResult:=$client.files.delete($fileId) +``` + +:::tip Entrada de blog relacionada + +[Transform Static Documents into Actionable Knowledge with 4D AIKit](https://blog.4d.com/transform-static-documents-into-actionable-knowledge-with-4d-aikit). + +::: + #### Moderations https://platform.openai.com/docs/api-reference/moderations diff --git a/i18n/es/docusaurus-plugin-content-docs/current/settings/web.md b/i18n/es/docusaurus-plugin-content-docs/current/settings/web.md index d827ba37fa6121..6cea9f5a1781b0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/settings/web.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/settings/web.md @@ -126,7 +126,7 @@ Define el sistema de autenticación que desea aplicar a su servidor web. Se prop Se recomienda utilizar la autenticación **personalizada**. Ver la sección[**autenticación**](../WebServer/authentication.md). -#### Generic Web User +#### Usuario web genérico Ver [Propiedades obsoletas](../WebServer/webServerConfig.md#deprecated-settings). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md index 5d1d394fdd7e25..9e441b221103b8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/parameters.md @@ -123,7 +123,7 @@ $entitySelection:=ds.User.query("login=:1"; $user) :::note -Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). El uso de la palabra clave `var` con parámetros generará errores. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_ListBox.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_ListBox.md index 9d890776e42567..e2d8e22cbe1da1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_ListBox.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_ListBox.md @@ -74,7 +74,7 @@ Para las dos últimas acciones, también se genera el evento de formulario `On O --- -## Highlight Set {#highlight-set} +## Conjunto resaltado {#highlight-set} `List box del tipo selección` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index 669de5f11a80eb..96c61be07c7447 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -930,7 +930,7 @@ $arch.save() //courseName y name son "Archaeology II" For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Remote requests are: +Las peticiones remotas son: - Las peticiones enviadas por las aplicaciones 4D remotas conectadas a través de `Open datastore` - REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index cf67617260a18d..3280a50dd5dbaa 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -25,7 +25,7 @@ Las sesiones web se utilizan para: - [Aplicaciones web](gettingStarted.md) que envían peticiones http, - llamadas a la [REST API](../REST/authUsers.md), que utilizan [datastores remotos](../ORDA/remoteDatastores.md) y [formularios Qodly](qodly-studio.md). -## Habilitando sesiones web +## Activando sesiones web {#enabling-web-sessions} La funcionalidad de gestión de sesiones puede ser activada y desactivada en su servidor web 4D. Hay diferentes maneras de habilitar la gestión de la sesión: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md index fbb615743b4ad9..66b684eba3162c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/parameters.md @@ -112,7 +112,7 @@ $entitySelection:=ds.User.query("login=:1"; $user) :::note -Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). El uso de la palabra clave `var` con parámetros generará errores. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md index 6d72dac749055a..0943b619df731d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Notes/updates.md @@ -15,8 +15,8 @@ Lea las [**novedades de 4D 20**](https://blog.4d.com/en-whats-new-in-4d-v20/), l #### Lo más destacado -- 4D 20.8 LTS is certified on Windows 11 25H2. -- 4D 20.8 LTS is certified on macOS Tahoe (macOS 26). +- 4D 20.8 LTS está certificado en Windows 11 25H2. +- 4D 20.8 LTS está certificado en macOS Tahoe (macOS 26). - [**Lista de bugs corregidos**](https://bugs.4d.com/fixes?version=20.8): lista de todos los bugs corregidos en 4D 20.8 LTS. @@ -35,7 +35,7 @@ Por razones internas, la versión de los clientes remotos que se conectan a 4D S #### Cambios de comportamiento -- As of 4D **20.7 HF2**, the [`Time`](https://doc.4d.com/4dv20/help/command/en/page179.html) command returns a negative time expression when the *timeValue* parameter is negative. Por ejemplo, `Time("-01:02:03")` ahora devolverá -01:02:03. En versiones anteriores, se ignoraba el signo negativo. +- A partir de 4D **20.7 HF2**, el comando [`Time`](https://doc.4d.com/4dv20/help/command/en/page179.html) devuelve una expresión negativa cuando el parámetro *timeValue* es negativo. Por ejemplo, `Time("-01:02:03")` ahora devolverá -01:02:03. En versiones anteriores, se ignoraba el signo negativo. ## 4D 20.6 LTS diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md index 40eadc8c41f98b..daec7235ed587d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md @@ -156,7 +156,7 @@ La propiedad `.backColor` es el [color **.foreColor** : Text -The `.foreColor` property is the [color de primer plano](configuring.md#background--foreground) de la tabla. +La propiedad `.foreColor` es el [color de primer plano](configuring.md#background--foreground) de la tabla. @@ -206,7 +206,7 @@ La propiedad `.borderBottom` es el **.borderTop** : [cs.ViewPro.LineBorder](#lineborder) -The `.borderTop` property is the top border line of the table . +La propiedad `.borderRight` es la top border line of the table . ### .borderHorizontal diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md index df4ff6da8665ad..32949f64166674 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md @@ -112,7 +112,7 @@ $entitySelection:=ds.User.query("login=:1"; $user) :::note -Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. +Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). El uso de la palabra clave `var` con parámetros generará errores. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_ListBox.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_ListBox.md index 8badbab5da377d..0c7eb2ff064673 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_ListBox.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_ListBox.md @@ -78,7 +78,7 @@ Para las dos últimas acciones, también se genera el evento de formulario `On O --- -## Highlight Set {#highlight-set} +## Conjunto resaltado {#highlight-set} `List box del tipo selección` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md index 4b55c00588c4d4..e351f89aa250f5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -41,7 +41,7 @@ El [renderizado **Fluent UI** para los formularios 4D](../FormEditor/forms.md#fl ::: -- Servicios web (SOAP): cuando las [sesiones escalables](../WebServer/sessions.md#enabling-web-sessions) están activadas, los servicios web se ejecutan ahora en [**procesos apropiativos**](../Develop/preemptive.md) en modo compilado. Asegúrese de que su código SOAP es hilo seguro. +- Servicios web (SOAP): cuando las [sesiones escalables](../WebServer/sessions.md#enabling-web-sessions) están activadas, los servicios web se ejecutan ahora en [**procesos apropiativos**](../Develop/preemptive.md) en modo compilado. Make sure that your SOAP code is thread-safe and that the session in which it runs has appropriate [privileges](../API/SessionClass.md#setprivileges). - Servidor web: se elimina la compatibilidad con las URL obsoletas `4DSYNC/` y `4DCGI/`. Ya no se realiza ningún tratamiento específico en estas URL. - Las sesiones usuario web ahora son devueltas por [`Process activity`](../commands/process-activity.md). - El comando [`HIGHLIGHT TEXT`](../commands/highlight-text) es ahora compatible en el contexto de los subformularios. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index 669de5f11a80eb..96c61be07c7447 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -930,7 +930,7 @@ $arch.save() //courseName y name son "Archaeology II" For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. -Remote requests are: +Las peticiones remotas son: - Las peticiones enviadas por las aplicaciones 4D remotas conectadas a través de `Open datastore` - REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index d44456626e3e3b..5b9a784e909ef3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -27,11 +27,11 @@ Si un usuario intenta ejecutar una acción y no tiene los derechos de acceso ade Puede asignar acciones de permiso específicas a los siguientes recursos en su proyecto: -- the [datastore](../ORDA/dsMapping.md#datastore) -- the [dataclasses](../ORDA/dsMapping.md#dataclass) +- el [datastore](../ORDA/dsMapping.md#datastore) +- las [clases de datos](../ORDA/dsMapping.md#dataclass) - [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) - functions of the [data model classes](../ORDA/ordaClasses.md) -- [singleton](../REST/$singleton.md) functions +- funciones [singleton](../REST/$singleton.md) Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma en que se acceda), 4D verifica que la sesión tenga los permisos apropiados y rechaza el acceso si no está autorizado. @@ -190,7 +190,7 @@ El archivo `roles.json` describe todos los parámetros de seguridad web del proy :::caution Recordatorio - El nombre de privilegio "WebAdmin" está reservado a la aplicación. No se recomienda utilizar este nombre para los privilegios personalizados. -- `privileges` and `roles` names are case-insensitive. +- los nombres de `privileges` y `roles` no son sensibles a mayúsculas y minúsculas. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index 94acf76215ffbc..1f93da7931a3b2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -25,7 +25,7 @@ Las sesiones web se utilizan para: - [Aplicaciones web](gettingStarted.md) enviando peticiones http (incluyendo peticiones [SOAP Web services](../commands/theme/Web_Services_Server.md) y [/4DACTION](../WebServer/httpRequests.md#4daction)), - llamadas a la [REST API](../REST/authUsers.md), que utilizan [datastores remotos](../ORDA/remoteDatastores.md) y [formularios Qodly](qodly-studio.md). -## Habilitando sesiones web +## Activando sesiones web {#enabling-web-sessions} La funcionalidad de gestión de sesiones puede ser activada y desactivada en su servidor web 4D. Hay diferentes maneras de habilitar la gestión de la sesión: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServerConfig.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServerConfig.md index 4a467a5ab602c3..e7cc4033c728fd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServerConfig.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServerConfig.md @@ -603,7 +603,7 @@ Los parámetros siguientes siguen siendo compatibles, pero se basan en funcional Estado de validación de la dirección IP para las cookies de sesión. Por razones de seguridad, por defecto el servidor web 4D verifica la dirección IP de cada solicitud que contiene una cookie de sesión y la rechaza si esta dirección no coincide con la dirección IP utilizada para crear la cookie. En algunas aplicaciones específicas, es posible que desee desactivar esta validación y aceptar las cookies de sesión, incluso cuando sus direcciones IP no coinciden. Por ejemplo, cuando los dispositivos móviles cambian entre las redes Wifi y 4G/5G, su dirección IP cambiará. En este caso, debe pasar 0 en esta opción para permitir que los clientes puedan seguir utilizando sus sesiones web aunque las direcciones IP cambien. Tenga en cuenta que este parámetro reduce el nivel de seguridad de su aplicación. Cuando se modifica, esta configuración es efectiva inmediatamente (no es necesario reiniciar el servidor HTTP). -### Generic Web User +### Usuario web genérico This option allows you to designate a user, previously defined in the [4D password table](../Users/handling_users_groups.md), as a "Generic Web User". In this case, each browser allowed to connect to the database gets access authorizations and restrictions associated with this user. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index 72146ab7f99e17..b49cfefe64375a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -8,7 +8,7 @@ slug: /WritePro/write-pro-interface Un desarrollador 4D puede implementar fácilmente estas paletas en su aplicación. Así, los usuarios finales pueden gestionar todas las propiedades de 4D Write Pro, como las fuentes, la alineación del texto, los marcadores, la disposición de las tablas y los marcos. -## Installation & documentation +## Instalación y documentación 4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/settings/web.md b/i18n/es/docusaurus-plugin-content-docs/version-21/settings/web.md index d827ba37fa6121..6cea9f5a1781b0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/settings/web.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/settings/web.md @@ -126,7 +126,7 @@ Define el sistema de autenticación que desea aplicar a su servidor web. Se prop Se recomienda utilizar la autenticación **personalizada**. Ver la sección[**autenticación**](../WebServer/authentication.md). -#### Generic Web User +#### Usuario web genérico Ver [Propiedades obsoletas](../WebServer/webServerConfig.md#deprecated-settings). diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md index 9f34bdb1d64094..9242ff1eaa1955 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,6 +10,9 @@ Lisez [**Les nouveautés de 4D 21 R2**](https://blog.4d.com/fr-whats-new-in-4d-v #### Points forts - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). + +- 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. + - [**Liste des bugs corrigés**](https://bugs.4d.fr/fixedbugslist?version=21_R2) : liste de tous les bugs qui ont été corrigés dans 4D 21 R2. #### Changements de comportement diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/sessions.md index 693d469183f39d..7f76d591b5639f 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -25,7 +25,7 @@ Les sessions Web sont utilisées par : - les [applications Web](gettingStarted.md) envoyant des requêtes http (y compris les [Web services SOAP](../commands/theme/Web_Services_Server.md) et les requêtes [/4DACTION](../WebServer/httpRequests.md#4daction)), - les appels à l'[API REST](../REST/authUsers.md), qui sont effectués par les [datastores distants](../ORDA/remoteDatastores.md) et les [pages Qodly](qodly-studio.md). -## Activation des sessions web +## Enabling web sessions {#enabling-web-sessions} La gestion de session peut être activée et désactivée sur votre serveur Web 4D. Il y a différentes façons d'activer la gestion de session : diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md index 4c7c9e0216982f..2264c1e78e076c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md @@ -67,11 +67,13 @@ L'API donne accès à de multiples ressources qui permettent une interaction tra | `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | Accès à l'API Images. | | `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | Accès à l'API des modérations. | | `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | Accès à l'API Embeddings (vectorisation). | +| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Access to the Files API. | ### Exemple d'utilisation ```4d $client.chat.completions.create(...) $client.images.generate(...) +$client.files.create(...) $client.model.lists(...) ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md new file mode 100644 index 00000000000000..ac57874faa9d3e --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md @@ -0,0 +1,29 @@ +--- +id: openaifile +title: OpenAIFile +--- + +# OpenAIFile + +The `OpenAIFile` class represents a file object in the OpenAI API. Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. + +## Propriétés + +| Nom de propriété | Type | Description | +| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | The file identifier, which can be referenced in the API endpoints. | +| `bytes` | Integer | The size of the file, in bytes. | +| `created_at` | Integer | The Unix timestamp (in seconds) for when the file was created. | +| `expires_at` | Integer | The Unix timestamp (in seconds) for when the file will expire. | +| `filename` | Text | The name of the file. | +| `object` | Text | The object type, which is always "file". | +| `purpose` | Text | The intended purpose of the file. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | +| `status` | Text | **Deprecated.** The current status of the file, which can be either `uploaded`, `processed`, or `error`. | +| `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | + +## Voir également + +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md new file mode 100644 index 00000000000000..e294aa58d34b39 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md @@ -0,0 +1,38 @@ +--- +id: openaifiledeletedresult +title: OpenAIFileDeletedResult +--- + +# OpenAIFileDeletedResult + +The `OpenAIFileDeletedResult` class contains the result of a file deletion operation. + +## Hérite de + +[OpenAIResult](OpenAIResult.md) + +## Propriétés calculées + +| Propriété | Type | Description | +| --------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Returns the file deletion result from the API response. Returns `Null` if the response doesn't contain a valid result. | + +## Exemple d'utilisation + +```4d +// Delete a file +var $fileId:="file-abc123" +var $result:=$client.files.delete($fileId; Null) +var $deletionStatus:=$result.deleted + +If ($deletionStatus.deleted) + ALERT("File "+$deletionStatus.id+" was successfully deleted") +Else + ALERT("Failed to delete file") +End if +``` + +## Voir également + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileDeleted](OpenAIFileDeleted.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md new file mode 100644 index 00000000000000..30204dbca2be36 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md @@ -0,0 +1,38 @@ +--- +id: openaifilelistparameters +title: OpenAIFileListParameters +--- + +# OpenAIFileListParameters + +The `OpenAIFileListParameters` class contains parameters for listing files in the OpenAI API. + +## Hérite de + +[OpenAIParameters](OpenAIParameters.md) + +## Propriétés + +| Nom de propriété | Type | Required | Par défaut | Description | +| ---------------- | ------- | --------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `after` | Text | Optionnel | - | A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `after=obj_foo` in order to fetch the next page of the list. | +| `limit` | Integer | Optionnel | 10000 | A limit on the number of objects to be returned. Limit can range between 1 and 10,000, and the default is 10,000. | +| `order` | Text | Optionnel | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | +| `purpose` | Text | Optionnel | - | Only return files with the given purpose. | + +## Exemple d'utilisation + +```4d +// Get first 100 files with purpose "fine-tune" +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 +$params.purpose:="fine-tune" +$params.order:="desc" + +var $result:=$client.files.list($params) +``` + +## Voir également + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md new file mode 100644 index 00000000000000..90fddc970db380 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md @@ -0,0 +1,66 @@ +--- +id: openaifilelistresult +title: OpenAIFileListResult +--- + +# OpenAIFileListResult + +The `OpenAIFileListResult` class contains the result of listing files from the OpenAI API. + +## Hérite de + +[OpenAIResult](OpenAIResult.md) + +## Propriétés calculées + +| Propriété | Type | Description | +| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | +| `first_id` | Text | Returns the ID of the first file in the list, or an empty string if not available. | +| `last_id` | Text | Returns the ID of the last file in the list, or an empty string if not available. | +| `has_more` | Boolean | Indicates if there are more files beyond this page. `True` if there are more files to fetch, `False` otherwise. | + +## Exemple d'utilisation + +### Basic Usage + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 + +var $result:=$client.files.list($params) +var $files:=$result.files + +For each ($file; $files) + // Process each OpenAIFile object + // $file.filename -> "salesOverview.pdf" + // $file.bytes -> 175 + // $file.purpose -> "assistants" +End for each +``` + +### Pagination Example + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 + +var $result:=$client.files.list($params) +var $allFiles:=$allFiles.combine($result.files) + +// Continue fetching if there are more files +While ($result.has_more) + $params.after:=$result.last_id + $result:=$client.files.list($params) + $allFiles:=$allFiles.combine($result.files) +End while + +// $allFiles now contains all files from the organization +``` + +## Voir également + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md new file mode 100644 index 00000000000000..a75c7c3f486302 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -0,0 +1,43 @@ +--- +id: openaifileparameters +title: OpenAIFileParameters +--- + +# OpenAIFileParameters + +The `OpenAIFileParameters` class handles parameters for file upload operations. + +## Hérite de + +[OpenAIParameters](OpenAIParameters.md) + +## Propriétés + +| Nom de propriété | Type | Required | Description | +| ---------------- | ------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `expires_after` | Object | Optionnel | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | + +### `expires_after` Object Structure + +The `expires_after` object contains the following properties: + +| Nom de propriété | Type | Description | +| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `anchor` | Text | Anchor timestamp after which the expiration policy applies. Supported anchors: `created_at`. | +| `seconds` | Integer | The number of seconds after the anchor time that the file will expire. Must be between 3600 (1 hour) and 2592000 (30 days). | + +## Exemple d'utilisation + +```4d +var $params:=cs.AIKit.OpenAIFileParameters.new() + +// Set expiration after 7 days +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=604800 // 7 days +``` + +## Voir également + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileResult](OpenAIFileResult.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md new file mode 100644 index 00000000000000..71429a97e450ba --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md @@ -0,0 +1,36 @@ +--- +id: openaifileresult +title: OpenAIFileResult +--- + +# OpenAIFileResult + +The `OpenAIFileResult` class contains the result of a single file operation (upload or retrieve). + +## Hérite de + +[OpenAIResult](OpenAIResult.md) + +## Propriétés calculées + +| Propriété | Type | Description | +| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `file` | [OpenAIFile](OpenAIFile.md) | Returns the file object from the API response. Returns `Null` if the response doesn't contain a valid file. | + +## Exemple d'utilisation + +```4d +// Upload a file +var $file:=File("/RESOURCES/training-data.jsonl") + +var $result:=$client.files.create($file; "user_data") +var $uploadedFile:=$result.file + +// Retrieve file information +var $retrieveResult:=$client.files.retrieve($uploadedFile.id) +``` + +## Voir également + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md new file mode 100644 index 00000000000000..1646f07607eac8 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -0,0 +1,173 @@ +--- +id: openaifilesapi +title: OpenAIFilesAPI +--- + +# OpenAIFilesAPI + +The `OpenAIFilesAPI` class provides functionalities to manage files using OpenAI's API. Files can be uploaded and used across various endpoints including [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning), [Batch](https://platform.openai.com/docs/api-reference/batch) processing, and Vision. + +> **Note:** This API is only compatible with OpenAI. Other providers listed in the [compatible providers](../compatible-openai.md) documentation do not support file management operations. + +API Reference: + +## File Size Limits + +- **Individual files:** up to 512 MB per file +- **Organization total:** up to 1 TB (cumulative size of all files uploaded by your [organization](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization)) + +## Fonctions + +### create() + +**create**(*file* : 4D.File | 4D.Blob; *purpose* : Text; *parameters* : cs.OpenAIFileParameters) : cs.OpenAIFileResult + +Upload a file that can be used across various endpoints. + +**Endpoint:** `POST https://api.openai.com/v1/files` + +| Paramètres | Type | Description | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `file` | [4D.File](https://developer.4d.com/docs/API/FileClass) or [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | The File or Blob object (not file name) to be uploaded. | +| `purpose` | Text | **Required.** The intended purpose of the uploaded file. | +| `parameters` | [OpenAIFileParameters](OpenAIFileParameters.md) | Optional parameters including expiration policy. | +| Résultat | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + +**Throws:** An error if `file` is not a 4D.File or 4D.Blob, or if `purpose` is empty. + +#### Supported Purposes + +- `assistants`: Used in the Assistants API (⚠️ [deprecated by OpenAI](https://platform.openai.com/docs/assistants/whats-new)) +- `batch`: Used in the [Batch API](https://platform.openai.com/docs/api-reference/batch) (expires after 30 days by default) +- `fine-tune`: Used for [fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning) +- `vision`: Images used for vision fine-tuning +- `user_data`: Flexible file type for any purpose +- `evals`: Used for eval data sets + +#### File Format Requirements + +- **Fine-tuning API:** Only supports `.jsonl` files with specific required formats +- **Batch API:** Only supports `.jsonl` files up to 200 MB with specific required format +- **Assistants API:** Supports specific file types (see Assistants Tools guide) +- **Chat Completions API:** PDFs are only supported + +#### Exemple + +```4d +var $file:=File("/RESOURCES/training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=2592000 // 30 days + +var $result:=$client.files.create($file; "fine-tune"; $params) + +If ($result.success) + var $uploadedFile:=$result.file + // $uploadedFile.id -> "file-abc123" + // $uploadedFile.filename -> "training-data.jsonl" + // $uploadedFile.bytes -> 120000 +End if +``` + +### retrieve() + +**retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult + +Returns information about a specific file. + +**Endpoint:** `GET https://api.openai.com/v1/files/{file_id}` + +| Paramètres | Type | Description | +| ------------ | --------------------------------------- | ----------------------------------------------------------------------------- | +| `fileId` | Text | **Required.** The ID of the file to retrieve. | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | +| Résultat | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + +**Throws:** An error if `fileId` is empty. + +#### Exemple + +```4d +var $result:=$client.files.retrieve("file-abc123") + +If ($result.success) + var $file:=$result.file + // $file.filename -> "mydata.jsonl" + // $file.bytes -> 120000 + // $file.purpose -> "fine-tune" +End if +``` + +### list() + +**list**(*parameters* : cs.OpenAIFileListParameters) : cs.OpenAIFileListResult + +Returns a list of files that belong to the user's organization. + +**Endpoint:** `GET https://api.openai.com/v1/files` + +| Paramètres | Type | Description | +| ------------ | ------------------------------------------------------- | ----------------------------------------------------------------- | +| `parameters` | [OpenAIFileListParameters](OpenAIFileListParameters.md) | Optional parameters for filtering and pagination. | +| Résultat | [OpenAIFileListResult](OpenAIFileListResult.md) | The file list result | + +#### Exemple + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 +$params.order:="desc" + +var $result:=$client.files.list($params) + +If ($result.success) + var $files:=$result.files + // $files.length -> 2 + + For each ($file; $files) + // $file.filename -> "salesOverview.pdf", "puppy.jsonl", etc. + End for each +End if +``` + +### delete() + +**delete**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileDeletedResult + +Delete a file. + +**Endpoint:** `DELETE https://api.openai.com/v1/files/{file_id}` + +| Paramètres | Type | Description | +| ------------ | ----------------------------------------------------- | --------------------------------------------------------------------------- | +| `fileId` | Text | **Required.** The ID of the file to delete. | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | +| Résultat | [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) | The file deletion result | + +**Throws:** An error if `fileId` is empty. + +#### Exemple + +```4d +var $result:=$client.files.delete("file-abc123") + +If ($result.success) + var $status:=$result.deleted + + If ($status.deleted) + ALERT("File deleted successfully") + End if +End if +``` + +## Voir également + +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index 360f1c425489f5..1af7df45fbcd98 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -36,16 +36,50 @@ La classe `OpenAIMessage` représente un message structuré contenant un rôle, Ajoute une URL d'image au contenu du message. +### addFileId() + +**addFileId**(*fileId* : Text) + +| Paramètres | Type | Description | +| ---------- | ---- | -------------------------------------------------- | +| *fileId* | Text | The file ID to add to the message. | + +Adds a file reference to the content of the message. If the content is currently text, it will be converted to a collection format. + ## Exemple d'utilisation -### Créer un message simple et joindre une image +### Basic Text Message + +```4d +// Create an instance of OpenAIMessage +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Hello!"}) +``` + +### Adding Images ```4d -// Créer une instance d'OpenAIMessage -var $message:=cs.AIKit.OpenAIMessage({role : "user" ; content : "Hello !"}) +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this image:"}) + +// Add an image URL with details +$message.addImageURL("http://example.com/image.jpg"; "high") +``` + +### Adding File -// Ajouter une image URL avec des détails -$message.addImageURL("http://example.com/image.jpg" ; "high") +```4d +// Upload a file with user_data purpose +var $file:=File("/RESOURCES/document.pdf") +var $uploadResult:=$client.files.create($file; "user_data") + +If ($uploadResult.success) + var $uploadedFile:=$uploadResult.file + + // Create message and attach the file using its ID + var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this document:"}) + $message.addFileId($uploadedFile.id) + + // $message.content -> [{type: "text"; text: "Please analyze this document:"}; {type: "file"; file_id: "file-abc123"}] +End if ``` ### Répondre à un message d'appel d'outil diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/overview.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/overview.md index 27f37b8f05b508..3f9bcc014f4969 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/overview.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/overview.md @@ -103,6 +103,42 @@ Obtenir une information de modèle par id var $model:=$client.models.retrieve("a model id").model ``` +#### Files + +https://platform.openai.com/docs/api-reference/files + +Upload a file for use with other endpoints + +```4d +var $file:=File("/path/to/your/file.jsonl") +var $result:=$client.files.create($file; "fine-tune") +var $fileId:=$result.file.id +``` + +List all files + +```4d +var $files:=$client.files.list().files +``` + +Retrieve file information + +```4d +var $fileInfo:=$client.files.retrieve($fileId).file +``` + +Delete a file + +```4d +var $deleteResult:=$client.files.delete($fileId) +``` + +:::tip Article(s) de blog sur le sujet + +[Transform Static Documents into Actionable Knowledge with 4D AIKit](https://blog.4d.com/transform-static-documents-into-actionable-knowledge-with-4d-aikit). + +::: + #### Modérations https://platform.openai.com/docs/api-reference/moderations diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index 6abebd4d37060d..116968db797f9b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -25,7 +25,7 @@ Les sessions Web sont utilisées par : - les [applications web](gettingStarted.md) qui envoient des requêtes http, - les appels à l'[API REST](../REST/authUsers.md), qui sont effectués par les [datastores distants](../ORDA/remoteDatastores.md) et les [pages Qodly](qodly-studio.md). -## Activation des sessions web +## Enabling web sessions {#enabling-web-sessions} La gestion de session peut être activée et désactivée sur votre serveur Web 4D. Il y a différentes façons d'activer la gestion de session : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md index e9ad2cdebdf87d..924056902d2efa 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -41,7 +41,7 @@ Le [rendu **Fluent UI** pour les formulaires 4D](../FormEditor/forms.md#fluent-u ::: -- Services web (SOAP) : lorsque les [sessions évolutives](../WebServer/sessions.md#enabling-web-sessions) sont activées, les services web s'exécutent désormais dans des [**process préemptifs**](../Develop/preemptive.md) en mode compilé. Assurez-vous que votre code SOAP est thread-safe. +- Services web (SOAP) : lorsque les [sessions évolutives](../WebServer/sessions.md#enabling-web-sessions) sont activées, les services web s'exécutent désormais dans des [**process préemptifs**](../Develop/preemptive.md) en mode compilé. Make sure that your SOAP code is thread-safe and that the session in which it runs has appropriate [privileges](../API/SessionClass.md#setprivileges). - Serveur web : la prise en charge des URLs dépréciés `4DSYNC/` et `4DCGI/` est supprimée. Plus aucun traitement spécifique n'est effectué sur ces URLs. - Les sessions utilisateurs Web sont désormais renvoyées par [`Process activity`](../commands/process-activity.md). - La commande [`HIGHLIGHT TEXT`](../commands/highlight-text) est maintenant prise en charge dans le contexte des sous-formulaires. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index 693d469183f39d..7f76d591b5639f 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -25,7 +25,7 @@ Les sessions Web sont utilisées par : - les [applications Web](gettingStarted.md) envoyant des requêtes http (y compris les [Web services SOAP](../commands/theme/Web_Services_Server.md) et les requêtes [/4DACTION](../WebServer/httpRequests.md#4daction)), - les appels à l'[API REST](../REST/authUsers.md), qui sont effectués par les [datastores distants](../ORDA/remoteDatastores.md) et les [pages Qodly](qodly-studio.md). -## Activation des sessions web +## Enabling web sessions {#enabling-web-sessions} La gestion de session peut être activée et désactivée sur votre serveur Web 4D. Il y a différentes façons d'activer la gestion de session : diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md index ce361cd5f3dab8..8e9df8cecf1a7b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,6 +10,9 @@ title: リリースノート #### ハイライト - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). + +- 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. + - [**修正リスト**](https://bugs.4d.fr/fixedbugslist?version=21_R2): 4D 21 R2 で修正されたバグのリストです ([日本語版はこちら](https://4d-jp.github.io/2023/178/release-note-version-20r2/))。 #### 動作の変更 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index e0066e085544e8..9af378952d1c87 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -388,25 +388,25 @@ Function event saving ($event : Object) - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) -This event is triggered **while** the entity is actually saved. If a [`validateSave()`](#function-event-validatesave) event function was defined, the `saving()` event function is called if no error was triggered by `validateSave()`. For example, you can use this event to create a document on a Google Drive account. +このイベントはエンティティが実際に保存されている**最中に**トリガーされます。 [`validateSave()`](#function-event-validatesave) イベント関数が定義されていると場合、 `saving()` イベント関数は、 `validateSave()`がエラーを何もトリガーしなかった場合に呼び出されます。 例えば、このイベントを使用して、Google Drive アカウントにドキュメントを作成することができます。 :::note -The business logic should raise errors which can't be detected during the `validateSave()` events, e.g. a network error +このビジネスロジックは `validateSave()` イベントで検知できないエラーを生成する必要があります(例: ネットワークエラー) ::: -During the save action, 4D engine errors can be raised (index, stamp has changed, not enough space on disk). +保存アクション中、4D エンジンのエラー(インデックスやスタンプが変更された、ディスク上に十分なスペースがありません、など)が生成されることがあります。 アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 -When a file is saved on disk, catch errors related to disk space for example. +ファイルがディスク上に保存されると、例えばディスクの要領に関連したエラーをキャッチします。 ```4d // ProductsEntity class -// saving event at attribute level +// 属性レベルでの保存イベント Function event saving userManualPath($event : Object) : Object var $result : Object @@ -416,17 +416,17 @@ var $fileCreated : Boolean If (This.userManualPath#"") $userManualFile:=File(This.userManualPath) - // The user manual document file is created on the disk - // This may fail if no more space is available + // ユーザーマニュアルドキュメントファイルがディスク上に作成されます + // これはディスク上に空き容量がない場合には失敗する可能性があります Try - // The file content has been generated and stored in a map in Storage.docMap previously + // ファイルのコンテンツは事前に生成され Storage.docMap に保存されています $docInfo:=Storage.docMap.query("name = :1"; This.name).first() $userManualFile.setContent($docInfo.content) Catch - // No more room on disk for example + // 例えばディスク上に要領が空いてない場合 $result:={/ - errCode: 1; message: "Error during the save action for this product"; / - extraDescription: {info: "There is no available space on disk to store the user manual"}/ + errCode: 1; message: "この製品の保存アクション中にエラー発生"; / + extraDescription: {info: "このディスク上にはユーザーマニュアルを保存するスペースがありません"}/ } End try End if @@ -437,7 +437,7 @@ return $result :::note -The content of the file is generated outside the `saving` event because it can be time consuming. +この例ではファイルの中身は `saving` イベントの外で生成されています。時間がかなりかかる可能性があるからです。 ::: @@ -447,31 +447,31 @@ The content of the file is generated outside the `saving` event because it can b ```4d Function event afterSave($event : Object) -// code +// コード ``` -This event is triggered just after an entity is saved in the data file, when at least one attribute was modified. It is not executed if no attribute has been touched in the entity. +このイベントは、少なくとも一つの属性が編集されていたエンティティがデータファイルに保存された直後にトリガーされます。 エンティティ内でどの属性もタッチされていない場合には、これは実行されません。 -This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. For example, it can be used to send a confirmation email after data have been saved. Or, in case of error while saving data, it can make a rollback to restore a consistent state of data. +このイベントは、データを保存した後に、アプリケーション外に保存アクションを電波させたい場合や、管理タスクを実行したりするのに有用です。 例えばこれを使用して、データが保存された後に確認メールを送信することができます。 あるいは、データ保存中にエラーが発生した場合、これを使用してロールバックを行い、データの一貫性を復元することもできます。 関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -- To avoid infinite loops, calling a [`save()`](../API/EntityClass.md#save) on the current entity (through `This`) in this function is **not allowed**. It will raise an error. -- Throwing an [error object](#error-object) is **not supported** by this function. +- 無限ループに陥るのを避けるため、この関数内でカレントのエンティティ上で(`This` を通して) [`save()`](../API/EntityClass.md#save) を呼び出すのは**許可されていません**。 これはエラーを発生させます。 +- この関数では[エラーオブジェクト](#エラーオブジェクト) をスローすることは**サポートされていません**。 #### 例題 -If an error occurred in the above saving event, the attribute value is reset accordingly in the `afterSave` event: +上記の保存イベント中にエラーが発生した場合、属性値は `afterSave` イベントでリセットされます: ```4d // ProductsEntity class Function event afterSave($event : Object) If (($event.status.success=False) && ($event.status.errors=Null)) - // $event.status.errors is filled if the error comes from the validateSave event + // エラーがvalidateSave イベントから来た場合には$event.status.errors に値が入れられます - // The userManualPath attribute has not been properly saved - // Its value is reset + // userManualPath 属性は適切には保存されていません + // その値はリセットされます If ($event.savedAttributes.indexOf("userManualPath")=-1) This.userManualPath:="" This.status:="KO" @@ -487,29 +487,29 @@ End if ```4d Function event validateDrop($event : Object) Function event validateDrop ($event : Object) -// code +// コード ``` -This event is triggered each time an entity is about to be dropped. +このイベントはエンティティがドロップ(削除)されようとするたびに毎回トリガーされます。 - 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 - 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -This event is triggered by the following features: +このイベントは以下の機能によってトリガーされます: - [`entity.drop()`](../API/EntityClass.md#drop) - [`entitySelection.drop()`](../API/DataClassClass.md#fromcollection) -- [deletion control rules](https://doc.4d.com/4Dv20/4D/20.2/Relation-properties.300-6750290.en.html#107320) that can be defined at the database structure level. +- データベースストラクチャーレベルで定義されている可能性のある[削除制御](https://doc.4d.com/4Dv20/4D/20.2/Relation-properties.300-6750290.ja.html#107320)。 -This event is triggered **before** the entity is actually dropped, allowing you to check data consistency and if necessary, to stop the drop action. +このイベントはエンティティが実際にドロップされる**前に**トリガーされるため、データの一貫性をチェックし、必要であればドロップアクションを停止することができます。 アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 -In this example, it is not allowed to drop a product that is not labelled "TO DELETE". In this case, you return an error object and thus, stop the drop action. +この例では、"TO DELETE" とラベルのついていない製品をドロップすることはできません。 この場合、エラーオブジェクトを返すことで、ドロップアクションを停止することができます。 ```4d // ProductsEntity class @@ -518,10 +518,10 @@ Function event validateDrop status($event : Object) : Object var $result : Object -// Products must be marked as TO DELETE to be dropped +// ドロップするためには、製品は TO DELETE と記録されている必要があります If (This.status#"TO DELETE") - $result:={errCode: 1; message: "You can't drop this product"; \ - extraDescription: {info: "This product must be marked as To Delete"}; seriousError: False} + $result:={errCode: 1; message: "この製品は削除できません"; \ + extraDescription: {info: "この製品はTo Delete と記録されていなければなりません"}; seriousError: False} End if return $result @@ -534,27 +534,27 @@ return $result ```4d Function event dropping($event : Object) Function event dropping ($event : Object) -// code +// コード ``` -This event is triggered each time an entity is being dropped. +このイベントはエンティティがドロップ(削除)されるたびにトリガーされます。 - 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 - 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -This event is triggered by the following features: +このイベントは以下の機能によってトリガーされます: - [`entity.drop()`](../API/EntityClass.md#drop) - [`entitySelection.drop()`](../API/DataClassClass.md#fromcollection) -- [deletion control rules](https://doc.4d.com/4Dv20/4D/20.2/Relation-properties.300-6750290.en.html#107320) that can be defined at the database structure level. +- データベースストラクチャーレベルで定義されている可能性のある[削除制御](https://doc.4d.com/4Dv20/4D/20.2/Relation-properties.300-6750290.ja.html#107320)。 -This event is triggered **while** the entity is actually dropped. If a [`validateDrop()`](#function-event-validatedrop) event function was defined, the `dropping()` event function is called if no error was triggered by `validateDrop()`. +このイベントはエンティティが実際にドロップされている**最中に**トリガーされます。 [`validateDrop()`](#function-event-validatedrop) イベント関数が定義されている場合、 `dropping()` イベント関数は、 `validateDrop()` がエラーを何もトリガーしなかった場合に呼び出されます。 :::note -The business logic should raise errors which cannot be detected during the `validateDrop()` events, e.g. a network error. +このビジネスロジックは `validateDrop()` イベントで検知できないエラーを生成する必要があります(例: ネットワークエラー)。 ::: @@ -562,7 +562,7 @@ The business logic should raise errors which cannot be detected during the `vali #### 例題 -Here is an example of `dropping` event at entity level: +これはエンティティレベルでの `dropping` イベントの一例です: ```4d // ProductsEntity class @@ -573,14 +573,14 @@ var $userManualFile : 4D.File $userManualFile:=File(This.userManualPath) - // When dropping a product, its user manual is also deleted on the disk - // This action may fail + // 製品をドロップする場合、そのユーザーマニュアルもディスク上から削除されます + // このアクションは失敗する可能性があります Try If ($userManualFile.exists) $userManualFile.delete() End if Catch - // Dropping the user manual failed + // ユーザーマニュアルのドロップに失敗した場合 $result:={errCode: 1; message: "Drop failed"; extraDescription: {info: "The user manual can't be dropped"}} End try @@ -593,27 +593,27 @@ return $result ```4d Function event afterDrop($event : Object) -// code +// コード ``` -This event is triggered just after an entity is dropped. +このイベントはエンティティがドロップ(削除)された直後にトリガーされます。 -This event is useful after dropping data to propagate the drop action outside the application or to execute administration tasks. For example, it can be used to send a cancellation email after data have been dropped. Or, in case of error while dropping data, it can log an information for the administrator to check data consistency. +このイベントは、データをドロップした後に、アプリケーション外にドロップアクションを伝播させたい場合や、管理タスクを実行したりするのに有用です。 例えばこれを使用して、データがドロップされたあとにキャンセルメールを送信することができます。 あるいは、データのドロップ中にエラーが発生した場合、あとで管理者がデータの一貫性をチェックできるように情報を記録することができます。 関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -- To avoid infinite loops, calling a [`drop()`](../API/EntityClass.md#drop) on the current entity (through `This`) in this function is **not allowed**. It will raise an error. -- Throwing an [error object](#error-object) is **not supported** by this function. +- 無限ループに陥るのを避けるため、この関数内でカレントのエンティティ上で(`This` を通して) [`drop()`](../API/EntityClass.md#drop) を呼び出すのは**許可されていません**。 これはエラーを発生させます。 +- この関数では[エラーオブジェクト](#エラーオブジェクト) をスローすることは**サポートされていません**。 :::note -The dropped entity is referenced by `This` and still exists in memory. +ドロップされたエンティティは `This` を通して参照され、メモリー内に引き続き存在します。 ::: #### 例題 -If the drop action failed, then the product must be checked manually: +ドロップアクションが失敗した場合、製品は手動でチェックされる必要があります: ```4d Function event afterDrop($event : Object) @@ -621,8 +621,8 @@ Function event afterDrop($event : Object) var $status : Object If (($event.status.success=False) && ($event.status.errors=Null)) - //$event.status.errors is filled - //if the error comes from the validateDrop event + //$event.status.errors には、 + //エラーが validateDrop イベントから来た場合には値が入れられます This.status:="Check this product - Drop action failed" $status:=This.save() End if diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index a49e8ce5d07ead..621d59f027e73c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -3,7 +3,7 @@ id: ordaClasses title: データモデルクラス --- -ORDA allows you to create high-level class functions above the [data model](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.en.html). これによってビジネス指向のコードを書き、APIのように "公開" することができます。 データストア、データクラス、エンティティ、およびエンティティセレクションはそれぞれ、関数を持つことのできるクラスオブジェクトとして提供されています。 +ORDAでは、[データモデル](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.ja.html)の上に高レベルクラス関数を作成することができます。 これによってビジネス指向のコードを書き、APIのように "公開" することができます。 データストア、データクラス、エンティティ、およびエンティティセレクションはそれぞれ、関数を持つことのできるクラスオブジェクトとして提供されています。 たとえば、選択中の社員より給与の高い社員一覧を返す `getNextWithHigherSalary()` 関数を `EmployeeEntity` クラスに作成したとします。 この関数は簡単に呼び出すことができます: @@ -214,9 +214,9 @@ ORDA で公開されるテーブル毎に、Entity クラスが `cs` クラス #### Class constructor -You can define a **class constructor** for an Entity class. The class constructor is called whenever an entity is created in memory and can be used to initialize some values. +エンティティクラスに対して **class constructor** を定義することができます。 クラスコンストラクターはエンティティがメモリ内に作成されるたびに呼び出され、これを使用して一部の値を初期化することができます。 -For information, please refer to the [Class constructor](#class-constructor-1) section. +詳細な情報については[Class constructor](#class-constructor-1) を参照してください。 #### 計算属性 @@ -278,7 +278,7 @@ End if - クラス定義の際、[`Class extends`](../Concepts/classes.md#class-extends-classname) ステートメントに使用する親クラスの名前は完全に合致するものでなくてはいけません (文字の大小が区別されます)。 たとえば、EntitySelection クラスを継承するには `Class extends EntitySelection` と書きます。 -- データモデルクラスオブジェクトのインスタンス化に `new()` キーワードは使えません (エラーが返されます)。 You must use a regular function as listed in the [`Instantiated by` column of the ORDA class table](#architecture). +- データモデルクラスオブジェクトのインスタンス化に `new()` キーワードは使えません (エラーが返されます)。 上述の ORDA クラステーブルに一覧化されている、通常の [インスタンス化の方法](#アーキテクチャー) を使う必要があります。 - **`4D`** [クラスストア](Concepts/classes.md#クラスストア) のネイティブな ORDA クラス関数を、データモデルユーザークラス関数でオーバーライドすることはできません。 @@ -306,7 +306,7 @@ End if ```4d // Entity class Class constructor() -// code +// コード ``` :::note @@ -315,48 +315,48 @@ Class constructor() ::: -An ORDA class constructor function is triggered just after a new entity is created in memory, [whatever the way it is created](#commands-that-trigger-the-class-constructor-functions). It is useful to set initial values for entity instantiation, for example a custom ID. +ORDA クラスコンストラクター関数は、[作成された方法に関わらず](#クラス関数をトリガーするコマンド)、新規エンティティがメモリ内に作成された直後にトリガーされます。 これは例えばカスタムのID など、エンティティインスタンス化時に初期値を設定するのに有用です。 -This function can only be set at the [entity level](#entity-class). There can only be one constructor function in an entity class (otherwise an error is returned). +この関数は [エンティティレベル](#entity-クラス) でのみ設定可能です。 コンストラクター関数は、1つのエンティティクラスに 1つしか存在できません (そうでない場合はエラーが返されます)。 -This ORDA class constructor function does not receive or return parameters. However, you can use it to initialize attribute values using [`This`](../commands/this.md). Note that values initialized by the constructor are overriden if corresponding attributes are filled by the code. +ORDA クラスコンストラクター関数は、引数を受け取ることも返すこともしません。 しかし、 [`This`](../commands/this.md).を使用して属性値を初期化することができます。 コンストラクターによって初期化された値は、対応する属性がコードによって値が入力される場合にはそれによって上書きされるということに注意してください。 :::note -An ORDA class constructor function is similar to a [user class constructor function](../Concepts/classes.md#class-constructor), with the following differences: +ORDA クラスコンストラクター関数は、[ユーザークラスコンストラクター関数](../Concepts/classes.md#class-constructor) と似ていますが、以下の点において違います: -- you cannot pass parameters to the constructor, -- you cannot use `shared`, `session`, or `singleton` keywords, -- you cannot call the [`Super`](../Concepts/classes.md#super) keyword within the function, -- the class constructor cannot be called using the `new()` function on an entity (entities can only be created by specific functions, see below). +- コンストラクターには引数を渡すことはできません +- `shared`、 `session` または `singleton` キーワードを使用することはできません +- 関数内で [`Super`](../Concepts/classes.md#super) キーワードを呼び出すことはできません +- クラスコンストラクターは、エンティティに `new()` 関数を使用することでは呼び出せません(エンティティは特定の関数でしか作成することはできません、以下参照)。 ::: -#### Commands that trigger the Class constructor functions +#### クラスコンストラクター関数をトリガーするコマンド -The `Class constructor` function is triggered by the following commands and features: +`Class constructor` 関数は、以下のコマンドと機能によってトリガーされます: - [`dataClass.new()`](../API/DataClassClass.md#new) - [`dataClass.fromCollection()`](../API/DataClassClass#fromcollection) -- [REST API $method=update](../REST/$method.md#methodupdate) in a POST without the `__KEY` and `__STAMP` parameters -- the [Data Explorer](../Admin/dataExplorer.md#editing-data). +- `__KEY` および `__STAMP` 引数のない POST での[REST API $method=update](../REST/$method.md#methodupdate) +- [データエクスプローラー](../Admin/dataExplorer.md#editing-data) :::note 注記 -- The [`entity.clone()`](../API/EntityClass.md#clone) function does not trigger the entity Class constructor. -- Records created at the 4D database level using 4D classic language commands or standard actions do not trigger the entity Class constructor. +- [`entity.clone()`](../API/EntityClass.md#clone) 関数はエンティティクラスコンストラクターをトリガーしません。 +- 4D クラシックランゲージ言語コマンドまたは標準アクションを使用して4D データベースレベルで作成されたレコードは、エンティティクラスコンストラクターをトリガーしません。 ::: -#### Remote configurations +#### リモート構成 -When using a remote configurations, you need to pay attention to the following principles: +リモート構成を使用している場合、以下の原則に対して注意する必要があります: -- In **client/server** the function can be called on the client or on the server, depending on the location of the calling code. When it is called on the client, it is not triggered again when the client attempts to save the new entity and sends an update request to the server to create in memory on the server. +- **クライアント/サーバー** では、コードを呼び出した場所によっては関数はクライアントまたはサーバーのどちらでも呼び出すことができます。 クライアント上で呼び出された場合、クライアントが新規エンティティを保存しようとして、サーバーのメモリ上に作成するために更新リクエストを送信したときにはもう一度トリガーされることはありません。 :::warning -Since functions such as [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) can create a large number of entities and thus trigger the entity Class constructor consequently, you need to make sure the constructor code does not execute excessive time-consuming processings, for performance reasons. In remote configurations (see below), the code should not trigger multiple requests to the server. +[`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) のような関数は大量のエンティティを一度を作成し、結果としてエンティティクラスコンストラクターをトリガーしうるため、パフォーマンス上の理由から、コンストラクターコードに過度に時間を消費するような処理を実行しないように注意する必要があります。 リモート設定においては(以下参照)、コードはサーバーに対して複数のリクエストをトリガーしてはいけません。 ::: @@ -372,7 +372,7 @@ Class constructor() ``` -#### Example 2 (diagram): Client/server +#### 例題 2 (図): クライアント/サーバー ```mermaid @@ -382,7 +382,7 @@ Client->>+Client: Form.product:=ds.Products.new() Note over Client: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" -Note over Client: Form.product.creationDate is "06/17/25"
    Form.product.comment is "Automatic comment" +Note over Client: Form.product.creationDate は "25/06/17"
    Form.product.comment は "Automatic comment" Client->>+Server: Form.product.save() @@ -391,47 +391,47 @@ Server-->>-Client: Success ``` -#### Example 3 (diagram): Qodly - Standard action +#### 例題 3 (図): Qodly - 標準アクション ```mermaid sequenceDiagram - Qodly page->>+ Qodly page: Standard action Create a new entity (product Qodly source) + Qodly page->>+ Qodly page: 標準アクションで新規エンティティを作成 (product Qodlyソース) - Qodly page->>+Server: Function call product.apply() OR Save standard action for the product Qodly source + Qodly page->>+Server: 関数がproduct Qodly ソースに対して product.apply() または Save 標準アクション を呼び出し Note over Server: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" - Server-->>-Qodly page: The product Qodly source creationDate and comment attributes are filled + Server-->>-Qodly page: product Qodlyソースの creationDate と comment 属性に値が入れられる - Note over Qodly page: product.creationDate is "06/17/25"
    and product.comment is "Automatic comment" + Note over Qodly page: product.creationDate は "06/17/25"
    そして product.comment は "Automatic comment" ``` -#### Example 4 (diagram): Qodly - Standard action and update value on the newly created entity +#### 例題 4 (図): Qodly - 標準アクションと新規作成エンティティの値を更新 ```mermaid sequenceDiagram -Qodly page->>+ Qodly page: Standard action Create a new entity (product Qodly source) +Qodly page->>+ Qodly page: 標準アクションで新規エンティティを作成(product Qodlyソース) -Qodly page->>+ Qodly page: Update product comment with "Front end comment" +Qodly page->>+ Qodly page: product の comment を "Front end comment" で更新 -Qodly page->>+Server: Function call product.apply() OR Save standard action for the product Qodly source +Qodly page->>+Server: 関数が product Qodlyソースに対して product.apply() またはSave 標準アクションを呼び出し Note over Server: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" -Note over Server: The comment attribute is set with "Front end comment" +Note over Server: comment 属性は "Front end comment" に設定 -Server-->>-Qodly page: The product Qodly source creationDate and comment attributes are filled +Server-->>-Qodly page: product Qodlyソースの creationDate と comment 属性には値が入る -Note over Qodly page: product.creationDate is "06/17/25"
    and product.comment is "Front end comment" +Note over Qodly page: product.creationDate は "25/06/17"
    そして product.comment は "Front end comment" ``` -#### Example 5 (diagram): Qodly - Entity instanciated in a function +#### 例題 5 (図): Qodly - 関数内でインスタンス化されたエンティティ ```mermaid diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md index f690ad94acf3e2..8c11c9b7e09f45 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -25,7 +25,7 @@ Webセッションは次のものに使用されます: - [Web applications](gettingStarted.md) sending http requests (including [SOAP Web services](../commands/theme/Web_Services_Server.md) and [/4DACTION](../WebServer/httpRequests.md#4daction) requests), - [リモートデータストア](../ORDA/remoteDatastores.md) や [Qodlyフォーム](qodly-studio.md) が使用する [REST API](../REST/authUsers.md) への呼び出し -## Webセッションの有効化 +## Enabling web sessions {#enabling-web-sessions} セッション管理機能は、4D Webサーバー上で有効または無効にすることができます。 セッション管理を有効化する方法は複数あります: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md index 6c40ad19f207fd..fa5cac9b16540a 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md @@ -60,18 +60,20 @@ $client.baseURL:="https://server.ai" API はOpenAI のサービスとシームレスにやりとりすることを可能にする複数のリソースへのアクセスを提供します。 それぞれのリソースは専用のAPI クラスにカプセル化されており、様々な機能と対話するための構造化された、直感的な方法を提供しています。 -| プロパティ名 | 型 | 説明 | -| ------------- | ----------------------------------------------- | ------------------ | -| `models` | [OpenAIModelsAPI](OpenAIModelsAPI.md) | Models API へのアクセス。 | -| `chat` | [OpenAIChatAPI](OpenAIChatAPI.md) | Chat API へのアクセス。 | -| `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | 画像 API へのアクセス。 | -| `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | モデレーションAPI へのアクセス。 | -| `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | 埋め込みAPI へのアクセス。 | +| プロパティ名 | 型 | 説明 | +| ------------- | ----------------------------------------------- | ---------------------------------------- | +| `models` | [OpenAIModelsAPI](OpenAIModelsAPI.md) | Models API へのアクセス。 | +| `chat` | [OpenAIChatAPI](OpenAIChatAPI.md) | Chat API へのアクセス。 | +| `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | 画像 API へのアクセス。 | +| `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | モデレーションAPI へのアクセス。 | +| `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | 埋め込みAPI へのアクセス。 | +| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Access to the Files API. | ### 使用例 ```4d $client.chat.completions.create(...) $client.images.generate(...) +$client.files.create(...) $client.model.lists(...) ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md new file mode 100644 index 00000000000000..2d785bfd5cb539 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md @@ -0,0 +1,29 @@ +--- +id: openaifile +title: OpenAIFile +--- + +# OpenAIFile + +The `OpenAIFile` class represents a file object in the OpenAI API. Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. + +## プロパティ + +| プロパティ名 | 型 | 説明 | +| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | The file identifier, which can be referenced in the API endpoints. | +| `bytes` | Integer | The size of the file, in bytes. | +| `created_at` | Integer | The Unix timestamp (in seconds) for when the file was created. | +| `expires_at` | Integer | The Unix timestamp (in seconds) for when the file will expire. | +| `filename` | Text | The name of the file. | +| `object` | Text | The object type, which is always "file". | +| `purpose` | Text | The intended purpose of the file. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | +| `status` | Text | **Deprecated.** The current status of the file, which can be either `uploaded`, `processed`, or `error`. | +| `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | + +## 参照 + +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md new file mode 100644 index 00000000000000..fdfe98f46abb1a --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md @@ -0,0 +1,38 @@ +--- +id: openaifiledeletedresult +title: OpenAIFileDeletedResult +--- + +# OpenAIFileDeletedResult + +The `OpenAIFileDeletedResult` class contains the result of a file deletion operation. + +## 継承元 + +[OpenAIResult](OpenAIResult.md) + +## 計算プロパティ + +| プロパティ | 型 | 説明 | +| --------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Returns the file deletion result from the API response. Returns `Null` if the response doesn't contain a valid result. | + +## 使用例 + +```4d +// Delete a file +var $fileId:="file-abc123" +var $result:=$client.files.delete($fileId; Null) +var $deletionStatus:=$result.deleted + +If ($deletionStatus.deleted) + ALERT("File "+$deletionStatus.id+" was successfully deleted") +Else + ALERT("Failed to delete file") +End if +``` + +## 参照 + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileDeleted](OpenAIFileDeleted.md) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md new file mode 100644 index 00000000000000..82dd2cf5e96efd --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md @@ -0,0 +1,38 @@ +--- +id: openaifilelistparameters +title: OpenAIFileListParameters +--- + +# OpenAIFileListParameters + +The `OpenAIFileListParameters` class contains parameters for listing files in the OpenAI API. + +## 継承元 + +[OpenAIParameters](OpenAIParameters.md) + +## プロパティ + +| プロパティ名 | 型 | Required | デフォルト | 説明 | +| --------- | ------- | -------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `after` | Text | 任意 | - | A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `after=obj_foo` in order to fetch the next page of the list. | +| `limit` | Integer | 任意 | 10000 | A limit on the number of objects to be returned. Limit can range between 1 and 10,000, and the default is 10,000. | +| `order` | Text | 任意 | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | +| `purpose` | Text | 任意 | - | Only return files with the given purpose. | + +## 使用例 + +```4d +// Get first 100 files with purpose "fine-tune" +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 +$params.purpose:="fine-tune" +$params.order:="desc" + +var $result:=$client.files.list($params) +``` + +## 参照 + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md new file mode 100644 index 00000000000000..04edb7e8809ddd --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md @@ -0,0 +1,66 @@ +--- +id: openaifilelistresult +title: OpenAIFileListResult +--- + +# OpenAIFileListResult + +The `OpenAIFileListResult` class contains the result of listing files from the OpenAI API. + +## 継承元 + +[OpenAIResult](OpenAIResult.md) + +## 計算プロパティ + +| プロパティ | 型 | 説明 | +| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | +| `first_id` | Text | Returns the ID of the first file in the list, or an empty string if not available. | +| `last_id` | Text | Returns the ID of the last file in the list, or an empty string if not available. | +| `has_more` | Boolean | Indicates if there are more files beyond this page. `True` if there are more files to fetch, `False` otherwise. | + +## 使用例 + +### Basic Usage + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 + +var $result:=$client.files.list($params) +var $files:=$result.files + +For each ($file; $files) + // Process each OpenAIFile object + // $file.filename -> "salesOverview.pdf" + // $file.bytes -> 175 + // $file.purpose -> "assistants" +End for each +``` + +### Pagination Example + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 + +var $result:=$client.files.list($params) +var $allFiles:=$allFiles.combine($result.files) + +// Continue fetching if there are more files +While ($result.has_more) + $params.after:=$result.last_id + $result:=$client.files.list($params) + $allFiles:=$allFiles.combine($result.files) +End while + +// $allFiles now contains all files from the organization +``` + +## 参照 + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md new file mode 100644 index 00000000000000..c7125c0ef9b00a --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -0,0 +1,43 @@ +--- +id: openaifileparameters +title: OpenAIFileParameters +--- + +# OpenAIFileParameters + +The `OpenAIFileParameters` class handles parameters for file upload operations. + +## 継承元 + +[OpenAIParameters](OpenAIParameters.md) + +## プロパティ + +| プロパティ名 | 型 | Required | 説明 | +| --------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `expires_after` | Object | 任意 | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | + +### `expires_after` Object Structure + +The `expires_after` object contains the following properties: + +| プロパティ名 | 型 | 説明 | +| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `anchor` | Text | Anchor timestamp after which the expiration policy applies. Supported anchors: `created_at`. | +| `seconds` | Integer | The number of seconds after the anchor time that the file will expire. Must be between 3600 (1 hour) and 2592000 (30 days). | + +## 使用例 + +```4d +var $params:=cs.AIKit.OpenAIFileParameters.new() + +// Set expiration after 7 days +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=604800 // 7 days +``` + +## 参照 + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileResult](OpenAIFileResult.md) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md new file mode 100644 index 00000000000000..fd1bad0e55650f --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md @@ -0,0 +1,36 @@ +--- +id: openaifileresult +title: OpenAIFileResult +--- + +# OpenAIFileResult + +The `OpenAIFileResult` class contains the result of a single file operation (upload or retrieve). + +## 継承元 + +[OpenAIResult](OpenAIResult.md) + +## 計算プロパティ + +| プロパティ | 型 | 説明 | +| ------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `ファイル` | [OpenAIFile](OpenAIFile.md) | Returns the file object from the API response. Returns `Null` if the response doesn't contain a valid file. | + +## 使用例 + +```4d +// Upload a file +var $file:=File("/RESOURCES/training-data.jsonl") + +var $result:=$client.files.create($file; "user_data") +var $uploadedFile:=$result.file + +// Retrieve file information +var $retrieveResult:=$client.files.retrieve($uploadedFile.id) +``` + +## 参照 + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md new file mode 100644 index 00000000000000..6bb52b12e6f60d --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -0,0 +1,173 @@ +--- +id: openaifilesapi +title: OpenAIFilesAPI +--- + +# OpenAIFilesAPI + +The `OpenAIFilesAPI` class provides functionalities to manage files using OpenAI's API. Files can be uploaded and used across various endpoints including [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning), [Batch](https://platform.openai.com/docs/api-reference/batch) processing, and Vision. + +> **Note:** This API is only compatible with OpenAI. Other providers listed in the [compatible providers](../compatible-openai.md) documentation do not support file management operations. + +API Reference: + +## File Size Limits + +- **Individual files:** up to 512 MB per file +- **Organization total:** up to 1 TB (cumulative size of all files uploaded by your [organization](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization)) + +## 関数 + +### create() + +**create**(*file* : 4D.File | 4D.Blob; *purpose* : Text; *parameters* : cs.OpenAIFileParameters) : cs.OpenAIFileResult + +Upload a file that can be used across various endpoints. + +**Endpoint:** `POST https://api.openai.com/v1/files` + +| 引数 | 型 | 説明 | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `ファイル` | [4D.File](https://developer.4d.com/docs/API/FileClass) or [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | The File or Blob object (not file name) to be uploaded. | +| `purpose` | Text | **Required.** The intended purpose of the uploaded file. | +| `parameters` | [OpenAIFileParameters](OpenAIFileParameters.md) | Optional parameters including expiration policy. | +| 戻り値 | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + +**Throws:** An error if `file` is not a 4D.File or 4D.Blob, or if `purpose` is empty. + +#### Supported Purposes + +- `assistants`: Used in the Assistants API (⚠️ [deprecated by OpenAI](https://platform.openai.com/docs/assistants/whats-new)) +- `batch`: Used in the [Batch API](https://platform.openai.com/docs/api-reference/batch) (expires after 30 days by default) +- `fine-tune`: Used for [fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning) +- `vision`: Images used for vision fine-tuning +- `user_data`: Flexible file type for any purpose +- `evals`: Used for eval data sets + +#### File Format Requirements + +- **Fine-tuning API:** Only supports `.jsonl` files with specific required formats +- **Batch API:** Only supports `.jsonl` files up to 200 MB with specific required format +- **Assistants API:** Supports specific file types (see Assistants Tools guide) +- **Chat Completions API:** PDFs are only supported + +#### 例題 + +```4d +var $file:=File("/RESOURCES/training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=2592000 // 30 days + +var $result:=$client.files.create($file; "fine-tune"; $params) + +If ($result.success) + var $uploadedFile:=$result.file + // $uploadedFile.id -> "file-abc123" + // $uploadedFile.filename -> "training-data.jsonl" + // $uploadedFile.bytes -> 120000 +End if +``` + +### retrieve() + +**retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult + +Returns information about a specific file. + +**Endpoint:** `GET https://api.openai.com/v1/files/{file_id}` + +| 引数 | 型 | 説明 | +| ------------ | --------------------------------------- | ----------------------------------------------------------------------------- | +| `fileId` | Text | **Required.** The ID of the file to retrieve. | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | +| 戻り値 | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + +**Throws:** An error if `fileId` is empty. + +#### 例題 + +```4d +var $result:=$client.files.retrieve("file-abc123") + +If ($result.success) + var $file:=$result.file + // $file.filename -> "mydata.jsonl" + // $file.bytes -> 120000 + // $file.purpose -> "fine-tune" +End if +``` + +### list() + +**list**(*parameters* : cs.OpenAIFileListParameters) : cs.OpenAIFileListResult + +Returns a list of files that belong to the user's organization. + +**Endpoint:** `GET https://api.openai.com/v1/files` + +| 引数 | 型 | 説明 | +| ------------ | ------------------------------------------------------- | ----------------------------------------------------------------- | +| `parameters` | [OpenAIFileListParameters](OpenAIFileListParameters.md) | Optional parameters for filtering and pagination. | +| 戻り値 | [OpenAIFileListResult](OpenAIFileListResult.md) | The file list result | + +#### 例題 + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 +$params.order:="desc" + +var $result:=$client.files.list($params) + +If ($result.success) + var $files:=$result.files + // $files.length -> 2 + + For each ($file; $files) + // $file.filename -> "salesOverview.pdf", "puppy.jsonl", etc. + End for each +End if +``` + +### delete() + +**delete**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileDeletedResult + +Delete a file. + +**Endpoint:** `DELETE https://api.openai.com/v1/files/{file_id}` + +| 引数 | 型 | 説明 | +| ------------ | ----------------------------------------------------- | --------------------------------------------------------------------------- | +| `fileId` | Text | **Required.** The ID of the file to delete. | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | +| 戻り値 | [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) | The file deletion result | + +**Throws:** An error if `fileId` is empty. + +#### 例題 + +```4d +var $result:=$client.files.delete("file-abc123") + +If ($result.success) + var $status:=$result.deleted + + If ($status.deleted) + ALERT("File deleted successfully") + End if +End if +``` + +## 参照 + +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index 71ac6fa0763f7e..5ec7d2bf4b799d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -36,18 +36,52 @@ title: OpenAIMessage メッセージのコンテンツに画像URL を追加します。 +### addFileId() + +**addFileId**(*fileId* : Text) + +| 引数 | 型 | 説明 | +| -------- | ---- | -------------------------------------------------- | +| *fileId* | Text | The file ID to add to the message. | + +Adds a file reference to the content of the message. If the content is currently text, it will be converted to a collection format. + ## 使用例 -### シンプルなメッセージを作成し画像を添付する +### Basic Text Message + +```4d +// Create an instance of OpenAIMessage +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Hello!"}) +``` + +### Adding Images ```4d -// OpenAIMessage のインスタンスを作成 -var $message:=cs.AIKit.OpenAIMessage({role: "user"; content: "Hello!"}) +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this image:"}) -// 画像 URL と詳細を追加 +// Add an image URL with details $message.addImageURL("http://example.com/image.jpg"; "high") ``` +### Adding File + +```4d +// Upload a file with user_data purpose +var $file:=File("/RESOURCES/document.pdf") +var $uploadResult:=$client.files.create($file; "user_data") + +If ($uploadResult.success) + var $uploadedFile:=$uploadResult.file + + // Create message and attach the file using its ID + var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this document:"}) + $message.addFileId($uploadedFile.id) + + // $message.content -> [{type: "text"; text: "Please analyze this document:"}; {type: "file"; file_id: "file-abc123"}] +End if +``` + ### ツール呼び出しメッセージに応答する アシスタントが外部関数を使用する必要がある場合、関数の実行をリクエストするための、`tool_calls` を持ったメッセージを生成します。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/overview.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/overview.md index 06c467d9cc2b7b..8ead5e34d3fdfa 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/overview.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/overview.md @@ -103,6 +103,42 @@ IDを使用して一つのモデルの情報を取得する例 var $model:=$client.models.retrieve("a model id").model ``` +#### Files + +https://platform.openai.com/docs/api-reference/files + +Upload a file for use with other endpoints + +```4d +var $file:=File("/path/to/your/file.jsonl") +var $result:=$client.files.create($file; "fine-tune") +var $fileId:=$result.file.id +``` + +List all files + +```4d +var $files:=$client.files.list().files +``` + +Retrieve file information + +```4d +var $fileInfo:=$client.files.retrieve($fileId).file +``` + +Delete a file + +```4d +var $deleteResult:=$client.files.delete($fileId) +``` + +:::tip 関連したblog 記事 + +[Transform Static Documents into Actionable Knowledge with 4D AIKit](https://blog.4d.com/transform-static-documents-into-actionable-knowledge-with-4d-aikit). + +::: + #### モデレーション https://platform.openai.com/docs/api-reference/moderations diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index a49e8ce5d07ead..621d59f027e73c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -3,7 +3,7 @@ id: ordaClasses title: データモデルクラス --- -ORDA allows you to create high-level class functions above the [data model](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.en.html). これによってビジネス指向のコードを書き、APIのように "公開" することができます。 データストア、データクラス、エンティティ、およびエンティティセレクションはそれぞれ、関数を持つことのできるクラスオブジェクトとして提供されています。 +ORDAでは、[データモデル](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.ja.html)の上に高レベルクラス関数を作成することができます。 これによってビジネス指向のコードを書き、APIのように "公開" することができます。 データストア、データクラス、エンティティ、およびエンティティセレクションはそれぞれ、関数を持つことのできるクラスオブジェクトとして提供されています。 たとえば、選択中の社員より給与の高い社員一覧を返す `getNextWithHigherSalary()` 関数を `EmployeeEntity` クラスに作成したとします。 この関数は簡単に呼び出すことができます: @@ -214,9 +214,9 @@ ORDA で公開されるテーブル毎に、Entity クラスが `cs` クラス #### Class constructor -You can define a **class constructor** for an Entity class. The class constructor is called whenever an entity is created in memory and can be used to initialize some values. +エンティティクラスに対して **class constructor** を定義することができます。 クラスコンストラクターはエンティティがメモリ内に作成されるたびに呼び出され、これを使用して一部の値を初期化することができます。 -For information, please refer to the [Class constructor](#class-constructor-1) section. +詳細な情報については[Class constructor](#class-constructor-1) を参照してください。 #### 計算属性 @@ -278,7 +278,7 @@ End if - クラス定義の際、[`Class extends`](../Concepts/classes.md#class-extends-classname) ステートメントに使用する親クラスの名前は完全に合致するものでなくてはいけません (文字の大小が区別されます)。 たとえば、EntitySelection クラスを継承するには `Class extends EntitySelection` と書きます。 -- データモデルクラスオブジェクトのインスタンス化に `new()` キーワードは使えません (エラーが返されます)。 You must use a regular function as listed in the [`Instantiated by` column of the ORDA class table](#architecture). +- データモデルクラスオブジェクトのインスタンス化に `new()` キーワードは使えません (エラーが返されます)。 上述の ORDA クラステーブルに一覧化されている、通常の [インスタンス化の方法](#アーキテクチャー) を使う必要があります。 - **`4D`** [クラスストア](Concepts/classes.md#クラスストア) のネイティブな ORDA クラス関数を、データモデルユーザークラス関数でオーバーライドすることはできません。 @@ -306,7 +306,7 @@ End if ```4d // Entity class Class constructor() -// code +// コード ``` :::note @@ -315,48 +315,48 @@ Class constructor() ::: -An ORDA class constructor function is triggered just after a new entity is created in memory, [whatever the way it is created](#commands-that-trigger-the-class-constructor-functions). It is useful to set initial values for entity instantiation, for example a custom ID. +ORDA クラスコンストラクター関数は、[作成された方法に関わらず](#クラス関数をトリガーするコマンド)、新規エンティティがメモリ内に作成された直後にトリガーされます。 これは例えばカスタムのID など、エンティティインスタンス化時に初期値を設定するのに有用です。 -This function can only be set at the [entity level](#entity-class). There can only be one constructor function in an entity class (otherwise an error is returned). +この関数は [エンティティレベル](#entity-クラス) でのみ設定可能です。 コンストラクター関数は、1つのエンティティクラスに 1つしか存在できません (そうでない場合はエラーが返されます)。 -This ORDA class constructor function does not receive or return parameters. However, you can use it to initialize attribute values using [`This`](../commands/this.md). Note that values initialized by the constructor are overriden if corresponding attributes are filled by the code. +ORDA クラスコンストラクター関数は、引数を受け取ることも返すこともしません。 しかし、 [`This`](../commands/this.md).を使用して属性値を初期化することができます。 コンストラクターによって初期化された値は、対応する属性がコードによって値が入力される場合にはそれによって上書きされるということに注意してください。 :::note -An ORDA class constructor function is similar to a [user class constructor function](../Concepts/classes.md#class-constructor), with the following differences: +ORDA クラスコンストラクター関数は、[ユーザークラスコンストラクター関数](../Concepts/classes.md#class-constructor) と似ていますが、以下の点において違います: -- you cannot pass parameters to the constructor, -- you cannot use `shared`, `session`, or `singleton` keywords, -- you cannot call the [`Super`](../Concepts/classes.md#super) keyword within the function, -- the class constructor cannot be called using the `new()` function on an entity (entities can only be created by specific functions, see below). +- コンストラクターには引数を渡すことはできません +- `shared`、 `session` または `singleton` キーワードを使用することはできません +- 関数内で [`Super`](../Concepts/classes.md#super) キーワードを呼び出すことはできません +- クラスコンストラクターは、エンティティに `new()` 関数を使用することでは呼び出せません(エンティティは特定の関数でしか作成することはできません、以下参照)。 ::: -#### Commands that trigger the Class constructor functions +#### クラスコンストラクター関数をトリガーするコマンド -The `Class constructor` function is triggered by the following commands and features: +`Class constructor` 関数は、以下のコマンドと機能によってトリガーされます: - [`dataClass.new()`](../API/DataClassClass.md#new) - [`dataClass.fromCollection()`](../API/DataClassClass#fromcollection) -- [REST API $method=update](../REST/$method.md#methodupdate) in a POST without the `__KEY` and `__STAMP` parameters -- the [Data Explorer](../Admin/dataExplorer.md#editing-data). +- `__KEY` および `__STAMP` 引数のない POST での[REST API $method=update](../REST/$method.md#methodupdate) +- [データエクスプローラー](../Admin/dataExplorer.md#editing-data) :::note 注記 -- The [`entity.clone()`](../API/EntityClass.md#clone) function does not trigger the entity Class constructor. -- Records created at the 4D database level using 4D classic language commands or standard actions do not trigger the entity Class constructor. +- [`entity.clone()`](../API/EntityClass.md#clone) 関数はエンティティクラスコンストラクターをトリガーしません。 +- 4D クラシックランゲージ言語コマンドまたは標準アクションを使用して4D データベースレベルで作成されたレコードは、エンティティクラスコンストラクターをトリガーしません。 ::: -#### Remote configurations +#### リモート構成 -When using a remote configurations, you need to pay attention to the following principles: +リモート構成を使用している場合、以下の原則に対して注意する必要があります: -- In **client/server** the function can be called on the client or on the server, depending on the location of the calling code. When it is called on the client, it is not triggered again when the client attempts to save the new entity and sends an update request to the server to create in memory on the server. +- **クライアント/サーバー** では、コードを呼び出した場所によっては関数はクライアントまたはサーバーのどちらでも呼び出すことができます。 クライアント上で呼び出された場合、クライアントが新規エンティティを保存しようとして、サーバーのメモリ上に作成するために更新リクエストを送信したときにはもう一度トリガーされることはありません。 :::warning -Since functions such as [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) can create a large number of entities and thus trigger the entity Class constructor consequently, you need to make sure the constructor code does not execute excessive time-consuming processings, for performance reasons. In remote configurations (see below), the code should not trigger multiple requests to the server. +[`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) のような関数は大量のエンティティを一度を作成し、結果としてエンティティクラスコンストラクターをトリガーしうるため、パフォーマンス上の理由から、コンストラクターコードに過度に時間を消費するような処理を実行しないように注意する必要があります。 リモート設定においては(以下参照)、コードはサーバーに対して複数のリクエストをトリガーしてはいけません。 ::: @@ -372,7 +372,7 @@ Class constructor() ``` -#### Example 2 (diagram): Client/server +#### 例題 2 (図): クライアント/サーバー ```mermaid @@ -382,7 +382,7 @@ Client->>+Client: Form.product:=ds.Products.new() Note over Client: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" -Note over Client: Form.product.creationDate is "06/17/25"
    Form.product.comment is "Automatic comment" +Note over Client: Form.product.creationDate は "25/06/17"
    Form.product.comment は "Automatic comment" Client->>+Server: Form.product.save() @@ -391,47 +391,47 @@ Server-->>-Client: Success ``` -#### Example 3 (diagram): Qodly - Standard action +#### 例題 3 (図): Qodly - 標準アクション ```mermaid sequenceDiagram - Qodly page->>+ Qodly page: Standard action Create a new entity (product Qodly source) + Qodly page->>+ Qodly page: 標準アクションで新規エンティティを作成 (product Qodlyソース) - Qodly page->>+Server: Function call product.apply() OR Save standard action for the product Qodly source + Qodly page->>+Server: 関数がproduct Qodly ソースに対して product.apply() または Save 標準アクション を呼び出し Note over Server: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" - Server-->>-Qodly page: The product Qodly source creationDate and comment attributes are filled + Server-->>-Qodly page: product Qodlyソースの creationDate と comment 属性に値が入れられる - Note over Qodly page: product.creationDate is "06/17/25"
    and product.comment is "Automatic comment" + Note over Qodly page: product.creationDate は "06/17/25"
    そして product.comment は "Automatic comment" ``` -#### Example 4 (diagram): Qodly - Standard action and update value on the newly created entity +#### 例題 4 (図): Qodly - 標準アクションと新規作成エンティティの値を更新 ```mermaid sequenceDiagram -Qodly page->>+ Qodly page: Standard action Create a new entity (product Qodly source) +Qodly page->>+ Qodly page: 標準アクションで新規エンティティを作成(product Qodlyソース) -Qodly page->>+ Qodly page: Update product comment with "Front end comment" +Qodly page->>+ Qodly page: product の comment を "Front end comment" で更新 -Qodly page->>+Server: Function call product.apply() OR Save standard action for the product Qodly source +Qodly page->>+Server: 関数が product Qodlyソースに対して product.apply() またはSave 標準アクションを呼び出し Note over Server: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" -Note over Server: The comment attribute is set with "Front end comment" +Note over Server: comment 属性は "Front end comment" に設定 -Server-->>-Qodly page: The product Qodly source creationDate and comment attributes are filled +Server-->>-Qodly page: product Qodlyソースの creationDate と comment 属性には値が入る -Note over Qodly page: product.creationDate is "06/17/25"
    and product.comment is "Front end comment" +Note over Qodly page: product.creationDate は "25/06/17"
    そして product.comment は "Front end comment" ``` -#### Example 5 (diagram): Qodly - Entity instanciated in a function +#### 例題 5 (図): Qodly - 関数内でインスタンス化されたエンティティ ```mermaid diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index f6a0d04e73bd4d..6fcb8e4aaaae9d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -25,7 +25,7 @@ Webセッションは次のものに使用されます: - HTTPリクエストを送信する [Webアプリケーション](gettingStarted.md) - [リモートデータストア](../ORDA/remoteDatastores.md) や [Qodlyフォーム](qodly-studio.md) が使用する [REST API](../REST/authUsers.md) への呼び出し -## Webセッションの有効化 +## Enabling web sessions {#enabling-web-sessions} セッション管理機能は、4D Webサーバー上で有効または無効にすることができます。 セッション管理を有効化する方法は複数あります: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md index dab2be14dac5fd..0d71e8b62ad493 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -41,7 +41,7 @@ title: リリースノート ::: -- Web サービス(SOAP): [スケーラブルセッション](../WebServer/sessions.md#webセッションの有効化) が有効化されている場合、コンパイルモードにおいてはWeb サービスは[**プリエンプティブプロセス**](../Develop/preemptive.md) で実行されます。 そのためSOAP コードは必ずスレッドセーフであるようにしてください。 +- Web サービス(SOAP): [スケーラブルセッション](../WebServer/sessions.md#webセッションの有効化) が有効化されている場合、コンパイルモードにおいてはWeb サービスは[**プリエンプティブプロセス**](../Develop/preemptive.md) で実行されます。 Make sure that your SOAP code is thread-safe and that the session in which it runs has appropriate [privileges](../API/SessionClass.md#setprivileges). - Web サーバー: 廃止予定だった`4DSYNC/` および `4DCGI/` URL のサポートが削除されました。 これらのURL に関しては今後は何も特殊な処理は行われません。 - Web ユーザーセッションは今後[`Process activity`](../commands/process-activity.md) コマンドで返されるようになります。 - [`HIGHLIGHT TEXT`](../commands/highlight-text) コマンドは今後サブフォームのコンテキストでサポートされるようになりました。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index e0066e085544e8..9af378952d1c87 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -388,25 +388,25 @@ Function event saving ($event : Object) - [`entity.save()`](../API/EntityClass.md#save) - [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) -This event is triggered **while** the entity is actually saved. If a [`validateSave()`](#function-event-validatesave) event function was defined, the `saving()` event function is called if no error was triggered by `validateSave()`. For example, you can use this event to create a document on a Google Drive account. +このイベントはエンティティが実際に保存されている**最中に**トリガーされます。 [`validateSave()`](#function-event-validatesave) イベント関数が定義されていると場合、 `saving()` イベント関数は、 `validateSave()`がエラーを何もトリガーしなかった場合に呼び出されます。 例えば、このイベントを使用して、Google Drive アカウントにドキュメントを作成することができます。 :::note -The business logic should raise errors which can't be detected during the `validateSave()` events, e.g. a network error +このビジネスロジックは `validateSave()` イベントで検知できないエラーを生成する必要があります(例: ネットワークエラー) ::: -During the save action, 4D engine errors can be raised (index, stamp has changed, not enough space on disk). +保存アクション中、4D エンジンのエラー(インデックスやスタンプが変更された、ディスク上に十分なスペースがありません、など)が生成されることがあります。 アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 -When a file is saved on disk, catch errors related to disk space for example. +ファイルがディスク上に保存されると、例えばディスクの要領に関連したエラーをキャッチします。 ```4d // ProductsEntity class -// saving event at attribute level +// 属性レベルでの保存イベント Function event saving userManualPath($event : Object) : Object var $result : Object @@ -416,17 +416,17 @@ var $fileCreated : Boolean If (This.userManualPath#"") $userManualFile:=File(This.userManualPath) - // The user manual document file is created on the disk - // This may fail if no more space is available + // ユーザーマニュアルドキュメントファイルがディスク上に作成されます + // これはディスク上に空き容量がない場合には失敗する可能性があります Try - // The file content has been generated and stored in a map in Storage.docMap previously + // ファイルのコンテンツは事前に生成され Storage.docMap に保存されています $docInfo:=Storage.docMap.query("name = :1"; This.name).first() $userManualFile.setContent($docInfo.content) Catch - // No more room on disk for example + // 例えばディスク上に要領が空いてない場合 $result:={/ - errCode: 1; message: "Error during the save action for this product"; / - extraDescription: {info: "There is no available space on disk to store the user manual"}/ + errCode: 1; message: "この製品の保存アクション中にエラー発生"; / + extraDescription: {info: "このディスク上にはユーザーマニュアルを保存するスペースがありません"}/ } End try End if @@ -437,7 +437,7 @@ return $result :::note -The content of the file is generated outside the `saving` event because it can be time consuming. +この例ではファイルの中身は `saving` イベントの外で生成されています。時間がかなりかかる可能性があるからです。 ::: @@ -447,31 +447,31 @@ The content of the file is generated outside the `saving` event because it can b ```4d Function event afterSave($event : Object) -// code +// コード ``` -This event is triggered just after an entity is saved in the data file, when at least one attribute was modified. It is not executed if no attribute has been touched in the entity. +このイベントは、少なくとも一つの属性が編集されていたエンティティがデータファイルに保存された直後にトリガーされます。 エンティティ内でどの属性もタッチされていない場合には、これは実行されません。 -This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. For example, it can be used to send a confirmation email after data have been saved. Or, in case of error while saving data, it can make a rollback to restore a consistent state of data. +このイベントは、データを保存した後に、アプリケーション外に保存アクションを電波させたい場合や、管理タスクを実行したりするのに有用です。 例えばこれを使用して、データが保存された後に確認メールを送信することができます。 あるいは、データ保存中にエラーが発生した場合、これを使用してロールバックを行い、データの一貫性を復元することもできます。 関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -- To avoid infinite loops, calling a [`save()`](../API/EntityClass.md#save) on the current entity (through `This`) in this function is **not allowed**. It will raise an error. -- Throwing an [error object](#error-object) is **not supported** by this function. +- 無限ループに陥るのを避けるため、この関数内でカレントのエンティティ上で(`This` を通して) [`save()`](../API/EntityClass.md#save) を呼び出すのは**許可されていません**。 これはエラーを発生させます。 +- この関数では[エラーオブジェクト](#エラーオブジェクト) をスローすることは**サポートされていません**。 #### 例題 -If an error occurred in the above saving event, the attribute value is reset accordingly in the `afterSave` event: +上記の保存イベント中にエラーが発生した場合、属性値は `afterSave` イベントでリセットされます: ```4d // ProductsEntity class Function event afterSave($event : Object) If (($event.status.success=False) && ($event.status.errors=Null)) - // $event.status.errors is filled if the error comes from the validateSave event + // エラーがvalidateSave イベントから来た場合には$event.status.errors に値が入れられます - // The userManualPath attribute has not been properly saved - // Its value is reset + // userManualPath 属性は適切には保存されていません + // その値はリセットされます If ($event.savedAttributes.indexOf("userManualPath")=-1) This.userManualPath:="" This.status:="KO" @@ -487,29 +487,29 @@ End if ```4d Function event validateDrop($event : Object) Function event validateDrop ($event : Object) -// code +// コード ``` -This event is triggered each time an entity is about to be dropped. +このイベントはエンティティがドロップ(削除)されようとするたびに毎回トリガーされます。 - 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 - 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -This event is triggered by the following features: +このイベントは以下の機能によってトリガーされます: - [`entity.drop()`](../API/EntityClass.md#drop) - [`entitySelection.drop()`](../API/DataClassClass.md#fromcollection) -- [deletion control rules](https://doc.4d.com/4Dv20/4D/20.2/Relation-properties.300-6750290.en.html#107320) that can be defined at the database structure level. +- データベースストラクチャーレベルで定義されている可能性のある[削除制御](https://doc.4d.com/4Dv20/4D/20.2/Relation-properties.300-6750290.ja.html#107320)。 -This event is triggered **before** the entity is actually dropped, allowing you to check data consistency and if necessary, to stop the drop action. +このイベントはエンティティが実際にドロップされる**前に**トリガーされるため、データの一貫性をチェックし、必要であればドロップアクションを停止することができます。 アクションを停止するためには、関数のコードで[エラーオブジェクト](#エラーオブジェクト) を返す必要があります。 #### 例題 -In this example, it is not allowed to drop a product that is not labelled "TO DELETE". In this case, you return an error object and thus, stop the drop action. +この例では、"TO DELETE" とラベルのついていない製品をドロップすることはできません。 この場合、エラーオブジェクトを返すことで、ドロップアクションを停止することができます。 ```4d // ProductsEntity class @@ -518,10 +518,10 @@ Function event validateDrop status($event : Object) : Object var $result : Object -// Products must be marked as TO DELETE to be dropped +// ドロップするためには、製品は TO DELETE と記録されている必要があります If (This.status#"TO DELETE") - $result:={errCode: 1; message: "You can't drop this product"; \ - extraDescription: {info: "This product must be marked as To Delete"}; seriousError: False} + $result:={errCode: 1; message: "この製品は削除できません"; \ + extraDescription: {info: "この製品はTo Delete と記録されていなければなりません"}; seriousError: False} End if return $result @@ -534,27 +534,27 @@ return $result ```4d Function event dropping($event : Object) Function event dropping ($event : Object) -// code +// コード ``` -This event is triggered each time an entity is being dropped. +このイベントはエンティティがドロップ(削除)されるたびにトリガーされます。 - 関数をエンティティレベルで定義していた場合(第一シンタックス)、その関数はエンティティの任意の属性に対して呼び出されます。 - 関数を属性レベルで定義していた場合(第二シンタックス)、関数はその属性に対してのみ呼び出されます。 関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -This event is triggered by the following features: +このイベントは以下の機能によってトリガーされます: - [`entity.drop()`](../API/EntityClass.md#drop) - [`entitySelection.drop()`](../API/DataClassClass.md#fromcollection) -- [deletion control rules](https://doc.4d.com/4Dv20/4D/20.2/Relation-properties.300-6750290.en.html#107320) that can be defined at the database structure level. +- データベースストラクチャーレベルで定義されている可能性のある[削除制御](https://doc.4d.com/4Dv20/4D/20.2/Relation-properties.300-6750290.ja.html#107320)。 -This event is triggered **while** the entity is actually dropped. If a [`validateDrop()`](#function-event-validatedrop) event function was defined, the `dropping()` event function is called if no error was triggered by `validateDrop()`. +このイベントはエンティティが実際にドロップされている**最中に**トリガーされます。 [`validateDrop()`](#function-event-validatedrop) イベント関数が定義されている場合、 `dropping()` イベント関数は、 `validateDrop()` がエラーを何もトリガーしなかった場合に呼び出されます。 :::note -The business logic should raise errors which cannot be detected during the `validateDrop()` events, e.g. a network error. +このビジネスロジックは `validateDrop()` イベントで検知できないエラーを生成する必要があります(例: ネットワークエラー)。 ::: @@ -562,7 +562,7 @@ The business logic should raise errors which cannot be detected during the `vali #### 例題 -Here is an example of `dropping` event at entity level: +これはエンティティレベルでの `dropping` イベントの一例です: ```4d // ProductsEntity class @@ -573,14 +573,14 @@ var $userManualFile : 4D.File $userManualFile:=File(This.userManualPath) - // When dropping a product, its user manual is also deleted on the disk - // This action may fail + // 製品をドロップする場合、そのユーザーマニュアルもディスク上から削除されます + // このアクションは失敗する可能性があります Try If ($userManualFile.exists) $userManualFile.delete() End if Catch - // Dropping the user manual failed + // ユーザーマニュアルのドロップに失敗した場合 $result:={errCode: 1; message: "Drop failed"; extraDescription: {info: "The user manual can't be dropped"}} End try @@ -593,27 +593,27 @@ return $result ```4d Function event afterDrop($event : Object) -// code +// コード ``` -This event is triggered just after an entity is dropped. +このイベントはエンティティがドロップ(削除)された直後にトリガーされます。 -This event is useful after dropping data to propagate the drop action outside the application or to execute administration tasks. For example, it can be used to send a cancellation email after data have been dropped. Or, in case of error while dropping data, it can log an information for the administrator to check data consistency. +このイベントは、データをドロップした後に、アプリケーション外にドロップアクションを伝播させたい場合や、管理タスクを実行したりするのに有用です。 例えばこれを使用して、データがドロップされたあとにキャンセルメールを送信することができます。 あるいは、データのドロップ中にエラーが発生した場合、あとで管理者がデータの一貫性をチェックできるように情報を記録することができます。 関数は [*event* オブジェクト](#event-引数) を引数として受け取ります。 -- To avoid infinite loops, calling a [`drop()`](../API/EntityClass.md#drop) on the current entity (through `This`) in this function is **not allowed**. It will raise an error. -- Throwing an [error object](#error-object) is **not supported** by this function. +- 無限ループに陥るのを避けるため、この関数内でカレントのエンティティ上で(`This` を通して) [`drop()`](../API/EntityClass.md#drop) を呼び出すのは**許可されていません**。 これはエラーを発生させます。 +- この関数では[エラーオブジェクト](#エラーオブジェクト) をスローすることは**サポートされていません**。 :::note -The dropped entity is referenced by `This` and still exists in memory. +ドロップされたエンティティは `This` を通して参照され、メモリー内に引き続き存在します。 ::: #### 例題 -If the drop action failed, then the product must be checked manually: +ドロップアクションが失敗した場合、製品は手動でチェックされる必要があります: ```4d Function event afterDrop($event : Object) @@ -621,8 +621,8 @@ Function event afterDrop($event : Object) var $status : Object If (($event.status.success=False) && ($event.status.errors=Null)) - //$event.status.errors is filled - //if the error comes from the validateDrop event + //$event.status.errors には、 + //エラーが validateDrop イベントから来た場合には値が入れられます This.status:="Check this product - Drop action failed" $status:=This.save() End if diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index a49e8ce5d07ead..621d59f027e73c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -3,7 +3,7 @@ id: ordaClasses title: データモデルクラス --- -ORDA allows you to create high-level class functions above the [data model](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.en.html). これによってビジネス指向のコードを書き、APIのように "公開" することができます。 データストア、データクラス、エンティティ、およびエンティティセレクションはそれぞれ、関数を持つことのできるクラスオブジェクトとして提供されています。 +ORDAでは、[データモデル](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-database-structure.200-6750097.ja.html)の上に高レベルクラス関数を作成することができます。 これによってビジネス指向のコードを書き、APIのように "公開" することができます。 データストア、データクラス、エンティティ、およびエンティティセレクションはそれぞれ、関数を持つことのできるクラスオブジェクトとして提供されています。 たとえば、選択中の社員より給与の高い社員一覧を返す `getNextWithHigherSalary()` 関数を `EmployeeEntity` クラスに作成したとします。 この関数は簡単に呼び出すことができます: @@ -214,9 +214,9 @@ ORDA で公開されるテーブル毎に、Entity クラスが `cs` クラス #### Class constructor -You can define a **class constructor** for an Entity class. The class constructor is called whenever an entity is created in memory and can be used to initialize some values. +エンティティクラスに対して **class constructor** を定義することができます。 クラスコンストラクターはエンティティがメモリ内に作成されるたびに呼び出され、これを使用して一部の値を初期化することができます。 -For information, please refer to the [Class constructor](#class-constructor-1) section. +詳細な情報については[Class constructor](#class-constructor-1) を参照してください。 #### 計算属性 @@ -278,7 +278,7 @@ End if - クラス定義の際、[`Class extends`](../Concepts/classes.md#class-extends-classname) ステートメントに使用する親クラスの名前は完全に合致するものでなくてはいけません (文字の大小が区別されます)。 たとえば、EntitySelection クラスを継承するには `Class extends EntitySelection` と書きます。 -- データモデルクラスオブジェクトのインスタンス化に `new()` キーワードは使えません (エラーが返されます)。 You must use a regular function as listed in the [`Instantiated by` column of the ORDA class table](#architecture). +- データモデルクラスオブジェクトのインスタンス化に `new()` キーワードは使えません (エラーが返されます)。 上述の ORDA クラステーブルに一覧化されている、通常の [インスタンス化の方法](#アーキテクチャー) を使う必要があります。 - **`4D`** [クラスストア](Concepts/classes.md#クラスストア) のネイティブな ORDA クラス関数を、データモデルユーザークラス関数でオーバーライドすることはできません。 @@ -306,7 +306,7 @@ End if ```4d // Entity class Class constructor() -// code +// コード ``` :::note @@ -315,48 +315,48 @@ Class constructor() ::: -An ORDA class constructor function is triggered just after a new entity is created in memory, [whatever the way it is created](#commands-that-trigger-the-class-constructor-functions). It is useful to set initial values for entity instantiation, for example a custom ID. +ORDA クラスコンストラクター関数は、[作成された方法に関わらず](#クラス関数をトリガーするコマンド)、新規エンティティがメモリ内に作成された直後にトリガーされます。 これは例えばカスタムのID など、エンティティインスタンス化時に初期値を設定するのに有用です。 -This function can only be set at the [entity level](#entity-class). There can only be one constructor function in an entity class (otherwise an error is returned). +この関数は [エンティティレベル](#entity-クラス) でのみ設定可能です。 コンストラクター関数は、1つのエンティティクラスに 1つしか存在できません (そうでない場合はエラーが返されます)。 -This ORDA class constructor function does not receive or return parameters. However, you can use it to initialize attribute values using [`This`](../commands/this.md). Note that values initialized by the constructor are overriden if corresponding attributes are filled by the code. +ORDA クラスコンストラクター関数は、引数を受け取ることも返すこともしません。 しかし、 [`This`](../commands/this.md).を使用して属性値を初期化することができます。 コンストラクターによって初期化された値は、対応する属性がコードによって値が入力される場合にはそれによって上書きされるということに注意してください。 :::note -An ORDA class constructor function is similar to a [user class constructor function](../Concepts/classes.md#class-constructor), with the following differences: +ORDA クラスコンストラクター関数は、[ユーザークラスコンストラクター関数](../Concepts/classes.md#class-constructor) と似ていますが、以下の点において違います: -- you cannot pass parameters to the constructor, -- you cannot use `shared`, `session`, or `singleton` keywords, -- you cannot call the [`Super`](../Concepts/classes.md#super) keyword within the function, -- the class constructor cannot be called using the `new()` function on an entity (entities can only be created by specific functions, see below). +- コンストラクターには引数を渡すことはできません +- `shared`、 `session` または `singleton` キーワードを使用することはできません +- 関数内で [`Super`](../Concepts/classes.md#super) キーワードを呼び出すことはできません +- クラスコンストラクターは、エンティティに `new()` 関数を使用することでは呼び出せません(エンティティは特定の関数でしか作成することはできません、以下参照)。 ::: -#### Commands that trigger the Class constructor functions +#### クラスコンストラクター関数をトリガーするコマンド -The `Class constructor` function is triggered by the following commands and features: +`Class constructor` 関数は、以下のコマンドと機能によってトリガーされます: - [`dataClass.new()`](../API/DataClassClass.md#new) - [`dataClass.fromCollection()`](../API/DataClassClass#fromcollection) -- [REST API $method=update](../REST/$method.md#methodupdate) in a POST without the `__KEY` and `__STAMP` parameters -- the [Data Explorer](../Admin/dataExplorer.md#editing-data). +- `__KEY` および `__STAMP` 引数のない POST での[REST API $method=update](../REST/$method.md#methodupdate) +- [データエクスプローラー](../Admin/dataExplorer.md#editing-data) :::note 注記 -- The [`entity.clone()`](../API/EntityClass.md#clone) function does not trigger the entity Class constructor. -- Records created at the 4D database level using 4D classic language commands or standard actions do not trigger the entity Class constructor. +- [`entity.clone()`](../API/EntityClass.md#clone) 関数はエンティティクラスコンストラクターをトリガーしません。 +- 4D クラシックランゲージ言語コマンドまたは標準アクションを使用して4D データベースレベルで作成されたレコードは、エンティティクラスコンストラクターをトリガーしません。 ::: -#### Remote configurations +#### リモート構成 -When using a remote configurations, you need to pay attention to the following principles: +リモート構成を使用している場合、以下の原則に対して注意する必要があります: -- In **client/server** the function can be called on the client or on the server, depending on the location of the calling code. When it is called on the client, it is not triggered again when the client attempts to save the new entity and sends an update request to the server to create in memory on the server. +- **クライアント/サーバー** では、コードを呼び出した場所によっては関数はクライアントまたはサーバーのどちらでも呼び出すことができます。 クライアント上で呼び出された場合、クライアントが新規エンティティを保存しようとして、サーバーのメモリ上に作成するために更新リクエストを送信したときにはもう一度トリガーされることはありません。 :::warning -Since functions such as [`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) can create a large number of entities and thus trigger the entity Class constructor consequently, you need to make sure the constructor code does not execute excessive time-consuming processings, for performance reasons. In remote configurations (see below), the code should not trigger multiple requests to the server. +[`dataClass.fromCollection()`](../API/DataClassClass.md#fromcollection) のような関数は大量のエンティティを一度を作成し、結果としてエンティティクラスコンストラクターをトリガーしうるため、パフォーマンス上の理由から、コンストラクターコードに過度に時間を消費するような処理を実行しないように注意する必要があります。 リモート設定においては(以下参照)、コードはサーバーに対して複数のリクエストをトリガーしてはいけません。 ::: @@ -372,7 +372,7 @@ Class constructor() ``` -#### Example 2 (diagram): Client/server +#### 例題 2 (図): クライアント/サーバー ```mermaid @@ -382,7 +382,7 @@ Client->>+Client: Form.product:=ds.Products.new() Note over Client: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" -Note over Client: Form.product.creationDate is "06/17/25"
    Form.product.comment is "Automatic comment" +Note over Client: Form.product.creationDate は "25/06/17"
    Form.product.comment は "Automatic comment" Client->>+Server: Form.product.save() @@ -391,47 +391,47 @@ Server-->>-Client: Success ``` -#### Example 3 (diagram): Qodly - Standard action +#### 例題 3 (図): Qodly - 標準アクション ```mermaid sequenceDiagram - Qodly page->>+ Qodly page: Standard action Create a new entity (product Qodly source) + Qodly page->>+ Qodly page: 標準アクションで新規エンティティを作成 (product Qodlyソース) - Qodly page->>+Server: Function call product.apply() OR Save standard action for the product Qodly source + Qodly page->>+Server: 関数がproduct Qodly ソースに対して product.apply() または Save 標準アクション を呼び出し Note over Server: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" - Server-->>-Qodly page: The product Qodly source creationDate and comment attributes are filled + Server-->>-Qodly page: product Qodlyソースの creationDate と comment 属性に値が入れられる - Note over Qodly page: product.creationDate is "06/17/25"
    and product.comment is "Automatic comment" + Note over Qodly page: product.creationDate は "06/17/25"
    そして product.comment は "Automatic comment" ``` -#### Example 4 (diagram): Qodly - Standard action and update value on the newly created entity +#### 例題 4 (図): Qodly - 標準アクションと新規作成エンティティの値を更新 ```mermaid sequenceDiagram -Qodly page->>+ Qodly page: Standard action Create a new entity (product Qodly source) +Qodly page->>+ Qodly page: 標準アクションで新規エンティティを作成(product Qodlyソース) -Qodly page->>+ Qodly page: Update product comment with "Front end comment" +Qodly page->>+ Qodly page: product の comment を "Front end comment" で更新 -Qodly page->>+Server: Function call product.apply() OR Save standard action for the product Qodly source +Qodly page->>+Server: 関数が product Qodlyソースに対して product.apply() またはSave 標準アクションを呼び出し Note over Server: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" -Note over Server: The comment attribute is set with "Front end comment" +Note over Server: comment 属性は "Front end comment" に設定 -Server-->>-Qodly page: The product Qodly source creationDate and comment attributes are filled +Server-->>-Qodly page: product Qodlyソースの creationDate と comment 属性には値が入る -Note over Qodly page: product.creationDate is "06/17/25"
    and product.comment is "Front end comment" +Note over Qodly page: product.creationDate は "25/06/17"
    そして product.comment は "Front end comment" ``` -#### Example 5 (diagram): Qodly - Entity instanciated in a function +#### 例題 5 (図): Qodly - 関数内でインスタンス化されたエンティティ ```mermaid diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index f690ad94acf3e2..8c11c9b7e09f45 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -25,7 +25,7 @@ Webセッションは次のものに使用されます: - [Web applications](gettingStarted.md) sending http requests (including [SOAP Web services](../commands/theme/Web_Services_Server.md) and [/4DACTION](../WebServer/httpRequests.md#4daction) requests), - [リモートデータストア](../ORDA/remoteDatastores.md) や [Qodlyフォーム](qodly-studio.md) が使用する [REST API](../REST/authUsers.md) への呼び出し -## Webセッションの有効化 +## Enabling web sessions {#enabling-web-sessions} セッション管理機能は、4D Webサーバー上で有効または無効にすることができます。 セッション管理を有効化する方法は複数あります: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md index f8acd086a9328e..2847b03cc42e14 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,6 +10,9 @@ Leia [**O que há de novo no 4D v21 R2**](https://blog.4d.com/en-whats-new-in-4d #### Destaques - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). + +- 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. + - [**Lista de erros corrigida**](https://bugs.4d.fr/fixedbugslist?version=21_R2): lista de todos os bugs corrigidos em 4D 21 R2. #### Mudanças de comportamento diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/sessions.md index d9801682f90175..09fd59389d4d97 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -25,7 +25,7 @@ As sessões Web são usadas para: - [Web applications](gettingStarted.md) sending http requests (including [SOAP Web services](../commands/theme/Web_Services_Server.md) and [/4DACTION](../WebServer/httpRequests.md#4daction) requests), - calls to the [REST API](../REST/authUsers.md), which are used by [remote datastores](../ORDA/remoteDatastores.md) and [Qodly forms](qodly-studio.md). -## Activando sessões web +## Enabling web sessions {#enabling-web-sessions} A funcionalidade de gerenciamento de sessão pode ser ativado e desativado no seu servidor web 4D. Existem diferentes formas de ativar a gestão de sessões: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md index e529e68691a3c4..d997ac1b8e9866 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md @@ -67,11 +67,13 @@ The API provides access to multiple resources that allow seamless interaction wi | `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | Acesso à API Images. | | `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | Access to the Moderations API. | | `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | Access to the Embeddings API. | +| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Access to the Files API. | ### Exemplo de uso ```4d $client.chat.completions.create(...) $client.images.generate(...) +$client.files.create(...) $client.model.lists(...) ``` diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md new file mode 100644 index 00000000000000..c7e8f990d85809 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md @@ -0,0 +1,29 @@ +--- +id: openaifile +title: OpenAIFile +--- + +# OpenAIFile + +The `OpenAIFile` class represents a file object in the OpenAI API. Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. + +## Propriedades + +| Nome da propriedade | Tipo | Descrição | +| ------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | The file identifier, which can be referenced in the API endpoints. | +| `bytes` | Integer | The size of the file, in bytes. | +| `created_at` | Integer | The Unix timestamp (in seconds) for when the file was created. | +| `expires_at` | Integer | The Unix timestamp (in seconds) for when the file will expire. | +| `filename` | Text | The name of the file. | +| `objeto` | Text | The object type, which is always "file". | +| `purpose` | Text | The intended purpose of the file. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | +| `status` | Text | **Deprecated.** The current status of the file, which can be either `uploaded`, `processed`, or `error`. | +| `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | + +## Veja também + +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md new file mode 100644 index 00000000000000..d876440d86f848 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md @@ -0,0 +1,38 @@ +--- +id: openaifiledeletedresult +title: OpenAIFileDeletedResult +--- + +# OpenAIFileDeletedResult + +The `OpenAIFileDeletedResult` class contains the result of a file deletion operation. + +## Inherits + +[OpenAIResult](OpenAIResult.md) + +## Propriedades calculadas + +| Propriedade | Tipo | Descrição | +| ----------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Returns the file deletion result from the API response. Returns `Null` if the response doesn't contain a valid result. | + +## Exemplo de uso + +```4d +// Delete a file +var $fileId:="file-abc123" +var $result:=$client.files.delete($fileId; Null) +var $deletionStatus:=$result.deleted + +If ($deletionStatus.deleted) + ALERT("File "+$deletionStatus.id+" was successfully deleted") +Else + ALERT("Failed to delete file") +End if +``` + +## Veja também + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileDeleted](OpenAIFileDeleted.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md new file mode 100644 index 00000000000000..f4550a29601536 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md @@ -0,0 +1,38 @@ +--- +id: openaifilelistparameters +title: OpenAIFileListParameters +--- + +# OpenAIFileListParameters + +The `OpenAIFileListParameters` class contains parameters for listing files in the OpenAI API. + +## Inherits + +[OpenAIParameters](OpenAIParameters.md) + +## Propriedades + +| Nome da propriedade | Tipo | Required | Por padrão | Descrição | +| ------------------- | ------- | -------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `after` | Text | Opcional | - | A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `after=obj_foo` in order to fetch the next page of the list. | +| `limit` | Integer | Opcional | 10000 | A limit on the number of objects to be returned. Limit can range between 1 and 10,000, and the default is 10,000. | +| `order` | Text | Opcional | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | +| `purpose` | Text | Opcional | - | Only return files with the given purpose. | + +## Exemplo de uso + +```4d +// Get first 100 files with purpose "fine-tune" +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 +$params.purpose:="fine-tune" +$params.order:="desc" + +var $result:=$client.files.list($params) +``` + +## Veja também + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md new file mode 100644 index 00000000000000..7a5f1f3208be76 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md @@ -0,0 +1,66 @@ +--- +id: openaifilelistresult +title: OpenAIFileListResult +--- + +# OpenAIFileListResult + +The `OpenAIFileListResult` class contains the result of listing files from the OpenAI API. + +## Inherits + +[OpenAIResult](OpenAIResult.md) + +## Propriedades calculadas + +| Propriedade | Tipo | Descrição | +| ----------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | +| `first_id` | Text | Returns the ID of the first file in the list, or an empty string if not available. | +| `last_id` | Text | Returns the ID of the last file in the list, or an empty string if not available. | +| `has_more` | Parâmetros | Indicates if there are more files beyond this page. `True` if there are more files to fetch, `False` otherwise. | + +## Exemplo de uso + +### Basic Usage + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 + +var $result:=$client.files.list($params) +var $files:=$result.files + +For each ($file; $files) + // Process each OpenAIFile object + // $file.filename -> "salesOverview.pdf" + // $file.bytes -> 175 + // $file.purpose -> "assistants" +End for each +``` + +### Pagination Example + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.limit:=100 + +var $result:=$client.files.list($params) +var $allFiles:=$allFiles.combine($result.files) + +// Continue fetching if there are more files +While ($result.has_more) + $params.after:=$result.last_id + $result:=$client.files.list($params) + $allFiles:=$allFiles.combine($result.files) +End while + +// $allFiles now contains all files from the organization +``` + +## Veja também + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md new file mode 100644 index 00000000000000..512101ee706778 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -0,0 +1,43 @@ +--- +id: openaifileparameters +title: OpenAIFileParameters +--- + +# OpenAIFileParameters + +The `OpenAIFileParameters` class handles parameters for file upload operations. + +## Inherits + +[OpenAIParameters](OpenAIParameters.md) + +## Propriedades + +| Nome da propriedade | Tipo | Required | Descrição | +| ------------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `expires_after` | Object | Opcional | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | + +### `expires_after` Object Structure + +The `expires_after` object contains the following properties: + +| Nome da propriedade | Tipo | Descrição | +| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `anchor` | Text | Anchor timestamp after which the expiration policy applies. Supported anchors: `created_at`. | +| `seconds` | Integer | The number of seconds after the anchor time that the file will expire. Must be between 3600 (1 hour) and 2592000 (30 days). | + +## Exemplo de uso + +```4d +var $params:=cs.AIKit.OpenAIFileParameters.new() + +// Set expiration after 7 days +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=604800 // 7 days +``` + +## Veja também + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFileResult](OpenAIFileResult.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md new file mode 100644 index 00000000000000..949a94d16509a1 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md @@ -0,0 +1,36 @@ +--- +id: openaifileresult +title: OpenAIFileResult +--- + +# OpenAIFileResult + +The `OpenAIFileResult` class contains the result of a single file operation (upload or retrieve). + +## Inherits + +[OpenAIResult](OpenAIResult.md) + +## Propriedades calculadas + +| Propriedade | Tipo | Descrição | +| ----------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `file` | [OpenAIFile](OpenAIFile.md) | Returns the file object from the API response. Returns `Null` if the response doesn't contain a valid file. | + +## Exemplo de uso + +```4d +// Upload a file +var $file:=File("/RESOURCES/training-data.jsonl") + +var $result:=$client.files.create($file; "user_data") +var $uploadedFile:=$result.file + +// Retrieve file information +var $retrieveResult:=$client.files.retrieve($uploadedFile.id) +``` + +## Veja também + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) +- [OpenAIFile](OpenAIFile.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md new file mode 100644 index 00000000000000..a7e66277c7aaa2 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -0,0 +1,173 @@ +--- +id: openaifilesapi +title: OpenAIFilesAPI +--- + +# OpenAIFilesAPI + +The `OpenAIFilesAPI` class provides functionalities to manage files using OpenAI's API. Files can be uploaded and used across various endpoints including [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning), [Batch](https://platform.openai.com/docs/api-reference/batch) processing, and Vision. + +> **Note:** This API is only compatible with OpenAI. Other providers listed in the [compatible providers](../compatible-openai.md) documentation do not support file management operations. + +API Reference: + +## File Size Limits + +- **Individual files:** up to 512 MB per file +- **Organization total:** up to 1 TB (cumulative size of all files uploaded by your [organization](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization)) + +## Funções + +### create() + +**create**(*file* : 4D.File | 4D.Blob; *purpose* : Text; *parameters* : cs.OpenAIFileParameters) : cs.OpenAIFileResult + +Upload a file that can be used across various endpoints. + +**Endpoint:** `POST https://api.openai.com/v1/files` + +| Parâmetro | Tipo | Descrição | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `file` | [4D.File](https://developer.4d.com/docs/API/FileClass) or [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | The File or Blob object (not file name) to be uploaded. | +| `purpose` | Text | **Required.** The intended purpose of the uploaded file. | +| `parâmetros` | [OpenAIFileParameters](OpenAIFileParameters.md) | Optional parameters including expiration policy. | +| Resultado | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + +**Throws:** An error if `file` is not a 4D.File or 4D.Blob, or if `purpose` is empty. + +#### Supported Purposes + +- `assistants`: Used in the Assistants API (⚠️ [deprecated by OpenAI](https://platform.openai.com/docs/assistants/whats-new)) +- `batch`: Used in the [Batch API](https://platform.openai.com/docs/api-reference/batch) (expires after 30 days by default) +- `fine-tune`: Used for [fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning) +- `vision`: Images used for vision fine-tuning +- `user_data`: Flexible file type for any purpose +- `evals`: Used for eval data sets + +#### File Format Requirements + +- **Fine-tuning API:** Only supports `.jsonl` files with specific required formats +- **Batch API:** Only supports `.jsonl` files up to 200 MB with specific required format +- **Assistants API:** Supports specific file types (see Assistants Tools guide) +- **Chat Completions API:** PDFs are only supported + +#### Exemplo + +```4d +var $file:=File("/RESOURCES/training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.expires_after:={} +$params.expires_after.anchor:="created_at" +$params.expires_after.seconds:=2592000 // 30 days + +var $result:=$client.files.create($file; "fine-tune"; $params) + +If ($result.success) + var $uploadedFile:=$result.file + // $uploadedFile.id -> "file-abc123" + // $uploadedFile.filename -> "training-data.jsonl" + // $uploadedFile.bytes -> 120000 +End if +``` + +### retrieve() + +**retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult + +Returns information about a specific file. + +**Endpoint:** `GET https://api.openai.com/v1/files/{file_id}` + +| Parâmetro | Tipo | Descrição | +| ------------ | --------------------------------------- | ----------------------------------------------------------------------------- | +| `fileId` | Text | **Required.** The ID of the file to retrieve. | +| `parâmetros` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | +| Resultado | [OpenAIFileResult](OpenAIFileResult.md) | The file result | + +**Throws:** An error if `fileId` is empty. + +#### Exemplo + +```4d +var $result:=$client.files.retrieve("file-abc123") + +If ($result.success) + var $file:=$result.file + // $file.filename -> "mydata.jsonl" + // $file.bytes -> 120000 + // $file.purpose -> "fine-tune" +End if +``` + +### lista() + +**list**(*parameters* : cs.OpenAIFileListParameters) : cs.OpenAIFileListResult + +Returns a list of files that belong to the user's organization. + +**Endpoint:** `GET https://api.openai.com/v1/files` + +| Parâmetro | Tipo | Descrição | +| ------------ | ------------------------------------------------------- | ----------------------------------------------------------------- | +| `parâmetros` | [OpenAIFileListParameters](OpenAIFileListParameters.md) | Optional parameters for filtering and pagination. | +| Resultado | [OpenAIFileListResult](OpenAIFileListResult.md) | The file list result | + +#### Exemplo + +```4d +var $params:=cs.AIKit.OpenAIFileListParameters.new() +$params.purpose:="assistants" +$params.limit:=50 +$params.order:="desc" + +var $result:=$client.files.list($params) + +If ($result.success) + var $files:=$result.files + // $files.length -> 2 + + For each ($file; $files) + // $file.filename -> "salesOverview.pdf", "puppy.jsonl", etc. + End for each +End if +``` + +### delete() + +**delete**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileDeletedResult + +Delete a file. + +**Endpoint:** `DELETE https://api.openai.com/v1/files/{file_id}` + +| Parâmetro | Tipo | Descrição | +| ------------ | ----------------------------------------------------- | --------------------------------------------------------------------------- | +| `fileId` | Text | **Required.** The ID of the file to delete. | +| `parâmetros` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | +| Resultado | [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) | The file deletion result | + +**Throws:** An error if `fileId` is empty. + +#### Exemplo + +```4d +var $result:=$client.files.delete("file-abc123") + +If ($result.success) + var $status:=$result.deleted + + If ($status.deleted) + ALERT("File deleted successfully") + End if +End if +``` + +## Veja também + +- [OpenAIFile](OpenAIFile.md) +- [OpenAIFileParameters](OpenAIFileParameters.md) +- [OpenAIFileListParameters](OpenAIFileListParameters.md) +- [OpenAIFileResult](OpenAIFileResult.md) +- [OpenAIFileListResult](OpenAIFileListResult.md) +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index de0352a6fc05bb..2e3107300078bd 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -36,18 +36,52 @@ The `OpenAIMessage` class represents a structured message containing a role, con Adds an image URL to the content of the message. +### addFileId() + +**addFileId**(*fileId* : Text) + +| Parâmetro | Tipo | Descrição | +| --------- | ---- | -------------------------------------------------- | +| *fileId* | Text | The file ID to add to the message. | + +Adds a file reference to the content of the message. If the content is currently text, it will be converted to a collection format. + ## Exemplo de uso -### Create a simple message and attach an image +### Basic Text Message ```4d // Create an instance of OpenAIMessage -var $message:=cs.AIKit.OpenAIMessage({role: "user"; content: "Hello!"}) +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Hello!"}) +``` + +### Adding Images + +```4d +var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this image:"}) // Add an image URL with details $message.addImageURL("http://example.com/image.jpg"; "high") ``` +### Adding File + +```4d +// Upload a file with user_data purpose +var $file:=File("/RESOURCES/document.pdf") +var $uploadResult:=$client.files.create($file; "user_data") + +If ($uploadResult.success) + var $uploadedFile:=$uploadResult.file + + // Create message and attach the file using its ID + var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this document:"}) + $message.addFileId($uploadedFile.id) + + // $message.content -> [{type: "text"; text: "Please analyze this document:"}; {type: "file"; file_id: "file-abc123"}] +End if +``` + ### Respond to a tool call message When an assistant needs to use external functions, it generates a message with `tool_calls` to request function execution. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/overview.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/overview.md index aed3c9f5dd59b6..98b2748bf94ee8 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/overview.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/overview.md @@ -103,6 +103,42 @@ Get one model information by id var $model:=$client.models.retrieve("a model id").model ``` +#### Files + +https://platform.openai.com/docs/api-reference/files + +Upload a file for use with other endpoints + +```4d +var $file:=File("/path/to/your/file.jsonl") +var $result:=$client.files.create($file; "fine-tune") +var $fileId:=$result.file.id +``` + +List all files + +```4d +var $files:=$client.files.list().files +``` + +Retrieve file information + +```4d +var $fileInfo:=$client.files.retrieve($fileId).file +``` + +Delete a file + +```4d +var $deleteResult:=$client.files.delete($fileId) +``` + +:::tip Related blog post + +[Transform Static Documents into Actionable Knowledge with 4D AIKit](https://blog.4d.com/transform-static-documents-into-actionable-knowledge-with-4d-aikit). + +::: + #### Moderations https://platform.openai.com/docs/api-reference/moderations diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index 15f85db4d7ad84..26051dac8ef98f 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -25,7 +25,7 @@ As sessões Web são usadas para: - [Aplicaciones web](gettingStarted.md) que envían peticiones http, - calls to the [REST API](../REST/authUsers.md), which are used by [remote datastores](../ORDA/remoteDatastores.md) and [Qodly forms](qodly-studio.md). -## Activando sessões web +## Enabling web sessions {#enabling-web-sessions} A funcionalidade de gerenciamento de sessão pode ser ativado e desativado no seu servidor web 4D. Existem diferentes formas de ativar a gestão de sessões: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md index 7e4e7c23aa2954..d12f4b9b0b6889 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -41,7 +41,7 @@ Leia [**O que há de novo no 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/ ::: -- Web services (SOAP): when [scalable sessions](../WebServer/sessions.md#enabling-web-sessions) are enabled, web services now run in [**preemptive processes**](../Develop/preemptive.md) in compiled mode. Make sure your SOAP code is thread-safe. +- Web services (SOAP): when [scalable sessions](../WebServer/sessions.md#enabling-web-sessions) are enabled, web services now run in [**preemptive processes**](../Develop/preemptive.md) in compiled mode. Make sure that your SOAP code is thread-safe and that the session in which it runs has appropriate [privileges](../API/SessionClass.md#setprivileges). - Web server: the support of deprecated `4DSYNC/` and `4DCGI/` URLs is removed. No specific processing is done on these URLs anymore. - Web user sessions are now returned by [`Process activity`](../commands/process-activity.md). - The [`HIGHLIGHT TEXT`](../commands/highlight-text) command is now supported in the context of subforms. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index d9801682f90175..09fd59389d4d97 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -25,7 +25,7 @@ As sessões Web são usadas para: - [Web applications](gettingStarted.md) sending http requests (including [SOAP Web services](../commands/theme/Web_Services_Server.md) and [/4DACTION](../WebServer/httpRequests.md#4daction) requests), - calls to the [REST API](../REST/authUsers.md), which are used by [remote datastores](../ORDA/remoteDatastores.md) and [Qodly forms](qodly-studio.md). -## Activando sessões web +## Enabling web sessions {#enabling-web-sessions} A funcionalidade de gerenciamento de sessão pode ser ativado e desativado no seu servidor web 4D. Existem diferentes formas de ativar a gestão de sessões: From 2318b2634ea24140d5d93a23b62bf07796e69eda Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 21 Nov 2025 10:04:39 +0100 Subject: [PATCH 41/75] fixes in concat --- docs/API/CollectionClass.md | 4 ++-- versioned_docs/version-19/API/CollectionClass.md | 4 ++-- versioned_docs/version-20-R10/API/CollectionClass.md | 4 ++-- versioned_docs/version-20/API/CollectionClass.md | 4 ++-- versioned_docs/version-21/API/CollectionClass.md | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/API/CollectionClass.md b/docs/API/CollectionClass.md index 8aa55ef860d79c..7528a3edf45a8f 100644 --- a/docs/API/CollectionClass.md +++ b/docs/API/CollectionClass.md @@ -295,13 +295,13 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]
    -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection |Parameter|Type||Description| |---------|--- |:---:|------| -|value|Number, Text, Object, Collection, Date, Time, Boolean, Picture|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| +|value|any|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| |Result|Collection|<-|New collection with value(s) added to the original collection| diff --git a/versioned_docs/version-19/API/CollectionClass.md b/versioned_docs/version-19/API/CollectionClass.md index 4845ee12626f86..b9e1f36bcaf685 100644 --- a/versioned_docs/version-19/API/CollectionClass.md +++ b/versioned_docs/version-19/API/CollectionClass.md @@ -345,13 +345,13 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]
    -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection |Parameter|Type||Description| |---------|--- |:---:|------| -|value|Number, Text, Object, Collection, Date, Time, Boolean, Picture|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| +|value|any|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| |Result|Collection|<-|New collection with value(s) added to the original collection| #### Description diff --git a/versioned_docs/version-20-R10/API/CollectionClass.md b/versioned_docs/version-20-R10/API/CollectionClass.md index 8aa55ef860d79c..7528a3edf45a8f 100644 --- a/versioned_docs/version-20-R10/API/CollectionClass.md +++ b/versioned_docs/version-20-R10/API/CollectionClass.md @@ -295,13 +295,13 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]
    -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection |Parameter|Type||Description| |---------|--- |:---:|------| -|value|Number, Text, Object, Collection, Date, Time, Boolean, Picture|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| +|value|any|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| |Result|Collection|<-|New collection with value(s) added to the original collection| diff --git a/versioned_docs/version-20/API/CollectionClass.md b/versioned_docs/version-20/API/CollectionClass.md index 493764a7e58dc1..1416bd8bc4a122 100644 --- a/versioned_docs/version-20/API/CollectionClass.md +++ b/versioned_docs/version-20/API/CollectionClass.md @@ -441,13 +441,13 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection |Parameter|Type||Description| |---------|--- |:---:|------| -|value|Number, Text, Object, Collection, Date, Time, Boolean, Picture|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| +|value|any|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| |Result|Collection|<-|New collection with value(s) added to the original collection| diff --git a/versioned_docs/version-21/API/CollectionClass.md b/versioned_docs/version-21/API/CollectionClass.md index 8aa55ef860d79c..7528a3edf45a8f 100644 --- a/versioned_docs/version-21/API/CollectionClass.md +++ b/versioned_docs/version-21/API/CollectionClass.md @@ -295,13 +295,13 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection |Parameter|Type||Description| |---------|--- |:---:|------| -|value|Number, Text, Object, Collection, Date, Time, Boolean, Picture|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| +|value|any|->|Value(s) to concatenate. If *value* is a collection, all collection elements are added to the original collection| |Result|Collection|<-|New collection with value(s) added to the original collection| From 6ade41a54c809456c0b5e61264603ac1ad41afe2 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 24 Nov 2025 11:25:54 +0100 Subject: [PATCH 42/75] added example --- docs/aikit/Classes/OpenAIFilesAPI.md | 34 +++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/aikit/Classes/OpenAIFilesAPI.md b/docs/aikit/Classes/OpenAIFilesAPI.md index d2eda174589670..577a75ca2ff57d 100644 --- a/docs/aikit/Classes/OpenAIFilesAPI.md +++ b/docs/aikit/Classes/OpenAIFilesAPI.md @@ -54,7 +54,7 @@ Upload a file that can be used across various endpoints. - **Assistants API:** Supports specific file types (see Assistants Tools guide) - **Chat Completions API:** PDFs are only supported -#### Example +#### Sychronous example ```4d var $file:=File("/RESOURCES/training-data.jsonl") @@ -74,6 +74,38 @@ If ($result.success) End if ``` +#### Asynchronous Example + +Since file uploads can be long operations (especially for large files up to 512 MB), it's recommended to use asynchronous calls to avoid blocking your application. See [Asynchronous Call](../asynchronous-call.md) for more details. + +```4d +var $file:=File("/RESOURCES/large-training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.onTerminate:=Formula(MyFileUploadCallback($1)) + +// This call returns immediately without blocking +$client.files.create($file; "fine-tune"; $params) +``` + +The callback function receives an [OpenAIFileResult](OpenAIFileResult.md): + +```4d +// MyFileUploadCallback +#DECLARE($result: cs.AIKit.OpenAIFileResult) + +If ($result.success) + var $uploadedFile:=$result.file + + ALERT("File uploaded successfully: "+$uploadedFile.filename) + // Store the file ID for later use + Form.uploadedFileId:=$uploadedFile.id +Else + ALERT("Upload failed: "+Formula(JSON Stringify($result.errors))) +End if +``` + + ### retrieve() **retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult From d921e5dc4a5533c8bae2dd6b58ee8eac2e1cc8ef Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 24 Nov 2025 11:26:26 +0100 Subject: [PATCH 43/75] New Crowdin updates (#3005) * New translations collectionclass.md (French) * New translations collectionclass.md (French) * New translations collectionclass.md (French) * New translations collectionclass.md (French) * New translations collectionclass.md (French) * New translations collectionclass.md (Spanish) * New translations collectionclass.md (Spanish) * New translations collectionclass.md (Spanish) * New translations overview.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations architecture.md (Spanish) * New translations vp-import-document.md (Spanish) * New translations sessions.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations wp-export-document.md (Spanish) * New translations openaimessage.md (Spanish) * New translations command-name.md (Spanish) * New translations listbox-set-property.md (Spanish) * New translations collectionclass.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations vp-copy-to-object.md (Spanish) * New translations sessions.md (Spanish) * New translations wp-export-variable.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations openaimessage.md (Spanish) * New translations command-name.md (Spanish) * New translations listbox-set-property.md (Spanish) * New translations http-rules.md (Spanish) * New translations collectionclass.md (Spanish) * New translations command-name.md (Spanish) * New translations listbox-set-property.md (Spanish) * New translations architecture.md (Spanish) * New translations webarea_overview.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations vp-copy-to-object.md (Spanish) * New translations vp-import-document.md (Spanish) * New translations http-rules.md (Spanish) * New translations sessions.md (Spanish) * New translations wp-export-document.md (Spanish) * New translations wp-export-variable.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations openaimessage.md (Spanish) * New translations collectionclass.md (Japanese) * New translations collectionclass.md (Japanese) * New translations collectionclass.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations privileges.md (Japanese) * New translations collectionclass.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations privileges.md (Japanese) * New translations collectionclass.md (Japanese) * New translations ordaclasses.md (Japanese) * New translations privileges.md (Japanese) * New translations collectionclass.md (Portuguese, Brazilian) * New translations collectionclass.md (Portuguese, Brazilian) * New translations collectionclass.md (Portuguese, Brazilian) * New translations collectionclass.md (Portuguese, Brazilian) * New translations collectionclass.md (Portuguese, Brazilian) * New translations openaifilelistresult.md (Spanish) * New translations openaifileparameters.md (Spanish) * New translations openaifilesapi.md (Spanish) --- .../current/API/CollectionClass.md | 22 ++++++++--------- .../current/Extensions/overview.md | 2 +- .../current/FormObjects/webArea_overview.md | 2 +- .../current/ORDA/ordaClasses.md | 6 ++--- .../current/ORDA/privileges.md | 6 ++--- .../current/Project/architecture.md | 2 +- .../ViewPro/commands/vp-import-document.md | 2 +- .../current/WebServer/http-rules.md | 16 ++++++------- .../current/WebServer/sessions.md | 2 +- .../WritePro/commands/wp-export-document.md | 2 +- .../current/WritePro/managing-formulas.md | 4 ++-- .../aikit/Classes/OpenAIFileListResult.md | 4 ++-- .../aikit/Classes/OpenAIFileParameters.md | 2 +- .../current/aikit/Classes/OpenAIFilesAPI.md | 2 +- .../current/aikit/Classes/OpenAIMessage.md | 4 ++-- .../current/commands/command-name.md | 4 ++-- .../current/commands/listbox-set-property.md | 2 +- .../version-19/API/CollectionClass.md | 10 ++++---- .../version-20-R10/API/CollectionClass.md | 24 +++++++++---------- .../FormObjects/webArea_overview.md | 2 +- .../version-20-R10/ORDA/ordaClasses.md | 6 ++--- .../ViewPro/commands/vp-copy-to-object.md | 8 +++---- .../version-20-R10/WebServer/sessions.md | 2 +- .../WritePro/commands/wp-export-variable.md | 2 +- .../WritePro/managing-formulas.md | 2 +- .../aikit/Classes/OpenAIMessage.md | 2 +- .../version-20-R10/commands/command-name.md | 2 +- .../commands/listbox-set-property.md | 2 +- .../version-20/API/CollectionClass.md | 10 ++++---- .../version-21/API/CollectionClass.md | 24 +++++++++---------- .../FormObjects/webArea_overview.md | 2 +- .../version-21/ORDA/ordaClasses.md | 6 ++--- .../version-21/ORDA/privileges.md | 6 ++--- .../version-21/Project/architecture.md | 2 +- .../ViewPro/commands/vp-copy-to-object.md | 8 +++---- .../ViewPro/commands/vp-import-document.md | 2 +- .../version-21/WebServer/http-rules.md | 16 ++++++------- .../version-21/WebServer/sessions.md | 2 +- .../WritePro/commands/wp-export-document.md | 2 +- .../WritePro/commands/wp-export-variable.md | 2 +- .../version-21/WritePro/managing-formulas.md | 4 ++-- .../version-21/aikit/Classes/OpenAIMessage.md | 2 +- .../version-21/commands/command-name.md | 4 ++-- .../commands/listbox-set-property.md | 2 +- .../current/API/CollectionClass.md | 22 ++++++++--------- .../version-19/API/CollectionClass.md | 10 ++++---- .../version-20-R10/API/CollectionClass.md | 24 +++++++++---------- .../version-20/API/CollectionClass.md | 10 ++++---- .../version-21/API/CollectionClass.md | 24 +++++++++---------- .../current/API/CollectionClass.md | 22 ++++++++--------- .../current/ORDA/ordaClasses.md | 22 ++++++++--------- .../current/ORDA/privileges.md | 18 +++++++------- .../version-19/API/CollectionClass.md | 10 ++++---- .../version-20-R10/API/CollectionClass.md | 24 +++++++++---------- .../version-20-R10/ORDA/ordaClasses.md | 22 ++++++++--------- .../version-20-R10/ORDA/privileges.md | 6 ++--- .../version-20/API/CollectionClass.md | 10 ++++---- .../version-21/API/CollectionClass.md | 24 +++++++++---------- .../version-21/ORDA/ordaClasses.md | 22 ++++++++--------- .../version-21/ORDA/privileges.md | 18 +++++++------- .../current/API/CollectionClass.md | 22 ++++++++--------- .../version-19/API/CollectionClass.md | 10 ++++---- .../version-20-R10/API/CollectionClass.md | 24 +++++++++---------- .../version-20/API/CollectionClass.md | 10 ++++---- .../version-21/API/CollectionClass.md | 24 +++++++++---------- 65 files changed, 297 insertions(+), 321 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md index 07743af4897bf7..74b650aae99b35 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -264,14 +264,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parámetros | Tipo | | Descripción | -| ---------- | -------------------------------------------------------------- | :-------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Si *value* es una colección, todos sus elementos se añaden al final de la colección original. | -| Resultado | Collection | <- | Colección original con valores rellenados | +| Parámetros | Tipo | | Descripción | +| ---------- | ---------- | :-------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valores a concatenar. Si *value* es una colección, todos sus elementos se añaden al final de la colección original. | +| Resultado | Collection | <- | Colección original con valores rellenados | @@ -3171,14 +3171,12 @@ La función `.sort()` ordena los elemento Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. También puede pasar una de las siguientes constantes en el parámetro *ascOrDesc*: -``` -|Constant| Type|Value|Comment| -|---|---|---|---| -|ck ascending|Integer|0|Elements are ordered in ascending order (default)| -|ck descending|Integer|1|Elements are ordered in descending order| +| Constante | Tipo | Valor | Comentario | +| ------------- | ------- | ----- | ----------------------------------------------------------------------------- | +| ck ascending | Integer | 0 | Los elementos se ordenan de forma ascendente (por defecto) | +| ck descending | Integer | 1 | Los elementos se ordenan de forma descendente | -This syntax orders scalar values in the collection only (other element types such as objects or collections are returned unordered). -``` +Esta sintaxis sólo ordena los valores escalares de la colección (otros tipos de elementos, como objetos o colecciones, se devuelven desordenados). Si la colección contiene elementos de diferentes tipos, se agrupan primero por tipo y se ordenan después. Si attributePath lleva a una propiedad de objeto que contiene valores de diferentes tipos, primero se agrupan por tipo y se ordenan después. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Extensions/overview.md b/i18n/es/docusaurus-plugin-content-docs/current/Extensions/overview.md index 615fc7ae5c281d..3d0446a3a08f23 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Extensions/overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Extensions/overview.md @@ -16,7 +16,7 @@ La [arquitectura del proyecto] 4D (../Project/architecture.md) es abierta y pued ## Componentes desarrollados por 4D -4D proposes various components to the 4D community, covering many development needs. Todos los componentes 4D se pueden encontrar en el [**repositorio github de 4D**](https://github.com/4d). +4D propone diferentes componentes a la comunidad 4D, cubriendo muchas necesidades de desarrollo. Todos los componentes 4D se pueden encontrar en el [**repositorio github de 4D**](https://github.com/4d). A subset of these components is listed by default in the [Dependency Manager](../Project/components.md), including: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md index c272db7f19ea66..ee0b5d7a0faa89 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/webArea_overview.md @@ -121,7 +121,7 @@ $4d.today(function(result) #### Ejemplo 2 -Instead of using a standalone method, we can also use a class function to handle the calculation. +En lugar de utilizar un método independiente, también podemos utilizar una función de clase para realizar el cálculo. Define a "SumCalculator" 4D user class with a `calcSum` function which receives parameters and returns their sum: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index 96c61be07c7447..a1277e87a87543 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -933,7 +933,7 @@ For security reasons, all of your data model class functions, including [compute Las peticiones remotas son: - Las peticiones enviadas por las aplicaciones 4D remotas conectadas a través de `Open datastore` -- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) +- Peticiones REST, incluidas las solicitudes de [páginas Qodly](https://developer.4d.com/qodly/) > Las peticiones cliente/servidor 4D estándar no se ven afectadas. Las funciones de clase del modelo de datos están siempre disponibles en esta arquitectura. @@ -947,12 +947,12 @@ exposed Function ``` ```4d -// declare an exposed alias +// declarar un alias expuesto exposed Alias ``` ```4d -// declare an exposed computed attribute +// declare un atributo calculado expuesto exposed Function get ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md index d1a1d185b52ba1..610b4e0d8db290 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -37,7 +37,7 @@ Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma ## Permisos -A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Los permisos se definen para el proyecto en el archivo [`roles.json`](#rolesjson-file). Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). @@ -185,7 +185,7 @@ El archivo `roles.json` describe todos los parámetros de seguridad web del proy | | | \[].execute | Colección de cadenas | | Lista de privilegios | | | | \[].promote | Colección de cadenas | | Lista de privilegios | | restrictedByDefault | | | Boolean | | Si es true, se niega el acceso a recursos sin permisos explícitos | -| forceLogin | | | Boolean | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | +| forceLogin | | | Boolean | | Si es true, activa el modo ["forceLogin"](../REST/authUsers.md#force-login-mode) | :::caution Recordatorio @@ -196,7 +196,7 @@ El archivo `roles.json` describe todos los parámetros de seguridad web del proy ### Default File Location and Content -When a new project is created, a default `roles.json` file is generated at: +Cuando se crea un nuevo proyecto, se genera un archivo `roles.json` por defecto en: ``` /Project/Sources/ diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Project/architecture.md b/i18n/es/docusaurus-plugin-content-docs/current/Project/architecture.md index ecac98bd608bb7..755af59c77aedf 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Project/architecture.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Project/architecture.md @@ -64,7 +64,7 @@ Este archivo de texto también puede contener llaves de configuración, en parti | filters.json | Filtros definidos | JSON | | dependencies.json | Nombres de [componentes a cargar](components.md) en el proyecto | JSON | | HTTPHandlers.json | Personalizado [HTTP request handlers](../WebServer/http-request-handler.md) definido para el servidor web | JSON | -| HTTPRules.json | Custom [HTTP rules](../WebServer/http-rules.md) defined for the web server | JSON | +| HTTPRules.json | [Reglas HTTP](../WebServer/http-rules.md) personalizadas definidas para el servidor web | JSON | | styleSheets.css | Hojas de estilo CSS | CSS | | styleSheets_mac.css | Hojas de estilo css de Mac (a partir de una base binaria convertida) | CSS | | styleSheets_windows.css | Hojas de estilo css en Windows (a partir de una base binaria convertida) | CSS | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md index 2634788b5efb66..9a3dadc588bc8c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md @@ -66,7 +66,7 @@ El parámetro opcional *paramObj* permite definir las propiedades del documento | | frozenRowsAsColumnHeaders | boolean | Bien sea tratar las líneas congeladas como encabezados de columna al importar, por defecto false. | | | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | | | dynamicReferences | boolean | Si calcular funciones con referencia dinámica, por defecto true. | -| | calcOnDemand | boolean | Whether to calculate formulas only when they are demanded, default false. | +| | calcOnDemand | boolean | Si se calculan las fórmulas solo cuando se solicitan, por defecto false. | | | includeUnusedStyles | boolean | Si incluir el estilo de nombre no utilizado al convertir excel xml al json, default true. | | | contraseña | text | La contraseña para abrir el workbook. | | | openMode | text | The open mode of normal, lazy and incremental. Por defecto es normal. | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md index bc8018c82e60ac..bb951c00c48b3f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md @@ -53,14 +53,14 @@ Cuando el servidor web recibe una solicitud, **todos** los patrones de URL se ac Se soportan las siguientes palabras clave de acción: -| Palabras clave | Tipo de valor | Descripción | -| --------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `removeHeaders` | Texto o colección de textos | Encabezado(s) para eliminar de las respuestas HTTP. Si un encabezado a eliminar no existe en el encabezado de respuesta, se ignora. | -| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. | -| `setHeaders` | Object | Name (text) and value (text) of header(s) to modify in the HTTP responses. Si un encabezado a modificar no existe en el encabezado de respuesta, se añade. | -| `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. Cuando el acceso a un recurso es denegado, el servidor web devuelve un estado 403 por defecto | -| `redirect` | Text | Redirigir URL. Cuando se activa una redirección, el servidor web devuelve un estado 302 por defecto | -| `status` | Number | Estado HTTP | +| Palabras clave | Tipo de valor | Descripción | +| --------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `removeHeaders` | Texto o colección de textos | Encabezado(s) para eliminar de las respuestas HTTP. Si un encabezado a eliminar no existe en el encabezado de respuesta, se ignora. | +| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. | +| `setHeaders` | Object | Nombre (texto) y valor (texto) de los encabezados a modificar en las respuestas HTTP. Si un encabezado a modificar no existe en el encabezado de respuesta, se añade. | +| `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. Cuando el acceso a un recurso es denegado, el servidor web devuelve un estado 403 por defecto | +| `redirect` | Text | Redirigir URL. Cuando se activa una redirección, el servidor web devuelve un estado 302 por defecto | +| `status` | Number | Estado HTTP | ### Encabezados no modificables diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md index 1f93da7931a3b2..00048040081872 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/sessions.md @@ -267,7 +267,7 @@ El token OTP se considera inválido si: - el token de sesión no existe, - la propia sesión original ha caducado. -In this case, no web user session is restored and the current session (if any) is left unchanged. Normalmente, puede decidir mostrar una página de conexión o abrir una sesión guest. +En este caso, no se restaura ninguna sesión de usuario web y la sesión actual (si existe) se deja sin cambios. Normalmente, puede decidir mostrar una página de conexión o abrir una sesión guest. La verificación de la validez del token OTP recibido depende de cómo fue manejado: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-export-document.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-export-document.md index 5b83c6bb5b8efb..3c6997512facff 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-export-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-export-document.md @@ -72,7 +72,7 @@ Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* c | wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | | wk whitespace | whitespace | Define el valor css "white-space" para los formatos de exportación `wk mime html` y `wk web page complete`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | -The following table indicates the *option* available per export *format*: +La siguiente tabla indica la *option* disponible por *format* de exportación: | | **wk 4wp** | **wk docx** | **wk mime html** | **wk pdf** | **wk web page complete** | **wk svg** | | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md index 35e3b3b515c769..b1d05d404a548e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md @@ -102,7 +102,7 @@ Cuando se utiliza en una fórmula dentro de la tabla, la palabra clave **This** | | [This](../commands/this.md).rowIndex | Number | Índice de la línea actual, a partir de 1 | | Cuando se ha definido una fuente de datos para la tabla | [This](../commands/this.md).table.dataSource | Objet (fórmula) | Fuente de datos como fórmula | | | [This](../commands/this.md).tableData | Collection o Entity selection (por lo general) | table.dataSource evaluada | -| In each data row when a table datasource returns a collection or an entity selection | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | +| En cada fila de datos cuando una fuente de datos tabla devuelve una colección o una selección de entidades | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | | | [This](../commands/this.md).itemIndex | Number | Índice del elemento actual en la colección o selección de entidades, a partir de 0 | | In any row (except header rows) when a table datasource returns a collection or an entity selection | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    Esta expresión devuelve el mismo tipo de valor que la expresión **This.tableData**. | | In a break row | [This](../commands/this.md).breakItems | Collection o entity selection | Items of the collection or entity selection displayed in the rows between:
    • the current break row and the previous break row of the same level (or the start of the table) if the break row(s) are displayed after the data row.
    • the current break and the next break row of the same level (or the end of the table) if the break row(s) are displayed before the data row.
    | @@ -167,7 +167,7 @@ Por defecto, las fórmulas 4D se muestran como valores. Al insertar una fórmula Para mostrar fórmulas como referencias, puede: -- check the **Show references** option in the Property list (see *Configuring View properties*), or +- marque la opción **Mostrar referencias** en la lista de propiedades (consulte *Configuración de las propiedades Vista*), o bien - utilizar la acción estándar visibleReferences (ver *Expresiones dinámicas*), o bien - usa el comando [**WP SET VIEW PROPERTIES**](commands-legacy/wp-set-view-properties.md) con el selector `wk visible references` en **True**. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md index dc92c30d761a48..7b8830b98403ab 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md @@ -16,8 +16,8 @@ The `OpenAIFileListResult` class contains the result of listing files from the O | Propiedad | Tipo | Descripción | | ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | -| `first_id` | Text | Returns the ID of the first file in the list, or an empty string if not available. | -| `last_id` | Text | Returns the ID of the last file in the list, or an empty string if not available. | +| `first_id` | Text | Devuelve el ID del primer archivo de la lista, o una cadena vacía si no está disponible. | +| `last_id` | Text | Devuelve el ID del último archivo de la lista, o una cadena vacía si no está disponible. | | `has_more` | Boolean | Indica si hay más archivos más allá de esta página. `True` if there are more files to fetch, `False` otherwise. | ## Ejemplo de Uso diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md index aab077253ede67..8416856ad31675 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -5,7 +5,7 @@ title: OpenAIFileParameters # OpenAIFileParameters -The `OpenAIFileParameters` class handles parameters for file upload operations. +La clase `OpenAIFileParameters` gestiona los parámetros de las operaciones de carga de archivos. ## Hereda diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index efa19c52ff5153..a0b5682d10f545 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -48,7 +48,7 @@ Upload a file that can be used across various endpoints. - **Fine-tuning API:** Only supports `.jsonl` files with specific required formats - **Batch API:** Only supports `.jsonl` files up to 200 MB with specific required format -- **Assistants API:** Supports specific file types (see Assistants Tools guide) +- **API de Asistentes:** soporta tipos de archivo específicos (ver Guía de herramientas de asistentes) - **API de finalización de chat:** sólo se admiten archivos PDF #### Ejemplo diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index 4fb9a34e1c7733..bed69eb13e2c1d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -5,7 +5,7 @@ title: OpenAIMessage # OpenAIMessage -La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, un contenido y un usuario opcional. This class provides methods to manipulate and retrieve the text and other content of the message. +La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, un contenido y un usuario opcional. Esta clase ofrece métodos para manipular y recuperar el texto y otros contenidos del mensaje. ## Propiedades @@ -44,7 +44,7 @@ Añade una URL de imagen al contenido del mensaje. | ---------- | ---- | ------------------------------------------------------------ | | *fileId* | Text | El ID del archivo que se añadirá al mensaje. | -Añade una referencia de archivo al contenido del mensaje. If the content is currently text, it will be converted to a collection format. +Añade una referencia de archivo al contenido del mensaje. Si el contenido es actualmente texto, se convertirá a un formato colección. ## Ejemplo de Uso diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md index 277252ce4c6f14..91aa679c62b542 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/command-name.md @@ -34,7 +34,7 @@ El comando **Command name** devuelve e Hay dos parámetros opcionales: -- *info*: propiedades del comando. The returned value is a *bit field*, where the following bits are meaningful: +- *info*: propiedades del comando. El valor devuelto es un *campo de bits*, donde los siguientes bits son significativos: - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Solo se pueden usar comandos hilo seguro en [procesos preventivos](../Develop/preemptive.md). - Segundo bit (bit 1): se define en 1 si el comando es **obsoleto**, y en 0 si no lo es. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). @@ -80,7 +80,7 @@ En un formulario, quiere una lista desplegable con los comandos básicos de info  End case ``` -En la versión inglesa de 4D, la lista desplegable leerá: Sum, Average, Min y Max. In the French version\*, the drop-down list will read: Somme, Moyenne, Min, and Max. +En la versión inglesa de 4D, la lista desplegable leerá: Sum, Average, Min y Max. En la versión francésa \*, la lista desplegable dirá: Somme, Moyenne, Min, y Max. \*con una aplicación 4D configurada para usar el lenguaje de programación en francés (ver nota de compatibilidad) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-set-property.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-set-property.md index d6641157210542..26236b6a1d6836 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-set-property.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/listbox-set-property.md @@ -77,7 +77,7 @@ Quiere que todas las columnas del list box "MyListbox" sean redimensionables: ## Ejemplo 2 -You want to set a maximum width for the column whose name is "ProductNumber": +Desea definir un ancho máximo para la columna cuyo nombre es "ProductNumber": ```4d LISTBOX SET PROPERTY(*; "ProductNumber";lk column max width;200) //Esta columna tendrá un ancho máximo de 200 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md index b15f5e0bde777c..3012ae1811a08e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md @@ -349,14 +349,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parámetros | Tipo | | Descripción | -| ---------- | -------------------------------------------------------------- |:--:| ------------------------------------------------------------------------------------------------------------------------ | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Si *value* es una colección, todos los elementos de la colección se añaden a la colección original | -| Resultado | Collection | <- | Nueva colección con valor(es) añadido(s) a la colección original| +| Parámetros | Tipo | | Descripción | +| ---------- | ---------- |:--:| ------------------------------------------------------------------------------------------------------------------------ | +| value | any | -> | Valores a concatenar. Si *value* es una colección, todos los elementos de la colección se añaden a la colección original | +| Resultado | Collection | <- | Nueva colección con valor(es) añadido(s) a la colección original| | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index b19fb72882385a..74b650aae99b35 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -264,14 +264,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parámetros | Tipo | | Descripción | -| ---------- | -------------------------------------------------------------- | :-------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Si *value* es una colección, todos sus elementos se añaden al final de la colección original. | -| Resultado | Collection | <- | Colección original con valores rellenados | +| Parámetros | Tipo | | Descripción | +| ---------- | ---------- | :-------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valores a concatenar. Si *value* es una colección, todos sus elementos se añaden al final de la colección original. | +| Resultado | Collection | <- | Colección original con valores rellenados | @@ -3171,14 +3171,12 @@ La función `.sort()` ordena los elemento Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. También puede pasar una de las siguientes constantes en el parámetro *ascOrDesc*: - ``` - |Constant| Type|Value|Comment| - |---|---|---|---| - |ck ascending|Integer|0|Elements are ordered in ascending order (default)| - |ck descending|Integer|1|Elements are ordered in descending order| - - This syntax orders scalar values in the collection only (other element types such as objects or collections are returned unordered). - ``` +| Constante | Tipo | Valor | Comentario | +| ------------- | ------- | ----- | ----------------------------------------------------------------------------- | +| ck ascending | Integer | 0 | Los elementos se ordenan de forma ascendente (por defecto) | +| ck descending | Integer | 1 | Los elementos se ordenan de forma descendente | + +Esta sintaxis sólo ordena los valores escalares de la colección (otros tipos de elementos, como objetos o colecciones, se devuelven desordenados). Si la colección contiene elementos de diferentes tipos, se agrupan primero por tipo y se ordenan después. Si attributePath lleva a una propiedad de objeto que contiene valores de diferentes tipos, primero se agrupan por tipo y se ordenan después. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md index 2358ca4e00a38d..ba8ac84ef8e799 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/webArea_overview.md @@ -115,7 +115,7 @@ $4d.today(function(result) #### Ejemplo 2 -Instead of using a standalone method, we can also use a class function to handle the calculation. +En lugar de utilizar un método independiente, también podemos utilizar una función de clase para realizar el cálculo. Define a "SumCalculator" 4D user class with a `calcSum` function which receives parameters and returns their sum: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index 96c61be07c7447..a1277e87a87543 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -933,7 +933,7 @@ For security reasons, all of your data model class functions, including [compute Las peticiones remotas son: - Las peticiones enviadas por las aplicaciones 4D remotas conectadas a través de `Open datastore` -- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) +- Peticiones REST, incluidas las solicitudes de [páginas Qodly](https://developer.4d.com/qodly/) > Las peticiones cliente/servidor 4D estándar no se ven afectadas. Las funciones de clase del modelo de datos están siempre disponibles en esta arquitectura. @@ -947,12 +947,12 @@ exposed Function ``` ```4d -// declare an exposed alias +// declarar un alias expuesto exposed Alias ``` ```4d -// declare an exposed computed attribute +// declare un atributo calculado expuesto exposed Function get ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-copy-to-object.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-copy-to-object.md index 704a4b63bc00d1..163f2fd9a76fa5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-copy-to-object.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-copy-to-object.md @@ -31,10 +31,10 @@ En *rangeObj*, pase el rango de celdas con los valores, formato y fórmulas a co Puede pasar un parámetro opcional *options* con las siguientes propiedades: -| Propiedad | Tipo | Descripción | -| ----------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| copy | Boolean | *True* (por defecto) para mantener los valores, el formato y las fórmulas copiados después de la ejecución del comando. *False* para eliminarlos. | -| copyOptions | Integer | Especifica lo que se copia o mueve. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Copies all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Copia solo el formato.
    `vk clipboard options formulas`Copies only the formulas.
    `vk clipboard options formulas and formatting`Copia las fórmulas y formato.
    `vk clipboard options values`Copia solo los valores.
    `vk clipboard options value and formatting`Copia los valores y el formato.

    | +| Propiedad | Tipo | Descripción | +| ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| copy | Boolean | *True* (por defecto) para mantener los valores, el formato y las fórmulas copiados después de la ejecución del comando. *False* para eliminarlos. | +| copyOptions | Integer | Especifica lo que se copia o mueve. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Copies all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Copia solo el formato.
    `vk clipboard options formulas`Copia sólo las fórmulas.
    `vk clipboard options formulas and formatting`Copia las fórmulas y formato.
    `vk clipboard options values`Copia solo los valores.
    `vk clipboard options value and formatting`Copia los valores y el formato.

    | Se tienen en cuenta las opciones de pegado definidas en las [opciones del libro de trabajo](vp-set-workbook-options.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md index 3280a50dd5dbaa..b1558d7998d930 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/sessions.md @@ -261,7 +261,7 @@ El token OTP se considera inválido si: - el token de sesión no existe, - la propia sesión original ha caducado. -In this case, no web user session is restored and the current session (if any) is left unchanged. Normalmente, puede decidir mostrar una página de conexión o abrir una sesión guest. +En este caso, no se restaura ninguna sesión de usuario web y la sesión actual (si existe) se deja sin cambios. Normalmente, puede decidir mostrar una página de conexión o abrir una sesión guest. La verificación de la validez del token OTP recibido depende de cómo fue manejado: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md index f77c075aef2b83..2d372bbe528a40 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-export-variable.md @@ -72,7 +72,7 @@ Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* c | wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | | wk whitespace | whitespace | Define el valor css "white-space" para el formato de exportación `wk mime html`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | -The following table indicates the *option* available per export *format*: +La siguiente tabla indica la *option* disponible por *format* de exportación: | | **wk 4wp** | **wk docx** | **wk mime html** | **wk pdf** | **wk web page html 4d** | **wk svg** | | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/managing-formulas.md index aa3861e5fb4023..783f399253a542 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/managing-formulas.md @@ -143,7 +143,7 @@ Por defecto, las fórmulas 4D se muestran como valores. Al insertar una fórmula Para mostrar fórmulas como referencias, puede: -- check the **Show references** option in the Property list (see *Configuring View properties*), or +- marque la opción **Mostrar referencias** en la lista de propiedades (consulte *Configuración de las propiedades Vista*), o bien - utilizar la acción estándar visibleReferences (ver *Expresiones dinámicas*), o bien - usa el comando [**WP SET VIEW PROPERTIES**](commands-legacy/wp-set-view-properties.md) con el selector `wk visible references` en **True**. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md index 95969f8925c9ff..24e015f27d7ccd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIMessage.md @@ -5,7 +5,7 @@ title: OpenAIMessage # OpenAIMessage -La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, un contenido y un usuario opcional. This class provides methods to manipulate and retrieve the text and other content of the message. +La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, un contenido y un usuario opcional. Esta clase ofrece métodos para manipular y recuperar el texto y otros contenidos del mensaje. ## Propiedades diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md index 4a2b20f032e1e2..70558cdac5b7a6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/command-name.md @@ -34,7 +34,7 @@ The **Command name** command returns t Hay dos parámetros opcionales: -- *info*: propiedades del comando. The returned value is a *bit field*, where the following bits are meaningful: +- *info*: propiedades del comando. El valor devuelto es un *campo de bits*, donde los siguientes bits son significativos: - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Solo se pueden usar comandos hilo seguro en [procesos preventivos](../Develop/preemptive.md). - Segundo bit (bit 1): se define en 1 si el comando es **obsoleto**, y en 0 si no lo es. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-set-property.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-set-property.md index d6641157210542..26236b6a1d6836 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-set-property.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/listbox-set-property.md @@ -77,7 +77,7 @@ Quiere que todas las columnas del list box "MyListbox" sean redimensionables: ## Ejemplo 2 -You want to set a maximum width for the column whose name is "ProductNumber": +Desea definir un ancho máximo para la columna cuyo nombre es "ProductNumber": ```4d LISTBOX SET PROPERTY(*; "ProductNumber";lk column max width;200) //Esta columna tendrá un ancho máximo de 200 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md index 7539499b2ac346..804a6618e11f27 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md @@ -447,14 +447,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parámetros | Tipo | | Descripción | -| ---------- | -------------------------------------------------------------- |:--:| ------------------------------------------------------------------------------------------------------------------------ | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Si *value* es una colección, todos los elementos de la colección se añaden a la colección original | -| Resultado | Collection | <- | Nueva colección con valor(es) añadido(s) a la colección original| +| Parámetros | Tipo | | Descripción | +| ---------- | ---------- |:--:| ------------------------------------------------------------------------------------------------------------------------ | +| value | any | -> | Valores a concatenar. Si *value* es una colección, todos los elementos de la colección se añaden a la colección original | +| Resultado | Collection | <- | Nueva colección con valor(es) añadido(s) a la colección original| | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index b19fb72882385a..74b650aae99b35 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -264,14 +264,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parámetros | Tipo | | Descripción | -| ---------- | -------------------------------------------------------------- | :-------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Si *value* es una colección, todos sus elementos se añaden al final de la colección original. | -| Resultado | Collection | <- | Colección original con valores rellenados | +| Parámetros | Tipo | | Descripción | +| ---------- | ---------- | :-------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valores a concatenar. Si *value* es una colección, todos sus elementos se añaden al final de la colección original. | +| Resultado | Collection | <- | Colección original con valores rellenados | @@ -3171,14 +3171,12 @@ La función `.sort()` ordena los elemento Si se llama a `.sort()` sin parámetros, sólo se ordenan los valores escalares (número, texto, fecha, booleanos). Los elementos se ordenan por defecto de forma ascendente, según su tipo. También puede pasar una de las siguientes constantes en el parámetro *ascOrDesc*: - ``` - |Constant| Type|Value|Comment| - |---|---|---|---| - |ck ascending|Integer|0|Elements are ordered in ascending order (default)| - |ck descending|Integer|1|Elements are ordered in descending order| - - This syntax orders scalar values in the collection only (other element types such as objects or collections are returned unordered). - ``` +| Constante | Tipo | Valor | Comentario | +| ------------- | ------- | ----- | ----------------------------------------------------------------------------- | +| ck ascending | Integer | 0 | Los elementos se ordenan de forma ascendente (por defecto) | +| ck descending | Integer | 1 | Los elementos se ordenan de forma descendente | + +Esta sintaxis sólo ordena los valores escalares de la colección (otros tipos de elementos, como objetos o colecciones, se devuelven desordenados). Si la colección contiene elementos de diferentes tipos, se agrupan primero por tipo y se ordenan después. Si attributePath lleva a una propiedad de objeto que contiene valores de diferentes tipos, primero se agrupan por tipo y se ordenan después. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md index c272db7f19ea66..ee0b5d7a0faa89 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/webArea_overview.md @@ -121,7 +121,7 @@ $4d.today(function(result) #### Ejemplo 2 -Instead of using a standalone method, we can also use a class function to handle the calculation. +En lugar de utilizar un método independiente, también podemos utilizar una función de clase para realizar el cálculo. Define a "SumCalculator" 4D user class with a `calcSum` function which receives parameters and returns their sum: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index 96c61be07c7447..a1277e87a87543 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -933,7 +933,7 @@ For security reasons, all of your data model class functions, including [compute Las peticiones remotas son: - Las peticiones enviadas por las aplicaciones 4D remotas conectadas a través de `Open datastore` -- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) +- Peticiones REST, incluidas las solicitudes de [páginas Qodly](https://developer.4d.com/qodly/) > Las peticiones cliente/servidor 4D estándar no se ven afectadas. Las funciones de clase del modelo de datos están siempre disponibles en esta arquitectura. @@ -947,12 +947,12 @@ exposed Function ``` ```4d -// declare an exposed alias +// declarar un alias expuesto exposed Alias ``` ```4d -// declare an exposed computed attribute +// declare un atributo calculado expuesto exposed Function get ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index 5b9a784e909ef3..2a9100a293d13c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -37,7 +37,7 @@ Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma ## Permisos -A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Permissions are defined for the project in the [`roles.json`](#rolesjson-file) file. Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). +A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Los permisos se definen para el proyecto en el archivo [`roles.json`](#rolesjson-file). Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). @@ -185,7 +185,7 @@ El archivo `roles.json` describe todos los parámetros de seguridad web del proy | | | \[].execute | Colección de cadenas | | Lista de privilegios | | | | \[].promote | Colección de cadenas | | Lista de privilegios | | restrictedByDefault | | | Boolean | | Si es true, se niega el acceso a recursos sin permisos explícitos | -| forceLogin | | | Boolean | | If true, enables ["forceLogin" mode](../REST/authUsers.md#force-login-mode) | +| forceLogin | | | Boolean | | Si es true, activa el modo ["forceLogin"](../REST/authUsers.md#force-login-mode) | :::caution Recordatorio @@ -196,7 +196,7 @@ El archivo `roles.json` describe todos los parámetros de seguridad web del proy ### Default File Location and Content -When a new project is created, a default `roles.json` file is generated at: +Cuando se crea un nuevo proyecto, se genera un archivo `roles.json` por defecto en: ``` /Project/Sources/ diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Project/architecture.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Project/architecture.md index ecac98bd608bb7..755af59c77aedf 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Project/architecture.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Project/architecture.md @@ -64,7 +64,7 @@ Este archivo de texto también puede contener llaves de configuración, en parti | filters.json | Filtros definidos | JSON | | dependencies.json | Nombres de [componentes a cargar](components.md) en el proyecto | JSON | | HTTPHandlers.json | Personalizado [HTTP request handlers](../WebServer/http-request-handler.md) definido para el servidor web | JSON | -| HTTPRules.json | Custom [HTTP rules](../WebServer/http-rules.md) defined for the web server | JSON | +| HTTPRules.json | [Reglas HTTP](../WebServer/http-rules.md) personalizadas definidas para el servidor web | JSON | | styleSheets.css | Hojas de estilo CSS | CSS | | styleSheets_mac.css | Hojas de estilo css de Mac (a partir de una base binaria convertida) | CSS | | styleSheets_windows.css | Hojas de estilo css en Windows (a partir de una base binaria convertida) | CSS | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-copy-to-object.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-copy-to-object.md index 704a4b63bc00d1..163f2fd9a76fa5 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-copy-to-object.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-copy-to-object.md @@ -31,10 +31,10 @@ En *rangeObj*, pase el rango de celdas con los valores, formato y fórmulas a co Puede pasar un parámetro opcional *options* con las siguientes propiedades: -| Propiedad | Tipo | Descripción | -| ----------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| copy | Boolean | *True* (por defecto) para mantener los valores, el formato y las fórmulas copiados después de la ejecución del comando. *False* para eliminarlos. | -| copyOptions | Integer | Especifica lo que se copia o mueve. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Copies all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Copia solo el formato.
    `vk clipboard options formulas`Copies only the formulas.
    `vk clipboard options formulas and formatting`Copia las fórmulas y formato.
    `vk clipboard options values`Copia solo los valores.
    `vk clipboard options value and formatting`Copia los valores y el formato.

    | +| Propiedad | Tipo | Descripción | +| ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| copy | Boolean | *True* (por defecto) para mantener los valores, el formato y las fórmulas copiados después de la ejecución del comando. *False* para eliminarlos. | +| copyOptions | Integer | Especifica lo que se copia o mueve. Possible values:

    ValueDescription
    `vk clipboard options all` (default)Copies all data objects, including values, formatting, and formulas.
    `vk clipboard options formatting`Copia solo el formato.
    `vk clipboard options formulas`Copia sólo las fórmulas.
    `vk clipboard options formulas and formatting`Copia las fórmulas y formato.
    `vk clipboard options values`Copia solo los valores.
    `vk clipboard options value and formatting`Copia los valores y el formato.

    | Se tienen en cuenta las opciones de pegado definidas en las [opciones del libro de trabajo](vp-set-workbook-options.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md index 229ed41326b42a..9cf06809fc9a03 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md @@ -66,7 +66,7 @@ El parámetro opcional *paramObj* permite definir las propiedades del documento | | frozenRowsAsColumnHeaders | boolean | Bien sea tratar las líneas congeladas como encabezados de columna al importar, por defecto false. | | | fullRecalc | boolean | Si calcular después de cargar los datos json, false por defecto. | | | dynamicReferences | boolean | Si calcular funciones con referencia dinámica, por defecto true. | -| | calcOnDemand | boolean | Whether to calculate formulas only when they are demanded, default false. | +| | calcOnDemand | boolean | Si se calculan las fórmulas solo cuando se solicitan, por defecto false. | | | includeUnusedStyles | boolean | Si incluir el estilo de nombre no utilizado al convertir excel xml al json, default true. | | | contraseña | text | La contraseña para abrir el workbook. | | | openMode | text | The open mode of normal, lazy and incremental. Por defecto es normal. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md index bc8018c82e60ac..bb951c00c48b3f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md @@ -53,14 +53,14 @@ Cuando el servidor web recibe una solicitud, **todos** los patrones de URL se ac Se soportan las siguientes palabras clave de acción: -| Palabras clave | Tipo de valor | Descripción | -| --------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `removeHeaders` | Texto o colección de textos | Encabezado(s) para eliminar de las respuestas HTTP. Si un encabezado a eliminar no existe en el encabezado de respuesta, se ignora. | -| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. | -| `setHeaders` | Object | Name (text) and value (text) of header(s) to modify in the HTTP responses. Si un encabezado a modificar no existe en el encabezado de respuesta, se añade. | -| `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. Cuando el acceso a un recurso es denegado, el servidor web devuelve un estado 403 por defecto | -| `redirect` | Text | Redirigir URL. Cuando se activa una redirección, el servidor web devuelve un estado 302 por defecto | -| `status` | Number | Estado HTTP | +| Palabras clave | Tipo de valor | Descripción | +| --------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `removeHeaders` | Texto o colección de textos | Encabezado(s) para eliminar de las respuestas HTTP. Si un encabezado a eliminar no existe en el encabezado de respuesta, se ignora. | +| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. | +| `setHeaders` | Object | Nombre (texto) y valor (texto) de los encabezados a modificar en las respuestas HTTP. Si un encabezado a modificar no existe en el encabezado de respuesta, se añade. | +| `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. Cuando el acceso a un recurso es denegado, el servidor web devuelve un estado 403 por defecto | +| `redirect` | Text | Redirigir URL. Cuando se activa una redirección, el servidor web devuelve un estado 302 por defecto | +| `status` | Number | Estado HTTP | ### Encabezados no modificables diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md index 1f93da7931a3b2..00048040081872 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/sessions.md @@ -267,7 +267,7 @@ El token OTP se considera inválido si: - el token de sesión no existe, - la propia sesión original ha caducado. -In this case, no web user session is restored and the current session (if any) is left unchanged. Normalmente, puede decidir mostrar una página de conexión o abrir una sesión guest. +En este caso, no se restaura ninguna sesión de usuario web y la sesión actual (si existe) se deja sin cambios. Normalmente, puede decidir mostrar una página de conexión o abrir una sesión guest. La verificación de la validez del token OTP recibido depende de cómo fue manejado: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md index b0efb466f4a29a..6cb9ae06065872 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-document.md @@ -72,7 +72,7 @@ Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* c | wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | | wk whitespace | whitespace | Define el valor css "white-space" para los formatos de exportación `wk mime html` y `wk web page complete`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | -The following table indicates the *option* available per export *format*: +La siguiente tabla indica la *option* disponible por *format* de exportación: | | **wk 4wp** | **wk docx** | **wk mime html** | **wk pdf** | **wk web page complete** | **wk svg** | | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md index f77c075aef2b83..2d372bbe528a40 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-export-variable.md @@ -72,7 +72,7 @@ Pase un [objeto](# "Datos estructurados como un objeto nativo 4D") en *option* c | wk visible references | visibleReferences | Muestra o exporta todas las expresiones 4D insertadas en el documento como referencias. Valores posibles: True/False | | wk whitespace | whitespace | Define el valor css "white-space" para el formato de exportación `wk mime html`. El estilo [white-space css](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space) se aplica a los párrafos. Valores posibles: "normal", "nowrap", "pre", "pre-wrap" (por defecto), "pre-line", "break-spaces". | -The following table indicates the *option* available per export *format*: +La siguiente tabla indica la *option* disponible por *format* de exportación: | | **wk 4wp** | **wk docx** | **wk mime html** | **wk pdf** | **wk web page html 4d** | **wk svg** | | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md index a84f91af9e168c..6b906f3803a2bf 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md @@ -102,7 +102,7 @@ Cuando se utiliza en una fórmula dentro de la tabla, la palabra clave **This** | | [This](../commands/this.md).rowIndex | Number | Índice de la línea actual, a partir de 1 | | Cuando se ha definido una fuente de datos para la tabla | [This](../commands/this.md).table.dataSource | Objet (fórmula) | Fuente de datos como fórmula | | | [This](../commands/this.md).tableData | Collection o Entity selection (por lo general) | table.dataSource evaluada | -| In each data row when a table datasource returns a collection or an entity selection | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | +| En cada fila de datos cuando una fuente de datos tabla devuelve una colección o una selección de entidades | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | | | [This](../commands/this.md).itemIndex | Number | Índice del elemento actual en la colección o selección de entidades, a partir de 0 | | In any row (except header rows) when a table datasource returns a collection or an entity selection | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    Esta expresión devuelve el mismo tipo de valor que la expresión **This.tableData**. | | In a break row | [This](../commands/this.md).breakItems | Collection o entity selection | Items of the collection or entity selection displayed in the rows between:
    • the current break row and the previous break row of the same level (or the start of the table) if the break row(s) are displayed after the data row.
    • the current break and the next break row of the same level (or the end of the table) if the break row(s) are displayed before the data row.
    | @@ -167,7 +167,7 @@ Por defecto, las fórmulas 4D se muestran como valores. Al insertar una fórmula Para mostrar fórmulas como referencias, puede: -- check the **Show references** option in the Property list (see *Configuring View properties*), or +- marque la opción **Mostrar referencias** en la lista de propiedades (consulte *Configuración de las propiedades Vista*), o bien - utilizar la acción estándar visibleReferences (ver *Expresiones dinámicas*), o bien - usa el comando [**WP SET VIEW PROPERTIES**](commands-legacy/wp-set-view-properties.md) con el selector `wk visible references` en **True**. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md index 340462dceeb399..72ad5f02e832a0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIMessage.md @@ -5,7 +5,7 @@ title: OpenAIMessage # OpenAIMessage -La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, un contenido y un usuario opcional. This class provides methods to manipulate and retrieve the text and other content of the message. +La clase `OpenAIMessage` representa un mensaje estructurado que contiene un rol, un contenido y un usuario opcional. Esta clase ofrece métodos para manipular y recuperar el texto y otros contenidos del mensaje. ## Propiedades diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md index bb45fe7142036b..70558cdac5b7a6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-name.md @@ -34,7 +34,7 @@ The **Command name** command returns t Hay dos parámetros opcionales: -- *info*: propiedades del comando. The returned value is a *bit field*, where the following bits are meaningful: +- *info*: propiedades del comando. El valor devuelto es un *campo de bits*, donde los siguientes bits son significativos: - Primer bit (bit 0): definido en 1 si el comando es [**hilo-seguro**](../Develop/preemptive.md#thread-safe-vs-thread-unsafe-code) (es decir, compatible con la ejecución en un proceso apropiativo) y 0 si es **hilo-inseguro**. Solo se pueden usar comandos hilo seguro en [procesos preventivos](../Develop/preemptive.md). - Segundo bit (bit 1): se define en 1 si el comando es **obsoleto**, y en 0 si no lo es. A deprecated command will continue to work normally as long as it is supported, but should be replaced whenever possible and must no longer be used in new code. Los comandos obsoletos en su código generan advertencias en el [Live Checker y el compilador](../code-editor/write-class-method.md#warnings-and-errors). @@ -80,7 +80,7 @@ En un formulario, quiere una lista desplegable con los comandos básicos de info  End case ``` -En la versión inglesa de 4D, la lista desplegable leerá: Sum, Average, Min y Max. In the French version\*, the drop-down list will read: Somme, Moyenne, Min, and Max. +En la versión inglesa de 4D, la lista desplegable leerá: Sum, Average, Min y Max. En la versión francésa \*, la lista desplegable dirá: Somme, Moyenne, Min, y Max. \*con una aplicación 4D configurada para usar el lenguaje de programación en francés (ver nota de compatibilidad) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-set-property.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-set-property.md index d6641157210542..26236b6a1d6836 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-set-property.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/listbox-set-property.md @@ -77,7 +77,7 @@ Quiere que todas las columnas del list box "MyListbox" sean redimensionables: ## Ejemplo 2 -You want to set a maximum width for the column whose name is "ProductNumber": +Desea definir un ancho máximo para la columna cuyo nombre es "ProductNumber": ```4d LISTBOX SET PROPERTY(*; "ProductNumber";lk column max width;200) //Esta columna tendrá un ancho máximo de 200 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md index d035141d566951..996a8855114733 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -271,14 +271,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Paramètres | Type | | Description | -| ---------- | -------------------------------------------------------------- | :-------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valeur(s) à concaténer. Si *value* est une collection, tous ses éléments sont ajoutés comme de nouveaux éléments à la fin de la collection d'origine. | -| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées | +| Paramètres | Type | | Description | +| ---------- | ---------- | :-------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valeur(s) à concaténer. Si *value* est une collection, tous ses éléments sont ajoutés comme de nouveaux éléments à la fin de la collection d'origine. | +| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées | @@ -3218,14 +3218,12 @@ La fonction `.sort()` trie les éléments Si `.sort()` est appelé sans paramètres, seules les valeurs scalaires (nombres, textes, dates, booléens) sont triées. Les éléments sont triés par défaut par ordre croissant, en fonction de leur type. Vous pouvez également passer une des constantes suivantes dans le paramètre *ascOrDesc* : -``` -|Constante| Type|Valeur|Comment| -|---|---|---| -|ck ascending|Integer|0|Les éléments sont classés par ordre croissant (par défaut)| -|ck descending|Integer|1|Les éléments sont classés par ordre décroissant| +| Constante | Type | Valeur | Commentaire | +| ------------- | ------- | ------ | ----------------------------------------------------------------------- | +| ck ascending | Integer | 0 | Les éléments sont triés par ordre croissant (défaut) | +| ck descending | Integer | 1 | Les éléments sont triés par ordre décroissant | -Cette syntaxe ordonne uniquement les valeurs scalaires dans la collection (les autres types d'éléments tels que les objets ou les collections sont renvoyés non ordonnés). -``` +Cette syntaxe trie uniquement les valeurs scalaires de la collection (les autres types d'éléments comme les objets ou les collections sont retournés non triés). Si la collection contient des éléments de différents types, ils sont d'abord groupés par type et triés par la suite. Les types sont renvoyés dans l'ordre suivant : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md index 5ab160b59cdd3b..871da10a7e85fb 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md @@ -349,14 +349,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Paramètres | Type | | Description | -| ---------- | -------------------------------------------------------------- |:--:| -------------------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valeur(s) à concaténer. Si *value* est une collection, tous les éléments de la collection sont ajoutés à la collection d'origine | -| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées| +| Paramètres | Type | | Description | +| ---------- | ---------- |:--:| -------------------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valeur(s) à concaténer. Si *value* est une collection, tous les éléments de la collection sont ajoutés à la collection d'origine | +| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées| | diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index 4988f47bd80d77..996a8855114733 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -271,14 +271,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Paramètres | Type | | Description | -| ---------- | -------------------------------------------------------------- | :-------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valeur(s) à concaténer. Si *value* est une collection, tous ses éléments sont ajoutés comme de nouveaux éléments à la fin de la collection d'origine. | -| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées | +| Paramètres | Type | | Description | +| ---------- | ---------- | :-------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valeur(s) à concaténer. Si *value* est une collection, tous ses éléments sont ajoutés comme de nouveaux éléments à la fin de la collection d'origine. | +| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées | @@ -3218,14 +3218,12 @@ La fonction `.sort()` trie les éléments Si `.sort()` est appelé sans paramètres, seules les valeurs scalaires (nombres, textes, dates, booléens) sont triées. Les éléments sont triés par défaut par ordre croissant, en fonction de leur type. Vous pouvez également passer une des constantes suivantes dans le paramètre *ascOrDesc* : - ``` - |Constante| Type|Valeur|Comment| - |---|---|---| - |ck ascending|Integer|0|Les éléments sont classés par ordre croissant (par défaut)| - |ck descending|Integer|1|Les éléments sont classés par ordre décroissant| - - Cette syntaxe ordonne uniquement les valeurs scalaires dans la collection (les autres types d'éléments tels que les objets ou les collections sont renvoyés non ordonnés). - ``` +| Constante | Type | Valeur | Commentaire | +| ------------- | ------- | ------ | ----------------------------------------------------------------------- | +| ck ascending | Integer | 0 | Les éléments sont triés par ordre croissant (défaut) | +| ck descending | Integer | 1 | Les éléments sont triés par ordre décroissant | + +Cette syntaxe trie uniquement les valeurs scalaires de la collection (les autres types d'éléments comme les objets ou les collections sont retournés non triés). Si la collection contient des éléments de différents types, ils sont d'abord groupés par type et triés par la suite. Les types sont renvoyés dans l'ordre suivant : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md index 2981dadefa5b67..72e22a49268788 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md @@ -453,14 +453,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Paramètres | Type | | Description | -| ---------- | -------------------------------------------------------------- |:--:| -------------------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valeur(s) à concaténer. Si *value* est une collection, tous les éléments de la collection sont ajoutés à la collection d'origine | -| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées| +| Paramètres | Type | | Description | +| ---------- | ---------- |:--:| -------------------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valeur(s) à concaténer. Si *value* est une collection, tous les éléments de la collection sont ajoutés à la collection d'origine | +| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées| | diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index 4988f47bd80d77..996a8855114733 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -271,14 +271,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Paramètres | Type | | Description | -| ---------- | -------------------------------------------------------------- | :-------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valeur(s) à concaténer. Si *value* est une collection, tous ses éléments sont ajoutés comme de nouveaux éléments à la fin de la collection d'origine. | -| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées | +| Paramètres | Type | | Description | +| ---------- | ---------- | :-------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valeur(s) à concaténer. Si *value* est une collection, tous ses éléments sont ajoutés comme de nouveaux éléments à la fin de la collection d'origine. | +| Résultat | Collection | <- | Nouvelle collection contenant les valeurs d'origine et les valeurs ajoutées | @@ -3218,14 +3218,12 @@ La fonction `.sort()` trie les éléments Si `.sort()` est appelé sans paramètres, seules les valeurs scalaires (nombres, textes, dates, booléens) sont triées. Les éléments sont triés par défaut par ordre croissant, en fonction de leur type. Vous pouvez également passer une des constantes suivantes dans le paramètre *ascOrDesc* : - ``` - |Constante| Type|Valeur|Comment| - |---|---|---| - |ck ascending|Integer|0|Les éléments sont classés par ordre croissant (par défaut)| - |ck descending|Integer|1|Les éléments sont classés par ordre décroissant| - - Cette syntaxe ordonne uniquement les valeurs scalaires dans la collection (les autres types d'éléments tels que les objets ou les collections sont renvoyés non ordonnés). - ``` +| Constante | Type | Valeur | Commentaire | +| ------------- | ------- | ------ | ----------------------------------------------------------------------- | +| ck ascending | Integer | 0 | Les éléments sont triés par ordre croissant (défaut) | +| ck descending | Integer | 1 | Les éléments sont triés par ordre décroissant | + +Cette syntaxe trie uniquement les valeurs scalaires de la collection (les autres types d'éléments comme les objets ou les collections sont retournés non triés). Si la collection contient des éléments de différents types, ils sont d'abord groupés par type et triés par la suite. Les types sont renvoyés dans l'ordre suivant : diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/CollectionClass.md index 490bac9a2b2ca8..dacbb262053954 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -271,14 +271,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| 引数 | 型 | | 説明 | -| ----- | -------------------------------------------------------------- | :-------------------------: | ----------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | -| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション | +| 引数 | 型 | | 説明 | +| ----- | ---------- | :-------------------------: | ----------------------------------------------------- | +| value | any | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | +| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション | @@ -3222,14 +3222,12 @@ $r:=$c.reduceRight(Formula($1.accumulator*=$1.value); 1) // 戻り値は 86400 引数もなしに呼び出された場合、`.sort()` はスカラー値 (数値、テキスト、日付、ブール) のみを並べ替えます。 デフォルトでは、要素はそれぞれの型に応じて昇順で並べ替えられます。 *ascOrDesc* 引数には、以下の定数のいずれか一つを渡すことができます: -``` -|定数| 型|値|詳細| -|---|---|---|---| -|ck ascending|Integer|0|要素は昇順に並んでいます(デフォルト)| -|ck descending|Integer|1|要素は降順に並んでいます| +| 定数 | 型 | 値 | 説明 | +| ------------- | ------- | - | --------------------------------------- | +| ck ascending | Integer | 0 | 要素は昇順に並べられます (デフォルト) | +| ck descending | Integer | 1 | 要素は降順に並べられます | -このシンタックスはコレクション内のスカラー値のみを並び替えます(オブジェクトやコレクションなどの他の型の要素は並べ替えされません)。 -``` +このシンタックスは、コレクション内のスカラー値のみを並べ替えます (オブジェクトやコレクションなどの他の型は並べ替えされないまま返されます)。 コレクションが異なる型の要素を格納している場合、それらはまず型ごとにグループ分けされ、そのあとで並べ替えられます。 型は以下の順番で返されます: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index 621d59f027e73c..ff642548a8b4d2 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -439,13 +439,13 @@ sequenceDiagram Qodly page->>+Server: product Qodly source := Function call Products.createNew() -Note over Server: CreateNew() function on the Products class
    return This.new() +Note over Server: Products クラスのCreateNew() 関数は
    This.new() を返す Note over Server: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" -Server-->>-Qodly page: The product entity creationDate and comment attributes are filled +Server-->>-Qodly page: product エンティティの creationDate と comment 属性には値が入れられる -Note over Qodly page: product.creationDate is "06/17/25"
    and product.comment is "Automatic comment" +Note over Qodly page: product.creationDate は "25/06/17"
    そして product.comment は "Automatic comment" ``` @@ -936,18 +936,18 @@ $arch.save() //courseName と name は "Archaeology II" に変更されます ## 公開vs非公開関数 -For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. +セキュリティ上の理由から、[計算属性](#計算属性-1) と [エイリアス属性](#エイリアス属性-1) と、[共有シングルトン関数](../Concepts/classes.md#共有シングルトン) を含めたデータモデルクラス関数は**リモートリクエスト**に対してはデフォルトでは**公開されていません** (つまり非公開です)。 -Remote requests are: +リモートリクエストとは以下のものを指します: - `Open datastore` によって接続されたリモートの 4Dアプリケーションが送信するリクエスト -- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) +- REST リクエスト、[Qodly ページ](https://developer.4d.com/qodly/) からのリクエストも含める > 通常の 4Dクライアント/サーバーリクエストは影響されません。 このアーキテクチャーにおいては、データモデルクラス関数は常に利用可能です。 公開されていない関数はリモートアプリケーションで利用することができず、RESTリクエストによるオブジェクトインスタンスに対して呼び出すこともできません。 リモートアプリケーションが非公開関数をアクセスしようとすると、"-10729 (未知のメンバー機能です)" エラーが返されます。 -To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. シンタックスは次の通りです: +関数あるいは属性がリモートリクエストから呼び出されるのを許可するためには、`exposed` キーワードを使って明示的に宣言する必要があります。 シンタックスは次の通りです: ```4d // 公開関数の宣言 @@ -956,24 +956,24 @@ exposed Function ``` ```4d -// declare an exposed alias +// 公開されたエイリアスの宣言 exposed Alias ``` ```4d -// declare an exposed computed attribute +// 公開された計算属性の宣言 exposed Function get ``` ```4d -// declare a shared singleton function +// 共有シングルトン関数の宣言 shared singleton Class constructor() exposed Function ``` :::note -The `exposed` keyword can only be used with the objects decribed above. [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 +`exposed` キーワードは上記で説明されているオブジェクトでのみ使用できます。 [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/privileges.md index cd4fbfc0254764..c61a659924f96b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -1,6 +1,6 @@ --- id: privileges -title: Roles and Privileges +title: ロールと権限 --- データ保護と、承認ユーザーによる迅速かつ容易なデータアクセスを両立することは、Webアプリケーションにとって大きな課題です。 ORDA のセキュリティアーキテクチャーはデータストアの中心に実装されており、プロジェクト内のさまざまなリソース (データストア、データクラス、関数など) に対して、すべての Web または REST ユーザーセッションに特定の権限を定義することができます。 @@ -17,7 +17,7 @@ Webユーザーまたは RESTユーザーがログインすると、そのセッ ![schema](../assets/en/ORDA/privileges-schema.png) -:::tip Related Blog posts +:::tip 関連したBlog 記事 [**Filter access to your data with a complete system of permissions**](https://blog.4d.com/filter-access-to-your-data-with-a-complete-system-of-permissions/) @@ -27,11 +27,11 @@ Webユーザーまたは RESTユーザーがログインすると、そのセッ プロジェクト内の以下のリソースに対して、許諾アクションと権限名を割り当てることができます (この設定をパーミッションと呼びます): -- the [datastore](../ORDA/dsMapping.md#datastore) -- the [dataclasses](../ORDA/dsMapping.md#dataclass) -- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) -- functions of the [data model classes](../ORDA/ordaClasses.md) -- [singleton](../REST/$singleton.md) functions +- [データストア](../ORDA/dsMapping.md#データストア) +- [データクラス](../ORDA/dsMapping.md#データクラス) +- [属性](../ORDA/dsMapping.md#属性) ([計算属性](./ordaClasses.md#計算属性-1) および [エイリアス属性](./ordaClasses.md#エイリアス属性-1)を含む) +- [データモデルクラス](../ORDA/ordaClasses.md) の関数 +- [シングルトン](../REST/$singleton.md) 関数 セッションがリソースにアクセスするたびに (アクセス形式に関係なく)、4D はセッションの権限を確認し、許可されていない場合にはアクセスを拒否します。 @@ -128,11 +128,11 @@ It means that you cannot use the same function names in the various ORDA classes ## 権限とロール -**権限** とは、**リソース** に対して **アクション** を実行する技術的な能力であり、**ロール** は、管理者が使用するために公開された権限のことです。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 +**権限** とは、**リソース** に対して **アクション** を実行する技術的な能力であり、**ロール** は、管理者が使用するために公開された権限のことです。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 権限は、複数の "リソース+アクション" の組み合わせと関連付けることができます。 また、一つのアクションに複数の権限を関連付けることができます。 権限は、他の権限を含むことができます。 -- 権限やロールの **作成** は `roles.json` ファイル内にておこないます (後述参照)。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 +- 権限やロールの **作成** は `roles.json` ファイル内にておこないます (後述参照)。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 - 各ユーザーセッションに権限やロールを **許可** するには、`Session` クラスの [`.setPrivileges()`](../API/SessionClass.md#setprivileges) 関数を使用します。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md index 9c9b73a778df06..417448a7c043dc 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md @@ -349,14 +349,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| 引数 | 型 | | 説明 | -| ----- | -------------------------------------------------------------- |:--:| ----------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | -| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション| +| 引数 | 型 | | 説明 | +| ----- | ---------- |:--:| ----------------------------------------------------- | +| value | any | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | +| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション| | diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index a1e68f21ebc952..dacbb262053954 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -271,14 +271,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| 引数 | 型 | | 説明 | -| ----- | -------------------------------------------------------------- | :-------------------------: | ----------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | -| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション | +| 引数 | 型 | | 説明 | +| ----- | ---------- | :-------------------------: | ----------------------------------------------------- | +| value | any | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | +| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション | @@ -3222,14 +3222,12 @@ $r:=$c.reduceRight(Formula($1.accumulator*=$1.value); 1) // 戻り値は 86400 引数もなしに呼び出された場合、`.sort()` はスカラー値 (数値、テキスト、日付、ブール) のみを並べ替えます。 デフォルトでは、要素はそれぞれの型に応じて昇順で並べ替えられます。 *ascOrDesc* 引数には、以下の定数のいずれか一つを渡すことができます: - ``` - |定数| 型|値|詳細| - |---|---|---|---| - |ck ascending|Integer|0|要素は昇順に並んでいます(デフォルト)| - |ck descending|Integer|1|要素は降順に並んでいます| - - このシンタックスはコレクション内のスカラー値のみを並び替えます(オブジェクトやコレクションなどの他の型の要素は並べ替えされません)。 - ``` +| 定数 | 型 | 値 | 説明 | +| ------------- | ------- | - | --------------------------------------- | +| ck ascending | Integer | 0 | 要素は昇順に並べられます (デフォルト) | +| ck descending | Integer | 1 | 要素は降順に並べられます | + +このシンタックスは、コレクション内のスカラー値のみを並べ替えます (オブジェクトやコレクションなどの他の型は並べ替えされないまま返されます)。 コレクションが異なる型の要素を格納している場合、それらはまず型ごとにグループ分けされ、そのあとで並べ替えられます。 型は以下の順番で返されます: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index 621d59f027e73c..ff642548a8b4d2 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -439,13 +439,13 @@ sequenceDiagram Qodly page->>+Server: product Qodly source := Function call Products.createNew() -Note over Server: CreateNew() function on the Products class
    return This.new() +Note over Server: Products クラスのCreateNew() 関数は
    This.new() を返す Note over Server: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" -Server-->>-Qodly page: The product entity creationDate and comment attributes are filled +Server-->>-Qodly page: product エンティティの creationDate と comment 属性には値が入れられる -Note over Qodly page: product.creationDate is "06/17/25"
    and product.comment is "Automatic comment" +Note over Qodly page: product.creationDate は "25/06/17"
    そして product.comment は "Automatic comment" ``` @@ -936,18 +936,18 @@ $arch.save() //courseName と name は "Archaeology II" に変更されます ## 公開vs非公開関数 -For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. +セキュリティ上の理由から、[計算属性](#計算属性-1) と [エイリアス属性](#エイリアス属性-1) と、[共有シングルトン関数](../Concepts/classes.md#共有シングルトン) を含めたデータモデルクラス関数は**リモートリクエスト**に対してはデフォルトでは**公開されていません** (つまり非公開です)。 -Remote requests are: +リモートリクエストとは以下のものを指します: - `Open datastore` によって接続されたリモートの 4Dアプリケーションが送信するリクエスト -- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) +- REST リクエスト、[Qodly ページ](https://developer.4d.com/qodly/) からのリクエストも含める > 通常の 4Dクライアント/サーバーリクエストは影響されません。 このアーキテクチャーにおいては、データモデルクラス関数は常に利用可能です。 公開されていない関数はリモートアプリケーションで利用することができず、RESTリクエストによるオブジェクトインスタンスに対して呼び出すこともできません。 リモートアプリケーションが非公開関数をアクセスしようとすると、"-10729 (未知のメンバー機能です)" エラーが返されます。 -To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. シンタックスは次の通りです: +関数あるいは属性がリモートリクエストから呼び出されるのを許可するためには、`exposed` キーワードを使って明示的に宣言する必要があります。 シンタックスは次の通りです: ```4d // 公開関数の宣言 @@ -956,24 +956,24 @@ exposed Function ``` ```4d -// declare an exposed alias +// 公開されたエイリアスの宣言 exposed Alias ``` ```4d -// declare an exposed computed attribute +// 公開された計算属性の宣言 exposed Function get ``` ```4d -// declare a shared singleton function +// 共有シングルトン関数の宣言 shared singleton Class constructor() exposed Function ``` :::note -The `exposed` keyword can only be used with the objects decribed above. [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 +`exposed` キーワードは上記で説明されているオブジェクトでのみ使用できます。 [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md index 8e1688c5125199..58042a097bd9f6 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md @@ -1,6 +1,6 @@ --- id: privileges -title: Roles and Privileges +title: ロールと権限 --- データ保護と、承認ユーザーによる迅速かつ容易なデータアクセスを両立することは、Webアプリケーションにとって大きな課題です。 ORDA のセキュリティアーキテクチャーはデータストアの中心に実装されており、プロジェクト内のさまざまなリソース (データストア、データクラス、関数など) に対して、すべての Web または REST ユーザーセッションに特定の権限を定義することができます。 @@ -73,11 +73,11 @@ Webユーザーまたは RESTユーザーがログインすると、そのセッ ## 権限とロール -**権限** とは、**リソース** に対して **アクション** を実行する技術的な能力であり、**ロール** は、管理者が使用するために公開された権限のことです。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 +**権限** とは、**リソース** に対して **アクション** を実行する技術的な能力であり、**ロール** は、管理者が使用するために公開された権限のことです。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 権限は、複数の "リソース+アクション" の組み合わせと関連付けることができます。 また、一つのアクションに複数の権限を関連付けることができます。 権限は、他の権限を含むことができます。 -- 権限やロールの **作成** は `roles.json` ファイル内にておこないます (後述参照)。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 +- 権限やロールの **作成** は `roles.json` ファイル内にておこないます (後述参照)。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 - 各ユーザーセッションに権限やロールを **許可** するには、`Session` クラスの [`.setPrivileges()`](../API/SessionClass.md#setprivileges) 関数を使用します。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md index 25b280bd677ca0..5ad3fbfcd1dcea 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md @@ -453,14 +453,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| 引数 | 型 | | 説明 | -| ----- | -------------------------------------------------------------- |:--:| ----------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | -| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション| +| 引数 | 型 | | 説明 | +| ----- | ---------- |:--:| ----------------------------------------------------- | +| value | any | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | +| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション| | diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index a1e68f21ebc952..dacbb262053954 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -271,14 +271,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| 引数 | 型 | | 説明 | -| ----- | -------------------------------------------------------------- | :-------------------------: | ----------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | -| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション | +| 引数 | 型 | | 説明 | +| ----- | ---------- | :-------------------------: | ----------------------------------------------------- | +| value | any | -> | 連結する値。 *value* がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 | +| 戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション | @@ -3222,14 +3222,12 @@ $r:=$c.reduceRight(Formula($1.accumulator*=$1.value); 1) // 戻り値は 86400 引数もなしに呼び出された場合、`.sort()` はスカラー値 (数値、テキスト、日付、ブール) のみを並べ替えます。 デフォルトでは、要素はそれぞれの型に応じて昇順で並べ替えられます。 *ascOrDesc* 引数には、以下の定数のいずれか一つを渡すことができます: - ``` - |定数| 型|値|詳細| - |---|---|---|---| - |ck ascending|Integer|0|要素は昇順に並んでいます(デフォルト)| - |ck descending|Integer|1|要素は降順に並んでいます| - - このシンタックスはコレクション内のスカラー値のみを並び替えます(オブジェクトやコレクションなどの他の型の要素は並べ替えされません)。 - ``` +| 定数 | 型 | 値 | 説明 | +| ------------- | ------- | - | --------------------------------------- | +| ck ascending | Integer | 0 | 要素は昇順に並べられます (デフォルト) | +| ck descending | Integer | 1 | 要素は降順に並べられます | + +このシンタックスは、コレクション内のスカラー値のみを並べ替えます (オブジェクトやコレクションなどの他の型は並べ替えされないまま返されます)。 コレクションが異なる型の要素を格納している場合、それらはまず型ごとにグループ分けされ、そのあとで並べ替えられます。 型は以下の順番で返されます: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index 621d59f027e73c..ff642548a8b4d2 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -439,13 +439,13 @@ sequenceDiagram Qodly page->>+Server: product Qodly source := Function call Products.createNew() -Note over Server: CreateNew() function on the Products class
    return This.new() +Note over Server: Products クラスのCreateNew() 関数は
    This.new() を返す Note over Server: Class constructor
    This.creationDate:=Current date()
    This.comment:="Automatic comment" -Server-->>-Qodly page: The product entity creationDate and comment attributes are filled +Server-->>-Qodly page: product エンティティの creationDate と comment 属性には値が入れられる -Note over Qodly page: product.creationDate is "06/17/25"
    and product.comment is "Automatic comment" +Note over Qodly page: product.creationDate は "25/06/17"
    そして product.comment は "Automatic comment" ``` @@ -936,18 +936,18 @@ $arch.save() //courseName と name は "Archaeology II" に変更されます ## 公開vs非公開関数 -For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. +セキュリティ上の理由から、[計算属性](#計算属性-1) と [エイリアス属性](#エイリアス属性-1) と、[共有シングルトン関数](../Concepts/classes.md#共有シングルトン) を含めたデータモデルクラス関数は**リモートリクエスト**に対してはデフォルトでは**公開されていません** (つまり非公開です)。 -Remote requests are: +リモートリクエストとは以下のものを指します: - `Open datastore` によって接続されたリモートの 4Dアプリケーションが送信するリクエスト -- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) +- REST リクエスト、[Qodly ページ](https://developer.4d.com/qodly/) からのリクエストも含める > 通常の 4Dクライアント/サーバーリクエストは影響されません。 このアーキテクチャーにおいては、データモデルクラス関数は常に利用可能です。 公開されていない関数はリモートアプリケーションで利用することができず、RESTリクエストによるオブジェクトインスタンスに対して呼び出すこともできません。 リモートアプリケーションが非公開関数をアクセスしようとすると、"-10729 (未知のメンバー機能です)" エラーが返されます。 -To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. シンタックスは次の通りです: +関数あるいは属性がリモートリクエストから呼び出されるのを許可するためには、`exposed` キーワードを使って明示的に宣言する必要があります。 シンタックスは次の通りです: ```4d // 公開関数の宣言 @@ -956,24 +956,24 @@ exposed Function ``` ```4d -// declare an exposed alias +// 公開されたエイリアスの宣言 exposed Alias ``` ```4d -// declare an exposed computed attribute +// 公開された計算属性の宣言 exposed Function get ``` ```4d -// declare a shared singleton function +// 共有シングルトン関数の宣言 shared singleton Class constructor() exposed Function ``` :::note -The `exposed` keyword can only be used with the objects decribed above. [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 +`exposed` キーワードは上記で説明されているオブジェクトでのみ使用できます。 [通常のユーザークラス](Concepts/classes.md) 関数に対して使った場合、キーワードは無視され、コンパイラーはエラーを返します。 ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index cd4fbfc0254764..c61a659924f96b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -1,6 +1,6 @@ --- id: privileges -title: Roles and Privileges +title: ロールと権限 --- データ保護と、承認ユーザーによる迅速かつ容易なデータアクセスを両立することは、Webアプリケーションにとって大きな課題です。 ORDA のセキュリティアーキテクチャーはデータストアの中心に実装されており、プロジェクト内のさまざまなリソース (データストア、データクラス、関数など) に対して、すべての Web または REST ユーザーセッションに特定の権限を定義することができます。 @@ -17,7 +17,7 @@ Webユーザーまたは RESTユーザーがログインすると、そのセッ ![schema](../assets/en/ORDA/privileges-schema.png) -:::tip Related Blog posts +:::tip 関連したBlog 記事 [**Filter access to your data with a complete system of permissions**](https://blog.4d.com/filter-access-to-your-data-with-a-complete-system-of-permissions/) @@ -27,11 +27,11 @@ Webユーザーまたは RESTユーザーがログインすると、そのセッ プロジェクト内の以下のリソースに対して、許諾アクションと権限名を割り当てることができます (この設定をパーミッションと呼びます): -- the [datastore](../ORDA/dsMapping.md#datastore) -- the [dataclasses](../ORDA/dsMapping.md#dataclass) -- [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) -- functions of the [data model classes](../ORDA/ordaClasses.md) -- [singleton](../REST/$singleton.md) functions +- [データストア](../ORDA/dsMapping.md#データストア) +- [データクラス](../ORDA/dsMapping.md#データクラス) +- [属性](../ORDA/dsMapping.md#属性) ([計算属性](./ordaClasses.md#計算属性-1) および [エイリアス属性](./ordaClasses.md#エイリアス属性-1)を含む) +- [データモデルクラス](../ORDA/ordaClasses.md) の関数 +- [シングルトン](../REST/$singleton.md) 関数 セッションがリソースにアクセスするたびに (アクセス形式に関係なく)、4D はセッションの権限を確認し、許可されていない場合にはアクセスを拒否します。 @@ -128,11 +128,11 @@ It means that you cannot use the same function names in the various ORDA classes ## 権限とロール -**権限** とは、**リソース** に対して **アクション** を実行する技術的な能力であり、**ロール** は、管理者が使用するために公開された権限のことです。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 +**権限** とは、**リソース** に対して **アクション** を実行する技術的な能力であり、**ロール** は、管理者が使用するために公開された権限のことです。 基本的にロールとは、ビジネスユーザーのプロフィールを定義するためにいくつかの権限を集めたものです。 たとえば、"manageInvoices" (請求書管理) は権限の例で、"secretary" (秘書) は ("manageInvoices" および他の権限を持つ) ロールの例です。 権限は、複数の "リソース+アクション" の組み合わせと関連付けることができます。 また、一つのアクションに複数の権限を関連付けることができます。 権限は、他の権限を含むことができます。 -- 権限やロールの **作成** は `roles.json` ファイル内にておこないます (後述参照)。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 +- 権限やロールの **作成** は `roles.json` ファイル内にておこないます (後述参照)。 アクセス権の範囲を **設定** するには、リソースに適用される許諾アクションに権限名を割り当てます。 - 各ユーザーセッションに権限やロールを **許可** するには、`Session` クラスの [`.setPrivileges()`](../API/SessionClass.md#setprivileges) 関数を使用します。 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/current/API/CollectionClass.md index ceeec01850bac0..412569850f005e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -271,14 +271,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parâmetro | Tipo | | Descrição | -| ---------- | -------------------------------------------------------------- | :-------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Se *valor* for uma coleção, todos os seus elementos serão adicionados como novos elementos no final da coleção original. | -| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original | +| Parâmetro | Tipo | | Descrição | +| ---------- | ---------- | :-------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| value | any | -> | Valores a concatenar. Se *valor* for uma coleção, todos os seus elementos serão adicionados como novos elementos no final da coleção original. | +| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original | @@ -3195,14 +3195,12 @@ A função `.sort()` classifica os elemen Se `.sort()` for chamado sem parâmetros, somente os valores escalares (número, texto, data, booleanos) serão classificados. Os elementos são classificados por defeito em ordem ascendente, de acordo com o seu tipo. You can also pass one of the following constants in the *ascOrDesc* parameter: -``` -|Constant| Type|Value|Comment| -|---|---|---|---| -|ck ascending|Integer|0|Elements are ordered in ascending order (default)| -|ck descending|Integer|1|Elements are ordered in descending order| +| Parâmetros | Tipo | Valor | Comentário | +| ------------- | ------- | ----- | ------------------------------------------------------------------------------ | +| ck ascending | Integer | 0 | Os elementos são ordenados de forma ascendente (por padrão) | +| ck descending | Integer | 1 | Os elementos são ordenados de forma descendente | -This syntax orders scalar values in the collection only (other element types such as objects or collections are returned unordered). -``` +Essa sintaxe ordena apenas os valores escalares da coleção (outros tipos de elementos como objetos ou coleções são retornados sem ordenar). Se a coleção conter elementos de tipos diferentes, são primeiro agrupados por tipo e ordenados depois. Se attributePath levar a uma propriedade de objeto que conter valores de diferentes tipos, primeiro se agrupam por tipo e se ordenam depois. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md index 6bce0f973d38c8..9b6231b4a39768 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md @@ -349,14 +349,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parâmetro | Tipo | | Descrição | -| ---------- | -------------------------------------------------------------- |:--:| ----------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Se *value* for uma coleção, todos os elementos da coleção são adicionados para a coleção original | -| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original| +| Parâmetro | Tipo | | Descrição | +| ---------- | ---------- |:--:| ----------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valores a concatenar. Se *value* for uma coleção, todos os elementos da coleção são adicionados para a coleção original | +| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original| | diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index 3f0cc44d806675..412569850f005e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -271,14 +271,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parâmetro | Tipo | | Descrição | -| ---------- | -------------------------------------------------------------- | :-------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Se *valor* for uma coleção, todos os seus elementos serão adicionados como novos elementos no final da coleção original. | -| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original | +| Parâmetro | Tipo | | Descrição | +| ---------- | ---------- | :-------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| value | any | -> | Valores a concatenar. Se *valor* for uma coleção, todos os seus elementos serão adicionados como novos elementos no final da coleção original. | +| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original | @@ -3195,14 +3195,12 @@ A função `.sort()` classifica os elemen Se `.sort()` for chamado sem parâmetros, somente os valores escalares (número, texto, data, booleanos) serão classificados. Os elementos são classificados por defeito em ordem ascendente, de acordo com o seu tipo. You can also pass one of the following constants in the *ascOrDesc* parameter: - ``` - |Constant| Type|Value|Comment| - |---|---|---|---| - |ck ascending|Integer|0|Elements are ordered in ascending order (default)| - |ck descending|Integer|1|Elements are ordered in descending order| - - This syntax orders scalar values in the collection only (other element types such as objects or collections are returned unordered). - ``` +| Parâmetros | Tipo | Valor | Comentário | +| ------------- | ------- | ----- | ------------------------------------------------------------------------------ | +| ck ascending | Integer | 0 | Os elementos são ordenados de forma ascendente (por padrão) | +| ck descending | Integer | 1 | Os elementos são ordenados de forma descendente | + +Essa sintaxe ordena apenas os valores escalares da coleção (outros tipos de elementos como objetos ou coleções são retornados sem ordenar). Se a coleção conter elementos de tipos diferentes, são primeiro agrupados por tipo e ordenados depois. Se attributePath levar a uma propriedade de objeto que conter valores de diferentes tipos, primeiro se agrupam por tipo e se ordenam depois. diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md index f2d5492e1a84f4..b5f89ecf509919 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md @@ -453,14 +453,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parâmetro | Tipo | | Descrição | -| ---------- | -------------------------------------------------------------- |:--:| ----------------------------------------------------------------------------------------------------------------------- | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Se *value* for uma coleção, todos os elementos da coleção são adicionados para a coleção original | -| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original| +| Parâmetro | Tipo | | Descrição | +| ---------- | ---------- |:--:| ----------------------------------------------------------------------------------------------------------------------- | +| value | any | -> | Valores a concatenar. Se *value* for uma coleção, todos os elementos da coleção são adicionados para a coleção original | +| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original| | diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index 3f0cc44d806675..412569850f005e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -271,14 +271,14 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6] -**.concat**( *value* : any { *;...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Collection -| Parâmetro | Tipo | | Descrição | -| ---------- | -------------------------------------------------------------- | :-------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | Valores a concatenar. Se *valor* for uma coleção, todos os seus elementos serão adicionados como novos elementos no final da coleção original. | -| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original | +| Parâmetro | Tipo | | Descrição | +| ---------- | ---------- | :-------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| value | any | -> | Valores a concatenar. Se *valor* for uma coleção, todos os seus elementos serão adicionados como novos elementos no final da coleção original. | +| Resultados | Collection | <- | Nova coleção com valores adicionados à coleção original | @@ -3195,14 +3195,12 @@ A função `.sort()` classifica os elemen Se `.sort()` for chamado sem parâmetros, somente os valores escalares (número, texto, data, booleanos) serão classificados. Os elementos são classificados por defeito em ordem ascendente, de acordo com o seu tipo. You can also pass one of the following constants in the *ascOrDesc* parameter: - ``` - |Constant| Type|Value|Comment| - |---|---|---|---| - |ck ascending|Integer|0|Elements are ordered in ascending order (default)| - |ck descending|Integer|1|Elements are ordered in descending order| - - This syntax orders scalar values in the collection only (other element types such as objects or collections are returned unordered). - ``` +| Parâmetros | Tipo | Valor | Comentário | +| ------------- | ------- | ----- | ------------------------------------------------------------------------------ | +| ck ascending | Integer | 0 | Os elementos são ordenados de forma ascendente (por padrão) | +| ck descending | Integer | 1 | Os elementos são ordenados de forma descendente | + +Essa sintaxe ordena apenas os valores escalares da coleção (outros tipos de elementos como objetos ou coleções são retornados sem ordenar). Se a coleção conter elementos de tipos diferentes, são primeiro agrupados por tipo e ordenados depois. Se attributePath levar a uma propriedade de objeto que conter valores de diferentes tipos, primeiro se agrupam por tipo e se ordenam depois. From c7a8208e66feb6f557416303542b97f3f972907a Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 24 Nov 2025 16:14:41 +0100 Subject: [PATCH 44/75] fixes in commands-legacy --- docs/commands-legacy/query-by-attribute.md | 4 +- .../query-selection-by-attribute.md | 4 +- docs/commands-legacy/verify-data-file.md | 44 +++++++++---------- .../commands-legacy/query-by-attribute.md | 4 +- .../query-selection-by-attribute.md | 4 +- .../commands-legacy/verify-data-file.md | 43 +++++++++--------- .../commands-legacy/query-by-attribute.md | 4 +- .../query-selection-by-attribute.md | 4 +- .../commands-legacy/verify-data-file.md | 43 +++++++++--------- 9 files changed, 76 insertions(+), 78 deletions(-) diff --git a/docs/commands-legacy/query-by-attribute.md b/docs/commands-legacy/query-by-attribute.md index e611a73547f898..024cd41c97ac33 100644 --- a/docs/commands-legacy/query-by-attribute.md +++ b/docs/commands-legacy/query-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Parameter | Type | | Description | | --- | --- | --- | --- | | aTable | Table | → | Table for which to return a selection of records, or Default table if omitted | -| conjOp | * | → | Conjunction operator to use to join multiple queries (if any) | +| conjOp | Operator | → | Conjunction operator to use to join multiple queries (if any) | | objectField | Field | → | Object field to query attributes | | attributePath | Text | → | Name or path of attribute | -| queryOp | Text, * | → | Query operator (comparator) | +| queryOp | Text, Operator | → | Query operator (comparator) | | value | Text, Number, Date, Time | → | Value to compare | | * | Operator | → | Continue query flag | diff --git a/docs/commands-legacy/query-selection-by-attribute.md b/docs/commands-legacy/query-selection-by-attribute.md index 4996f9e7b49b80..22f6dd1ba3190f 100644 --- a/docs/commands-legacy/query-selection-by-attribute.md +++ b/docs/commands-legacy/query-selection-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Parameter | Type | | Description | | --- | --- | --- | --- | | aTable | Table | → | Table for which to return a selection of records, or Default table if omitted | -| conjOp | * | → | Conjunction operator to use to join multiple queries (if any) | +| conjOp | Operator | → | Conjunction operator to use to join multiple queries (if any) | | objectField | Field | → | Object field to query attributes | | attributePath | Text | → | Name or path of attribute | -| queryOp | *, Text | → | Query operator (comparator) | +| queryOp | Text, Operator | → | Query operator (comparator) | | value | Text, Number, Date, Time | → | Value to compare | | * | Operator | → | Continue query flag | diff --git a/docs/commands-legacy/verify-data-file.md b/docs/commands-legacy/verify-data-file.md index 3273a2dbf08d87..6427fc149b971f 100644 --- a/docs/commands-legacy/verify-data-file.md +++ b/docs/commands-legacy/verify-data-file.md @@ -52,44 +52,44 @@ Generally, the VERIFY DATA FILE command creates a log file in XML format (please The *method* parameter is used to set a callback method that will be called regularly during the verification. If you pass an empty string or an invalid method name, this parameter is ignored (no method is called). When called, the method receives up to 5 parameters depending on the objects being verified and on the event type originating the call (see calls table). It is imperative to declare these parameters in the method: -| \- $1 | Integer | Message type (see table) | + +| Parameter | Type | Description | | ----- | ------- | ------------------------ | -| \- $2 | Integer | Object type | -| \- $3 | Text | Message | -| \- $4 | Integer | Table number | -| \- $5 | Integer | Reserved | +| $messageType | Integer | Message type (see table) | +| $objectType | Integer | Object type | +| $messageText | Text | Message | +| $table | Integer | Table number | +| $reserved | Integer | Reserved | The following table describes the contents of the parameters depending on the event type: -| **Event** | **$1 (Longint)** | **$2 (Longint)** | **$3 (Text)** | **$4 (Longint)** | **$5 (Longint)** | -| ------------------------- | ---------------- | ------------------ | -------------- | ---------------- | ---------------- | -| Message | 1 | 0 | Progression | Percentage | Reserved | -| message | done (0-100) | | | | | -| Verification finished(\*) | 2 | Object type (\*\*) | OK message | Table or index | Reserved | -| test | number | | | | | -| Error | 3 | Object type (\*\*) | Text of error- | Table or index | Reserved | -| message | number | | | | | +| **Event** | **$messageType** | **$objectType** | **$messageText** | **$table** | **$reserved** | +| ------- | ---------------- | ------------------ | -------------- | ---------------- | ---------------- | +| Message | 1 | 0 | Progression message | Percentage done (0-100) | Reserved | +| Verification finished(\*) | 2 | Object type (\*\*) | OK message test | Table or index number | Reserved | +| Error | 3 | Object type (\*\*) | Text of error message | Table or index number | Reserved | | End of execution | 4 | 0 | DONE | 0 | Reserved | | Warning | 5 | Object type(\*\*) | Text of error | Table or index | Reserved | -| message | number | | | | | +|||| message | number | -(\*) The *Verification finished* ($1=2) event is never returned when the mode is Verify All. It is only used in Verify Records or Verify Indexes mode. -(\*\*) *Object type*: When an object is verified, a "finished" message ($1=2), error ($1=3) or warning ($1=5) can be sent. The object type returned in $2 can be one of the following: +(\*) The *Verification finished* ($messageType=2) event is never returned when the mode is Verify All. It is only used in Verify Records or Verify Indexes mode. +(\*\*) *Object type*: When an object is verified, a "finished" message ($messageType=2), error ($messageType=3) or warning ($messageType=5) can be sent. The object type returned in $objectType can be one of the following: * 0 = undetermined * 4 = record * 8 = index * 16 = structure object (preliminary check of data file). -*Special case*: When $4 = 0 for $1=2, 3 or 5, the message does not concern a table or an index but rather the data file as a whole. +*Special case*: When $table = 0 for $messageType=2, 3 or 5, the message does not concern a table or an index but rather the data file as a whole. + +The callback method must also return a *$result* integer value, which is used to check the execution of the operation: -The callback method must also return a value in $0 (Longint), which is used to check the execution of the operation: +* If $result = 0, the operation continues normally +* If $result = -128, the operation is stopped without any error generated +* If $result = another value, the operation is stopped and the value passed in $result is returned as the error number. This error can be intercepted by an error-handling method. -* If $0 = 0, the operation continues normally -* If $0 = -128, the operation is stopped without any error generated -* If $0 = another value, the operation is stopped and the value passed in $0 is returned as the error number. This error can be intercepted by an error-handling method. +**Note:** You cannot interrupt execution via $result after the *End of execution* event ($1=4) has been generated. -**Note:** You cannot interrupt execution via $0 after the *End of execution* event ($4=1) has been generated. Two optional arrays can also be used by this command: diff --git a/versioned_docs/version-20-R10/commands-legacy/query-by-attribute.md b/versioned_docs/version-20-R10/commands-legacy/query-by-attribute.md index e611a73547f898..024cd41c97ac33 100644 --- a/versioned_docs/version-20-R10/commands-legacy/query-by-attribute.md +++ b/versioned_docs/version-20-R10/commands-legacy/query-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Parameter | Type | | Description | | --- | --- | --- | --- | | aTable | Table | → | Table for which to return a selection of records, or Default table if omitted | -| conjOp | * | → | Conjunction operator to use to join multiple queries (if any) | +| conjOp | Operator | → | Conjunction operator to use to join multiple queries (if any) | | objectField | Field | → | Object field to query attributes | | attributePath | Text | → | Name or path of attribute | -| queryOp | Text, * | → | Query operator (comparator) | +| queryOp | Text, Operator | → | Query operator (comparator) | | value | Text, Number, Date, Time | → | Value to compare | | * | Operator | → | Continue query flag | diff --git a/versioned_docs/version-20-R10/commands-legacy/query-selection-by-attribute.md b/versioned_docs/version-20-R10/commands-legacy/query-selection-by-attribute.md index 4996f9e7b49b80..22f6dd1ba3190f 100644 --- a/versioned_docs/version-20-R10/commands-legacy/query-selection-by-attribute.md +++ b/versioned_docs/version-20-R10/commands-legacy/query-selection-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Parameter | Type | | Description | | --- | --- | --- | --- | | aTable | Table | → | Table for which to return a selection of records, or Default table if omitted | -| conjOp | * | → | Conjunction operator to use to join multiple queries (if any) | +| conjOp | Operator | → | Conjunction operator to use to join multiple queries (if any) | | objectField | Field | → | Object field to query attributes | | attributePath | Text | → | Name or path of attribute | -| queryOp | *, Text | → | Query operator (comparator) | +| queryOp | Text, Operator | → | Query operator (comparator) | | value | Text, Number, Date, Time | → | Value to compare | | * | Operator | → | Continue query flag | diff --git a/versioned_docs/version-20-R10/commands-legacy/verify-data-file.md b/versioned_docs/version-20-R10/commands-legacy/verify-data-file.md index 3273a2dbf08d87..9330b4ee6c0cd6 100644 --- a/versioned_docs/version-20-R10/commands-legacy/verify-data-file.md +++ b/versioned_docs/version-20-R10/commands-legacy/verify-data-file.md @@ -52,44 +52,43 @@ Generally, the VERIFY DATA FILE command creates a log file in XML format (please The *method* parameter is used to set a callback method that will be called regularly during the verification. If you pass an empty string or an invalid method name, this parameter is ignored (no method is called). When called, the method receives up to 5 parameters depending on the objects being verified and on the event type originating the call (see calls table). It is imperative to declare these parameters in the method: -| \- $1 | Integer | Message type (see table) | +| Parameter | Type | Description | | ----- | ------- | ------------------------ | -| \- $2 | Integer | Object type | -| \- $3 | Text | Message | -| \- $4 | Integer | Table number | -| \- $5 | Integer | Reserved | +| $messageType | Integer | Message type (see table) | +| $objectType | Integer | Object type | +| $messageText | Text | Message | +| $table | Integer | Table number | +| $reserved | Integer | Reserved | The following table describes the contents of the parameters depending on the event type: -| **Event** | **$1 (Longint)** | **$2 (Longint)** | **$3 (Text)** | **$4 (Longint)** | **$5 (Longint)** | -| ------------------------- | ---------------- | ------------------ | -------------- | ---------------- | ---------------- | -| Message | 1 | 0 | Progression | Percentage | Reserved | -| message | done (0-100) | | | | | -| Verification finished(\*) | 2 | Object type (\*\*) | OK message | Table or index | Reserved | -| test | number | | | | | -| Error | 3 | Object type (\*\*) | Text of error- | Table or index | Reserved | -| message | number | | | | | +| **Event** | **$messageType** | **$objectType** | **$messageText** | **$table** | **$reserved** | +| ------- | ---------------- | ------------------ | -------------- | ---------------- | ---------------- | +| Message | 1 | 0 | Progression message | Percentage done (0-100) | Reserved | +| Verification finished(\*) | 2 | Object type (\*\*) | OK message test | Table or index number | Reserved | +| Error | 3 | Object type (\*\*) | Text of error message | Table or index number | Reserved | | End of execution | 4 | 0 | DONE | 0 | Reserved | | Warning | 5 | Object type(\*\*) | Text of error | Table or index | Reserved | -| message | number | | | | | +|||| message | number | -(\*) The *Verification finished* ($1=2) event is never returned when the mode is Verify All. It is only used in Verify Records or Verify Indexes mode. -(\*\*) *Object type*: When an object is verified, a "finished" message ($1=2), error ($1=3) or warning ($1=5) can be sent. The object type returned in $2 can be one of the following: +(\*) The *Verification finished* ($messageType=2) event is never returned when the mode is Verify All. It is only used in Verify Records or Verify Indexes mode. +(\*\*) *Object type*: When an object is verified, a "finished" message ($messageType=2), error ($messageType=3) or warning ($messageType=5) can be sent. The object type returned in $objectType can be one of the following: * 0 = undetermined * 4 = record * 8 = index * 16 = structure object (preliminary check of data file). -*Special case*: When $4 = 0 for $1=2, 3 or 5, the message does not concern a table or an index but rather the data file as a whole. +*Special case*: When $table = 0 for $messageType=2, 3 or 5, the message does not concern a table or an index but rather the data file as a whole. -The callback method must also return a value in $0 (Longint), which is used to check the execution of the operation: +The callback method must also return a *$result* integer value, which is used to check the execution of the operation: -* If $0 = 0, the operation continues normally -* If $0 = -128, the operation is stopped without any error generated -* If $0 = another value, the operation is stopped and the value passed in $0 is returned as the error number. This error can be intercepted by an error-handling method. +* If $result = 0, the operation continues normally +* If $result = -128, the operation is stopped without any error generated +* If $result = another value, the operation is stopped and the value passed in $result is returned as the error number. This error can be intercepted by an error-handling method. + +**Note:** You cannot interrupt execution via $result after the *End of execution* event ($1=4) has been generated. -**Note:** You cannot interrupt execution via $0 after the *End of execution* event ($4=1) has been generated. Two optional arrays can also be used by this command: diff --git a/versioned_docs/version-21/commands-legacy/query-by-attribute.md b/versioned_docs/version-21/commands-legacy/query-by-attribute.md index e611a73547f898..024cd41c97ac33 100644 --- a/versioned_docs/version-21/commands-legacy/query-by-attribute.md +++ b/versioned_docs/version-21/commands-legacy/query-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Parameter | Type | | Description | | --- | --- | --- | --- | | aTable | Table | → | Table for which to return a selection of records, or Default table if omitted | -| conjOp | * | → | Conjunction operator to use to join multiple queries (if any) | +| conjOp | Operator | → | Conjunction operator to use to join multiple queries (if any) | | objectField | Field | → | Object field to query attributes | | attributePath | Text | → | Name or path of attribute | -| queryOp | Text, * | → | Query operator (comparator) | +| queryOp | Text, Operator | → | Query operator (comparator) | | value | Text, Number, Date, Time | → | Value to compare | | * | Operator | → | Continue query flag | diff --git a/versioned_docs/version-21/commands-legacy/query-selection-by-attribute.md b/versioned_docs/version-21/commands-legacy/query-selection-by-attribute.md index 4996f9e7b49b80..22f6dd1ba3190f 100644 --- a/versioned_docs/version-21/commands-legacy/query-selection-by-attribute.md +++ b/versioned_docs/version-21/commands-legacy/query-selection-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Parameter | Type | | Description | | --- | --- | --- | --- | | aTable | Table | → | Table for which to return a selection of records, or Default table if omitted | -| conjOp | * | → | Conjunction operator to use to join multiple queries (if any) | +| conjOp | Operator | → | Conjunction operator to use to join multiple queries (if any) | | objectField | Field | → | Object field to query attributes | | attributePath | Text | → | Name or path of attribute | -| queryOp | *, Text | → | Query operator (comparator) | +| queryOp | Text, Operator | → | Query operator (comparator) | | value | Text, Number, Date, Time | → | Value to compare | | * | Operator | → | Continue query flag | diff --git a/versioned_docs/version-21/commands-legacy/verify-data-file.md b/versioned_docs/version-21/commands-legacy/verify-data-file.md index 3273a2dbf08d87..9330b4ee6c0cd6 100644 --- a/versioned_docs/version-21/commands-legacy/verify-data-file.md +++ b/versioned_docs/version-21/commands-legacy/verify-data-file.md @@ -52,44 +52,43 @@ Generally, the VERIFY DATA FILE command creates a log file in XML format (please The *method* parameter is used to set a callback method that will be called regularly during the verification. If you pass an empty string or an invalid method name, this parameter is ignored (no method is called). When called, the method receives up to 5 parameters depending on the objects being verified and on the event type originating the call (see calls table). It is imperative to declare these parameters in the method: -| \- $1 | Integer | Message type (see table) | +| Parameter | Type | Description | | ----- | ------- | ------------------------ | -| \- $2 | Integer | Object type | -| \- $3 | Text | Message | -| \- $4 | Integer | Table number | -| \- $5 | Integer | Reserved | +| $messageType | Integer | Message type (see table) | +| $objectType | Integer | Object type | +| $messageText | Text | Message | +| $table | Integer | Table number | +| $reserved | Integer | Reserved | The following table describes the contents of the parameters depending on the event type: -| **Event** | **$1 (Longint)** | **$2 (Longint)** | **$3 (Text)** | **$4 (Longint)** | **$5 (Longint)** | -| ------------------------- | ---------------- | ------------------ | -------------- | ---------------- | ---------------- | -| Message | 1 | 0 | Progression | Percentage | Reserved | -| message | done (0-100) | | | | | -| Verification finished(\*) | 2 | Object type (\*\*) | OK message | Table or index | Reserved | -| test | number | | | | | -| Error | 3 | Object type (\*\*) | Text of error- | Table or index | Reserved | -| message | number | | | | | +| **Event** | **$messageType** | **$objectType** | **$messageText** | **$table** | **$reserved** | +| ------- | ---------------- | ------------------ | -------------- | ---------------- | ---------------- | +| Message | 1 | 0 | Progression message | Percentage done (0-100) | Reserved | +| Verification finished(\*) | 2 | Object type (\*\*) | OK message test | Table or index number | Reserved | +| Error | 3 | Object type (\*\*) | Text of error message | Table or index number | Reserved | | End of execution | 4 | 0 | DONE | 0 | Reserved | | Warning | 5 | Object type(\*\*) | Text of error | Table or index | Reserved | -| message | number | | | | | +|||| message | number | -(\*) The *Verification finished* ($1=2) event is never returned when the mode is Verify All. It is only used in Verify Records or Verify Indexes mode. -(\*\*) *Object type*: When an object is verified, a "finished" message ($1=2), error ($1=3) or warning ($1=5) can be sent. The object type returned in $2 can be one of the following: +(\*) The *Verification finished* ($messageType=2) event is never returned when the mode is Verify All. It is only used in Verify Records or Verify Indexes mode. +(\*\*) *Object type*: When an object is verified, a "finished" message ($messageType=2), error ($messageType=3) or warning ($messageType=5) can be sent. The object type returned in $objectType can be one of the following: * 0 = undetermined * 4 = record * 8 = index * 16 = structure object (preliminary check of data file). -*Special case*: When $4 = 0 for $1=2, 3 or 5, the message does not concern a table or an index but rather the data file as a whole. +*Special case*: When $table = 0 for $messageType=2, 3 or 5, the message does not concern a table or an index but rather the data file as a whole. -The callback method must also return a value in $0 (Longint), which is used to check the execution of the operation: +The callback method must also return a *$result* integer value, which is used to check the execution of the operation: -* If $0 = 0, the operation continues normally -* If $0 = -128, the operation is stopped without any error generated -* If $0 = another value, the operation is stopped and the value passed in $0 is returned as the error number. This error can be intercepted by an error-handling method. +* If $result = 0, the operation continues normally +* If $result = -128, the operation is stopped without any error generated +* If $result = another value, the operation is stopped and the value passed in $result is returned as the error number. This error can be intercepted by an error-handling method. + +**Note:** You cannot interrupt execution via $result after the *End of execution* event ($1=4) has been generated. -**Note:** You cannot interrupt execution via $0 after the *End of execution* event ($4=1) has been generated. Two optional arrays can also be used by this command: From 2589bf16f55c5f730344238db45e24c4f4f4afee Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 24 Nov 2025 18:11:49 +0100 Subject: [PATCH 45/75] fix force login to qodly --- docs/REST/authUsers.md | 2 +- versioned_docs/version-20-R10/ORDA/privileges.md | 2 +- versioned_docs/version-20-R10/REST/authUsers.md | 2 +- versioned_docs/version-21/REST/authUsers.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/REST/authUsers.md b/docs/REST/authUsers.md index f6672f41684be4..2a1befa8b3a399 100644 --- a/docs/REST/authUsers.md +++ b/docs/REST/authUsers.md @@ -21,7 +21,7 @@ A session is opened after the user was successfully logged (see below). :::note Compatibility -The legacy login mode based upon the `On REST Authentication` database method is **deprecated** as of 4D 20 R6. It is now recommended to [use the **force login mode**](../ORDA/privileges.md#rolesjson-file) (automatically enabled in new projects) and to implement the [`ds.authentify()` function](#function-authentify). In converted projects, [a button in the Settings dialog box](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) will help you upgrade your configuration. In Qodly Studio for 4D, the mode can be set using the [**Force login** option](../WebServer/qodly-studio.md#force-login) in the Privileges panel. +The legacy login mode based upon the `On REST Authentication` database method is **deprecated** as of 4D 20 R6. It is now recommended to [use the **force login mode**](../ORDA/privileges.md#rolesjson-file) (automatically enabled in new projects) and to implement the [`ds.authentify()` function](#function-authentify). In converted projects, [a button in the Settings dialog box](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) will help you upgrade your configuration. In Qodly Studio for 4D, the mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Privileges panel. ::: diff --git a/versioned_docs/version-20-R10/ORDA/privileges.md b/versioned_docs/version-20-R10/ORDA/privileges.md index 97f4d0003bf9dd..641a5cf43a2a5a 100644 --- a/versioned_docs/version-20-R10/ORDA/privileges.md +++ b/versioned_docs/version-20-R10/ORDA/privileges.md @@ -176,7 +176,7 @@ In previous releases, the `roles.json` file was not created by default. As of 4D :::note Qodly Studio -In Qodly Studio for 4D, the mode can be set using the [**Force login** option](../WebServer/qodly-studio.md#force-login) in the Privileges panel. +In Qodly Studio for 4D, the mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Privileges panel. ::: diff --git a/versioned_docs/version-20-R10/REST/authUsers.md b/versioned_docs/version-20-R10/REST/authUsers.md index 68f8275332869b..28c75eb7b8b915 100644 --- a/versioned_docs/version-20-R10/REST/authUsers.md +++ b/versioned_docs/version-20-R10/REST/authUsers.md @@ -21,7 +21,7 @@ A session is opened after the user was successfully logged (see below). :::note Compatibility -The legacy login mode based upon the `On REST Authentication` database method is **deprecated** as of 4D 20 R6. It is now recommended to [use the **force login mode**](../ORDA/privileges.md#rolesjson-file) (automatically enabled in new projects) and to implement the [`ds.authentify()` function](#function-authentify). In converted projects, [a button in the Settings dialog box](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) will help you upgrade your configuration. In Qodly Studio for 4D, the mode can be set using the [**Force login** option](../WebServer/qodly-studio.md#force-login) in the Privileges panel. +The legacy login mode based upon the `On REST Authentication` database method is **deprecated** as of 4D 20 R6. It is now recommended to [use the **force login mode**](../ORDA/privileges.md#rolesjson-file) (automatically enabled in new projects) and to implement the [`ds.authentify()` function](#function-authentify). In converted projects, [a button in the Settings dialog box](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) will help you upgrade your configuration. In Qodly Studio for 4D, the mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Privileges panel. ::: diff --git a/versioned_docs/version-21/REST/authUsers.md b/versioned_docs/version-21/REST/authUsers.md index 68f8275332869b..28c75eb7b8b915 100644 --- a/versioned_docs/version-21/REST/authUsers.md +++ b/versioned_docs/version-21/REST/authUsers.md @@ -21,7 +21,7 @@ A session is opened after the user was successfully logged (see below). :::note Compatibility -The legacy login mode based upon the `On REST Authentication` database method is **deprecated** as of 4D 20 R6. It is now recommended to [use the **force login mode**](../ORDA/privileges.md#rolesjson-file) (automatically enabled in new projects) and to implement the [`ds.authentify()` function](#function-authentify). In converted projects, [a button in the Settings dialog box](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) will help you upgrade your configuration. In Qodly Studio for 4D, the mode can be set using the [**Force login** option](../WebServer/qodly-studio.md#force-login) in the Privileges panel. +The legacy login mode based upon the `On REST Authentication` database method is **deprecated** as of 4D 20 R6. It is now recommended to [use the **force login mode**](../ORDA/privileges.md#rolesjson-file) (automatically enabled in new projects) and to implement the [`ds.authentify()` function](#function-authentify). In converted projects, [a button in the Settings dialog box](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) will help you upgrade your configuration. In Qodly Studio for 4D, the mode can be set using the [**Force login** option](https://developer.4d.com/qodly/4DQodlyPro/force-login) in the Privileges panel. ::: From 000914f4b0ed39d2e34833f3681d691859f6ff7d Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Tue, 25 Nov 2025 10:08:13 +0100 Subject: [PATCH 46/75] New Crowdin updates (#3006) * New translations authusers.md (French) * New translations privileges.md (French) * New translations authusers.md (French) * New translations authusers.md (French) * New translations openaifilesapi.md (French) * New translations formeditor.md (Spanish) * New translations classes.md (Spanish) * New translations parameters.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations authusers.md (Spanish) * New translations vp-import-document.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations orda-events.md (Spanish) * New translations classes.md (Spanish) * New translations parameters.md (Spanish) * New translations formeditor.md (Spanish) * New translations orda-events.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations authusers.md (Spanish) * New translations vp-import-document.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations classes.md (Spanish) * New translations parameters.md (Spanish) * New translations listbox_overview.md (Spanish) * New translations orda-events.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations authusers.md (Spanish) * New translations vp-import-document.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations managing-formulas.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations openaifile.md (Spanish) * New translations openaifileresult.md (Spanish) * New translations openaifilesapi.md (Spanish) * New translations authusers.md (Japanese) * New translations privileges.md (Japanese) * New translations authusers.md (Japanese) * New translations authusers.md (Japanese) * New translations openaifilesapi.md (Japanese) * New translations authusers.md (Portuguese, Brazilian) * New translations privileges.md (Portuguese, Brazilian) * New translations authusers.md (Portuguese, Brazilian) * New translations authusers.md (Portuguese, Brazilian) * New translations openaifilesapi.md (Portuguese, Brazilian) --- .../current/Concepts/classes.md | 2 +- .../current/Concepts/parameters.md | 2 +- .../current/ORDA/orda-events.md | 6 ++-- .../current/ORDA/ordaClasses.md | 2 +- .../current/REST/authUsers.md | 2 +- .../ViewPro/commands/vp-import-document.md | 2 +- .../WritePro/commands/wp-import-document.md | 2 +- .../current/WritePro/managing-formulas.md | 22 ++++++------- .../current/WritePro/writeprointerface.md | 2 +- .../current/aikit/Classes/OpenAIFile.md | 2 +- .../current/aikit/Classes/OpenAIFileResult.md | 2 +- .../current/aikit/Classes/OpenAIFilesAPI.md | 33 ++++++++++++++++++- .../version-19/FormEditor/formEditor.md | 2 +- .../version-20-R10/Concepts/classes.md | 2 +- .../version-20-R10/Concepts/parameters.md | 2 +- .../version-20-R10/FormEditor/formEditor.md | 2 +- .../version-20-R10/ORDA/orda-events.md | 2 +- .../version-20-R10/ORDA/ordaClasses.md | 2 +- .../version-20-R10/ORDA/privileges.md | 2 +- .../version-20-R10/REST/authUsers.md | 2 +- .../ViewPro/commands/vp-import-document.md | 2 +- .../WritePro/commands/wp-import-document.md | 2 +- .../version-21/Concepts/classes.md | 2 +- .../version-21/Concepts/parameters.md | 2 +- .../FormObjects/listbox_overview.md | 6 ++-- .../version-21/ORDA/orda-events.md | 6 ++-- .../version-21/ORDA/ordaClasses.md | 2 +- .../version-21/REST/authUsers.md | 2 +- .../ViewPro/commands/vp-import-document.md | 2 +- .../WritePro/commands/wp-import-document.md | 2 +- .../version-21/WritePro/managing-formulas.md | 22 ++++++------- .../version-21/WritePro/writeprointerface.md | 2 +- .../current/REST/authUsers.md | 2 +- .../current/aikit/Classes/OpenAIFilesAPI.md | 33 ++++++++++++++++++- .../version-20-R10/ORDA/privileges.md | 2 +- .../version-20-R10/REST/authUsers.md | 2 +- .../version-21/REST/authUsers.md | 2 +- .../current/REST/authUsers.md | 2 +- .../current/aikit/Classes/OpenAIFilesAPI.md | 33 ++++++++++++++++++- .../version-20-R10/ORDA/privileges.md | 2 +- .../version-20-R10/REST/authUsers.md | 2 +- .../version-21/REST/authUsers.md | 2 +- .../current/REST/authUsers.md | 2 +- .../current/aikit/Classes/OpenAIFilesAPI.md | 33 ++++++++++++++++++- .../version-20-R10/ORDA/privileges.md | 2 +- .../version-20-R10/REST/authUsers.md | 2 +- .../version-21/REST/authUsers.md | 2 +- 47 files changed, 197 insertions(+), 73 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md index 176c4206089fcc..be0e39a6ed051b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md @@ -741,7 +741,7 @@ Los singletons son útiles para definir los valores que necesitan estar disponib - un **singleton proceso** tiene una instancia única para el proceso en el que se instancia, - un **singleton compartido** tiene una instancia única para todos los procesos en la máquina. -- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). +- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. Los singletons de sesión son particularmente apropiados con [aplicaciones Qodly](https://developer.4d.com/qodly/). :::info diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md index d0c3ffa3b0f90e..8a26fc1b0e3a1e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md @@ -106,7 +106,7 @@ $entitySelection:=ds.User.query("login=:1"; $user) :::note -Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. +No confunda las **declaraciones de parámetros** con las [**declaraciones de variables**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index ddf8750a6c544a..2a4453f25cb462 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -234,7 +234,7 @@ Function query sameDay($event : Object) : Text ``` -- Using a **scalar** *sameDay* attribute updated when other attributes are "touched" will save time: +- Usar un atributo *sameDay* **escalar** actualizado cuando otros atributos son "tocados" ahorrará tiempo: ```4d //BookingEntity class @@ -348,7 +348,7 @@ No se recomienda actualizar la entidad dentro de esta función (utilizando `This #### Ejemplo -En este ejemplo, no se permite guardar un producto con un margen inferior al 50%. In case of an invalid price attribute, you return an error object and thus, stop the save action. +En este ejemplo, no se permite guardar un producto con un margen inferior al 50%. En caso de que el atributo precio no sea válido, devuelve un objeto error y, por tanto, detiene la acción de guardar. ```4d // ProductsEntity class @@ -438,7 +438,7 @@ return $result :::note -The content of the file is generated outside the `saving` event because it can be time consuming. +El contenido del archivo se genera fuera del evento `saving` porque puede llevar mucho tiempo. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index a1277e87a87543..cc698dfa3ce19b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -957,7 +957,7 @@ exposed Function get ``` ```4d -// declare a shared singleton function +// declara una función singleton compartida shared singleton Class constructor() exposed Function ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/REST/authUsers.md b/i18n/es/docusaurus-plugin-content-docs/current/REST/authUsers.md index e6c153e409fa10..5b3bb64349e309 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/REST/authUsers.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/REST/authUsers.md @@ -18,7 +18,7 @@ Una sesión se abre después de que el usuario haya iniciado sesión correctamen :::note Compatibilidad -El modo de inicio de sesión heredado basado en el método base `On REST Authentication` está **obsoleto** a partir de 4D 20 R6. Ahora se recomienda [utilizar el **modo Force login**](../ORDA/privileges.md#rolesjson-file) (activado automáticamente en nuevos proyectos) e implementar la función [`ds.authentify()`](#function-authentify). En proyectos convertidos, [un botón en la caja de diálogo de Parámetros](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) le ayudará a actualizar su configuración. En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](../WebServer/qodly-studio.md#force-login) en el panel de Privilegios. +El modo de inicio de sesión heredado basado en el método base `On REST Authentication` está **obsoleto** a partir de 4D 20 R6. Ahora se recomienda [utilizar el **modo Force login**](../ORDA/privileges.md#rolesjson-file) (activado automáticamente en nuevos proyectos) e implementar la función [`ds.authentify()`](#function-authentify). En proyectos convertidos, [un botón en la caja de diálogo de Parámetros](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) le ayudará a actualizar su configuración. En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](https://developer.4d.com/qodly/4DQodlyPro/force-login) en el panel de Privilegios. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md index 9a3dadc588bc8c..5e3f810129801c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ViewPro/commands/vp-import-document.md @@ -76,7 +76,7 @@ El parámetro opcional *paramObj* permite definir las propiedades del documento - La importación de archivos en formatos .xslx, .csv y .sjs es **asíncrona**. Con estos formatos, debe utilizar el atributo `formula` si desea iniciar una acción al final del procesamiento del documento. - Al importar un archivo con formato Microsoft Excel a un documento 4D View Pro, algunos parámetros pueden perderse. Puede verificar su configuración con [esta lista de SpreadJS](https://developer.mescius.com/spreadjs/docs/excelimpexp/excelexport). - Para más información sobre el formato CSV y los valores separados por delimitadores en general, ver [este artículo en Wikipedia](https://en.wikipedia.org/wiki/Delimiter-separated_values) -- Se recomienda utilizar el objeto *excelOptions* al importar en formato ".xlsx". Make sure to not mix this object with legacy first level property *password* to avoid potiental issues. +- Se recomienda utilizar el objeto *excelOptions* al importar en formato ".xlsx". Asegúrese de no mezclar este objeto con la propiedad heredada de primer nivel *password* para evitar problemas potenciales. - La función callback especificada en el atributo `formula` se activa después de que todas las [funciones personalizadas 4D](../formulas.md#4d-functions) dentro del contenido importado hayan completado sus cálculos. This ensures that any dependent processes, such as document modifications or exports, are performed only after all formula-based computations are fully resolved. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md index 9e7eb901643b46..637b01623e1567 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md @@ -57,7 +57,7 @@ Puede pasar un objeto para definir cómo se gestionan los siguientes atributos d | anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | | secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | | fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | -| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | +| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. Si se vuelve a aplicar una hoja de estilo con un ajuste de colapso automático de bordes después de la operación de importación, se ignorará el ajuste. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | | preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | | htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | | importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md index b1d05d404a548e..37b6a305dc2086 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/managing-formulas.md @@ -95,17 +95,17 @@ Por ejemplo, para insertar el número de página en el pie de página: Cuando se utiliza en una fórmula dentro de la tabla, la palabra clave **This** da acceso a diferentes datos según el contexto: -| **Contexto** | **Expression** | **Tipo** | **Devuelve** | -| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| En cualquier sitio | [This](../commands/this.md).table | Object | Tabla actual | -| | [This](../commands/this.md).row | Object | Current table row element | -| | [This](../commands/this.md).rowIndex | Number | Índice de la línea actual, a partir de 1 | -| Cuando se ha definido una fuente de datos para la tabla | [This](../commands/this.md).table.dataSource | Objet (fórmula) | Fuente de datos como fórmula | -| | [This](../commands/this.md).tableData | Collection o Entity selection (por lo general) | table.dataSource evaluada | -| En cada fila de datos cuando una fuente de datos tabla devuelve una colección o una selección de entidades | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | -| | [This](../commands/this.md).itemIndex | Number | Índice del elemento actual en la colección o selección de entidades, a partir de 0 | -| In any row (except header rows) when a table datasource returns a collection or an entity selection | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    Esta expresión devuelve el mismo tipo de valor que la expresión **This.tableData**. | -| In a break row | [This](../commands/this.md).breakItems | Collection o entity selection | Items of the collection or entity selection displayed in the rows between:
    • the current break row and the previous break row of the same level (or the start of the table) if the break row(s) are displayed after the data row.
    • the current break and the next break row of the same level (or the end of the table) if the break row(s) are displayed before the data row.
    | +| **Contexto** | **Expression** | **Tipo** | **Devuelve** | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| En cualquier sitio | [This](../commands/this.md).table | Object | Tabla actual | +| | [This](../commands/this.md).row | Object | Current table row element | +| | [This](../commands/this.md).rowIndex | Number | Índice de la línea actual, a partir de 1 | +| Cuando se ha definido una fuente de datos para la tabla | [This](../commands/this.md).table.dataSource | Objet (fórmula) | Fuente de datos como fórmula | +| | [This](../commands/this.md).tableData | Collection o Entity selection (por lo general) | table.dataSource evaluada | +| En cada fila de datos cuando una fuente de datos tabla devuelve una colección o una selección de entidades | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | +| | [This](../commands/this.md).itemIndex | Number | Índice del elemento actual en la colección o selección de entidades, a partir de 0 | +| En cualquier línea (excepto en las líneas de encabezado) cuando una fuente de datos tabla devuelve una colección o una selección de entidades | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    Esta expresión devuelve el mismo tipo de valor que la expresión **This.tableData**. | +| In a break row | [This](../commands/this.md).breakItems | Collection o entity selection | Items of the collection or entity selection displayed in the rows between:
    • the current break row and the previous break row of the same level (or the start of the table) if the break row(s) are displayed after the data row.
    • the current break and the next break row of the same level (or the end of the table) if the break row(s) are displayed before the data row.
    | En cualquier otro contexto, estas expresiones devolverán *undefined*. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index b49cfefe64375a..a95cc219922320 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -10,7 +10,7 @@ Un desarrollador 4D puede implementar fácilmente estas paletas en su aplicació ## Instalación y documentación -4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). Los archivos fuente de 4D Write Pro Interface están [disponibles en Github](https://github.com/4d/4D-WritePro-Interface). La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. Encontrará a continuación: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md index a2c81f27a2e0f5..3c326b32024644 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md @@ -18,7 +18,7 @@ The `OpenAIFile` class represents a file object in the OpenAI API. Files can be | `filename` | Text | El nombre del archivo. | | `object` | Text | The object type, which is always "file". | | `purpose` | Text | The intended purpose of the file. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | -| `status` | Text | **Deprecated.** The current status of the file, which can be either `uploaded`, `processed`, or `error`. | +| `status` | Text | **Obsoleto.** el estado actual del archivo, que puede ser `uploaded`, `processed`, o `error`. | | `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | ## Ver también diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md index f42d964305008a..f781ced1546e67 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md @@ -5,7 +5,7 @@ title: OpenAIFileResult # OpenAIFileResult -The `OpenAIFileResult` class contains the result of a single file operation (upload or retrieve). +La clase `OpenAIFileResult` contiene el resultado de una única operación de archivo (carga o recuperación). ## Hereda diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index a0b5682d10f545..be2d29e7aa101f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -51,7 +51,7 @@ Upload a file that can be used across various endpoints. - **API de Asistentes:** soporta tipos de archivo específicos (ver Guía de herramientas de asistentes) - **API de finalización de chat:** sólo se admiten archivos PDF -#### Ejemplo +#### Sychronous example ```4d var $file:=File("/RESOURCES/training-data.jsonl") @@ -71,6 +71,37 @@ If ($result.success) End if ``` +#### Ejemplo asincrónico + +Since file uploads can be long operations (especially for large files up to 512 MB), it's recommended to use asynchronous calls to avoid blocking your application. See [Asynchronous Call](../asynchronous-call.md) for more details. + +```4d +var $file:=File("/RESOURCES/large-training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.onTerminate:=Formula(MyFileUploadCallback($1)) + +// This call returns immediately without blocking +$client.files.create($file; "fine-tune"; $params) +``` + +The callback function receives an [OpenAIFileResult](OpenAIFileResult.md): + +```4d +// MyFileUploadCallback +#DECLARE($result: cs.AIKit.OpenAIFileResult) + +If ($result.success) + var $uploadedFile:=$result.file + + ALERT("File uploaded successfully: "+$uploadedFile.filename) + // Store the file ID for later use + Form.uploadedFileId:=$uploadedFile.id +Else + ALERT("Upload failed: "+Formula(JSON Stringify($result.errors))) +End if +``` + ### retrieve() **retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/FormEditor/formEditor.md b/i18n/es/docusaurus-plugin-content-docs/version-19/FormEditor/formEditor.md index b3bc4c53bcc4a9..7dcdb830dcd022 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/FormEditor/formEditor.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/FormEditor/formEditor.md @@ -340,7 +340,7 @@ Cuando se superponen varios objetos, se puede utilizar el atajo **Ctrl+Mayús+cl :::note -In binary databases, use **Ctrl+Click / Command+Click** to perform the same action. +En bases de datos binarias, utilice **Ctrl+Clic / Comando+Clic** para efectuar la misma acción. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md index cb42354faf3714..f4454ac48a73ad 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md @@ -741,7 +741,7 @@ Los singletons son útiles para definir los valores que necesitan estar disponib - un **singleton proceso** tiene una instancia única para el proceso en el que se instancia, - un **singleton compartido** tiene una instancia única para todos los procesos en la máquina. -- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). +- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. Los singletons de sesión son particularmente apropiados con [aplicaciones Qodly](https://developer.4d.com/qodly/). :::info diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md index df4ff6da8665ad..a1bd615cdb5d67 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md @@ -112,7 +112,7 @@ $entitySelection:=ds.User.query("login=:1"; $user) :::note -Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. +No confunda las **declaraciones de parámetros** con las [**declaraciones de variables**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/formEditor.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/formEditor.md index 55169d4e3065a5..94c480586178b3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/formEditor.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormEditor/formEditor.md @@ -314,7 +314,7 @@ Para repartir los objetos con igual espacio: 1. Seleccione tres o más objetos y haga clic en la herramienta Distribuir correspondiente. -2. In the toolbar, click on the distribution tool that corresponds to the distribution you want to apply.
    ![](../assets/en/FormEditor/distributionTool.png)
    OR
    Select a distribution menu command from the **Align** submenu in the **Object** menu or from the context menu of the editor. +2. En la barra de herramientas, haga clic en la herramienta de distribución correspondiente a la distribución que desea aplicar.
    ![](../assets/en/FormEditor/distributionTool.png)
    OR
    Select a distribution menu command from the **Align** submenu in the **Object** menu or from the context menu of the editor. 4D distribuye los objetos consecuentemente. Los objetos se distribuyen utilizando la distancia a sus centros y se utiliza como referencia la mayor distancia entre dos objetos consecutivos. Para distribuir objetos utilizando la caja de diálogo Alinear y Distribuir: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md index 06fd41ba79e5bd..aa87dab2cb54fa 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md @@ -191,7 +191,7 @@ Function query sameDay($event : Object) : Text ``` -- Using a **scalar** *sameDay* attribute updated when other attributes are "touched" will save time: +- Usar un atributo *sameDay* **escalar** actualizado cuando otros atributos son "tocados" ahorrará tiempo: ```4d //BookingEntity class diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index a1277e87a87543..cc698dfa3ce19b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -957,7 +957,7 @@ exposed Function get ``` ```4d -// declare a shared singleton function +// declara una función singleton compartida shared singleton Class constructor() exposed Function ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md index 170f48002e2034..9f89f0a0b8891d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md @@ -165,7 +165,7 @@ En versiones anteriores, el archivo `roles.json` no fue creado por defecto. A pa :::note Qodly Studio -En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](../WebServer/qodly-studio.md#force-login) en el panel de Privilegios. +En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](https://developer.4d.com/qodly/4DQodlyPro/force-login) en el panel de Privilegios. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md index ceccb568517c05..2091b0329a655e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md @@ -18,7 +18,7 @@ Una sesión se abre después de que el usuario haya iniciado sesión correctamen :::note Compatibilidad -El modo de inicio de sesión heredado basado en el método base `On REST Authentication` está **obsoleto** a partir de 4D 20 R6. Ahora se recomienda [utilizar el **modo Force login**](../ORDA/privileges.md#rolesjson-file) (activado automáticamente en nuevos proyectos) e implementar la función [`ds.authentify()`](#function-authentify). En proyectos convertidos, [un botón en la caja de diálogo de Parámetros](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) le ayudará a actualizar su configuración. En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](../WebServer/qodly-studio.md#force-login) en el panel de Privilegios. +El modo de inicio de sesión heredado basado en el método base `On REST Authentication` está **obsoleto** a partir de 4D 20 R6. Ahora se recomienda [utilizar el **modo Force login**](../ORDA/privileges.md#rolesjson-file) (activado automáticamente en nuevos proyectos) e implementar la función [`ds.authentify()`](#function-authentify). En proyectos convertidos, [un botón en la caja de diálogo de Parámetros](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) le ayudará a actualizar su configuración. En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](https://developer.4d.com/qodly/4DQodlyPro/force-login) en el panel de Privilegios. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-document.md index 9cf06809fc9a03..37cded2c5b2d66 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-import-document.md @@ -76,7 +76,7 @@ El parámetro opcional *paramObj* permite definir las propiedades del documento - La importación de archivos en formatos .xslx, .csv y .sjs es **asíncrona**. Con estos formatos, debe utilizar el atributo `formula` si desea iniciar una acción al final del procesamiento del documento. - Al importar un archivo con formato Microsoft Excel a un documento 4D View Pro, algunos parámetros pueden perderse. Puede verificar su configuración con [esta lista de SpreadJS](https://developer.mescius.com/spreadjs/docs/excelimpexp/excelexport). - Para más información sobre el formato CSV y los valores separados por delimitadores en general, ver [este artículo en Wikipedia](https://en.wikipedia.org/wiki/Delimiter-separated_values) -- Se recomienda utilizar el objeto *excelOptions* al importar en formato ".xlsx". Make sure to not mix this object with legacy first level property *password* to avoid potiental issues. +- Se recomienda utilizar el objeto *excelOptions* al importar en formato ".xlsx". Asegúrese de no mezclar este objeto con la propiedad heredada de primer nivel *password* para evitar problemas potenciales. - La función callback especificada en el atributo `formula` se activa después de que todas las [funciones personalizadas 4D](../formulas.md#4d-functions) dentro del contenido importado hayan completado sus cálculos. This ensures that any dependent processes, such as document modifications or exports, are performed only after all formula-based computations are fully resolved. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md index 9e7eb901643b46..637b01623e1567 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md @@ -57,7 +57,7 @@ Puede pasar un objeto para definir cómo se gestionan los siguientes atributos d | anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | | secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | | fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | -| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | +| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. Si se vuelve a aplicar una hoja de estilo con un ajuste de colapso automático de bordes después de la operación de importación, se ignorará el ajuste. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | | preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | | htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | | importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md index cb42354faf3714..f4454ac48a73ad 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md @@ -741,7 +741,7 @@ Los singletons son útiles para definir los valores que necesitan estar disponib - un **singleton proceso** tiene una instancia única para el proceso en el que se instancia, - un **singleton compartido** tiene una instancia única para todos los procesos en la máquina. -- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). +- un **singleton de sesión** es un singleton compartido pero con una instancia única para todos los procesos en la [sesión](../API/SessionClass.md). Los singletons de sesión son compartidos dentro de una sesión completa, pero varían entre sesiones. En el contexto de un cliente-servidor o una aplicación web, los singletons de sesión hacen posible crear y utilizar una instancia diferente para cada sesión, y por lo tanto para cada usuario. Los singletons de sesión son particularmente apropiados con [aplicaciones Qodly](https://developer.4d.com/qodly/). :::info diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md index 32949f64166674..3891ba40a36698 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/parameters.md @@ -112,7 +112,7 @@ $entitySelection:=ds.User.query("login=:1"; $user) :::note -Do not confuse **parameter declarations** with [**variable declarations**](variables.md#declaring-variables). El uso de la palabra clave `var` con parámetros generará errores. +No confunda las **declaraciones de parámetros** con las [**declaraciones de variables**](variables.md#declaring-variables). El uso de la palabra clave `var` con parámetros generará errores. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md index ab7f86953d4573..b83e90d6c6bd46 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md @@ -1001,9 +1001,9 @@ Estos atributos pueden utilizarse para controlar el rango de valores de entrada. El atributo behavior ofrece variaciones a la representación estándar de los valores. En 4D v15, se ofrece una única variación: -| Atributo | Valor(es) disponible(s) | valueType(s) | Descripción | -| -------- | ------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| behavior | threeStates | integer | Representa un valor numérico como una casilla de verificación de tres estados.
    2=semi-checked, 1=checked, 0=unchecked, -1=invisible, -2=unchecked disabled, -3=checked disabled, -4=semi-checked disabled | +| Atributo | Valor(es) disponible(s) | valueType(s) | Descripción | +| -------- | ------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| behavior | threeStates | integer | Representa un valor numérico como una casilla de verificación de tres estados.
    2=semi seleccionada, 1=seleccionada, 0=no seleccionada, -1=invisible, -2= deseleccionada desactivada, -3= seleccionada desactivada, -4=semi seleccionada desactivada | ```4d C_OBJECT($ob3) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index 4efe396d833a2a..87f74230e7ce29 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -234,7 +234,7 @@ Function query sameDay($event : Object) : Text ``` -- Using a **scalar** *sameDay* attribute updated when other attributes are "touched" will save time: +- Usar un atributo *sameDay* **escalar** actualizado cuando otros atributos son "tocados" ahorrará tiempo: ```4d //BookingEntity class @@ -348,7 +348,7 @@ No se recomienda actualizar la entidad dentro de esta función (utilizando `This #### Ejemplo -En este ejemplo, no se permite guardar un producto con un margen inferior al 50%. In case of an invalid price attribute, you return an error object and thus, stop the save action. +En este ejemplo, no se permite guardar un producto con un margen inferior al 50%. En caso de que el atributo precio no sea válido, devuelve un objeto error y, por tanto, detiene la acción de guardar. ```4d // ProductsEntity class @@ -438,7 +438,7 @@ return $result :::note -The content of the file is generated outside the `saving` event because it can be time consuming. +El contenido del archivo se genera fuera del evento `saving` porque puede llevar mucho tiempo. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index a1277e87a87543..cc698dfa3ce19b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -957,7 +957,7 @@ exposed Function get ``` ```4d -// declare a shared singleton function +// declara una función singleton compartida shared singleton Class constructor() exposed Function ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/REST/authUsers.md b/i18n/es/docusaurus-plugin-content-docs/version-21/REST/authUsers.md index ceccb568517c05..2091b0329a655e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/REST/authUsers.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/REST/authUsers.md @@ -18,7 +18,7 @@ Una sesión se abre después de que el usuario haya iniciado sesión correctamen :::note Compatibilidad -El modo de inicio de sesión heredado basado en el método base `On REST Authentication` está **obsoleto** a partir de 4D 20 R6. Ahora se recomienda [utilizar el **modo Force login**](../ORDA/privileges.md#rolesjson-file) (activado automáticamente en nuevos proyectos) e implementar la función [`ds.authentify()`](#function-authentify). En proyectos convertidos, [un botón en la caja de diálogo de Parámetros](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) le ayudará a actualizar su configuración. En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](../WebServer/qodly-studio.md#force-login) en el panel de Privilegios. +El modo de inicio de sesión heredado basado en el método base `On REST Authentication` está **obsoleto** a partir de 4D 20 R6. Ahora se recomienda [utilizar el **modo Force login**](../ORDA/privileges.md#rolesjson-file) (activado automáticamente en nuevos proyectos) e implementar la función [`ds.authentify()`](#function-authentify). En proyectos convertidos, [un botón en la caja de diálogo de Parámetros](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) le ayudará a actualizar su configuración. En Qodly Studio for 4D, el modo se puede definir utilizando la opción [**Forzar inicio de sesión**](https://developer.4d.com/qodly/4DQodlyPro/force-login) en el panel de Privilegios. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md index 9cf06809fc9a03..37cded2c5b2d66 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-import-document.md @@ -76,7 +76,7 @@ El parámetro opcional *paramObj* permite definir las propiedades del documento - La importación de archivos en formatos .xslx, .csv y .sjs es **asíncrona**. Con estos formatos, debe utilizar el atributo `formula` si desea iniciar una acción al final del procesamiento del documento. - Al importar un archivo con formato Microsoft Excel a un documento 4D View Pro, algunos parámetros pueden perderse. Puede verificar su configuración con [esta lista de SpreadJS](https://developer.mescius.com/spreadjs/docs/excelimpexp/excelexport). - Para más información sobre el formato CSV y los valores separados por delimitadores en general, ver [este artículo en Wikipedia](https://en.wikipedia.org/wiki/Delimiter-separated_values) -- Se recomienda utilizar el objeto *excelOptions* al importar en formato ".xlsx". Make sure to not mix this object with legacy first level property *password* to avoid potiental issues. +- Se recomienda utilizar el objeto *excelOptions* al importar en formato ".xlsx". Asegúrese de no mezclar este objeto con la propiedad heredada de primer nivel *password* para evitar problemas potenciales. - La función callback especificada en el atributo `formula` se activa después de que todas las [funciones personalizadas 4D](../formulas.md#4d-functions) dentro del contenido importado hayan completado sus cálculos. This ensures that any dependent processes, such as document modifications or exports, are performed only after all formula-based computations are fully resolved. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md index 9e7eb901643b46..637b01623e1567 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md @@ -57,7 +57,7 @@ Puede pasar un objeto para definir cómo se gestionan los siguientes atributos d | anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | | secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | | fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | -| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. If a stylesheet with a automatic border collapse setting is reapplied after the import operation, the setting will be ignored. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | +| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. Si se vuelve a aplicar una hoja de estilo con un ajuste de colapso automático de bordes después de la operación de importación, se ignorará el ajuste. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | | preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | | htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | | importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md index 6b906f3803a2bf..dfff1b193852c3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/managing-formulas.md @@ -95,17 +95,17 @@ Por ejemplo, para insertar el número de página en el pie de página: Cuando se utiliza en una fórmula dentro de la tabla, la palabra clave **This** da acceso a diferentes datos según el contexto: -| **Contexto** | **Expression** | **Tipo** | **Devuelve** | -| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| En cualquier sitio | [This](../commands/this.md).table | Object | Tabla actual | -| | [This](../commands/this.md).row | Object | Current table row element | -| | [This](../commands/this.md).rowIndex | Number | Índice de la línea actual, a partir de 1 | -| Cuando se ha definido una fuente de datos para la tabla | [This](../commands/this.md).table.dataSource | Objet (fórmula) | Fuente de datos como fórmula | -| | [This](../commands/this.md).tableData | Collection o Entity selection (por lo general) | table.dataSource evaluada | -| En cada fila de datos cuando una fuente de datos tabla devuelve una colección o una selección de entidades | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | -| | [This](../commands/this.md).itemIndex | Number | Índice del elemento actual en la colección o selección de entidades, a partir de 0 | -| In any row (except header rows) when a table datasource returns a collection or an entity selection | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    Esta expresión devuelve el mismo tipo de valor que la expresión **This.tableData**. | -| In a break row | [This](../commands/this.md).breakItems | Collection o entity selection | Items of the collection or entity selection displayed in the rows between:
    • the current break row and the previous break row of the same level (or the start of the table) if the break row(s) are displayed after the data row.
    • the current break and the next break row of the same level (or the end of the table) if the break row(s) are displayed before the data row.
    | +| **Contexto** | **Expression** | **Tipo** | **Devuelve** | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| En cualquier sitio | [This](../commands/this.md).table | Object | Tabla actual | +| | [This](../commands/this.md).row | Object | Current table row element | +| | [This](../commands/this.md).rowIndex | Number | Índice de la línea actual, a partir de 1 | +| Cuando se ha definido una fuente de datos para la tabla | [This](../commands/this.md).table.dataSource | Objet (fórmula) | Fuente de datos como fórmula | +| | [This](../commands/this.md).tableData | Collection o Entity selection (por lo general) | table.dataSource evaluada | +| En cada fila de datos cuando una fuente de datos tabla devuelve una colección o una selección de entidades | [This](../commands/this.md).item.xxx | Cualquiera | Mapped to each item of the table datasource collection or entity selection, for example **This.item.firstName** if the associated entity has the *firstName* attribute | +| | [This](../commands/this.md).itemIndex | Number | Índice del elemento actual en la colección o selección de entidades, a partir de 0 | +| En cualquier línea (excepto en las líneas de encabezado) cuando una fuente de datos tabla devuelve una colección o una selección de entidades | [This](../commands/this.md).previousItems | Collection o entity selection | Items displayed on the pages before the bottom carry over row (if any) or before the row of the expression, including the page where is displayed the row containing the expression.
    Esta expresión devuelve el mismo tipo de valor que la expresión **This.tableData**. | +| In a break row | [This](../commands/this.md).breakItems | Collection o entity selection | Items of the collection or entity selection displayed in the rows between:
    • the current break row and the previous break row of the same level (or the start of the table) if the break row(s) are displayed after the data row.
    • the current break and the next break row of the same level (or the end of the table) if the break row(s) are displayed before the data row.
    | En cualquier otro contexto, estas expresiones devolverán *undefined*. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index b49cfefe64375a..a95cc219922320 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -10,7 +10,7 @@ Un desarrollador 4D puede implementar fácilmente estas paletas en su aplicació ## Instalación y documentación -4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). 4D Write Pro Interface source files are [provided on Github](https://github.com/4d/4D-WritePro-Interface). +4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). Los archivos fuente de 4D Write Pro Interface están [disponibles en Github](https://github.com/4d/4D-WritePro-Interface). La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. Encontrará a continuación: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/REST/authUsers.md b/i18n/fr/docusaurus-plugin-content-docs/current/REST/authUsers.md index 71ec910a321054..beaaf5033918d5 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/REST/authUsers.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/REST/authUsers.md @@ -18,7 +18,7 @@ Une session est ouverte après que l'utilisateur a été connecté avec succès :::note Compatibilité -L'ancien mode de connexion basé sur la méthode base `On REST Authentication` est **déprécié** à partir de 4D 20 R6. Dans les projets convertis, [un bouton dans la boîte de dialogue des Paramètres](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) vous aide à mettre à niveau votre configuration. Il est maintenant recommandé d'[utiliser le **mode Force login**](../ORDA/privileges.md#fichier-rolesjson) (automatiquement activé dans les nouveaux projets) et de mettre en œuvre la fonction [`ds.authentify()`](#function-authentify). Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](../WebServer/qodly-studio.md#force-login) dans l'onglet Privileges. +L'ancien mode de connexion basé sur la méthode base `On REST Authentication` est **déprécié** à partir de 4D 20 R6. Dans les projets convertis, [un bouton dans la boîte de dialogue des Paramètres](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) vous aide à mettre à niveau votre configuration. Il est maintenant recommandé d'[utiliser le **mode Force login**](../ORDA/privileges.md#fichier-rolesjson) (automatiquement activé dans les nouveaux projets) et de mettre en œuvre la fonction [`ds.authentify()`](#function-authentify). Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](https://developer.4d.com/qodly/4DQodlyPro/force-login) dans l'onglet Privileges. ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index 1646f07607eac8..fa8da50898e17a 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -51,7 +51,7 @@ Upload a file that can be used across various endpoints. - **Assistants API:** Supports specific file types (see Assistants Tools guide) - **Chat Completions API:** PDFs are only supported -#### Exemple +#### Sychronous example ```4d var $file:=File("/RESOURCES/training-data.jsonl") @@ -71,6 +71,37 @@ If ($result.success) End if ``` +#### Exemple asynchrone + +Since file uploads can be long operations (especially for large files up to 512 MB), it's recommended to use asynchronous calls to avoid blocking your application. See [Asynchronous Call](../asynchronous-call.md) for more details. + +```4d +var $file:=File("/RESOURCES/large-training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.onTerminate:=Formula(MyFileUploadCallback($1)) + +// This call returns immediately without blocking +$client.files.create($file; "fine-tune"; $params) +``` + +The callback function receives an [OpenAIFileResult](OpenAIFileResult.md): + +```4d +// MyFileUploadCallback +#DECLARE($result: cs.AIKit.OpenAIFileResult) + +If ($result.success) + var $uploadedFile:=$result.file + + ALERT("File uploaded successfully: "+$uploadedFile.filename) + // Store the file ID for later use + Form.uploadedFileId:=$uploadedFile.id +Else + ALERT("Upload failed: "+Formula(JSON Stringify($result.errors))) +End if +``` + ### retrieve() **retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md index 0d01dfc46e883a..83be4005d95245 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md @@ -165,7 +165,7 @@ Dans les versions précédentes, le fichier `roles.json` n'était pas créé par :::note Qodly Studio -Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](../WebServer/qodly-studio.md#force-login) dans l'onglet Privileges. +Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](https://developer.4d.com/qodly/4DQodlyPro/force-login) dans l'onglet Privileges. ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md index 662926c0cc5714..c36a93c732f654 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md @@ -18,7 +18,7 @@ Une session est ouverte après que l'utilisateur a été connecté avec succès :::note Compatibilité -L'ancien mode de connexion basé sur la méthode base `On REST Authentication` est **déprécié** à partir de 4D 20 R6. Dans les projets convertis, [un bouton dans la boîte de dialogue des Paramètres](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) vous aide à mettre à niveau votre configuration. Il est maintenant recommandé d'[utiliser le **mode Force login**](../ORDA/privileges.md#fichier-rolesjson) (automatiquement activé dans les nouveaux projets) et de mettre en œuvre la fonction [`ds.authentify()`](#function-authentify). Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](../WebServer/qodly-studio.md#force-login) dans l'onglet Privileges. +L'ancien mode de connexion basé sur la méthode base `On REST Authentication` est **déprécié** à partir de 4D 20 R6. Dans les projets convertis, [un bouton dans la boîte de dialogue des Paramètres](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) vous aide à mettre à niveau votre configuration. Il est maintenant recommandé d'[utiliser le **mode Force login**](../ORDA/privileges.md#fichier-rolesjson) (automatiquement activé dans les nouveaux projets) et de mettre en œuvre la fonction [`ds.authentify()`](#function-authentify). Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](https://developer.4d.com/qodly/4DQodlyPro/force-login) dans l'onglet Privileges. ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/REST/authUsers.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/REST/authUsers.md index 662926c0cc5714..c36a93c732f654 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/REST/authUsers.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/REST/authUsers.md @@ -18,7 +18,7 @@ Une session est ouverte après que l'utilisateur a été connecté avec succès :::note Compatibilité -L'ancien mode de connexion basé sur la méthode base `On REST Authentication` est **déprécié** à partir de 4D 20 R6. Dans les projets convertis, [un bouton dans la boîte de dialogue des Paramètres](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) vous aide à mettre à niveau votre configuration. Il est maintenant recommandé d'[utiliser le **mode Force login**](../ORDA/privileges.md#fichier-rolesjson) (automatiquement activé dans les nouveaux projets) et de mettre en œuvre la fonction [`ds.authentify()`](#function-authentify). Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](../WebServer/qodly-studio.md#force-login) dans l'onglet Privileges. +L'ancien mode de connexion basé sur la méthode base `On REST Authentication` est **déprécié** à partir de 4D 20 R6. Dans les projets convertis, [un bouton dans la boîte de dialogue des Paramètres](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) vous aide à mettre à niveau votre configuration. Il est maintenant recommandé d'[utiliser le **mode Force login**](../ORDA/privileges.md#fichier-rolesjson) (automatiquement activé dans les nouveaux projets) et de mettre en œuvre la fonction [`ds.authentify()`](#function-authentify). Dans Qodly Studio for 4D, le mode peut être défini en utilisant l'option [**Force login**](https://developer.4d.com/qodly/4DQodlyPro/force-login) dans l'onglet Privileges. ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/REST/authUsers.md b/i18n/ja/docusaurus-plugin-content-docs/current/REST/authUsers.md index e8c77d4aa0bc56..5036a5b85ab9a1 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/REST/authUsers.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/REST/authUsers.md @@ -18,7 +18,7 @@ When [scalable sessions are enabled](WebServer/sessions.md#enabling-web-sessions :::note 互換性 -4D 20 R6 以降、`On REST Authentication` データベースメソッドに基づく従来のログインモードは **非推奨** となりました。 現在は、[**強制ログインモード**](../ORDA/privileges.md#rolesjson-ファイル) の使用 (新規プロジェクトでは自動的に有効) および [`ds.authentify()`関数](#function-authentify) の実装が推奨されています。 変換されたプロジェクトでは、[設定ダイアログボックスのボタン](../settings/web.md#dsauthentify-関数によって-rest認証を有効化する) を使用して、構成をアップグレードすることができます。 Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](../WebServer/qodly-studio.md#force-login) を使用してログインモードを設定することができます。 +4D 20 R6 以降、`On REST Authentication` データベースメソッドに基づく従来のログインモードは **非推奨** となりました。 現在は、[**強制ログインモード**](../ORDA/privileges.md#rolesjson-ファイル) の使用 (新規プロジェクトでは自動的に有効) および [`ds.authentify()`関数](#function-authentify) の実装が推奨されています。 変換されたプロジェクトでは、[設定ダイアログボックスのボタン](../settings/web.md#dsauthentify-関数によって-rest認証を有効化する) を使用して、構成をアップグレードすることができます。 Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](https://developer.4d.com/qodly/4DQodlyPro/force-login) を使用してログインモードを設定することができます。 ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index 6bb52b12e6f60d..587d8b3ad6d584 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -51,7 +51,7 @@ Upload a file that can be used across various endpoints. - **Assistants API:** Supports specific file types (see Assistants Tools guide) - **Chat Completions API:** PDFs are only supported -#### 例題 +#### Sychronous example ```4d var $file:=File("/RESOURCES/training-data.jsonl") @@ -71,6 +71,37 @@ If ($result.success) End if ``` +#### 非同期の例 + +Since file uploads can be long operations (especially for large files up to 512 MB), it's recommended to use asynchronous calls to avoid blocking your application. See [Asynchronous Call](../asynchronous-call.md) for more details. + +```4d +var $file:=File("/RESOURCES/large-training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.onTerminate:=Formula(MyFileUploadCallback($1)) + +// This call returns immediately without blocking +$client.files.create($file; "fine-tune"; $params) +``` + +The callback function receives an [OpenAIFileResult](OpenAIFileResult.md): + +```4d +// MyFileUploadCallback +#DECLARE($result: cs.AIKit.OpenAIFileResult) + +If ($result.success) + var $uploadedFile:=$result.file + + ALERT("File uploaded successfully: "+$uploadedFile.filename) + // Store the file ID for later use + Form.uploadedFileId:=$uploadedFile.id +Else + ALERT("Upload failed: "+Formula(JSON Stringify($result.errors))) +End if +``` + ### retrieve() **retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md index 58042a097bd9f6..e59fbe279356df 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md @@ -166,7 +166,7 @@ exposed Function authenticate($identifier : Text; $password : Text)->$result : T :::note Qodly Studio -Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](../WebServer/qodly-studio.md#force-login) を使用してログインモードを設定することができます。 +Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](https://developer.4d.com/qodly/4DQodlyPro/force-login) を使用してログインモードを設定することができます。 ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md index 3261d080e8448f..030382ad872a89 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md @@ -18,7 +18,7 @@ When [scalable sessions are enabled](WebServer/sessions.md#enabling-web-sessions :::note 互換性 -4D 20 R6 以降、`On REST Authentication` データベースメソッドに基づく従来のログインモードは **非推奨** となりました。 現在は、[**強制ログインモード**](../ORDA/privileges.md#rolesjson-ファイル) の使用 (新規プロジェクトでは自動的に有効) および [`ds.authentify()`関数](#function-authentify) の実装が推奨されています。 変換されたプロジェクトでは、[設定ダイアログボックスのボタン](../settings/web.md#dsauthentify-関数によって-rest認証を有効化する) を使用して、構成をアップグレードすることができます。 Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](../WebServer/qodly-studio.md#force-login) を使用してログインモードを設定することができます。 +4D 20 R6 以降、`On REST Authentication` データベースメソッドに基づく従来のログインモードは **非推奨** となりました。 現在は、[**強制ログインモード**](../ORDA/privileges.md#rolesjson-ファイル) の使用 (新規プロジェクトでは自動的に有効) および [`ds.authentify()`関数](#function-authentify) の実装が推奨されています。 変換されたプロジェクトでは、[設定ダイアログボックスのボタン](../settings/web.md#dsauthentify-関数によって-rest認証を有効化する) を使用して、構成をアップグレードすることができます。 Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](https://developer.4d.com/qodly/4DQodlyPro/force-login) を使用してログインモードを設定することができます。 ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/REST/authUsers.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/REST/authUsers.md index 3261d080e8448f..030382ad872a89 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/REST/authUsers.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/REST/authUsers.md @@ -18,7 +18,7 @@ When [scalable sessions are enabled](WebServer/sessions.md#enabling-web-sessions :::note 互換性 -4D 20 R6 以降、`On REST Authentication` データベースメソッドに基づく従来のログインモードは **非推奨** となりました。 現在は、[**強制ログインモード**](../ORDA/privileges.md#rolesjson-ファイル) の使用 (新規プロジェクトでは自動的に有効) および [`ds.authentify()`関数](#function-authentify) の実装が推奨されています。 変換されたプロジェクトでは、[設定ダイアログボックスのボタン](../settings/web.md#dsauthentify-関数によって-rest認証を有効化する) を使用して、構成をアップグレードすることができます。 Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](../WebServer/qodly-studio.md#force-login) を使用してログインモードを設定することができます。 +4D 20 R6 以降、`On REST Authentication` データベースメソッドに基づく従来のログインモードは **非推奨** となりました。 現在は、[**強制ログインモード**](../ORDA/privileges.md#rolesjson-ファイル) の使用 (新規プロジェクトでは自動的に有効) および [`ds.authentify()`関数](#function-authentify) の実装が推奨されています。 変換されたプロジェクトでは、[設定ダイアログボックスのボタン](../settings/web.md#dsauthentify-関数によって-rest認証を有効化する) を使用して、構成をアップグレードすることができます。 Qodly Studio for 4D では、権限パネルの [**強制ログイン**オプション](https://developer.4d.com/qodly/4DQodlyPro/force-login) を使用してログインモードを設定することができます。 ::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/REST/authUsers.md b/i18n/pt/docusaurus-plugin-content-docs/current/REST/authUsers.md index 3e70a79594c84f..c6224a1a1109d3 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/REST/authUsers.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/REST/authUsers.md @@ -18,7 +18,7 @@ Uma sessão é aberta depois que o usuário é autenticado com sucesso (veja aba :::note Compatibidade -O modo de login legado baseado no método de banco de dados `On REST Authentication` é **obsoleto** a partir de 4D 20 R6. Agora é recomendado [usar o **modo de login forçado**](../ORDA/privileges.md#rolesjson-file) (automaticamente habilitado em novos projetos) e implementar a [função `ds.authentify()`](#function-authentify). Em projetos convertidos, [um botão na caixa de diálogo Configurações](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) o ajudará a atualizar sua configuração. No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](../WebServer/qodly-studio.md#force-login) no painel de Privilégios. +O modo de login legado baseado no método de banco de dados `On REST Authentication` é **obsoleto** a partir de 4D 20 R6. Agora é recomendado [usar o **modo de login forçado**](../ORDA/privileges.md#rolesjson-file) (automaticamente habilitado em novos projetos) e implementar a [função `ds.authentify()`](#function-authentify). Em projetos convertidos, [um botão na caixa de diálogo Configurações](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) o ajudará a atualizar sua configuração. No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](https://developer.4d.com/qodly/4DQodlyPro/force-login) no painel de Privilégios. ::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index a7e66277c7aaa2..21ca534301eddb 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -51,7 +51,7 @@ Upload a file that can be used across various endpoints. - **Assistants API:** Supports specific file types (see Assistants Tools guide) - **Chat Completions API:** PDFs are only supported -#### Exemplo +#### Sychronous example ```4d var $file:=File("/RESOURCES/training-data.jsonl") @@ -71,6 +71,37 @@ If ($result.success) End if ``` +#### Exemplo assíncrono + +Since file uploads can be long operations (especially for large files up to 512 MB), it's recommended to use asynchronous calls to avoid blocking your application. See [Asynchronous Call](../asynchronous-call.md) for more details. + +```4d +var $file:=File("/RESOURCES/large-training-data.jsonl") + +var $params:=cs.AIKit.OpenAIFileParameters.new() +$params.onTerminate:=Formula(MyFileUploadCallback($1)) + +// This call returns immediately without blocking +$client.files.create($file; "fine-tune"; $params) +``` + +The callback function receives an [OpenAIFileResult](OpenAIFileResult.md): + +```4d +// MyFileUploadCallback +#DECLARE($result: cs.AIKit.OpenAIFileResult) + +If ($result.success) + var $uploadedFile:=$result.file + + ALERT("File uploaded successfully: "+$uploadedFile.filename) + // Store the file ID for later use + Form.uploadedFileId:=$uploadedFile.id +Else + ALERT("Upload failed: "+Formula(JSON Stringify($result.errors))) +End if +``` + ### retrieve() **retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md index b8c7045056e46c..909c0a60794fd9 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/ORDA/privileges.md @@ -165,7 +165,7 @@ Em versões anteriores, o arquivo `roles.json` não foi criado por padrão. A pa :::note Qodly Studio -No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](../WebServer/qodly-studio.md#force-login) no painel de Privilégios. +No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](https://developer.4d.com/qodly/4DQodlyPro/force-login) no painel de Privilégios. ::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md index f552e7d35b35e5..eea1c476f49d46 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/REST/authUsers.md @@ -18,7 +18,7 @@ Uma sessão é aberta depois que o usuário é autenticado com sucesso (veja aba :::note Compatibidade -O modo de login legado baseado no método de banco de dados `On REST Authentication` é **obsoleto** a partir de 4D 20 R6. Agora é recomendado [usar o **modo de login forçado**](../ORDA/privileges.md#rolesjson-file) (automaticamente habilitado em novos projetos) e implementar a [função `ds.authentify()`](#function-authentify). Em projetos convertidos, [um botão na caixa de diálogo Configurações](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) o ajudará a atualizar sua configuração. No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](../WebServer/qodly-studio.md#force-login) no painel de Privilégios. +O modo de login legado baseado no método de banco de dados `On REST Authentication` é **obsoleto** a partir de 4D 20 R6. Agora é recomendado [usar o **modo de login forçado**](../ORDA/privileges.md#rolesjson-file) (automaticamente habilitado em novos projetos) e implementar a [função `ds.authentify()`](#function-authentify). Em projetos convertidos, [um botão na caixa de diálogo Configurações](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) o ajudará a atualizar sua configuração. No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](https://developer.4d.com/qodly/4DQodlyPro/force-login) no painel de Privilégios. ::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/REST/authUsers.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/REST/authUsers.md index f552e7d35b35e5..eea1c476f49d46 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/REST/authUsers.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/REST/authUsers.md @@ -18,7 +18,7 @@ Uma sessão é aberta depois que o usuário é autenticado com sucesso (veja aba :::note Compatibidade -O modo de login legado baseado no método de banco de dados `On REST Authentication` é **obsoleto** a partir de 4D 20 R6. Agora é recomendado [usar o **modo de login forçado**](../ORDA/privileges.md#rolesjson-file) (automaticamente habilitado em novos projetos) e implementar a [função `ds.authentify()`](#function-authentify). Em projetos convertidos, [um botão na caixa de diálogo Configurações](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) o ajudará a atualizar sua configuração. No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](../WebServer/qodly-studio.md#force-login) no painel de Privilégios. +O modo de login legado baseado no método de banco de dados `On REST Authentication` é **obsoleto** a partir de 4D 20 R6. Agora é recomendado [usar o **modo de login forçado**](../ORDA/privileges.md#rolesjson-file) (automaticamente habilitado em novos projetos) e implementar a [função `ds.authentify()`](#function-authentify). Em projetos convertidos, [um botão na caixa de diálogo Configurações](../settings/web.md#activate-rest-authentication-through-dsauthentify-function) o ajudará a atualizar sua configuração. No Qodly Studio para 4D, o modo pode ser definido usando a opção [**Forçar login**](https://developer.4d.com/qodly/4DQodlyPro/force-login) no painel de Privilégios. ::: From 9ed22e0b542513a8245066bc9578269bf3235cdc Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Tue, 25 Nov 2025 10:26:34 +0100 Subject: [PATCH 47/75] get --- docs/commands-legacy/register-client.md | 4 ++-- .../version-20-R10/commands-legacy/register-client.md | 2 +- versioned_docs/version-21/commands-legacy/register-client.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/commands-legacy/register-client.md b/docs/commands-legacy/register-client.md index cf860b712fbe7e..13ae8aed658440 100644 --- a/docs/commands-legacy/register-client.md +++ b/docs/commands-legacy/register-client.md @@ -25,7 +25,7 @@ displayed_sidebar: docs ## Description -The **REGISTER CLIENT** command “registers” a 4D client station with the name specified in *clientName* on 4D Server, so as to allow other clients or possibly 4D Server (by using stored methods) to execute methods on it by using the [`EXECUTE ON CLIENT`](execute-on-client.md) command. Once it is registered, a 4D client can then execute one or more methods for other clients. +The **REGISTER CLIENT** command "registers" a 4D client station with the name specified in *clientName* on 4D Server, so as to allow other clients or possibly 4D Server (by using stored methods) to execute methods on it by using the [`EXECUTE ON CLIENT`](execute-on-client.md) command. Once it is registered, a 4D client can then execute one or more methods for other clients. **Notes:** @@ -64,7 +64,7 @@ var PrClientList : Integer  PrClientList:=New process("4D Client List";32000;"List of registered clients") ``` -3) The method 4D Client List allows you to recuperate all the registered 4D clients and those that can receive messages: +3) The 4D Client List method allows you to get all the registered 4D clients and those that can receive messages: ```4d var $Ref; $p : Integer diff --git a/versioned_docs/version-20-R10/commands-legacy/register-client.md b/versioned_docs/version-20-R10/commands-legacy/register-client.md index 7efbc44fbcd401..45b93e3b7222b5 100644 --- a/versioned_docs/version-20-R10/commands-legacy/register-client.md +++ b/versioned_docs/version-20-R10/commands-legacy/register-client.md @@ -57,7 +57,7 @@ In the following example, we are going to create a small messaging system that a  PrClientList:=New process("4D Client List";32000;"List of registered clients") ``` -3) The method 4D Client List allows you to recuperate all the registered 4D clients and those that can receive messages: +3) The 4D Client List method allows you to get all the registered 4D clients and those that can receive messages: ```4d  If(Application type=4D Remote Mode) diff --git a/versioned_docs/version-21/commands-legacy/register-client.md b/versioned_docs/version-21/commands-legacy/register-client.md index cf860b712fbe7e..acb9991ba4f192 100644 --- a/versioned_docs/version-21/commands-legacy/register-client.md +++ b/versioned_docs/version-21/commands-legacy/register-client.md @@ -64,7 +64,7 @@ var PrClientList : Integer  PrClientList:=New process("4D Client List";32000;"List of registered clients") ``` -3) The method 4D Client List allows you to recuperate all the registered 4D clients and those that can receive messages: +3) The 4D Client List method allows you to get all the registered 4D clients and those that can receive messages: ```4d var $Ref; $p : Integer From 80da64339ee56bf5547fc4a078164740df675a68 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Tue, 25 Nov 2025 11:19:31 +0100 Subject: [PATCH 48/75] fluentUI on binary --- docs/FormEditor/forms.md | 4 ++-- versioned_docs/version-21/FormEditor/forms.md | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/FormEditor/forms.md b/docs/FormEditor/forms.md index 1bb9f5f24bc3ac..7ffaca89c52ab0 100644 --- a/docs/FormEditor/forms.md +++ b/docs/FormEditor/forms.md @@ -116,9 +116,9 @@ Fluent UI support is currently in the Developer Preview phase. It should not be ::: -:::info macOS +:::info Availability -This feature can only be used on Windows. On macOS, it is ignored. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: diff --git a/versioned_docs/version-21/FormEditor/forms.md b/versioned_docs/version-21/FormEditor/forms.md index 1bb9f5f24bc3ac..79f1e63453313b 100644 --- a/versioned_docs/version-21/FormEditor/forms.md +++ b/versioned_docs/version-21/FormEditor/forms.md @@ -116,12 +116,13 @@ Fluent UI support is currently in the Developer Preview phase. It should not be ::: -:::info macOS +:::info Availability -This feature can only be used on Windows. On macOS, it is ignored. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: + :::tip Related blog post [Modernize your 4D interfaces with Fluent UI](https://blog.4d.com/modernize-your-4d-interfaces-with-fluent-ui) From a3ce55bd637b26c6f20f6341d437e58bd599946c Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 26 Nov 2025 09:51:31 +0100 Subject: [PATCH 49/75] New Crowdin updates (#3007) * New translations forms.md (French) * New translations forms.md (French) * New translations forms.md (Spanish) * New translations forms.md (Spanish) * New translations forms.md (Japanese) * New translations forms.md (Japanese) * New translations forms.md (Portuguese, Brazilian) * New translations forms.md (Portuguese, Brazilian) * New translations openai.md (Japanese) * New translations openaifile.md (Japanese) --- .../current/FormEditor/forms.md | 4 ++-- .../version-21/FormEditor/forms.md | 4 ++-- .../current/FormEditor/forms.md | 4 ++-- .../version-21/FormEditor/forms.md | 4 ++-- .../current/FormEditor/forms.md | 4 ++-- .../current/aikit/Classes/OpenAI.md | 16 ++++++++-------- .../current/aikit/Classes/OpenAIFile.md | 2 +- .../version-21/FormEditor/forms.md | 4 ++-- .../current/FormEditor/forms.md | 4 ++-- .../version-21/FormEditor/forms.md | 4 ++-- 10 files changed, 25 insertions(+), 25 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md index 3372865a4eb79b..e55a538ddc4a02 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md @@ -112,9 +112,9 @@ La compatibilidad con Fluent UI se encuentra actualmente en fase Developer Previ ::: -:::info macOS +:::info Disponibilidad -Esta funcionalidad sólo se puede utilizar en Windows. En macOS, se ignora. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md index 3372865a4eb79b..e55a538ddc4a02 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md @@ -112,9 +112,9 @@ La compatibilidad con Fluent UI se encuentra actualmente en fase Developer Previ ::: -:::info macOS +:::info Disponibilidad -Esta funcionalidad sólo se puede utilizar en Windows. En macOS, se ignora. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/fr/docusaurus-plugin-content-docs/current/FormEditor/forms.md index 7b7946358c6eac..0c5ab01f402f6c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/FormEditor/forms.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/FormEditor/forms.md @@ -112,9 +112,9 @@ La prise en charge de Fluent UI est actuellement en phase d'aperçu pour les dé ::: -:::info macOS +:::info Disponibilité -Cette fonctionnalité ne peut être utilisée que sous Windows. Sous macOS, elle est ignorée. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md index 7b7946358c6eac..0c5ab01f402f6c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md @@ -112,9 +112,9 @@ La prise en charge de Fluent UI est actuellement en phase d'aperçu pour les dé ::: -:::info macOS +:::info Disponibilité -Cette fonctionnalité ne peut être utilisée que sous Windows. Sous macOS, elle est ignorée. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md index c439e23e779f13..810beed2ab330c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md @@ -112,9 +112,9 @@ Fluent UI support is currently in the Developer Preview phase. 本番環境で ::: -:::info macOS +:::info 利用可能性 -This feature can only be used on Windows. On macOS, it is ignored. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md index fa5cac9b16540a..e7600f787ec75f 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md @@ -60,14 +60,14 @@ $client.baseURL:="https://server.ai" API はOpenAI のサービスとシームレスにやりとりすることを可能にする複数のリソースへのアクセスを提供します。 それぞれのリソースは専用のAPI クラスにカプセル化されており、様々な機能と対話するための構造化された、直感的な方法を提供しています。 -| プロパティ名 | 型 | 説明 | -| ------------- | ----------------------------------------------- | ---------------------------------------- | -| `models` | [OpenAIModelsAPI](OpenAIModelsAPI.md) | Models API へのアクセス。 | -| `chat` | [OpenAIChatAPI](OpenAIChatAPI.md) | Chat API へのアクセス。 | -| `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | 画像 API へのアクセス。 | -| `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | モデレーションAPI へのアクセス。 | -| `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | 埋め込みAPI へのアクセス。 | -| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Access to the Files API. | +| プロパティ名 | 型 | 説明 | +| ------------- | ----------------------------------------------- | ------------------ | +| `models` | [OpenAIModelsAPI](OpenAIModelsAPI.md) | Models API へのアクセス。 | +| `chat` | [OpenAIChatAPI](OpenAIChatAPI.md) | Chat API へのアクセス。 | +| `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | 画像 API へのアクセス。 | +| `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | モデレーションAPI へのアクセス。 | +| `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | 埋め込みAPI へのアクセス。 | +| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Files API へのアクセス。 | ### 使用例 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md index 2d785bfd5cb539..2acc3d46976455 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md @@ -5,7 +5,7 @@ title: OpenAIFile # OpenAIFile -The `OpenAIFile` class represents a file object in the OpenAI API. Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. +`OpenAIFile` クラスはOpen AI API 内でのファイルオブジェクトを表します。 Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. ## プロパティ diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md index c439e23e779f13..810beed2ab330c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md @@ -112,9 +112,9 @@ Fluent UI support is currently in the Developer Preview phase. 本番環境で ::: -:::info macOS +:::info 利用可能性 -This feature can only be used on Windows. On macOS, it is ignored. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/pt/docusaurus-plugin-content-docs/current/FormEditor/forms.md index e0f5a4167e9998..a8f2ebed15c8d0 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/FormEditor/forms.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/FormEditor/forms.md @@ -112,9 +112,9 @@ Fluent UI support is currently in the Developer Preview phase. Não deve ser usa ::: -:::info macOS +:::info Disponibilidade -This feature can only be used on Windows. On macOS, it is ignored. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md index e0f5a4167e9998..a8f2ebed15c8d0 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md @@ -112,9 +112,9 @@ Fluent UI support is currently in the Developer Preview phase. Não deve ser usa ::: -:::info macOS +:::info Disponibilidade -This feature can only be used on Windows. On macOS, it is ignored. +This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. ::: From a18ca5aa4a4ac8f7239f899d79be05b596e67e0b Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 26 Nov 2025 11:51:52 +0100 Subject: [PATCH 50/75] Feature/order by vectors (#3008) * first try * Update updates.md * final * Update updates.md * after closure --- docs/API/DataClassClass.md | 16 +++++++++++++++- docs/API/EntitySelectionClass.md | 2 ++ docs/Notes/updates.md | 2 +- docs/REST/$filter.md | 4 ++-- docs/REST/$orderby.md | 9 ++++++++- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/docs/API/DataClassClass.md b/docs/API/DataClassClass.md index edcd003a94a757..5ec725310b0f81 100644 --- a/docs/API/DataClassClass.md +++ b/docs/API/DataClassClass.md @@ -934,7 +934,7 @@ When using a constant value, the following rules must be respected: * **date** type constants: "YYYY-MM-DD" format * **null** constant: using the "null" keyword will find **null** and **undefined** properties. * in case of a query with an IN comparator, *value* must be a collection, or values matching the type of the attribute path between \[ ] separated by commas (for strings, `"` characters must be escaped with `\`). - * **object**: only [4D.Vector](../API/VectorClass.md) objects are supported, in the context of **vector similarity queries** (*attributePath* must also contain valid 4D.Vector objects). + * **object**: only [4D.Vector](../API/VectorClass.md) objects are supported, in the context of [**vector similarity queries**](#query-by-vector-similarity) (*attributePath* must also contain valid 4D.Vector objects). * **logicalOperator**: used to join multiple conditions in the query (optional). You can use one of the following logical operators (either the name or the symbol can be used): |Conjunction|Symbol(s)| @@ -1206,6 +1206,20 @@ var $comparisonVector := {vector: $myVector; metric: mk euclidean; threshold: 1. var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) ``` +The **order by** statement is supported in the query string so that entities in the resulting entity selection are sorted by similarity. For example: + +```4d +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) + //default order, the first entity is the most similar +``` + +If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: + +```4d +var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc; / + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by +``` + See [more examples below](#example-4-2) (examples 4 and 5). :::tip Related blog posts diff --git a/docs/API/EntitySelectionClass.md b/docs/API/EntitySelectionClass.md index 456b507bdcd585..b94931d5caae23 100644 --- a/docs/API/EntitySelectionClass.md +++ b/docs/API/EntitySelectionClass.md @@ -1800,6 +1800,8 @@ In this example, the "marks" object field in the **Students** dataClass contains |Release|Changes| |---|---| +|21 R2|Support of order by with 4D.Vector searches| +|21|Support 4D.Vector objects| |17 R6|Support of Formula parameters| |17 R5|Support of placeholders for values| |17|Added| diff --git a/docs/Notes/updates.md b/docs/Notes/updates.md index 4ee055986374c1..f75b102a36f054 100644 --- a/docs/Notes/updates.md +++ b/docs/Notes/updates.md @@ -10,8 +10,8 @@ Read [**What’s new in 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2 #### Highlights - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). +- Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. - - [**Fixed bug list**](https://bugs.4d.fr/fixedbugslist?version=21_R2): list of all bugs that have been fixed in 4D 21 R2. diff --git a/docs/REST/$filter.md b/docs/REST/$filter.md index 50623cde869c9e..ed68fa8afb3d8f 100644 --- a/docs/REST/$filter.md +++ b/docs/REST/$filter.md @@ -5,7 +5,7 @@ title: $filter -Allows to query the data in a dataclass or method *(e.g.*, `$filter="firstName!='' AND salary>30000"`) +Allows to query the data in a dataclass or method (*e.g.*, `$filter="firstName!='' AND salary>30000"`) ## Description @@ -105,7 +105,7 @@ The *vectorComparison* parameter is a collection of the following elements: |[].metric|Text|Optional. [Vector computation](../API/VectorClass.md#understanding-the-different-vector-computations) to use for the query. Supported values:
  • "cosine" (default if omitted): calculates the cosine similarity between vectors.
  • "dot": calculates the dot similarity of vectors.
  • "euclidean": calculates the Euclidean distance between vectors.| |[].threshold|Real|Optional (default: 0.5). A threshold value used to filter vector comparisons based on their cosine, dot or euclidean similarity score according to the selected "metric". It is highly recommended to choose a similarity that best fits your specific use case for optimal results.| -Only a subset of **comparator** symbols are supported with vector comparisons. Note that they compare results to the threshold value: +Only a subset of **comparator** symbols is supported with vector comparisons. Note that they compare results to the threshold value: |Comparator| Symbol(s)| Comment| |---|---|---| diff --git a/docs/REST/$orderby.md b/docs/REST/$orderby.md index c3fd5e4e01317e..4e035a519a155a 100644 --- a/docs/REST/$orderby.md +++ b/docs/REST/$orderby.md @@ -11,7 +11,7 @@ Sorts the data returned by the attribute and sorting order defined (*e.g.*, `$or `$orderby` orders the entities returned by the REST request. For each attribute, you specify the order as `ASC` (or `asc`) for ascending order and `DESC` (`desc`) for descending order. By default, the data is sorted in ascending order. If you want to specify multiple attributes, you can delimit them with a comma, *e.g.*, `$orderby="lastName desc, firstName asc"`. -## Example +## Example 1 In this example, we retrieve entities and sort them at the same time: @@ -49,3 +49,10 @@ The example below sorts the entity set by lastName attribute in ascending order: } ``` +## Example 2 + +`$orderby` statement is supported in [vector similarity filters](./$filter.md#vector-similarity): + +``` +GET /rest/Person?$filter="Vector>=:1"&$params=[{"vector":[1,2,3],"metric":"cosine","threshold":0.95}]&$orderby="Vector desc" +``` \ No newline at end of file From e2f880668e8a1fbdc52037130f6d8e2a1070f251 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 27 Nov 2025 10:13:50 +0100 Subject: [PATCH 51/75] New Crowdin updates (#3010) * New translations dataclassclass.md (French) * New translations entityselectionclass.md (French) * New translations updates.md (French) * New translations $filter.md (French) * New translations $orderby.md (French) * New translations dataclassclass.md (Spanish) * New translations entityselectionclass.md (Spanish) * New translations updates.md (Spanish) * New translations $filter.md (Spanish) * New translations $orderby.md (Spanish) * New translations dataclassclass.md (Japanese) * New translations entityselectionclass.md (Japanese) * New translations updates.md (Japanese) * New translations $filter.md (Japanese) * New translations $orderby.md (Japanese) * New translations openaifile.md (Japanese) * New translations openaifiledeletedresult.md (Japanese) * New translations openaifilelistparameters.md (Japanese) * New translations openaifileparameters.md (Japanese) * New translations dataclassclass.md (Portuguese, Brazilian) * New translations entityselectionclass.md (Portuguese, Brazilian) * New translations updates.md (Portuguese, Brazilian) * New translations $filter.md (Portuguese, Brazilian) * New translations $orderby.md (Portuguese, Brazilian) --- .../current/API/DataClassClass.md | 16 ++++++++++++- .../current/API/EntitySelectionClass.md | 12 ++++++---- .../current/Notes/updates.md | 3 +-- .../current/REST/$filter.md | 4 ++-- .../current/REST/$orderby.md | 9 ++++++- .../current/API/DataClassClass.md | 16 ++++++++++++- .../current/API/EntitySelectionClass.md | 12 ++++++---- .../current/Notes/updates.md | 3 +-- .../current/REST/$filter.md | 4 ++-- .../current/REST/$orderby.md | 9 ++++++- .../current/API/DataClassClass.md | 16 ++++++++++++- .../current/API/EntitySelectionClass.md | 12 ++++++---- .../current/Notes/updates.md | 3 +-- .../current/REST/$filter.md | 4 ++-- .../current/REST/$orderby.md | 9 ++++++- .../current/aikit/Classes/OpenAIFile.md | 24 +++++++++---------- .../aikit/Classes/OpenAIFileDeletedResult.md | 14 +++++------ .../aikit/Classes/OpenAIFileListParameters.md | 14 +++++------ .../aikit/Classes/OpenAIFileParameters.md | 6 ++--- .../current/API/DataClassClass.md | 16 ++++++++++++- .../current/API/EntitySelectionClass.md | 12 ++++++---- .../current/Notes/updates.md | 3 +-- .../current/REST/$filter.md | 4 ++-- .../current/REST/$orderby.md | 9 ++++++- 24 files changed, 161 insertions(+), 73 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/DataClassClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/DataClassClass.md index 08f4b68da0bcd0..75f992ea902db8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/DataClassClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/DataClassClass.md @@ -945,7 +945,7 @@ Las fórmulas en las consultas pueden recibir parámetros a través de $1. Este - Constantes de tipo **date**: formato "YYYY-MM-DD" - Constantes **null**: utilizando la palabra clave "null" se encontrarán las propiedades **null** y **undefined**. - en el caso de una búsqueda con un comparador IN, *value* debe ser una colección, o los valores que coincidan con el tipo de la ruta del atributo entre \[ ] separados por comas (para las cadenas, los caracteres `"` deben escaparse con `\`). - - **objeto**: sólo se admiten los objetos [4D.Vector](../API/VectorClass.md), en el contexto de **consultas de similaridad vectorial** (*attributePath* también debe contener objetos 4D.Vector válidos). + - **object**: only [4D.Vector](../API/VectorClass.md) objects are supported, in the context of [**vector similarity queries**](#query-by-vector-similarity) (*attributePath* must also contain valid 4D.Vector objects). - **logicalOperator**: utilizado para unir condiciones múltiples en la búsqueda (opcional). Puede utilizar uno de los siguientes operadores lógicos (se puede utilizar el nombre o el símbolo): | Conjunción | Símbolo(s) | @@ -1211,6 +1211,20 @@ var $comparisonVector := {vector: $myVector; metric: mk euclidean; threshold: 1. var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) ``` +The **order by** statement is supported in the query string so that entities in the resulting entity selection are sorted by similarity. Por ejemplo: + +```4d +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) + //default order, the first entity is the most similar +``` + +If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: + +```4d +var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc; / + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by +``` + Ver [más ejemplos a continuación](#example-4-2) (ejemplos 4 y 5). :::tip Entradas de blog relacionadas diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md index 0d677beead4a4d..b6688c3d03f960 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md @@ -1741,11 +1741,13 @@ En este ejemplo, el campo objeto "marks" de la dataClass **Students** contiene l
    Historia -| Lanzamiento | Modificaciones | -| ----------- | ------------------------------------------ | -| 17 R6 | Soporte de los parámetros Formula | -| 17 R5 | Soporte de los marcadores para los valores | -| 17 | Añadidos | +| Lanzamiento | Modificaciones | +| ----------- | ----------------------------------------------------------- | +| 21 R2 | Support of order by with 4D.Vector searches | +| 21 | Soporte de los objetos 4D.Vector | +| 17 R6 | Soporte de los parámetros Formula | +| 17 R5 | Soporte de los marcadores para los valores | +| 17 | Añadidos |
    diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md index aea403ab3bf6b4..ee03b6c212ed57 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,9 +10,8 @@ Lea [**Novedades en 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2/), #### Lo más destacado - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). - +- Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. - - [**Lista de bugs corregidos**](https://bugs.4d.fr/fixedbugslist?version=21_R2): lista de todos los bugs que se han corregido en 4D 21 R2. #### Cambios de comportamiento diff --git a/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md b/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md index aadedb2700b5ec..f4393d524a2b1a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/REST/$filter.md @@ -3,7 +3,7 @@ id: filter title: $filter --- -Permite consultar los datos de una clase de datos o de un método *(p. ej.*, `$filter="firstName!='' AND salary>30000"`) +Allows to query the data in a dataclass or method (*e.g.*, `$filter="firstName!='' AND salary>30000"`) ## Descripción @@ -96,7 +96,7 @@ El parámetro *vectorComparison* es una colección de los siguientes elementos: | [].metric | Text | Opcional. [Cálculo vectorial](../API/VectorClass.md#understanding-the-different-vector-computations) a utilizar para la consulta. Supported values:
  • "cosine" (default if omitted): calculates the cosine similarity between vectors.
  • "dot": calculates the dot similarity of vectors.
  • "euclidean": calculates the Euclidean distance between vectors. | | [].threshold | Real | Opcional (por defecto: 0,5). Un valor umbral utilizado para filtrar las comparaciones de vectores en función de su puntuación de similitud coseno, punto o euclídea según la "métrica" seleccionada. Es altamente recomendable elegir una similitud que se adapte mejor a su caso de uso específico para obtener resultados óptimos. | -Solo un subconjunto de símbolos **comparadores** son soportados con comparaciones vectoriales. Tenga en cuenta que comparan los resultados con el valor umbral: +Only a subset of **comparator** symbols is supported with vector comparisons. Tenga en cuenta que comparan los resultados con el valor umbral: | Comparador | Símbolo(s) | Comentario | | ----------------- | ----------------------------- | --------------------------- | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/REST/$orderby.md b/i18n/es/docusaurus-plugin-content-docs/current/REST/$orderby.md index 8892da1bbe6daf..a86bfe2b06d6c3 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/REST/$orderby.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/REST/$orderby.md @@ -9,7 +9,7 @@ Ordena los datos devueltos por el atributo y el orden de clasificación definido `$orderby` ordena las entidades devueltas por la petición REST. Para cada atributo, se especifica el orden como `ASC` (o `asc`) para el orden ascendente y `DESC` (`desc`) para el orden descendente. Por defecto, los datos se clasifican en orden ascendente. By default, the data is sorted in ascending order. -## Ejemplo +## Ejemplo 1 En este ejemplo, recuperamos las entidades y las ordenamos al mismo tiempo: @@ -47,3 +47,10 @@ El ejemplo siguiente ordena el conjunto de entidades por el atributo lastName en } ``` +## Ejemplo 2 + +`$orderby` statement is supported in [vector similarity filters](./$filter.md#vector-similarity): + +``` +GET /rest/Person?$filter="Vector>=:1"&$params=[{"vector":[1,2,3],"metric":"cosine","threshold":0.95}]&$orderby="Vector desc" +``` \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md index ecfcf0fc149e70..a25daf3d4cb3a8 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md @@ -939,7 +939,7 @@ Les formules contenues dans les requêtes peuvent recevoir des paramètres via $ - Constantes de type **date** : "YYYY-MM-DD" format - Constantes **null** : en utilisant le mot-clé "null", la recherche trouvera les propriétés ayant la valeur **null** et **undefined**. - dans le cas d'une recherche avec un comparateur IN, *value* doit être une collection ou des valeurs correspondant au type de l'attribut path entre \[ ] séparés par des virgules (pour les chaînes, les caractères `"` doivent être échappés avec `\`). - - **objet** : seuls les objets [4D.Vector](../API/VectorClass.md) sont pris en charge, dans le contexte des **recherches de similarité vectorielle** (*attributePath* doit également contenir des objets 4D.Vector valides). + - **object**: only [4D.Vector](../API/VectorClass.md) objects are supported, in the context of [**vector similarity queries**](#query-by-vector-similarity) (*attributePath* must also contain valid 4D.Vector objects). - **logicalOperator** : utilisé pour relier des conditions multiples dans la recherche (optionnel). Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) : | Conjonction | Symbole(s) | @@ -1205,6 +1205,20 @@ var $comparisonVector := {vector : $myVector; metric : mk euclidean ; threshold var $results := ds.MyClass.query("myVectorField <= :1" ; $comparisonVector) ``` +The **order by** statement is supported in the query string so that entities in the resulting entity selection are sorted by similarity. Par exemple : + +```4d +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) + //default order, the first entity is the most similar +``` + +If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: + +```4d +var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc; / + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by +``` + Voir [plus d'exemples ci-dessous](#example-4-2) (exemples 4 et 5). :::tip Articles de blog sur le sujet diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md index 7ea04e6a8a87a5..775991373d04a9 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md @@ -1738,11 +1738,13 @@ Dans cet exemple, le champ objet "marks" de la dataclass **Students** contient l
    Historique -| Release | Modifications | -| ------- | ------------------------------------------------- | -| 17 R6 | Prise en charge des paramètres Formula | -| 17 R5 | Prise en charge des placeholders pour les valeurs | -| 17 | Ajout | +| Release | Modifications | +| ------- | ----------------------------------------------------------- | +| 21 R2 | Support of order by with 4D.Vector searches | +| 21 | Prise en charge des objets 4D.Vector | +| 17 R6 | Prise en charge des paramètres Formula | +| 17 R5 | Prise en charge des placeholders pour les valeurs | +| 17 | Ajout |
    diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md index 9242ff1eaa1955..b7136f986c4c2b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,9 +10,8 @@ Lisez [**Les nouveautés de 4D 21 R2**](https://blog.4d.com/fr-whats-new-in-4d-v #### Points forts - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). - +- Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. - - [**Liste des bugs corrigés**](https://bugs.4d.fr/fixedbugslist?version=21_R2) : liste de tous les bugs qui ont été corrigés dans 4D 21 R2. #### Changements de comportement diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/REST/$filter.md b/i18n/fr/docusaurus-plugin-content-docs/current/REST/$filter.md index 1554518504d886..bab137899b9215 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/REST/$filter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/REST/$filter.md @@ -3,7 +3,7 @@ id: filter title: $filter --- -Permet de rechercher les données d'une dataclass ou d'une méthode (par exemple, `$filter="firstName!='' AND salary>30000"`) +Allows to query the data in a dataclass or method (*e.g.*, `$filter="firstName!='' AND salary>30000"`) ## Description @@ -96,7 +96,7 @@ Le paramètre *vectorComparison* est une collection des éléments suivants : | [].metric | Text | Optionnel. [Calcul vectoriel](../API/VectorClass.md#understanding-the-different-vector-computations) à utiliser pour la recherche. Valeurs prises en charge :
  • "cosine" (valeur par défaut en cas d'omission) : calcule la similarité cosinus entre les vecteurs
  • . "dot" : calcule la similarité en points entre les vecteurs.
  • "euclidean" : calcule la distance euclidienne entre les vecteurs. | | [].threshold | Real | Facultatif (valeur par défaut : 0,5). Valeur seuil utilisée pour filtrer les comparaisons de vecteurs sur la base de leur score de similarité cosinus, point ou euclidienne selon la "métrique" sélectionnée. Il est fortement recommandé de choisir une similitude qui corresponde le mieux à votre cas d'utilisation spécifique pour des résultats optimaux. | -Seul un sous-ensemble de **comparateurs** est pris en charge pour les comparaisons vectorielles. Notez qu'ils comparent les résultats à la valeur de seuil (threshold) : +Only a subset of **comparator** symbols is supported with vector comparisons. Notez qu'ils comparent les résultats à la valeur de seuil (threshold) : | Comparateur | Symbole(s) | Commentaire | | ------------------- | ----------------------------- | -------------------------- | diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/REST/$orderby.md b/i18n/fr/docusaurus-plugin-content-docs/current/REST/$orderby.md index 3735484bb4389d..2599947db2b9f0 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/REST/$orderby.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/REST/$orderby.md @@ -9,7 +9,7 @@ Trie les données retournées par l'attribut et l'ordre de tri définis (par exe `$orderby` ordonne les entités retournées par la requête REST. Pour chaque attribut, définissez l'ordre sur `ASC` (ou `asc`) pour l'ordre croissant et sur `DESC` (`desc`) pour l'ordre décroissant. Par défaut, les données sont triées par ordre croissant. Si vous souhaitez spécifier plusieurs attributs, vous pouvez les délimiter avec une virgule, *par exemple*, `$orderby="lastName desc, firstName asc"`. -## Exemple +## Exemple 1 Dans cet exemple, nous récupérons les entités et les trions en même temps : @@ -47,3 +47,10 @@ L'exemple ci-dessous trie l'entité définie par l'attribut lastName dans l'ordr } ``` +## Exemple 2 + +`$orderby` statement is supported in [vector similarity filters](./$filter.md#vector-similarity): + +``` +GET /rest/Person?$filter="Vector>=:1"&$params=[{"vector":[1,2,3],"metric":"cosine","threshold":0.95}]&$orderby="Vector desc" +``` \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/DataClassClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/DataClassClass.md index 8212f0fcefa73a..76e39687c4777c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/DataClassClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/DataClassClass.md @@ -945,7 +945,7 @@ attributePath|formula 比較演算子 値 - **日付** 型の定数値: "YYYY-MM-DD" フォーマット。 - **null** 定数値: "null" キーワードを使用した場合、**null** と **undefined** プロパティの両方が検索されます。 - IN 記号を使用したクエリの場合、*値* はコレクションか、attributePath の型に合致する、\[ ] でくくられたカンマ区切りの値である必要があります (文字列においては、`"` の記号は `\` でエスケープする必要があります)。 - - **オブジェクト**: **ベクトル類似度クエリ** のコンテキストにおいて [4D.Vector](../API/VectorClass.md) オブジェクトのみがサポートされます。(*attributePath* に有効な4D.Vector オブジェクトが格納されている必要があります) + - **object**: only [4D.Vector](../API/VectorClass.md) objects are supported, in the context of [**vector similarity queries**](#query-by-vector-similarity) (*attributePath* must also contain valid 4D.Vector objects). - **論理演算子**: 複数の条件をクエリ内で結合させるのに使用します(任意)。 以下の論理演算子のいずれか一つを使用できます (名前あるいは記号のどちらかを渡します): | 結合 | 記号 | @@ -1211,6 +1211,20 @@ var $comparisonVector := {vector: $myVector; metric: mk euclidean; threshold: 1. var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) ``` +The **order by** statement is supported in the query string so that entities in the resulting entity selection are sorted by similarity. 例: + +```4d +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) + //default order, the first entity is the most similar +``` + +If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: + +```4d +var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc; / + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by +``` + 詳細については[以下の例題](#例題-4-2)を参照してください (例題 4 と 5)。 :::tip 関連したblog 記事 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md index 55e058d85bd076..966a3f3f78904e 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md @@ -1741,11 +1741,13 @@ pathObjects コレクションには必要な数だけオブジェクトを追
    履歴 -| リリース | 内容 | -| ----- | ------------------- | -| 17 R6 | Formula パラメーターをサポート | -| 17 R5 | 値のプレースホルダーをサポート | -| 17 | 追加 | +| リリース | 内容 | +| ----- | ----------------------------------------------------------- | +| 21 R2 | Support of order by with 4D.Vector searches | +| 21 | 4D.Vector オブジェクトのサポート | +| 17 R6 | Formula パラメーターをサポート | +| 17 R5 | 値のプレースホルダーをサポート | +| 17 | 追加 |
    diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md index 8e9df8cecf1a7b..781ca6f05014b6 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,9 +10,8 @@ title: リリースノート #### ハイライト - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). - +- Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. - - [**修正リスト**](https://bugs.4d.fr/fixedbugslist?version=21_R2): 4D 21 R2 で修正されたバグのリストです ([日本語版はこちら](https://4d-jp.github.io/2023/178/release-note-version-20r2/))。 #### 動作の変更 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/REST/$filter.md b/i18n/ja/docusaurus-plugin-content-docs/current/REST/$filter.md index e7d79b10f1bfdd..f0db0ecae759fb 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/REST/$filter.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/REST/$filter.md @@ -3,7 +3,7 @@ id: filter title: $filter --- -データクラスまたはメソッドが返すデータをフィルターします *(例*: `$filter="firstName!='' AND salary>30000"`) +Allows to query the data in a dataclass or method (*e.g.*, `$filter="firstName!='' AND salary>30000"`) ## 説明 @@ -95,7 +95,7 @@ The *vectorComparison* parameter is a collection of the following elements: | [].metric | Text | 任意。 クエリに使用する[ベクトル計算](../API/VectorClass.md#ことなるベクトル計算を理解する)。 Supported values:
  • "cosine" (default if omitted): calculates the cosine similarity between vectors.
  • "dot": calculates the dot similarity of vectors.
  • "euclidean": calculates the Euclidean distance between vectors. | | [].threshold | Real | 任意(デフォルト: 0.5)。 選択された"metric"に従って、コサイン、ドット、またはユークリッド類似度に基づいたベクトル比較をフィルタリングするために使用されるしきい値。 最適な結果を得るためには、特定の用途に最適な類似度のしきい値をきちんと選択することが強く推奨されます。 | -Only a subset of **comparator** symbols are supported with vector comparisons. これらの比較記号は、結果としきい値を比較するのに使用されるという点に注意してください: +Only a subset of **comparator** symbols is supported with vector comparisons. これらの比較記号は、結果としきい値を比較するのに使用されるという点に注意してください: | 比較演算子 | 記号 | 説明 | | ----- | --------------------------- | --------- | diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/REST/$orderby.md b/i18n/ja/docusaurus-plugin-content-docs/current/REST/$orderby.md index e5c4f397210f16..2eb61653b66cb3 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/REST/$orderby.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/REST/$orderby.md @@ -9,7 +9,7 @@ title: $orderby `$orderby` は RESTリクエストによって返されるエンティティを並べ替えます。 並べ替えの基準とする各属性について、並べ替え順を指定します。`ASC` ( `asc`) が昇順、`DESC` (`desc`) が降順です。 デフォルトでは、データは昇順に並べ替えられます。 属性を複数指定するには、カンマ区切りにします。*例*: `$orderby="lastName desc, firstName asc"`。 -## 例題 +## 例題 1 取得と同時にエンティティを並べ替えます: @@ -47,3 +47,10 @@ title: $orderby } ``` +## 例題 2 + +`$orderby` statement is supported in [vector similarity filters](./$filter.md#vector-similarity): + +``` +GET /rest/Person?$filter="Vector>=:1"&$params=[{"vector":[1,2,3],"metric":"cosine","threshold":0.95}]&$orderby="Vector desc" +``` \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md index 2acc3d46976455..470beca026dfaa 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md @@ -5,21 +5,21 @@ title: OpenAIFile # OpenAIFile -`OpenAIFile` クラスはOpen AI API 内でのファイルオブジェクトを表します。 Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. +`OpenAIFile` クラスはOpen AI API 内でのファイルオブジェクトを表します。 ファイルはアップロード可能で、Assistants、Fine-tuning、Batch、および Vision API を含めた様々なエンドポイントにおいて使用することができます。 ## プロパティ -| プロパティ名 | 型 | 説明 | -| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | Text | The file identifier, which can be referenced in the API endpoints. | -| `bytes` | Integer | The size of the file, in bytes. | -| `created_at` | Integer | The Unix timestamp (in seconds) for when the file was created. | -| `expires_at` | Integer | The Unix timestamp (in seconds) for when the file will expire. | -| `filename` | Text | The name of the file. | -| `object` | Text | The object type, which is always "file". | -| `purpose` | Text | The intended purpose of the file. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | -| `status` | Text | **Deprecated.** The current status of the file, which can be either `uploaded`, `processed`, or `error`. | -| `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | +| プロパティ名 | 型 | 説明 | +| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | ファイルの識別子。API エンドポイント内で参照可能です。 | +| `bytes` | Integer | ファイルのサイズ(バイト単位)。 | +| `created_at` | Integer | ファイルが作成されたUnix タイムスタンプ(秒)。 | +| `expires_at` | Integer | ファイルが失効するUnix タイムスタンプ(秒)。 | +| `filename` | Text | ファイル名。 | +| `object` | Text | オブジェクトタイプ。常に"file"。 | +| `purpose` | Text | ファイルの目的。 サポートされる値: `assistants`、 `assistants_output`、 `batch`、 `batch_output`、 `fine-tune`、 `fine-tune-results`、 `vision`、および `user_data`。 | +| `status` | Text | **廃止予定。** ファイルのカレントのステータス。`uploaded`、 `processed`、 あるいは `error` のいずれか。 | +| `status_details` | Text | **廃止予定。** ファイルの微調整トレーニングファイルが検証になぜ失敗したかの詳細については、`fine_tuning.job` のerror フィールドを参照してください。 | ## 参照 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md index fdfe98f46abb1a..916370d87586df 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md @@ -5,7 +5,7 @@ title: OpenAIFileDeletedResult # OpenAIFileDeletedResult -The `OpenAIFileDeletedResult` class contains the result of a file deletion operation. +`OpenAIFileDeletedResult` クラスは、ファイル削除操作の結果を格納します。 ## 継承元 @@ -13,22 +13,22 @@ The `OpenAIFileDeletedResult` class contains the result of a file deletion opera ## 計算プロパティ -| プロパティ | 型 | 説明 | -| --------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Returns the file deletion result from the API response. Returns `Null` if the response doesn't contain a valid result. | +| プロパティ | 型 | 説明 | +| --------- | ----------------------------------------- | ------------------------------------------------------------------ | +| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | API レスポンスからのファイル削除の結果を返します。 レスポンスに有効な結果が格納されていない場合には `Null` を返します。 | ## 使用例 ```4d -// Delete a file +// ファイルを削除する var $fileId:="file-abc123" var $result:=$client.files.delete($fileId; Null) var $deletionStatus:=$result.deleted If ($deletionStatus.deleted) - ALERT("File "+$deletionStatus.id+" was successfully deleted") + ALERT("ファイルID "+$deletionStatus.id+" は正常に削除されました") Else - ALERT("Failed to delete file") + ALERT("ファイルの削除に失敗しました") End if ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md index 82dd2cf5e96efd..43282ec34c039a 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md @@ -5,7 +5,7 @@ title: OpenAIFileListParameters # OpenAIFileListParameters -The `OpenAIFileListParameters` class contains parameters for listing files in the OpenAI API. +`OpenAIFileListParameters` クラスはOpenAI API 内でファイルをリストするための引数が格納されています。 ## 継承元 @@ -13,12 +13,12 @@ The `OpenAIFileListParameters` class contains parameters for listing files in th ## プロパティ -| プロパティ名 | 型 | Required | デフォルト | 説明 | -| --------- | ------- | -------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `after` | Text | 任意 | - | A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `after=obj_foo` in order to fetch the next page of the list. | -| `limit` | Integer | 任意 | 10000 | A limit on the number of objects to be returned. Limit can range between 1 and 10,000, and the default is 10,000. | -| `order` | Text | 任意 | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | -| `purpose` | Text | 任意 | - | Only return files with the given purpose. | +| プロパティ名 | 型 | 必須 | デフォルト | 説明 | +| --------- | ------- | -- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `after` | Text | 任意 | - | ページネーションで使用するためのカーソル。 `after` はリスト内での位置を定義するためのオブジェクト ID です。 例えば、リストをリクエストして100個のオブジェクトを受信し、最後が `obj_foo` だった場合、その次の呼び出しに `after=obj_foo` を含めることでリストの次のページを取得することができます。 | +| `limit` | Integer | 任意 | 10000 | 返されるオブジェクト数の上限。 上限値は1から10000 を選択でき、デフォルトの値は10000です。 | +| `order` | Text | 任意 | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | +| `purpose` | Text | 任意 | - | Only return files with the given purpose. | ## 使用例 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md index c7125c0ef9b00a..54e3c83cf459b2 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -13,9 +13,9 @@ The `OpenAIFileParameters` class handles parameters for file upload operations. ## プロパティ -| プロパティ名 | 型 | Required | 説明 | -| --------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `expires_after` | Object | 任意 | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | +| プロパティ名 | 型 | 必須 | 説明 | +| --------------- | ------ | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `expires_after` | Object | 任意 | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | ### `expires_after` Object Structure diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/API/DataClassClass.md b/i18n/pt/docusaurus-plugin-content-docs/current/API/DataClassClass.md index d50fb79572fb50..8bad6f70bd3115 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/API/DataClassClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/API/DataClassClass.md @@ -942,7 +942,7 @@ Fórmulas nas consultas podem receber parâmetros através de $1. Este ponto est - constantes de tipo **date**: formato "YYYY-MM-DD" - **null** constante: usando a palavra-chave "null" irá encontrar as propriedades **null** e **undefined**. - no caso de uma pesquisa com um comparador IN, *valor* deve ser uma coleção, ou valores que coincidam com o tipo da rota do atributo entre \[ ] separados por vírgulas (para as strings, os caracteres `"` devem ser escapados com `\`). - - **object**: only [4D.Vector](../API/VectorClass.md) objects are supported, in the context of **vector similarity queries** (*attributePath* must also contain valid 4D.Vector objects). + - **object**: only [4D.Vector](../API/VectorClass.md) objects are supported, in the context of [**vector similarity queries**](#query-by-vector-similarity) (*attributePath* must also contain valid 4D.Vector objects). - **logicalOperator**: usado para participar de múltiplas condições na consulta (opcional). Pode usaar um dos operadores lógicos abaixo (ou o nome ou o símbolo podem ser usados): | Conjunção | Símbolos | @@ -1206,6 +1206,20 @@ var $comparisonVector := {vector: $myVector; metric: mk euclidean; threshold: 1. var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) ``` +The **order by** statement is supported in the query string so that entities in the resulting entity selection are sorted by similarity. Por exemplo: + +```4d +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) + //default order, the first entity is the most similar +``` + +If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: + +```4d +var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc; / + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by +``` + See [more examples below](#example-4-2) (examples 4 and 5). :::tip Related blog posts diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md index a65c0deee64abd..7cbd509d84fe66 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md @@ -1735,11 +1735,13 @@ Neste exemplo, o campo de objeto "marks" na classe de dados **Students** contém
    História -| Release | Mudanças | -| ------- | -------------------------------------- | -| 17 R6 | Soporte dos Parâmetros Formula | -| 17 R5 | Suporte dos marcadores para os valores | -| 17 | Adicionado | +| Release | Mudanças | +| ------- | ----------------------------------------------------------- | +| 21 R2 | Support of order by with 4D.Vector searches | +| 21 | Support 4D.Vector objects | +| 17 R6 | Soporte dos Parâmetros Formula | +| 17 R5 | Suporte dos marcadores para os valores | +| 17 | Adicionado |
    diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md index 2847b03cc42e14..aa57b4c3d05eab 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,9 +10,8 @@ Leia [**O que há de novo no 4D v21 R2**](https://blog.4d.com/en-whats-new-in-4d #### Destaques - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). - +- Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. - - [**Lista de erros corrigida**](https://bugs.4d.fr/fixedbugslist?version=21_R2): lista de todos os bugs corrigidos em 4D 21 R2. #### Mudanças de comportamento diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/REST/$filter.md b/i18n/pt/docusaurus-plugin-content-docs/current/REST/$filter.md index 01f9c75981cdbe..332cad9c82c714 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/REST/$filter.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/REST/$filter.md @@ -3,7 +3,7 @@ id: filter title: $filter --- -Permite consultar los datos de una clase de datos o de un método *(p. ej.*, `$filter="firstName!='' AND salary>30000"`) +Allows to query the data in a dataclass or method (*e.g.*, `$filter="firstName!='' AND salary>30000"`) ## Descrição @@ -96,7 +96,7 @@ The *vectorComparison* parameter is a collection of the following elements: | [].metric | Text | Opcional. [Vector computation](../API/VectorClass.md#understanding-the-different-vector-computations) to use for the query. Supported values:
  • "cosine" (default if omitted): calculates the cosine similarity between vectors.
  • "dot": calculates the dot similarity of vectors.
  • "euclidean": calculates the Euclidean distance between vectors. | | [].threshold | Real | Optional (default: 0.5). A threshold value used to filter vector comparisons based on their cosine, dot or euclidean similarity score according to the selected "metric". It is highly recommended to choose a similarity that best fits your specific use case for optimal results. | -Only a subset of **comparator** symbols are supported with vector comparisons. Note that they compare results to the threshold value: +Only a subset of **comparator** symbols is supported with vector comparisons. Note that they compare results to the threshold value: | Comparador | Símbolos | Comentário | | -------------------- | --------------------------- | -------------------------------------- | diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/REST/$orderby.md b/i18n/pt/docusaurus-plugin-content-docs/current/REST/$orderby.md index 734791013e20a2..1631702aa29ebb 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/REST/$orderby.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/REST/$orderby.md @@ -9,7 +9,7 @@ Ordena los datos devueltos por el atributo y el orden de clasificación definido `$orderby` ordena las entidades devueltas por la petición REST. Para cada atributo, se especifica el orden como `ASC` (o `asc`) para el orden ascendente y `DESC` (`desc`) para el orden descendente. Por defeito, os dados são ordenados por ordem ascendente. By default, the data is sorted in ascending order. -## Exemplo +## Exemplo 1 Neste exemplo, recuperamos entidades e ordenamo-las em simultâneo: @@ -47,3 +47,10 @@ O exemplo abaixo ordena o conjunto de entidades pelo atributo lastName em ordem } ``` +## Exemplo 2 + +`$orderby` statement is supported in [vector similarity filters](./$filter.md#vector-similarity): + +``` +GET /rest/Person?$filter="Vector>=:1"&$params=[{"vector":[1,2,3],"metric":"cosine","threshold":0.95}]&$orderby="Vector desc" +``` \ No newline at end of file From 57f1b119dc840bcc0220b69931e87f6009d2d626 Mon Sep 17 00:00:00 2001 From: sandritica <136651682+sandritica@users.noreply.github.com> Date: Thu, 27 Nov 2025 09:18:41 -0500 Subject: [PATCH 52/75] ES fixes in legacy commands - query/query selection by attribute - verify data file (#3009) * Update new-process.md * Update new-process.md * Update register-client.md * Update register-client.md * Update register-client.md * Update 4d-write-pro-attributes.md * Update 4d-write-pro-attributes.md * Update 4d-write-pro-attributes.md * Update wp-new-style-sheet.md * Update wp-new-style-sheet.md * Update wp-new-style-sheet.md * Update get-database-parameter.md * Update set-database-parameter.md * Update set-database-parameter.md * Update set-database-parameter.md * Update get-database-parameter.md * Update get-database-parameter.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md * Update license-usage.md * Update license-usage.md * Update license-usage.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md * Update blob-to-print-settings.md * Update open-window.md * Update open-window.md * Update open-window.md * Update query-by-attribute.md * Update query-selection-by-attribute.md * Update query-selection-by-attribute.md * Update query-selection-by-attribute.md * Update query-by-attribute.md * Update query-by-attribute.md * Update verify-data-file.md * Update verify-data-file.md * Update verify-data-file.md * Rename command from 'QUERY BY ATTRIBUTE' to 'QUERY SELECTION BY ATTRIBUTE' * Update query-selection-by-attribute.md * Update query-selection-by-attribute.md --------- Co-authored-by: arnaud-4d --- .../commands-legacy/query-by-attribute.md | 6 +- .../query-selection-by-attribute.md | 12 ++-- .../commands-legacy/verify-data-file.md | 55 +++++++++---------- .../commands-legacy/query-by-attribute.md | 6 +- .../query-selection-by-attribute.md | 12 ++-- .../commands-legacy/verify-data-file.md | 55 +++++++++---------- .../commands-legacy/query-by-attribute.md | 6 +- .../query-selection-by-attribute.md | 12 ++-- .../commands-legacy/verify-data-file.md | 55 +++++++++---------- 9 files changed, 108 insertions(+), 111 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/query-by-attribute.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/query-by-attribute.md index 8381b78bbc201e..b2559925b25235 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/query-by-attribute.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/query-by-attribute.md @@ -10,12 +10,12 @@ displayed_sidebar: docs | Parámetro | Tipo | | Descripción | | --- | --- | --- | --- | | tabla | Table | → | Tabla para la cual devolver una selección de registros o Tabla por defecto si se omite | -| opConj | * | → | Operador de conjunción ausar para combinar varias búsquedas (si las hay) | +| opConj | Operator | → | Operador de conjunción a usar para combinar varias búsquedas (si las hay) | | campoObjeto | Field | → | Campo objeto cuyos atributos utilizar para la búsqueda | | rutaAtributo | Text | → | Nombre o ruta de atributo | -| opBusq | Text, * | → | Operador de búsqueda (comparador) | +| opBusq | Text, Operator | → | Operador de búsqueda (comparador) | | valor | Text, Number, Date, Time | → | Valor a comparar | -| * | Operador | → | Espera de ejecución de la búsqueda | +| * | Operator | → | Espera de ejecución de la búsqueda | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/query-selection-by-attribute.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/query-selection-by-attribute.md index a7edbed92609a3..9e34f09cbdfff0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/query-selection-by-attribute.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/query-selection-by-attribute.md @@ -5,17 +5,17 @@ slug: /commands/query-selection-by-attribute displayed_sidebar: docs --- -**QUERY SELECTION BY ATTRIBUTE** ( {*tabla*}{;}{*conjOp* ;} *campoObjeto* ; *rutaAtributo* ; *opBusq* ; *valor* {; *} ) +**QUERY SELECTION BY ATTRIBUTE** ( {*tabla*}{;}{*opConj* ;} *campoObjeto* ; *rutaAtributo* ; *opBusq* ; *valor* {; *} ) | Parámetro | Tipo | | Descripción | | --- | --- | --- | --- | -| tabla | Table | → | Tabla para la cual devolver una selección de registros o tabla por defecto si se omite | -| conjOp | * | → | Operador de conjunción a utilizar ara unir múltiples búsquedas (si las hay) | -| campoObjeto | Field | → | Campo objeto para buscar atributos | +| tabla | Table | → | Tabla para la cual devolver una selección de registros o Tabla por defecto si se omite | +| opConj | Operator | → | Operador de conjunción a usar para combinar varias búsquedas (si las hay) | +| campoObjeto | Field | → | Campo objeto cuyos atributos utilizar para la búsqueda | | rutaAtributo | Text | → | Nombre o ruta de atributo | -| opBusq | *, Text | → | Operador de búsqueda (comparador) | +| opBusq | Text, Operator | → | Operador de búsqueda (comparador) | | valor | Text, Number, Date, Time | → | Valor a comparar | -| * | Operador | → | Continuar bandera de búsqueda | +| * | Operator | → | Espera de ejecución de la búsqueda | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/verify-data-file.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/verify-data-file.md index 1c6ae986f13232..251b195c1212ad 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/verify-data-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/verify-data-file.md @@ -19,7 +19,7 @@ displayed_sidebar: docs -## Descripción +## Descripción El comando VERIFY DATA FILE efectúa una verificación estructural de los objetos contenidos en el archivo de datos 4D designado por *rutaEstructura* y *rutaDatos*.para mayor información sobre el proceso de verificación de datos, consulte el Manual de Diseño. *rutaEstructura* designa el archivo de estructura (compilado o no) asociado con el archivo de datos a verificar. Puede tratarse del archivo de estructura abierto o de cualquier otro archivo de estructura. Usted debe pasar un nombre de ruta completo, expresado con la sintaxis del sistema operativo. También puede pasar una cadena vacía, en este caso aparece una caja de diálogo estándar de apertura de archivos que permite al usuario designar el archivo de estructura a utilizar. @@ -37,6 +37,7 @@ El parámetro *objetos* se utiliza para designar los tipos de objetos a verifica | Verify indexes | Entero largo | 8 | Esta opción verifica la consistencia física de los índices, sin enlace a los datos. Señala llaves inválidas pero no le permite detectar llaves duplicadas (dos índices que apuntan al mismo registro). Este tipo de error sólo puede detectarse con la opción Verificar todos. | | Verify records | Entero largo | 4 | | + Para verificar los registros y los índices, pase el total de Verify Records+Verify Indexes. El valor 0 (cero) también puede ser utilizado para obtener el mismo resultado. La opción Verify All realiza una verificación interna completa. Esta verificación es compatible con la creación de un historial. El parámetro *opciones* se utiliza para definir las opciones de verificación. Las siguientes opciones están disponibles, accesibles vía las constantes del tema “*Mantenimiento archivo de datos*”: @@ -51,44 +52,44 @@ Generalmente, el comando VERIFY DATA FILE crea un archivo de historial en format El parámetro *metodo* permite definir un método de retrollamada que será llamado regularmente durante la verificación. Si pasa una cadena vacía o un nombre de método invalido, este parámetro se ignora (no se llama el método). Cuando se llama, este método recibe hasta 5 parámetros en función de los objetos verificados y del tipo de evento que origina la llamada (ver la tabla de llamadas). Es imperativo declarar estos parámetros en el método: -| \- $1 | Entero largo | Tipo de mensaje (ver tabla) | + +| Parámetro | Tipo | Descripción | | ----- | ------------ | --------------------------- | -| \- $2 | Entero largo | Tipo de objeto | -| \- $3 | Text | Mensaje | -| \- $4 | Entero largo | Número de tabla | -| \- $5 | Entero largo | Reservado | +| $messageType | Integer | Tipo de mensaje (ver tabla) | +| $objectType | Integer | Tipo de objeto | +| $messageText | Text | Mensaje | +| $table | Integer | Número de tabla | +| $reserved | Integer | Reservado | La siguiente tabla describe el contenido de los parámetros en función del tipo de evento: -| **Evento** | **$1 (Entero largo)** | **$2 (Entero largo)** | **$3 (Texto)** | **$4 (Entero largo)** | **$5 (Entero largo)** | -| --------------------------- | --------------------- | --------------------- | -------------- | --------------------- | --------------------- | -| Mensaje | 1 | 0 | Progresión | Porcentaje | Reservado | -| mensaje | hecho (0-100) | | | | | -| Fin de la verificación (\*) | 2 | Tipo de objeto (\*\*) | Mensaje OK | Tabla o índice | Reservado | -| prueba | número | | | | | -| Error | 3 | Tipo de objeto (\*\*) | Texto de error | Tabla o índice | Reservado | -| mensaje | número | | | | | -| Fin de ejecución | 4 | 0 | DONE | 0 | Reservado | -| Advertencia | 5 | Tipo de objeto (\*\*) | Texto de error | Tabla o índice | Reservado | -| mensaje | número | | | | | - -(\*) El evento *Fin de la verificación* ($1=2) no se devuelve nunca cuando el modo de verificación es Verify All. Sólo se utiliza en modo Verify Records o Verify Indexes. -(\*\*) *Tipo de objeto*: cuando un objeto se verifica, puede enviarse un mensaje "terminado" ($1=2), error ($1=3) o terminado ($1=5). El tipo de objeto devuelto en $2 puede ser uno de los siguientes: +| **Event** | **$messageType** | **$objectType** | **$messageText** | **$table** | **$reserved** | +| ------- | ---------------- | ------------------ | -------------- | ---------------- | ---------------- | +| Mensaje | 1 | 0 | Mensaje de progresión | Porcentaje (0-100) | Reservado | +| Fin de la verificación (\*) | 2 | Tipo de objeto (\*\*) | Mensaje de prueba OK | Tabla o número de índice | Reservado | +| Error | 3 | Tipo de objeto (\*\*) | Texto de mensaje de error | Tabla o número de índice | Reservado | +| Fin de la ejecución | 4 | 0 | DONE | 0 | Reservado | +| Advertencia | 5 | Tipo de objeto (\*\*) | Texto de error | Tabla o índice | Reservado | +|||| mensaje | número | + +(\*) El evento *Fin de la verificación* ($messageType=2) no se devuelve nunca cuando el modo de verificación es Verify All. Sólo se utiliza en modo Verify Records o Verify Indexes. +(\*\*) *Tipo de objeto*: cuando un objeto se verifica, puede enviarse un mensaje "terminado" ($messageType=2), error ($messageType=3) o terminado ($messageType=5). El tipo de objeto devuelto en $2 puede ser uno de los siguientes: * 0 = indeterminado * 4 = registro * 8 = índice * 16 = objeto estructura (control preliminar del archivo de datos). -*Caso especial*: cuando $4 = 0 para $1=2, 3 ó 5, el mensaje no concierne a una tabla sino a un archivo de datos en su conjunto. +*Caso especial*: cuando $table = 0 para $messageType=2, 3 ó 5, el mensaje no concierne a una tabla sino a un archivo de datos en su conjunto. -El método de retrollamada también debe retornar un valor en $0 (Entero largo), permitiendo controlar la ejecución de la operación: +El método de retrollamada también debe retornar un valor entero *$result*, permitiendo controlar la ejecución de la operación: -* Si $0 = 0, la operación continúa normalmente -* Si $0 = -128, la operación se detiene sin que se genere error -* Si $0 = otro valor, la operación se detiene y el valor pasado en $0 se devuelve como número de error. Este error puede ser interceptado por un método de gestión de errores. +* Si $result = 0, la operación continúa normalmente +* Si $result = -128, la operación se detiene sin que se genere error +* Si $result = otro valor, la operación se detiene y el valor pasado en $result se devuelve como número de error. Este error puede ser interceptado por un método de gestión de errores. + +**Nota**: no es posible interrumpir la ejecución vía $result luego de que el evento se haya generado *Fin de ejecución* ($1=4). -**Nota**: no es posible interrumpir la ejecución vía $0 luego de que el evento se haya generado *Fin de ejecución* ($4=1). Dos arrays opcionales también pueden ser utilizados por este comando: @@ -176,5 +177,3 @@ Si el método de retrollamada no existe, la verificación no se efectúa, se gen | Número de comando | 939 | | Hilo seguro | ✓ | | Modifica variables | OK, Document, error | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-by-attribute.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-by-attribute.md index 8381b78bbc201e..b2559925b25235 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-by-attribute.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-by-attribute.md @@ -10,12 +10,12 @@ displayed_sidebar: docs | Parámetro | Tipo | | Descripción | | --- | --- | --- | --- | | tabla | Table | → | Tabla para la cual devolver una selección de registros o Tabla por defecto si se omite | -| opConj | * | → | Operador de conjunción ausar para combinar varias búsquedas (si las hay) | +| opConj | Operator | → | Operador de conjunción a usar para combinar varias búsquedas (si las hay) | | campoObjeto | Field | → | Campo objeto cuyos atributos utilizar para la búsqueda | | rutaAtributo | Text | → | Nombre o ruta de atributo | -| opBusq | Text, * | → | Operador de búsqueda (comparador) | +| opBusq | Text, Operator | → | Operador de búsqueda (comparador) | | valor | Text, Number, Date, Time | → | Valor a comparar | -| * | Operador | → | Espera de ejecución de la búsqueda | +| * | Operator | → | Espera de ejecución de la búsqueda | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-selection-by-attribute.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-selection-by-attribute.md index a7edbed92609a3..9e34f09cbdfff0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-selection-by-attribute.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-selection-by-attribute.md @@ -5,17 +5,17 @@ slug: /commands/query-selection-by-attribute displayed_sidebar: docs --- -**QUERY SELECTION BY ATTRIBUTE** ( {*tabla*}{;}{*conjOp* ;} *campoObjeto* ; *rutaAtributo* ; *opBusq* ; *valor* {; *} ) +**QUERY SELECTION BY ATTRIBUTE** ( {*tabla*}{;}{*opConj* ;} *campoObjeto* ; *rutaAtributo* ; *opBusq* ; *valor* {; *} ) | Parámetro | Tipo | | Descripción | | --- | --- | --- | --- | -| tabla | Table | → | Tabla para la cual devolver una selección de registros o tabla por defecto si se omite | -| conjOp | * | → | Operador de conjunción a utilizar ara unir múltiples búsquedas (si las hay) | -| campoObjeto | Field | → | Campo objeto para buscar atributos | +| tabla | Table | → | Tabla para la cual devolver una selección de registros o Tabla por defecto si se omite | +| opConj | Operator | → | Operador de conjunción a usar para combinar varias búsquedas (si las hay) | +| campoObjeto | Field | → | Campo objeto cuyos atributos utilizar para la búsqueda | | rutaAtributo | Text | → | Nombre o ruta de atributo | -| opBusq | *, Text | → | Operador de búsqueda (comparador) | +| opBusq | Text, Operator | → | Operador de búsqueda (comparador) | | valor | Text, Number, Date, Time | → | Valor a comparar | -| * | Operador | → | Continuar bandera de búsqueda | +| * | Operator | → | Espera de ejecución de la búsqueda | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/verify-data-file.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/verify-data-file.md index 1c6ae986f13232..251b195c1212ad 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/verify-data-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/verify-data-file.md @@ -19,7 +19,7 @@ displayed_sidebar: docs -## Descripción +## Descripción El comando VERIFY DATA FILE efectúa una verificación estructural de los objetos contenidos en el archivo de datos 4D designado por *rutaEstructura* y *rutaDatos*.para mayor información sobre el proceso de verificación de datos, consulte el Manual de Diseño. *rutaEstructura* designa el archivo de estructura (compilado o no) asociado con el archivo de datos a verificar. Puede tratarse del archivo de estructura abierto o de cualquier otro archivo de estructura. Usted debe pasar un nombre de ruta completo, expresado con la sintaxis del sistema operativo. También puede pasar una cadena vacía, en este caso aparece una caja de diálogo estándar de apertura de archivos que permite al usuario designar el archivo de estructura a utilizar. @@ -37,6 +37,7 @@ El parámetro *objetos* se utiliza para designar los tipos de objetos a verifica | Verify indexes | Entero largo | 8 | Esta opción verifica la consistencia física de los índices, sin enlace a los datos. Señala llaves inválidas pero no le permite detectar llaves duplicadas (dos índices que apuntan al mismo registro). Este tipo de error sólo puede detectarse con la opción Verificar todos. | | Verify records | Entero largo | 4 | | + Para verificar los registros y los índices, pase el total de Verify Records+Verify Indexes. El valor 0 (cero) también puede ser utilizado para obtener el mismo resultado. La opción Verify All realiza una verificación interna completa. Esta verificación es compatible con la creación de un historial. El parámetro *opciones* se utiliza para definir las opciones de verificación. Las siguientes opciones están disponibles, accesibles vía las constantes del tema “*Mantenimiento archivo de datos*”: @@ -51,44 +52,44 @@ Generalmente, el comando VERIFY DATA FILE crea un archivo de historial en format El parámetro *metodo* permite definir un método de retrollamada que será llamado regularmente durante la verificación. Si pasa una cadena vacía o un nombre de método invalido, este parámetro se ignora (no se llama el método). Cuando se llama, este método recibe hasta 5 parámetros en función de los objetos verificados y del tipo de evento que origina la llamada (ver la tabla de llamadas). Es imperativo declarar estos parámetros en el método: -| \- $1 | Entero largo | Tipo de mensaje (ver tabla) | + +| Parámetro | Tipo | Descripción | | ----- | ------------ | --------------------------- | -| \- $2 | Entero largo | Tipo de objeto | -| \- $3 | Text | Mensaje | -| \- $4 | Entero largo | Número de tabla | -| \- $5 | Entero largo | Reservado | +| $messageType | Integer | Tipo de mensaje (ver tabla) | +| $objectType | Integer | Tipo de objeto | +| $messageText | Text | Mensaje | +| $table | Integer | Número de tabla | +| $reserved | Integer | Reservado | La siguiente tabla describe el contenido de los parámetros en función del tipo de evento: -| **Evento** | **$1 (Entero largo)** | **$2 (Entero largo)** | **$3 (Texto)** | **$4 (Entero largo)** | **$5 (Entero largo)** | -| --------------------------- | --------------------- | --------------------- | -------------- | --------------------- | --------------------- | -| Mensaje | 1 | 0 | Progresión | Porcentaje | Reservado | -| mensaje | hecho (0-100) | | | | | -| Fin de la verificación (\*) | 2 | Tipo de objeto (\*\*) | Mensaje OK | Tabla o índice | Reservado | -| prueba | número | | | | | -| Error | 3 | Tipo de objeto (\*\*) | Texto de error | Tabla o índice | Reservado | -| mensaje | número | | | | | -| Fin de ejecución | 4 | 0 | DONE | 0 | Reservado | -| Advertencia | 5 | Tipo de objeto (\*\*) | Texto de error | Tabla o índice | Reservado | -| mensaje | número | | | | | - -(\*) El evento *Fin de la verificación* ($1=2) no se devuelve nunca cuando el modo de verificación es Verify All. Sólo se utiliza en modo Verify Records o Verify Indexes. -(\*\*) *Tipo de objeto*: cuando un objeto se verifica, puede enviarse un mensaje "terminado" ($1=2), error ($1=3) o terminado ($1=5). El tipo de objeto devuelto en $2 puede ser uno de los siguientes: +| **Event** | **$messageType** | **$objectType** | **$messageText** | **$table** | **$reserved** | +| ------- | ---------------- | ------------------ | -------------- | ---------------- | ---------------- | +| Mensaje | 1 | 0 | Mensaje de progresión | Porcentaje (0-100) | Reservado | +| Fin de la verificación (\*) | 2 | Tipo de objeto (\*\*) | Mensaje de prueba OK | Tabla o número de índice | Reservado | +| Error | 3 | Tipo de objeto (\*\*) | Texto de mensaje de error | Tabla o número de índice | Reservado | +| Fin de la ejecución | 4 | 0 | DONE | 0 | Reservado | +| Advertencia | 5 | Tipo de objeto (\*\*) | Texto de error | Tabla o índice | Reservado | +|||| mensaje | número | + +(\*) El evento *Fin de la verificación* ($messageType=2) no se devuelve nunca cuando el modo de verificación es Verify All. Sólo se utiliza en modo Verify Records o Verify Indexes. +(\*\*) *Tipo de objeto*: cuando un objeto se verifica, puede enviarse un mensaje "terminado" ($messageType=2), error ($messageType=3) o terminado ($messageType=5). El tipo de objeto devuelto en $2 puede ser uno de los siguientes: * 0 = indeterminado * 4 = registro * 8 = índice * 16 = objeto estructura (control preliminar del archivo de datos). -*Caso especial*: cuando $4 = 0 para $1=2, 3 ó 5, el mensaje no concierne a una tabla sino a un archivo de datos en su conjunto. +*Caso especial*: cuando $table = 0 para $messageType=2, 3 ó 5, el mensaje no concierne a una tabla sino a un archivo de datos en su conjunto. -El método de retrollamada también debe retornar un valor en $0 (Entero largo), permitiendo controlar la ejecución de la operación: +El método de retrollamada también debe retornar un valor entero *$result*, permitiendo controlar la ejecución de la operación: -* Si $0 = 0, la operación continúa normalmente -* Si $0 = -128, la operación se detiene sin que se genere error -* Si $0 = otro valor, la operación se detiene y el valor pasado en $0 se devuelve como número de error. Este error puede ser interceptado por un método de gestión de errores. +* Si $result = 0, la operación continúa normalmente +* Si $result = -128, la operación se detiene sin que se genere error +* Si $result = otro valor, la operación se detiene y el valor pasado en $result se devuelve como número de error. Este error puede ser interceptado por un método de gestión de errores. + +**Nota**: no es posible interrumpir la ejecución vía $result luego de que el evento se haya generado *Fin de ejecución* ($1=4). -**Nota**: no es posible interrumpir la ejecución vía $0 luego de que el evento se haya generado *Fin de ejecución* ($4=1). Dos arrays opcionales también pueden ser utilizados por este comando: @@ -176,5 +177,3 @@ Si el método de retrollamada no existe, la verificación no se efectúa, se gen | Número de comando | 939 | | Hilo seguro | ✓ | | Modifica variables | OK, Document, error | - - diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/query-by-attribute.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/query-by-attribute.md index 8381b78bbc201e..b2559925b25235 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/query-by-attribute.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/query-by-attribute.md @@ -10,12 +10,12 @@ displayed_sidebar: docs | Parámetro | Tipo | | Descripción | | --- | --- | --- | --- | | tabla | Table | → | Tabla para la cual devolver una selección de registros o Tabla por defecto si se omite | -| opConj | * | → | Operador de conjunción ausar para combinar varias búsquedas (si las hay) | +| opConj | Operator | → | Operador de conjunción a usar para combinar varias búsquedas (si las hay) | | campoObjeto | Field | → | Campo objeto cuyos atributos utilizar para la búsqueda | | rutaAtributo | Text | → | Nombre o ruta de atributo | -| opBusq | Text, * | → | Operador de búsqueda (comparador) | +| opBusq | Text, Operator | → | Operador de búsqueda (comparador) | | valor | Text, Number, Date, Time | → | Valor a comparar | -| * | Operador | → | Espera de ejecución de la búsqueda | +| * | Operator | → | Espera de ejecución de la búsqueda | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/query-selection-by-attribute.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/query-selection-by-attribute.md index a7edbed92609a3..9e34f09cbdfff0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/query-selection-by-attribute.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/query-selection-by-attribute.md @@ -5,17 +5,17 @@ slug: /commands/query-selection-by-attribute displayed_sidebar: docs --- -**QUERY SELECTION BY ATTRIBUTE** ( {*tabla*}{;}{*conjOp* ;} *campoObjeto* ; *rutaAtributo* ; *opBusq* ; *valor* {; *} ) +**QUERY SELECTION BY ATTRIBUTE** ( {*tabla*}{;}{*opConj* ;} *campoObjeto* ; *rutaAtributo* ; *opBusq* ; *valor* {; *} ) | Parámetro | Tipo | | Descripción | | --- | --- | --- | --- | -| tabla | Table | → | Tabla para la cual devolver una selección de registros o tabla por defecto si se omite | -| conjOp | * | → | Operador de conjunción a utilizar ara unir múltiples búsquedas (si las hay) | -| campoObjeto | Field | → | Campo objeto para buscar atributos | +| tabla | Table | → | Tabla para la cual devolver una selección de registros o Tabla por defecto si se omite | +| opConj | Operator | → | Operador de conjunción a usar para combinar varias búsquedas (si las hay) | +| campoObjeto | Field | → | Campo objeto cuyos atributos utilizar para la búsqueda | | rutaAtributo | Text | → | Nombre o ruta de atributo | -| opBusq | *, Text | → | Operador de búsqueda (comparador) | +| opBusq | Text, Operator | → | Operador de búsqueda (comparador) | | valor | Text, Number, Date, Time | → | Valor a comparar | -| * | Operador | → | Continuar bandera de búsqueda | +| * | Operator | → | Espera de ejecución de la búsqueda | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/verify-data-file.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/verify-data-file.md index 1c6ae986f13232..251b195c1212ad 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/verify-data-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/verify-data-file.md @@ -19,7 +19,7 @@ displayed_sidebar: docs -## Descripción +## Descripción El comando VERIFY DATA FILE efectúa una verificación estructural de los objetos contenidos en el archivo de datos 4D designado por *rutaEstructura* y *rutaDatos*.para mayor información sobre el proceso de verificación de datos, consulte el Manual de Diseño. *rutaEstructura* designa el archivo de estructura (compilado o no) asociado con el archivo de datos a verificar. Puede tratarse del archivo de estructura abierto o de cualquier otro archivo de estructura. Usted debe pasar un nombre de ruta completo, expresado con la sintaxis del sistema operativo. También puede pasar una cadena vacía, en este caso aparece una caja de diálogo estándar de apertura de archivos que permite al usuario designar el archivo de estructura a utilizar. @@ -37,6 +37,7 @@ El parámetro *objetos* se utiliza para designar los tipos de objetos a verifica | Verify indexes | Entero largo | 8 | Esta opción verifica la consistencia física de los índices, sin enlace a los datos. Señala llaves inválidas pero no le permite detectar llaves duplicadas (dos índices que apuntan al mismo registro). Este tipo de error sólo puede detectarse con la opción Verificar todos. | | Verify records | Entero largo | 4 | | + Para verificar los registros y los índices, pase el total de Verify Records+Verify Indexes. El valor 0 (cero) también puede ser utilizado para obtener el mismo resultado. La opción Verify All realiza una verificación interna completa. Esta verificación es compatible con la creación de un historial. El parámetro *opciones* se utiliza para definir las opciones de verificación. Las siguientes opciones están disponibles, accesibles vía las constantes del tema “*Mantenimiento archivo de datos*”: @@ -51,44 +52,44 @@ Generalmente, el comando VERIFY DATA FILE crea un archivo de historial en format El parámetro *metodo* permite definir un método de retrollamada que será llamado regularmente durante la verificación. Si pasa una cadena vacía o un nombre de método invalido, este parámetro se ignora (no se llama el método). Cuando se llama, este método recibe hasta 5 parámetros en función de los objetos verificados y del tipo de evento que origina la llamada (ver la tabla de llamadas). Es imperativo declarar estos parámetros en el método: -| \- $1 | Entero largo | Tipo de mensaje (ver tabla) | + +| Parámetro | Tipo | Descripción | | ----- | ------------ | --------------------------- | -| \- $2 | Entero largo | Tipo de objeto | -| \- $3 | Text | Mensaje | -| \- $4 | Entero largo | Número de tabla | -| \- $5 | Entero largo | Reservado | +| $messageType | Integer | Tipo de mensaje (ver tabla) | +| $objectType | Integer | Tipo de objeto | +| $messageText | Text | Mensaje | +| $table | Integer | Número de tabla | +| $reserved | Integer | Reservado | La siguiente tabla describe el contenido de los parámetros en función del tipo de evento: -| **Evento** | **$1 (Entero largo)** | **$2 (Entero largo)** | **$3 (Texto)** | **$4 (Entero largo)** | **$5 (Entero largo)** | -| --------------------------- | --------------------- | --------------------- | -------------- | --------------------- | --------------------- | -| Mensaje | 1 | 0 | Progresión | Porcentaje | Reservado | -| mensaje | hecho (0-100) | | | | | -| Fin de la verificación (\*) | 2 | Tipo de objeto (\*\*) | Mensaje OK | Tabla o índice | Reservado | -| prueba | número | | | | | -| Error | 3 | Tipo de objeto (\*\*) | Texto de error | Tabla o índice | Reservado | -| mensaje | número | | | | | -| Fin de ejecución | 4 | 0 | DONE | 0 | Reservado | -| Advertencia | 5 | Tipo de objeto (\*\*) | Texto de error | Tabla o índice | Reservado | -| mensaje | número | | | | | - -(\*) El evento *Fin de la verificación* ($1=2) no se devuelve nunca cuando el modo de verificación es Verify All. Sólo se utiliza en modo Verify Records o Verify Indexes. -(\*\*) *Tipo de objeto*: cuando un objeto se verifica, puede enviarse un mensaje "terminado" ($1=2), error ($1=3) o terminado ($1=5). El tipo de objeto devuelto en $2 puede ser uno de los siguientes: +| **Event** | **$messageType** | **$objectType** | **$messageText** | **$table** | **$reserved** | +| ------- | ---------------- | ------------------ | -------------- | ---------------- | ---------------- | +| Mensaje | 1 | 0 | Mensaje de progresión | Porcentaje (0-100) | Reservado | +| Fin de la verificación (\*) | 2 | Tipo de objeto (\*\*) | Mensaje de prueba OK | Tabla o número de índice | Reservado | +| Error | 3 | Tipo de objeto (\*\*) | Texto de mensaje de error | Tabla o número de índice | Reservado | +| Fin de la ejecución | 4 | 0 | DONE | 0 | Reservado | +| Advertencia | 5 | Tipo de objeto (\*\*) | Texto de error | Tabla o índice | Reservado | +|||| mensaje | número | + +(\*) El evento *Fin de la verificación* ($messageType=2) no se devuelve nunca cuando el modo de verificación es Verify All. Sólo se utiliza en modo Verify Records o Verify Indexes. +(\*\*) *Tipo de objeto*: cuando un objeto se verifica, puede enviarse un mensaje "terminado" ($messageType=2), error ($messageType=3) o terminado ($messageType=5). El tipo de objeto devuelto en $2 puede ser uno de los siguientes: * 0 = indeterminado * 4 = registro * 8 = índice * 16 = objeto estructura (control preliminar del archivo de datos). -*Caso especial*: cuando $4 = 0 para $1=2, 3 ó 5, el mensaje no concierne a una tabla sino a un archivo de datos en su conjunto. +*Caso especial*: cuando $table = 0 para $messageType=2, 3 ó 5, el mensaje no concierne a una tabla sino a un archivo de datos en su conjunto. -El método de retrollamada también debe retornar un valor en $0 (Entero largo), permitiendo controlar la ejecución de la operación: +El método de retrollamada también debe retornar un valor entero *$result*, permitiendo controlar la ejecución de la operación: -* Si $0 = 0, la operación continúa normalmente -* Si $0 = -128, la operación se detiene sin que se genere error -* Si $0 = otro valor, la operación se detiene y el valor pasado en $0 se devuelve como número de error. Este error puede ser interceptado por un método de gestión de errores. +* Si $result = 0, la operación continúa normalmente +* Si $result = -128, la operación se detiene sin que se genere error +* Si $result = otro valor, la operación se detiene y el valor pasado en $result se devuelve como número de error. Este error puede ser interceptado por un método de gestión de errores. + +**Nota**: no es posible interrumpir la ejecución vía $result luego de que el evento se haya generado *Fin de ejecución* ($1=4). -**Nota**: no es posible interrumpir la ejecución vía $0 luego de que el evento se haya generado *Fin de ejecución* ($4=1). Dos arrays opcionales también pueden ser utilizados por este comando: @@ -176,5 +177,3 @@ Si el método de retrollamada no existe, la verificación no se efectúa, se gen | Número de comando | 939 | | Hilo seguro | ✓ | | Modifica variables | OK, Document, error | - - From 2dda5e52459813c240c178f2df8728af000b569b Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 27 Nov 2025 16:32:20 +0100 Subject: [PATCH 53/75] New Crowdin updates (#3011) * New translations openaifilelistparameters.md (Japanese) * New translations openaifilelistresult.md (Japanese) * New translations openaifileparameters.md (Japanese) * New translations openaifileresult.md (Japanese) * New translations openaifilesapi.md (Japanese) --- .../aikit/Classes/OpenAIFileListParameters.md | 6 ++-- .../aikit/Classes/OpenAIFileListResult.md | 24 +++++++------- .../aikit/Classes/OpenAIFileParameters.md | 24 +++++++------- .../current/aikit/Classes/OpenAIFileResult.md | 12 +++---- .../current/aikit/Classes/OpenAIFilesAPI.md | 32 +++++++++---------- 5 files changed, 49 insertions(+), 49 deletions(-) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md index 43282ec34c039a..da01f8dc95912b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md @@ -17,13 +17,13 @@ title: OpenAIFileListParameters | --------- | ------- | -- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `after` | Text | 任意 | - | ページネーションで使用するためのカーソル。 `after` はリスト内での位置を定義するためのオブジェクト ID です。 例えば、リストをリクエストして100個のオブジェクトを受信し、最後が `obj_foo` だった場合、その次の呼び出しに `after=obj_foo` を含めることでリストの次のページを取得することができます。 | | `limit` | Integer | 任意 | 10000 | 返されるオブジェクト数の上限。 上限値は1から10000 を選択でき、デフォルトの値は10000です。 | -| `order` | Text | 任意 | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | -| `purpose` | Text | 任意 | - | Only return files with the given purpose. | +| `order` | Text | 任意 | desc | オブジェクトの `created_at` タイプスタンプ順で並び替えします。 昇順には `asc` を、降順には `desc` を使用します。 | +| `purpose` | Text | 任意 | - | 特定の目的のファイルのみを返します。 | ## 使用例 ```4d -// Get first 100 files with purpose "fine-tune" +// purpose が "fine-tune" である最初の100個のファイルを取得 var $params:=cs.AIKit.OpenAIFileListParameters.new() $params.limit:=100 $params.purpose:="fine-tune" diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md index 04edb7e8809ddd..dc31bbfade2377 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md @@ -5,7 +5,7 @@ title: OpenAIFileListResult # OpenAIFileListResult -The `OpenAIFileListResult` class contains the result of listing files from the OpenAI API. +`OpenAIFileListResult` クラスには、OpenAI API からのファイルをリストアップした結果が格納されています。 ## 継承元 @@ -13,16 +13,16 @@ The `OpenAIFileListResult` class contains the result of listing files from the O ## 計算プロパティ -| プロパティ | 型 | 説明 | -| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | -| `first_id` | Text | Returns the ID of the first file in the list, or an empty string if not available. | -| `last_id` | Text | Returns the ID of the last file in the list, or an empty string if not available. | -| `has_more` | Boolean | Indicates if there are more files beyond this page. `True` if there are more files to fetch, `False` otherwise. | +| プロパティ | 型 | 説明 | +| ---------- | ---------- | ------------------------------------------------------------------------------------------- | +| `files` | Collection | API レスポンスからの[OpenAIFile](OpenAIFile.md) オブジェクトのコレクションを返します。ファイルが何も見つからない場合には空のコレクションが返されます。 | +| `first_id` | Text | リストの最初のファイルのID を返します。利用できない場合は空の文字列を返します。 | +| `last_id` | Text | リストの最後のファイルのID を返します。利用できない場合は空の文字列を返します。 | +| `has_more` | Boolean | このページの後にまだファイルがあるかどうかを示します。 まだ取得するファイルがある場合には `True`、それ以外の場合には `False`。 | ## 使用例 -### Basic Usage +### 基本的な使用法 ```4d var $params:=cs.AIKit.OpenAIFileListParameters.new() @@ -33,14 +33,14 @@ var $result:=$client.files.list($params) var $files:=$result.files For each ($file; $files) - // Process each OpenAIFile object + // それぞれの OpenAIFile オブジェクトを処理 // $file.filename -> "salesOverview.pdf" // $file.bytes -> 175 // $file.purpose -> "assistants" End for each ``` -### Pagination Example +### ページ分けの例 ```4d var $params:=cs.AIKit.OpenAIFileListParameters.new() @@ -49,14 +49,14 @@ $params.limit:=100 var $result:=$client.files.list($params) var $allFiles:=$allFiles.combine($result.files) -// Continue fetching if there are more files +// まだファイルがある場合には取得を継続 While ($result.has_more) $params.after:=$result.last_id $result:=$client.files.list($params) $allFiles:=$allFiles.combine($result.files) End while -// $allFiles now contains all files from the organization +// $allFiles には組織からの全てのファイルが格納されています ``` ## 参照 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md index 54e3c83cf459b2..028c39becaac1b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -5,7 +5,7 @@ title: OpenAIFileParameters # OpenAIFileParameters -The `OpenAIFileParameters` class handles parameters for file upload operations. +`OpenAIFileParameters` クラスはファイルアップロード操作のための引数を管理します。 ## 継承元 @@ -13,28 +13,28 @@ The `OpenAIFileParameters` class handles parameters for file upload operations. ## プロパティ -| プロパティ名 | 型 | 必須 | 説明 | -| --------------- | ------ | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `expires_after` | Object | 任意 | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | +| プロパティ名 | 型 | 必須 | 説明 | +| --------------- | ------ | -- | ------------------------------------------------------------------------------------ | +| `expires_after` | Object | 任意 | ファイルの失効ポリシー。 デフォルトでは、 `purpose=batch` のファイルは30 日で失効し、それ以外の全てのファイルは手動で削除されるまでは維持されます。 | -### `expires_after` Object Structure +### `expires_after` オブジェクト構造 -The `expires_after` object contains the following properties: +`expires_after` オブジェクトには以下のプロパティが格納されています: -| プロパティ名 | 型 | 説明 | -| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `anchor` | Text | Anchor timestamp after which the expiration policy applies. Supported anchors: `created_at`. | -| `seconds` | Integer | The number of seconds after the anchor time that the file will expire. Must be between 3600 (1 hour) and 2592000 (30 days). | +| プロパティ名 | 型 | 説明 | +| --------- | ------- | ------------------------------------------------------------------------------------------------------------- | +| `anchor` | Text | 失効ポリシーが適用されるアンカータイムスタンプ。 サポートされるアンカー: `created_at` 。 | +| `seconds` | Integer | アンカー時間からファイルが有効期限が切れるまでの秒数。 3600 (1 時間) から 2592000 (30 日) の間でなければなりません。 | ## 使用例 ```4d var $params:=cs.AIKit.OpenAIFileParameters.new() -// Set expiration after 7 days +// 7 日後に執行するように設定する $params.expires_after:={} $params.expires_after.anchor:="created_at" -$params.expires_after.seconds:=604800 // 7 days +$params.expires_after.seconds:=604800 // 7 日相当 ``` ## 参照 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md index fd1bad0e55650f..71ee6187843e84 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md @@ -5,7 +5,7 @@ title: OpenAIFileResult # OpenAIFileResult -The `OpenAIFileResult` class contains the result of a single file operation (upload or retrieve). +`OpenAIFileResult` クラスには単一のファイル操作(アップロードあるいは取得)の結果が格納されます。 ## 継承元 @@ -13,20 +13,20 @@ The `OpenAIFileResult` class contains the result of a single file operation (upl ## 計算プロパティ -| プロパティ | 型 | 説明 | -| ------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -| `ファイル` | [OpenAIFile](OpenAIFile.md) | Returns the file object from the API response. Returns `Null` if the response doesn't contain a valid file. | +| プロパティ | 型 | 説明 | +| ------ | --------------------------- | ---------------------------------------------------------------- | +| `ファイル` | [OpenAIFile](OpenAIFile.md) | API レスポンスからのファイルオブジェクトを返します。 レスポンスに有効なファイルが格納されていない場合には `Null` 。 | ## 使用例 ```4d -// Upload a file +// ファイルをアップロードする var $file:=File("/RESOURCES/training-data.jsonl") var $result:=$client.files.create($file; "user_data") var $uploadedFile:=$result.file -// Retrieve file information +// ファイル情報を取得 var $retrieveResult:=$client.files.retrieve($uploadedFile.id) ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index 587d8b3ad6d584..89818163e45e1c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -5,16 +5,16 @@ title: OpenAIFilesAPI # OpenAIFilesAPI -The `OpenAIFilesAPI` class provides functionalities to manage files using OpenAI's API. Files can be uploaded and used across various endpoints including [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning), [Batch](https://platform.openai.com/docs/api-reference/batch) processing, and Vision. +`OpenAIFilesAPI` クラスはOpenAI のAPI を使用してファイルを管理する機能を提供します。 ファイルをアップロードして、 [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning)、 [Batch](https://platform.openai.com/docs/api-reference/batch) 処理、そしてVision を含む様々なエンドポイントで使用することができます。 -> **Note:** This API is only compatible with OpenAI. Other providers listed in the [compatible providers](../compatible-openai.md) documentation do not support file management operations. +> **注意:** この API はOpenAI としか互換性がありません。 [互換性のあるプロバイダー](../compatible-openai.md) ドキュメンテーションに記載されている他のプロバイダーでは、ファイル管理操作をサポートしていません。 -API Reference: +API 参照: -## File Size Limits +## ファイルサイズ上限 -- **Individual files:** up to 512 MB per file -- **Organization total:** up to 1 TB (cumulative size of all files uploaded by your [organization](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization)) +- **個別のファイル:** 1ファイルあたり 512 MB まで +- **組織全体:** 1 TB まで([組織](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization) によってアップロードされたすべてのファイルの累計サイズ) ## 関数 @@ -22,18 +22,18 @@ API Reference: **create**(*file* : 4D.File | 4D.Blob; *purpose* : Text; *parameters* : cs.OpenAIFileParameters) : cs.OpenAIFileResult -Upload a file that can be used across various endpoints. +様々なエンドポイントで使用できるファイルをアップロードします。 -**Endpoint:** `POST https://api.openai.com/v1/files` +**エンドポイント:** `POST https://api.openai.com/v1/files` -| 引数 | 型 | 説明 | -| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `ファイル` | [4D.File](https://developer.4d.com/docs/API/FileClass) or [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | The File or Blob object (not file name) to be uploaded. | -| `purpose` | Text | **Required.** The intended purpose of the uploaded file. | -| `parameters` | [OpenAIFileParameters](OpenAIFileParameters.md) | Optional parameters including expiration policy. | -| 戻り値 | [OpenAIFileResult](OpenAIFileResult.md) | The file result | +| 引数 | 型 | 説明 | +| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | +| `ファイル` | [4D.File](https://developer.4d.com/docs/API/FileClass) あるいは [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | アップロードするファイルあるいはBlob オブジェクト(ファイル名ではない)。 | +| `purpose` | Text | **必須。** アップロードされたファイルの目的。 | +| `parameters` | [OpenAIFileParameters](OpenAIFileParameters.md) | 失効期限のポリシーを含めた、オブションの引数。 | +| 戻り値 | [OpenAIFileResult](OpenAIFileResult.md) | ファイルの結果 | -**Throws:** An error if `file` is not a 4D.File or 4D.Blob, or if `purpose` is empty. +**エラーのスロー:** `file` が4D.File あるいは 4D.Blob ではない場合、あるいは`purpose` がからの場合にはエラーがスローされます。 #### Supported Purposes @@ -114,7 +114,7 @@ Returns information about a specific file. | ------------ | --------------------------------------- | ----------------------------------------------------------------------------- | | `fileId` | Text | **Required.** The ID of the file to retrieve. | | `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | -| 戻り値 | [OpenAIFileResult](OpenAIFileResult.md) | The file result | +| 戻り値 | [OpenAIFileResult](OpenAIFileResult.md) | ファイルの結果 | **Throws:** An error if `fileId` is empty. From 76a49b2deae9a4fb0eb8233f8bff4915a4a3ef86 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 27 Nov 2025 17:16:50 +0100 Subject: [PATCH 54/75] Update updates.md --- versioned_docs/version-21/Notes/updates.md | 1 + 1 file changed, 1 insertion(+) diff --git a/versioned_docs/version-21/Notes/updates.md b/versioned_docs/version-21/Notes/updates.md index 6731031f5313d1..540ac33b9a0381 100644 --- a/versioned_docs/version-21/Notes/updates.md +++ b/versioned_docs/version-21/Notes/updates.md @@ -28,6 +28,7 @@ Read [**What’s new in 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/), th - New "trim" commands to remove leading and trailing spaces from a string: [`Trim`](../commands/trim.md), [`Trim start`](../commands/trim-start.md), and [`Trim end`](../commands/trim-end.md). - [`Num`](../commands/num.md) and [`String`](../commands/string.md) commands have been updated to support conversions in different bases (radix). - [**Fixed bug list**](https://bugs.4d.fr/fixedbugslist?version=21): list of all bugs that have been fixed in 4D 21. +- [**4D Qodly Pro Release notes**](https://developer.4d.com/qodly/4DQodlyPro/release-notes): what's new in Qodly Studio. #### Developer Preview From 3fb560e3da5522c0c6baf85bba0780af6533e8e6 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 27 Nov 2025 18:50:40 +0100 Subject: [PATCH 55/75] collections are expressions --- docs/API/CollectionClass.md | 2 +- versioned_docs/version-19/API/CollectionClass.md | 2 +- versioned_docs/version-20-R10/API/CollectionClass.md | 2 +- versioned_docs/version-20/API/CollectionClass.md | 2 +- versioned_docs/version-21/API/CollectionClass.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/API/CollectionClass.md b/docs/API/CollectionClass.md index 7528a3edf45a8f..39c269f2da33f4 100644 --- a/docs/API/CollectionClass.md +++ b/docs/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -The Collection class manages [Collection](Concepts/dt_collection.md) type variables. +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. A collection is initialized with the [`New collection`](../commands/new-collection.md) or [`New shared collection`](../commands/new-shared-collection.md) commands. diff --git a/versioned_docs/version-19/API/CollectionClass.md b/versioned_docs/version-19/API/CollectionClass.md index b9e1f36bcaf685..17a03447abafb2 100644 --- a/versioned_docs/version-19/API/CollectionClass.md +++ b/versioned_docs/version-19/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -The Collection class manages [Collection](Concepts/dt_collection.md) type variables. +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. A collection is initialized with: diff --git a/versioned_docs/version-20-R10/API/CollectionClass.md b/versioned_docs/version-20-R10/API/CollectionClass.md index 7528a3edf45a8f..39c269f2da33f4 100644 --- a/versioned_docs/version-20-R10/API/CollectionClass.md +++ b/versioned_docs/version-20-R10/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -The Collection class manages [Collection](Concepts/dt_collection.md) type variables. +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. A collection is initialized with the [`New collection`](../commands/new-collection.md) or [`New shared collection`](../commands/new-shared-collection.md) commands. diff --git a/versioned_docs/version-20/API/CollectionClass.md b/versioned_docs/version-20/API/CollectionClass.md index 1416bd8bc4a122..0beb3604811161 100644 --- a/versioned_docs/version-20/API/CollectionClass.md +++ b/versioned_docs/version-20/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -The Collection class manages [Collection](Concepts/dt_collection.md) type variables. +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. A collection is initialized with: diff --git a/versioned_docs/version-21/API/CollectionClass.md b/versioned_docs/version-21/API/CollectionClass.md index 7528a3edf45a8f..39c269f2da33f4 100644 --- a/versioned_docs/version-21/API/CollectionClass.md +++ b/versioned_docs/version-21/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -The Collection class manages [Collection](Concepts/dt_collection.md) type variables. +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. A collection is initialized with the [`New collection`](../commands/new-collection.md) or [`New shared collection`](../commands/new-shared-collection.md) commands. From 0313ba62dfa0e7bfb3f0cd4c6732e21009b676c1 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 28 Nov 2025 10:10:24 +0100 Subject: [PATCH 56/75] New Crowdin updates (#3012) * New translations collectionclass.md (French) * New translations collectionclass.md (French) * New translations collectionclass.md (French) * New translations dataclassclass.md (French) * New translations entityselectionclass.md (French) * New translations collectionclass.md (French) * New translations collectionclass.md (French) * New translations updates.md (French) * New translations collectionclass.md (Spanish) * New translations collectionclass.md (Spanish) * New translations collectionclass.md (Spanish) * New translations privileges.md (Spanish) * New translations qodly-studio.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations orda-events.md (Spanish) * New translations field-properties.md (Spanish) * New translations collectionclass.md (Spanish) * New translations field-properties.md (Spanish) * New translations listbox_overview.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations qodly-studio.md (Spanish) * New translations webserverconfig.md (Spanish) * New translations wp-set-attributes.md (Spanish) * New translations collectionclass.md (Spanish) * New translations field-properties.md (Spanish) * New translations listbox_overview.md (Spanish) * New translations updates.md (Spanish) * New translations orda-events.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations qodly-studio.md (Spanish) * New translations webserverconfig.md (Spanish) * New translations wp-set-attributes.md (Spanish) * New translations writeprointerface.md (Spanish) * New translations openaifileparameters.md (Spanish) * New translations collectionclass.md (Japanese) * New translations collectionclass.md (Japanese) * New translations collectionclass.md (Japanese) * New translations collectionclass.md (Japanese) * New translations collectionclass.md (Japanese) * New translations updates.md (Japanese) * New translations openaifilesapi.md (Japanese) * New translations collectionclass.md (Portuguese, Brazilian) * New translations collectionclass.md (Portuguese, Brazilian) * New translations collectionclass.md (Portuguese, Brazilian) * New translations collectionclass.md (Portuguese, Brazilian) * New translations collectionclass.md (Portuguese, Brazilian) * New translations updates.md (Portuguese, Brazilian) --- .../current/API/CollectionClass.md | 2 +- .../current/Develop/field-properties.md | 2 +- .../current/ORDA/orda-events.md | 2 +- .../current/ORDA/privileges.md | 2 +- .../current/WebServer/qodly-studio.md | 2 +- .../current/WritePro/writeprointerface.md | 2 +- .../aikit/Classes/OpenAIFileParameters.md | 6 +-- .../version-19/API/CollectionClass.md | 2 +- .../version-20-R10/API/CollectionClass.md | 2 +- .../Develop/field-properties.md | 2 +- .../FormObjects/listbox_overview.md | 53 ++++++++++--------- .../commands/vp-set-workbook-options.md | 2 +- .../version-20-R10/WebServer/qodly-studio.md | 2 +- .../WebServer/webServerConfig.md | 2 +- .../WritePro/commands/wp-set-attributes.md | 2 +- .../version-20/API/CollectionClass.md | 2 +- .../version-21/API/CollectionClass.md | 2 +- .../version-21/Develop/field-properties.md | 2 +- .../FormObjects/listbox_overview.md | 18 +++---- .../version-21/Notes/updates.md | 1 + .../version-21/ORDA/orda-events.md | 2 +- .../commands/vp-set-workbook-options.md | 2 +- .../version-21/WebServer/qodly-studio.md | 2 +- .../version-21/WebServer/webServerConfig.md | 2 +- .../WritePro/commands/wp-set-attributes.md | 2 +- .../version-21/WritePro/writeprointerface.md | 2 +- .../current/API/CollectionClass.md | 2 +- .../current/API/DataClassClass.md | 14 ++--- .../current/API/EntitySelectionClass.md | 14 ++--- .../version-19/API/CollectionClass.md | 2 +- .../version-20-R10/API/CollectionClass.md | 2 +- .../version-20/API/CollectionClass.md | 2 +- .../version-21/API/CollectionClass.md | 2 +- .../version-21/Notes/updates.md | 1 + .../current/API/CollectionClass.md | 2 +- .../current/aikit/Classes/OpenAIFilesAPI.md | 16 +++--- .../version-19/API/CollectionClass.md | 2 +- .../version-20-R10/API/CollectionClass.md | 2 +- .../version-20/API/CollectionClass.md | 2 +- .../version-21/API/CollectionClass.md | 2 +- .../version-21/Notes/updates.md | 1 + .../current/API/CollectionClass.md | 2 +- .../version-19/API/CollectionClass.md | 2 +- .../version-20-R10/API/CollectionClass.md | 2 +- .../version-20/API/CollectionClass.md | 2 +- .../version-21/API/CollectionClass.md | 2 +- .../version-21/Notes/updates.md | 1 + 47 files changed, 102 insertions(+), 97 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md index 74b650aae99b35..804f8eff06d2f6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -La clase Collection gestiona variables de tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Una colección es inicializada con los comandos [`New collection`](../commands/new-collection.md) o [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md b/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md index f51a7c77821969..beae27552b3b35 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Develop/field-properties.md @@ -3,7 +3,7 @@ id: field-properties title: Propiedades de los campos --- -For other field properties, please refer to [doc.4d.com](https://doc.4d.com/4Dv21/4D/21/Field-properties.300-7676763.en.html). +Para otras propiedades de campos, consulte [doc.4d.com](https://doc.4d.com/4Dv21/4D/21/Field-properties.300-7676763.en.html). ## Class diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index 2a4453f25cb462..901a2dcd83d0a9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -453,7 +453,7 @@ Función evento afterSave($event : Object) Este evento se activa justo después de guardar una entidad en el archivo de datos, cuando se ha modificado al menos un atributo. No se ejecuta si no se ha tocado ningún atributo en la entidad. -This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. Por ejemplo, se puede utilizar para enviar un correo electrónico de confirmación después de guardar los datos. O, en caso de error al guardar los datos, puede hacer una cancelación para restaurar un estado consistente de los datos. +Este evento es útil después de guardar datos para propagar la acción de guardar fuera de la aplicación o para ejecutar tareas de administración. Por ejemplo, se puede utilizar para enviar un correo electrónico de confirmación después de guardar los datos. O, en caso de error al guardar los datos, puede hacer una cancelación para restaurar un estado consistente de los datos. La función recibe un [objeto *event*](#event-parameter) como parámetro. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md index 610b4e0d8db290..2a9100a293d13c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -262,7 +262,7 @@ The `restrictedByDefault` property configures how every [resource](#resources) a Depending on your environment, the recommended settings are: -- **Production**: Set both `restrictedByDefault` and [`forceLogin`](../REST/authUsers.md#force-login-mode) to **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. +- **Producción**: defina tanto `restrictedByDefault` como [`forceLogin`](../REST/authUsers.md#force-login-mode) como **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. - **Desarrollo**: defina `restrictedByDefault` y [`forceLogin`](../REST/authUsers.md#force-login-mode) como **false**. Esto permite un acceso más fácil durante el desarrollo y la depuración, con la posibilidad de aplicar gradualmente restricciones. ### Archivo `Roles_Errors.json` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md index b4cdda279ad007..e4961ff4833e86 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/qodly-studio.md @@ -94,7 +94,7 @@ La página Qodly Studio está disponible cuando el [servidor web WebAdmin está Hay dos formas de acceder a Qodly Studio: -- by selecting the **Qodly Studio...** menu command from the **Design** menu (4D single-user) or the **Window** menu (4D Server). +- seleccionando el comando **Qodly Studio...** del menú **Diseño** (4D monousuario) o del menú **Ventana** (4D Server). Si el servidor web WebAdmin ya está en funcionamiento, dependiendo de su configuración, su navegador por defecto se abre en `IPaddress:HTTPPort/studio` o `IPaddress:HTTPSPort/studio`. De lo contrario, se le preguntará si desea iniciar primero el servidor web WebAdmin. - on a browser, with the WebAdmin web server running (launched from 4D or 4D Server), enter the following address:
    diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md index a95cc219922320..d0f2771d9fd7e4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/writeprointerface.md @@ -10,7 +10,7 @@ Un desarrollador 4D puede implementar fácilmente estas paletas en su aplicació ## Instalación y documentación -4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). Los archivos fuente de 4D Write Pro Interface están [disponibles en Github](https://github.com/4d/4D-WritePro-Interface). +4D Write Pro Interface es un **componente 4D** que necesita ser [instalado en su proyecto](../Project/components.md#overview). Los archivos fuente de 4D Write Pro Interface están [disponibles en Github](https://github.com/4d/4D-WritePro-Interface). La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. Encontrará a continuación: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md index 8416856ad31675..1e2ac49eaf2bd0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -13,9 +13,9 @@ La clase `OpenAIFileParameters` gestiona los parámetros de las operaciones de c ## Propiedades -| Nombre de la propiedad | Tipo | Requerido | Descripción | -| ---------------------- | ------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `expires_after` | Object | Opcional | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | +| Nombre de la propiedad | Tipo | Requerido | Descripción | +| ---------------------- | ------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `expires_after` | Object | Opcional | The expiration policy for a file. Por defecto, los archivos con `purpose=batch` caducan a los 30 días y el resto de archivos se conservan hasta que se borran manualmente. | ### `expires_after` Object Structure diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md index 3012ae1811a08e..802d08a3a7c603 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -La clase Collection gestiona variables de tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Una colección se inicializa con: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index 74b650aae99b35..804f8eff06d2f6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -La clase Collection gestiona variables de tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Una colección es inicializada con los comandos [`New collection`](../commands/new-collection.md) o [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md index f51a7c77821969..beae27552b3b35 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Develop/field-properties.md @@ -3,7 +3,7 @@ id: field-properties title: Propiedades de los campos --- -For other field properties, please refer to [doc.4d.com](https://doc.4d.com/4Dv21/4D/21/Field-properties.300-7676763.en.html). +Para otras propiedades de campos, consulte [doc.4d.com](https://doc.4d.com/4Dv21/4D/21/Field-properties.300-7676763.en.html). ## Class diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md index ab7f86953d4573..bab63bed6306cf 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/listbox_overview.md @@ -98,7 +98,7 @@ En el caso de un list box basado en la selección actual de una tabla, cualquier En este tipo de list box, cada columna debe estar asociada a una expresión. El contenido de cada línea se evalúa entonces por elemento de la colección o por entidad de la selección de entidades. -Cada elemento de la colección o cada entidad está disponible como un objeto al que se puede acceder a través de la palabra clave [This](../Concepts/classes.md#this). A column expression can be a property path, a project method, a variable, or any formula, accessing each entity or collection element object through `This`, for example `This.` (o `This.value` en caso de una colección de valores escalares). La expresión también puede ser un método proyecto, una variable o un elemento de array. +Cada elemento de la colección o cada entidad está disponible como un objeto al que se puede acceder a través de la palabra clave [This](../Concepts/classes.md#this). Una expresión de columna puede ser una ruta de propiedad, un método proyecto, una variable o cualquier fórmula, accediendo a cada entidad u objeto elemento de colección a través de `This`, por ejemplo `This.` (o `This.value` en caso de una colección de valores escalares). La expresión también puede ser un método proyecto, una variable o un elemento de array. Cuando la fuente de datos es una entity selection, cualquier modificación realizada del lado del list box se guarda automáticamente en la base de datos. Por otro lado, las modificaciones realizadas en la base de datos son visibles en el list box después de que se hayan recargado las entidades modificadas. @@ -267,9 +267,10 @@ Puede definir propiedades estándar (texto, color de fondo, etc.) para cada colu ### Propiedades específicas de columna {#column-specific-properties} -[Alpha Format](properties_Display.md#alpha-format) - [Alternate Background Color](properties_BackgroundAndBorder.md#alternate-background-color) - [Automatic Row Height](properties_CoordinatesAndSizing.md#automatic-row-height) - [Background Color](properties_BackgroundAndBorder.md#background-color--fill-color) - [Background Color Expression](properties_BackgroundAndBorder.md#background-color-expression) - [Bold](properties_Text.md#bold) - [Choice List](properties_DataSource.md#choice-list) - [Class](properties_Object.md#css-class) - [Context Menu](properties_Entry.md#context-menu) - [Data Type (selection and collection list box column)](properties_DataSource.md#data-type-list) - [Date Format](properties_Display.md#date-format) - [Default Values](properties_DataSource.md#default-list-of-values) - [Display Type](properties_Display.md#display-type) - [Enterable](properties_Entry.md#enterable) - [Entry Filter](properties_Entry.md#entry-filter) - [Excluded List](properties_RangeOfValues.md#excluded-list) - [Expression](properties_DataSource.md#expression) - [Expression Type (array list box column)](properties_Object.md#expression-type) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Horizontal Alignment](properties_Text.md#horizontal-alignment) - [Horizontal Padding](properties_CoordinatesAndSizing.md#horizontal-padding) - [Italic](properties_Text.md#italic) - [Invisible](properties_Display.md#visibility) - [Maximum Width](properties_CoordinatesAndSizing.md#maximum-width) - [Method](properties_Action.md#method) - [Minimum Width](properties_CoordinatesAndSizing.md#minimum-width) - [Multi-style](properties_Text.md#multi-style) - [Number Format](properties_Display.md#number-format) - [Object Name](properties_Object.md#object-name) - [Picture Format](properties_Display.md#picture-format) - [Resizable](properties_ResizingOptions.md#resizable) - [Required List](properties_RangeOfValues.md#required-list) - [Row Background Color Array](properties_BackgroundAndBorder.md#row-background-color-array) - [Row Font Color Array](properties_Text.md#row-font-color-array) - [Row Style Array](properties_Text.md#row-style-array) - [Save as](properties_DataSource.md#save-as) - [Style Expression](properties_Text.md#style-expression) - [Text when False/Text when True](properties_Display.md#text-when-falsetext-when-true) - [Time Format](properties_Display.md#time-format) - [Truncate with ellipsis](properties_Display.md#truncate-with-ellipsis) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Alignment](properties_Text.md#vertical-alignment) - [Vertical Padding](properties_CoordinatesAndSizing.md#vertical-padding) - [Width](properties_CoordinatesAndSizing.md#width) - [Wordwrap](properties_Display.md#wordwrap) +[Formato Alfa](properties_Display.md#alpha-format) - [Color de fondo alternativo](properties_BackgroundAndBorder.md#alternate-background-color) - [Altura de línea automática](properties_CoordinatesAndSizing.md#automatic-row-height) - [Color de fondo](properties_BackgroundAndBorder.md#background-color--fill-color) - [Expresión de color de fondo](properties_BackgroundAndBorder.md#background-color-expression) - [Negrita](properties_Text.md#bold) - [Lista de selección](properties_DataSource.md#choice-list) - [Clase](properties_Object.md#css-class) - [Menú contexto](properties_Entry.md#context-menu) - [Tipo de datos (selección y columna de list box colección)](properties_DataSource.md#data-type-list) - [Formato Fecha](properties_Display.md#date-format) - [Valores por defecto](properties_DataSource.md#default-list-of-values) - [Tipo de visualización](properties_Display.md#display-type) - [Editable](properties_Entry.md#enterable) - [Filtro de entrada](properties_Entry.md#entry-filter) - [Lista excluída](properties_RangeOfValues.md#excluded-list) - [Expresión](properties_DataSource.md#expression) - [Tipo de expresión (column de list box array)](properties_Object.md#expression-type) - [Fuente](properties_Text.md#font) - [Color de fuente](properties_Text.md#font-color) - [Alineación Horizontal](properties_Text.md#horizontal-alignment) - [Relleno Horizontal](properties_CoordinatesAndSizing.md#horizontal-padding) - [Itálica](properties_Text.md#italic) - [Invisible](properties_Display.md#visibility) - [Ancho máximo](properties_CoordinatesAndSizing.md#maximum-width) - [Método](properties_Action.md#method) - [Ancho mínimo](properties_CoordinatesAndSizing.md#minimum-width) - [Multiestilo](properties_Text.md#multi-style) - [Formato número](properties_Display.md#number-format) - [Nombre de objeto](properties_Object.md#object-name) - [Formato Imagen](properties_Display.md#picture-format) - [Redimensionable](properties_ResizingOptions.md#resizable) - [Lista requerida](properties_RangeOfValues.md#required-list) - [Array de color de fondo de línea](properties_BackgroundAndBorder.md#row-background-color-array) - [Array de color de fuente de línea](properties_Text.md#row-font-color-) - [Array de estilo de línea](properties_Text.md#row-style-array) - [Guardar como](properties_DataSource.md#save-as) - [Expresión de estilo](properties_Text.md#style-expression) - [Texto cuando False/Texto cuando True](properties_Display.md#text-when-falsetext-when-true) - [Formato Hora](properties_Display.md#time-format) - [Truncar con elipsis](properties_Display.md#truncate-with-ellipsis) - [Subrayar](properties_Text.md#underline) - [Variable o Expresión](properties_Object.md#variable-or-expression) - Alineación +Vertical - [Relleno vertical](properties_CoordinatesAndSizing.md#vertical-padding) - [Ancho](properties_CoordinatesAndSizing.md#width) - [Ajuste de palabras](properties_Display.md#wordwrap) -### Eventos de formulario soportados {#supported-form-events-1} +### Eventos formulario soportados {#supported-form-events-1} | Evento formulario | Propiedades adicionales devueltas (ver [Evento formulario](../commands/form-event.md) para las propiedades principales) | Comentarios | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -521,14 +522,14 @@ Puede activar o desactivar la ordenación usuario estándar desactivando la prop El soporte de ordenación estándar depende del tipo de list box: -| Tipo de list box | Soporte de ordenación estándar | Comentarios | -| ------------------------------ | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Colección de objetos | Sí |
    • Las columnas "This.a" o "This.a.b" son ordenables.
    • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
    | -| Colección de valores escalares | No | Utilice la ordenación personalizada con la función [`orderBy()`](../API/CollectionClass.md#orderby) | -| Entity selection | Sí |
  • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
  • Supported: sorts on object attribute properties (e.g. "This.data.city" when "data" is an object attribute)
  • Supported: sorts on related attributes (e.g. "This.company.name")
  • Not supported: sorts on object attribute properties through related attributes (e.g. "This.company.data.city"). Para ello, debe utilizar la ordenación personalizada con la función [`orderByFormula()`](../API/EntitySelectionClass.md#orderbyformula) (ver el siguiente ejemplo)
  • | -| Selección actual | Sí | Sólo se pueden ordenar las expresiones simples (por ejemplo, `[Table_1]Campo_2`) | -| Selección temporal | No | | -| Arrays | Sí | Las columnas vinculadas a arrays de imágenes y punteros no se pueden ordenar | +| Tipo de list box | Soporte de ordenación estándar | Comentarios | +| ------------------------------ | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Colección de objetos | Sí |
    • Las columnas "This.a" o "This.a.b" son ordenables.
    • La [propiedad source del list box](properties_Object.md#variable-or-expression) debe ser una [expresión asignable](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
    | +| Colección de valores escalares | No | Utilice la ordenación personalizada con la función [`orderBy()`](../API/CollectionClass.md#orderby) | +| Entity selection | Sí |
  • La [propiedad source del list box](properties_Object.md#variable-or-expression) debe ser una [expresión asignable](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
  • Soportado: ordena en las propiedades de atributos de objetos (por ejemplo, "This.data.city" cuando "data" es un atributo de objeto)
  • Soportado: ordena en atributos relacionados (por ejemplo, "This.company.name")
  • No soportado: ordena por propiedades de atributos de objeto a través de atributos relacionados (por ejemplo, "This.company.data.city"). Para ello, debe utilizar la ordenación personalizada con la función [`orderByFormula()`](../API/EntitySelectionClass.md#orderbyformula) (ver el siguiente ejemplo)
  • | +| Selección actual | Sí | Sólo se pueden ordenar las expresiones simples (por ejemplo, `[Table_1]Campo_2`) | +| Selección temporal | No | | +| Arrays | Sí | Las columnas vinculadas a arrays de imágenes y punteros no se pueden ordenar | ### Ordenación personalizada @@ -650,14 +651,14 @@ La impresión de un list box en modo vista previa consiste en imprimir directame ### Modo avanzado -En este modo, la impresión de los list box se realiza por programación, a través del comando `Print object` (se soportan los formularios proyecto y los formularios tabla). The [`LISTBOX GET PRINT INFORMATION`](../commands/listbox-get-print-information) command is used to control the printing of the object. +En este modo, la impresión de los list box se realiza por programación, a través del comando `Print object` (se soportan los formularios proyecto y los formularios tabla). El comando [`LISTBOX GET PRINT INFORMATION`](../commands/listbox-get-print-information) se utiliza para controlar la impresión del objeto. En este modo: -- La altura del objeto list box se reduce automáticamente cuando el número de líneas a imprimir es inferior a la altura original del objeto (no se imprimen líneas "vacías"). Por el contrario, la altura no aumenta automáticamente en función del contenido del objeto. The size of the object actually printed can be obtained via the [`LISTBOX GET PRINT INFORMATION`](../commands/listbox-get-print-information) command. +- La altura del objeto list box se reduce automáticamente cuando el número de líneas a imprimir es inferior a la altura original del objeto (no se imprimen líneas "vacías"). Por el contrario, la altura no aumenta automáticamente en función del contenido del objeto. El tamaño del objeto realmente impreso puede obtenerse mediante el comando [`LISTBOX GET PRINT INFORMATION`](../commands/listbox-get-print-information). - El objeto list box se imprime "tal cual", es decir, teniendo en cuenta sus parámetros de visualización actuales: visibilidad de los encabezados y de las rejillas, líneas ocultas y mostradas, etc. - These parameters also include the first row to be printed: if you call the [`OBJECT SET SCROLL POSITION`](../commands/object-set-scroll-position) command before launching the printing, the first row printed in the list box will be the one designated by the command. -- Un mecanismo automático facilita la impresión de los list box que contienen más líneas de las que es posible mostrar: se pueden realizar llamadas sucesivas a `Print object` para imprimir cada vez un nuevo conjunto de líneas. The [`LISTBOX GET PRINT INFORMATION`](../commands/listbox-get-print-information) command can be used to check the status of the printing while it is underway. + Estos parámetros también incluyen la primera línea a imprimir: si llama al comando [`OBJECT SET SCROLL POSITION`](../commands/object-set-scroll-position) antes de lanzar la impresión, la primera línea impresa en el list box será la designada por el comando. +- Un mecanismo automático facilita la impresión de los list box que contienen más líneas de las que es posible mostrar: se pueden realizar llamadas sucesivas a `Print object` para imprimir cada vez un nuevo conjunto de líneas. El comando [`LISTBOX GET PRINT INFORMATION`](../commands/listbox-get-print-information) se puede utilizar para comprobar el estado de la impresión mientras se está realizando. ## List box jerárquicos @@ -673,7 +674,7 @@ Para definir un list box jerárquico, existen varias posibilidades: - Configurar manualmente los elementos jerárquicos utilizando la lista de propiedades del editor de formularios (o editar el formulario JSON). - Generar visualmente la jerarquía utilizando el menú emergente de gestión de list box, en el editor de formularios. -- Use the [`LISTBOX SET HIERARCHY`](../commands-legacy/listbox-set-hierarchy.md) and [`LISTBOX GET HIERARCHY`](../commands-legacy/listbox-get-hierarchy.md) commands. +- Utilice los comandos [`LISTBOX SET HIERARCHY`](../commands-legacy/listbox-set-hierarchy.md) y [`LISTBOX GET HIERARCHY`](../commands-legacy/listbox-get-hierarchy.md). #### Propiedades del List Box jerárquico @@ -796,7 +797,7 @@ Representación jerárquica: > Si una o más líneas están ocultas porque sus padres están contraídos, ya no se seleccionan. Sólo se pueden seleccionar las líneas visibles (directamente o por desplazamiento). En otras palabras, las líneas no pueden estar ocultas y seleccionadas a la vez. -As with selections, the [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) command will return the same values for a hierarchical list box and a non-hierarchical list box. This means that in both of the examples below, [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) will return the same position: (3;2). +Al igual que con las selecciones, el comando [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devolverá los mismos valores para un list box jerárquico que para un list box no jerárquico. Esto significa que en los dos ejemplos siguientes, [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devolverá la misma posición: (3;2). *Representación no jerárquica:* ![](../assets/en/FormObjects/hierarch9.png) @@ -808,11 +809,11 @@ Cuando se ocultan todas las líneas de una subjerarquía, la línea de ruptura s #### Líneas de quiebre -If the user selects a break row, [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) returns the first occurrence of the row in the corresponding array. En el caso siguiente: +Si el usuario selecciona una línea de interrupción, [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devuelve la primera aparición de la línea en el array correspondiente. En el caso siguiente: ![](../assets/en/FormObjects/hierarch11.png) -... [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devuelve (2;4). To select a break row by programming, you will need to use the [`LISTBOX SELECT BREAK`](../commands/listbox-select-break) command. +... [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devuelve (2;4). Para seleccionar una línea de ruptura por programación, deberá utilizar el comando [`LISTBOX SELECT BREAK`](../commands/listbox-select-break). Las líneas de rotura no se tienen en cuenta en los arrays internos utilizados para gestionar el aspecto gráfico de los list box (estilos y colores). No obstante, es posible modificar estas características para las líneas de ruptura mediante los comandos de gestión gráfica de los objetos. Basta con ejecutar los comandos adecuados en los arrays que constituyen la jerarquía. @@ -841,19 +842,19 @@ Resultado: Puede optimizar la visualización y gestión de los list box jerárquicos utilizando los eventos formulario `On Expand` y `On Collapse`. -Un list box jerárquico se construye a partir del contenido de sus arrays, por lo que sólo puede mostrarse cuando todos estos arrays están cargados en memoria. This makes it difficult to build large hierarchical list boxes based on arrays generated from data (through the [`SELECTION TO ARRAY`](../commands/selection-to-array) command), not only because of the display speed but also the memory used. +Un list box jerárquico se construye a partir del contenido de sus arrays, por lo que sólo puede mostrarse cuando todos estos arrays están cargados en memoria. Esto dificulta la generación de list box jerárquicos de gran tamaño basados en arrays generados a partir de datos (a través del comando [`SELECTION TO ARRAY`](../commands/selection-to-array)), no solo por la velocidad de visualización sino también por la memoria utilizada. -El uso de los eventos de formulario `On Expand` y `On Collapse` puede superar estas limitaciones: por ejemplo, puede mostrar sólo una parte de la jerarquía y cargar/descargar los arrays sobre la marcha, basándose en las acciones del usuario. In the context of these events, the [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) command returns the cell where the user clicked in order to expand or collapse a row. +El uso de los eventos de formulario `On Expand` y `On Collapse` puede superar estas limitaciones: por ejemplo, puede mostrar sólo una parte de la jerarquía y cargar/descargar los arrays sobre la marcha, basándose en las acciones del usuario. En el contexto de estos eventos, el comando [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devuelve la celda en la que el usuario hizo clic para expandir o contraer una línea. En este caso, debe llenar y vaciar los arrays por código. Los principios que deben aplicarse son: - Cuando se muestra el list box, sólo se debe llenar el primer array. Sin embargo, debe crear un segundo array con valores vacíos para que el list box muestre los botones desplegar/contraer: ![](../assets/en/FormObjects/hierarch15.png) -- Cuando un usuario hace clic en un botón de expandir, puede procesar el evento `On Expand`. The [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) command returns the cell concerned and lets you build the appropriate hierarchy: you fill the first array with the repeated values and the second with the values sent from the [`SELECTION TO ARRAY`](../commands/selection-to-array) command and you insert as many rows as needed in the list box using the [`LISTBOX INSERT ROWS`](../commands/listbox-insert-rows) command. +- Cuando un usuario hace clic en un botón de expandir, puede procesar el evento `On Expand`. El comando [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devuelve la celda en cuestión y permite construir la jerarquía adecuada: se llena el primer array con los valores repetidos y el segundo con los valores enviados desde el comando [`SELECTION TO ARRAY`](../commands/selection-to-array) y se insertan tantas líneas como sean necesarias en el list box mediante el comando [`LISTBOX INSERT ROWS`](../commands/listbox-insert-rows). ![](../assets/en/FormObjects/hierarch16.png) -- Cuando un usuario hace clic en un botón de contracción, puede procesar el evento `On Collapse`. The [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) command returns the cell concerned: you remove as many rows as needed from the list box using the [`LISTBOX DELETE ROWS`](../commands/listbox-delete-rows) command. +- Cuando un usuario hace clic en un botón de contracción, puede procesar el evento `On Collapse`. El comando [`LISTBOX GET CELL POSITION`](../commands/listbox-get-cell-position) devuelve la celda en cuestión: se eliminan tantas líneas como sean necesarias del list box mediante el comando [`LISTBOX DELETE ROWS`](../commands/listbox-delete-rows). ## Arrays de objetos en columnas @@ -1001,9 +1002,9 @@ Estos atributos pueden utilizarse para controlar el rango de valores de entrada. El atributo behavior ofrece variaciones a la representación estándar de los valores. En 4D v15, se ofrece una única variación: -| Atributo | Valor(es) disponible(s) | valueType(s) | Descripción | -| -------- | ------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| behavior | threeStates | integer | Representa un valor numérico como una casilla de verificación de tres estados.
    2=semi-checked, 1=checked, 0=unchecked, -1=invisible, -2=unchecked disabled, -3=checked disabled, -4=semi-checked disabled | +| Atributo | Valor(es) disponible(s) | valueType(s) | Descripción | +| -------- | ------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| behavior | threeStates | integer | Representa un valor numérico como una casilla de verificación de tres estados.
    2=semi seleccionada, 1=seleccionada, 0=no seleccionada, -1=invisible, -2= deseleccionada desactivada, -3= seleccionada desactivada, -4=semi seleccionada desactivada | ```4d C_OBJECT($ob3) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md index 8c82c06835134d..ecda94659901ce 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md @@ -84,7 +84,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | showVerticalScrollbar | boolean | Mostrar la barra de desplazamiento vertical. | | tabEditable | boolean | La pestaña de la hoja se puede editar. | | tabNavigationVisible | boolean | Mostrar la navegación por pestañas. | -| tabStripPosition | number | Posición de la barra de pestañas. Available values:
    ConstantValueDescription
    vk tab strip position bottom 0 Tab strip position is relative to the bottom of the workbook.
    vk tab strip position left2 La posición de la barra de tabulación es relativa a la parte izquierda del libro de trabajo.
    vk tab strip position right 3 Tab strip position is relative to the right of the workbook.
    vk tab strip position top 1 La posición de la barra de tabulación es relativa a la parte superior del libro de trabajo.
    | +| tabStripPosition | number | Posición de la barra de pestañas. Available values:
    ConstantValueDescription
    vk tab strip position bottom 0 Tab strip position is relative to the bottom of the workbook.
    vk tab strip position left2 La posición de la barra de tabulación es relativa a la parte izquierda del libro de trabajo.
    vk tab strip position right 3 La posición de la barra de tabulación es relativa a la parte derecha del libro de trabajo.
    vk tab strip position top 1 La posición de la barra de tabulación es relativa a la parte superior del libro de trabajo.
    | | tabStripRatio | number | Valor porcentual (0,x) que especifica qué parte del espacio horizontal se asignará al tabulador. El resto del área horizontal (1 - 0.x) se asignará a la barra de desplazamiento horizontal. | | tabStripVisible | boolean | Mostrar la barra de pestañas de la hoja. | | tabStripWidth | number | Ancho de la etiqueta cuando la posición es izquierda o derecha. Por defecto y el mínimo es 80. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md index 1afca4411910ff..f6e3baea8fec88 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/qodly-studio.md @@ -94,7 +94,7 @@ La página Qodly Studio está disponible cuando el [servidor web WebAdmin está Hay dos formas de acceder a Qodly Studio: -- by selecting the **Qodly Studio...** menu command from the **Design** menu (4D single-user) or the **Window** menu (4D Server). +- seleccionando el comando **Qodly Studio...** del menú **Diseño** (4D monousuario) o del menú **Ventana** (4D Server). Si el servidor web WebAdmin ya está en funcionamiento, dependiendo de su configuración, su navegador por defecto se abre en `IPaddress:HTTPPort/studio` o `IPaddress:HTTPSPort/studio`. De lo contrario, se le preguntará si desea iniciar primero el servidor web WebAdmin. - on a browser, with the WebAdmin web server running (launched from 4D or 4D Server), enter the following address:
    diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/webServerConfig.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/webServerConfig.md index 53a74bd7541a51..0ac1944d35da85 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/webServerConfig.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WebServer/webServerConfig.md @@ -624,7 +624,7 @@ En algunos casos, se pueden invocar otras funciones internas optimizadas. Las co Dos opciones le permiten definir cómo funcionan las conexiones persistentes: - **Número de peticiones por conexión**: permite definir el número máximo de peticiones y de respuestas capaces de viajar por una conexión persistente. Limiting the number of requests per connection allows you to prevent server flooding due to a large number of incoming requests (a technique used by hackers).

    - The default value (100) can be increased or decreased depending on the resources of the machine hosting the 4D Web Server.

    + El valor por defecto (100) puede ser aumentado o disminuido en función de los recursos de la máquina que aloja el servidor 4D web.

    - **Tiempo de espera antes de desconexión**: este valor define el periodo máximo de espera (en segundos) durante el cual el servidor web mantiene una conexión TCP abierta sin recibir ninguna petición del navegador web. Una vez finalizado este periodo, el servidor cierra la conexión.

    Si el navegador web envía una solicitud después de cerrar la conexión, se crea automáticamente una nueva conexión TCP. Esta operación no es visible para el usuario.

    diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-set-attributes.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-set-attributes.md index 997c3cd500b662..f8956a27455b98 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-set-attributes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-set-attributes.md @@ -19,7 +19,7 @@ displayed_sidebar: docs ## Descripción -El comando **WP SET ATTRIBUTES** le permite definir el valor de cualquier atributo en un rango, elemento, documento. This command gives you access to any kind of 4D Write Pro internal attribute: character, paragraph, document, table, or image. +El comando **WP SET ATTRIBUTES** le permite definir el valor de cualquier atributo en un rango, elemento, documento. Este comando le da acceso a cualquier tipo de atributo interno de 4D Write Pro: caracter, párrafo, documento, tabla o imagen. En *targetObj*, puede pasar: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md index 804a6618e11f27..f522a2f50248aa 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -La clase Collection gestiona variables de tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Una colección se inicializa con: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index 74b650aae99b35..804f8eff06d2f6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -La clase Collection gestiona variables de tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Una colección es inicializada con los comandos [`New collection`](../commands/new-collection.md) o [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md index f51a7c77821969..beae27552b3b35 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Develop/field-properties.md @@ -3,7 +3,7 @@ id: field-properties title: Propiedades de los campos --- -For other field properties, please refer to [doc.4d.com](https://doc.4d.com/4Dv21/4D/21/Field-properties.300-7676763.en.html). +Para otras propiedades de campos, consulte [doc.4d.com](https://doc.4d.com/4Dv21/4D/21/Field-properties.300-7676763.en.html). ## Class diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md index b83e90d6c6bd46..2e39bbd03477a7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/listbox_overview.md @@ -98,7 +98,7 @@ En el caso de un list box basado en la selección actual de una tabla, cualquier En este tipo de list box, cada columna debe estar asociada a una expresión. El contenido de cada línea se evalúa entonces por elemento de la colección o por entidad de la selección de entidades. -Cada elemento de la colección o cada entidad está disponible como un objeto al que se puede acceder a través de la palabra clave [This](../Concepts/classes.md#this). A column expression can be a property path, a project method, a variable, or any formula, accessing each entity or collection element object through `This`, for example `This.` (o `This.value` en caso de una colección de valores escalares). La expresión también puede ser un método proyecto, una variable o un elemento de array. +Cada elemento de la colección o cada entidad está disponible como un objeto al que se puede acceder a través de la palabra clave [This](../Concepts/classes.md#this). Una expresión de columna puede ser una ruta de propiedad, un método proyecto, una variable o cualquier fórmula, accediendo a cada entidad u objeto elemento de colección a través de `This`, por ejemplo `This.` (o `This.value` en caso de una colección de valores escalares). La expresión también puede ser un método proyecto, una variable o un elemento de array. Cuando la fuente de datos es una entity selection, cualquier modificación realizada del lado del list box se guarda automáticamente en la base de datos. Por otro lado, las modificaciones realizadas en la base de datos son visibles en el list box después de que se hayan recargado las entidades modificadas. @@ -521,14 +521,14 @@ Puede activar o desactivar la ordenación usuario estándar desactivando la prop El soporte de ordenación estándar depende del tipo de list box: -| Tipo de list box | Soporte de ordenación estándar | Comentarios | -| ------------------------------ | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Colección de objetos | Sí |
    • Las columnas "This.a" o "This.a.b" son ordenables.
    • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
    | -| Colección de valores escalares | No | Utilice la ordenación personalizada con la función [`orderBy()`](../API/CollectionClass.md#orderby) | -| Entity selection | Sí |
  • The [list box source property](properties_Object.md#variable-or-expression) must be an [assignable expression](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
  • Supported: sorts on object attribute properties (e.g. "This.data.city" when "data" is an object attribute)
  • Supported: sorts on related attributes (e.g. "This.company.name")
  • Not supported: sorts on object attribute properties through related attributes (e.g. "This.company.data.city"). Para ello, debe utilizar la ordenación personalizada con la función [`orderByFormula()`](../API/EntitySelectionClass.md#orderbyformula) (ver el siguiente ejemplo)
  • | -| Selección actual | Sí | Sólo se pueden ordenar las expresiones simples (por ejemplo, `[Table_1]Campo_2`) | -| Selección temporal | No | | -| Arrays | Sí | Las columnas vinculadas a arrays de imágenes y punteros no se pueden ordenar | +| Tipo de list box | Soporte de ordenación estándar | Comentarios | +| ------------------------------ | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Colección de objetos | Sí |
    • Las columnas "This.a" o "This.a.b" son ordenables.
    • La [propiedad source del list box](properties_Object.md#variable-or-expression) debe ser una [expresión asignable](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
    | +| Colección de valores escalares | No | Utilice la ordenación personalizada con la función [`orderBy()`](../API/CollectionClass.md#orderby) | +| Entity selection | Sí |
  • La [propiedad source del list box](properties_Object.md#variable-or-expression) debe ser una [expresión asignable](../Concepts/quick-tour.md#assignable-vs-non-assignable-expressions).
  • Soportado: ordena en las propiedades de atributos de objetos (por ejemplo, "This.data.city" cuando "data" es un atributo de objeto)
  • Soportado: ordena en atributos relacionados (por ejemplo, "This.company.name")
  • No soportado: ordena por propiedades de atributos de objeto a través de atributos relacionados (por ejemplo, "This.company.data.city"). Para ello, debe utilizar la ordenación personalizada con la función [`orderByFormula()`](../API/EntitySelectionClass.md#orderbyformula) (ver el siguiente ejemplo)
  • | +| Selección actual | Sí | Sólo se pueden ordenar las expresiones simples (por ejemplo, `[Table_1]Campo_2`) | +| Selección temporal | No | | +| Arrays | Sí | Las columnas vinculadas a arrays de imágenes y punteros no se pueden ordenar | ### Ordenación personalizada diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md index e351f89aa250f5..3327e911a240f8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -28,6 +28,7 @@ Lea [**Novedades en 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/), la ent - Nuevos comandos "trim" para eliminar los espacios iniciales y finales de una cadena: [`Trim`](../commands/trim.md), [`Trim start`](../commands/trim-start.md) y [`Trim end`](../commands/trim-end.md). - Los comandos [`Num`](../commands/num.md) y [`String`](../commands/string.md) han sido actualizados para soportar conversiones en diferentes bases (radix). - [**Lista de bugs corregidos**](https://bugs.4d.fr/fixedbugslist?version=21): lista de todos los bugs que se han corregido en 4D 21. +- [Notas de la versión de Qodly Pro 4D\*\*](https://developer.4d.com/qodly/4DQodlyPro/release-notes): novedades de Qodly Studio. #### Vista previa para desarrolladores diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index 87f74230e7ce29..e6a16ca3205296 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -453,7 +453,7 @@ Función evento afterSave($event : Object) Este evento se activa justo después de guardar una entidad en el archivo de datos, cuando se ha modificado al menos un atributo. No se ejecuta si no se ha tocado ningún atributo en la entidad. -This event is useful after saving data to propagate the save action outside the application or to execute administration tasks. Por ejemplo, se puede utilizar para enviar un correo electrónico de confirmación después de guardar los datos. O, en caso de error al guardar los datos, puede hacer una cancelación para restaurar un estado consistente de los datos. +Este evento es útil después de guardar datos para propagar la acción de guardar fuera de la aplicación o para ejecutar tareas de administración. Por ejemplo, se puede utilizar para enviar un correo electrónico de confirmación después de guardar los datos. O, en caso de error al guardar los datos, puede hacer una cancelación para restaurar un estado consistente de los datos. La función recibe un [objeto *event*](#event-parameter) como parámetro. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md index 8c82c06835134d..ecda94659901ce 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md @@ -84,7 +84,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | showVerticalScrollbar | boolean | Mostrar la barra de desplazamiento vertical. | | tabEditable | boolean | La pestaña de la hoja se puede editar. | | tabNavigationVisible | boolean | Mostrar la navegación por pestañas. | -| tabStripPosition | number | Posición de la barra de pestañas. Available values:
    ConstantValueDescription
    vk tab strip position bottom 0 Tab strip position is relative to the bottom of the workbook.
    vk tab strip position left2 La posición de la barra de tabulación es relativa a la parte izquierda del libro de trabajo.
    vk tab strip position right 3 Tab strip position is relative to the right of the workbook.
    vk tab strip position top 1 La posición de la barra de tabulación es relativa a la parte superior del libro de trabajo.
    | +| tabStripPosition | number | Posición de la barra de pestañas. Available values:
    ConstantValueDescription
    vk tab strip position bottom 0 Tab strip position is relative to the bottom of the workbook.
    vk tab strip position left2 La posición de la barra de tabulación es relativa a la parte izquierda del libro de trabajo.
    vk tab strip position right 3 La posición de la barra de tabulación es relativa a la parte derecha del libro de trabajo.
    vk tab strip position top 1 La posición de la barra de tabulación es relativa a la parte superior del libro de trabajo.
    | | tabStripRatio | number | Valor porcentual (0,x) que especifica qué parte del espacio horizontal se asignará al tabulador. El resto del área horizontal (1 - 0.x) se asignará a la barra de desplazamiento horizontal. | | tabStripVisible | boolean | Mostrar la barra de pestañas de la hoja. | | tabStripWidth | number | Ancho de la etiqueta cuando la posición es izquierda o derecha. Por defecto y el mínimo es 80. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md index 1afca4411910ff..f6e3baea8fec88 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/qodly-studio.md @@ -94,7 +94,7 @@ La página Qodly Studio está disponible cuando el [servidor web WebAdmin está Hay dos formas de acceder a Qodly Studio: -- by selecting the **Qodly Studio...** menu command from the **Design** menu (4D single-user) or the **Window** menu (4D Server). +- seleccionando el comando **Qodly Studio...** del menú **Diseño** (4D monousuario) o del menú **Ventana** (4D Server). Si el servidor web WebAdmin ya está en funcionamiento, dependiendo de su configuración, su navegador por defecto se abre en `IPaddress:HTTPPort/studio` o `IPaddress:HTTPSPort/studio`. De lo contrario, se le preguntará si desea iniciar primero el servidor web WebAdmin. - on a browser, with the WebAdmin web server running (launched from 4D or 4D Server), enter the following address:
    diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServerConfig.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServerConfig.md index e7cc4033c728fd..6c515cad28b161 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServerConfig.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/webServerConfig.md @@ -624,7 +624,7 @@ En algunos casos, se pueden invocar otras funciones internas optimizadas. Las co Dos opciones le permiten definir cómo funcionan las conexiones persistentes: - **Número de peticiones por conexión**: permite definir el número máximo de peticiones y de respuestas capaces de viajar por una conexión persistente. Limiting the number of requests per connection allows you to prevent server flooding due to a large number of incoming requests (a technique used by hackers).

    - The default value (100) can be increased or decreased depending on the resources of the machine hosting the 4D Web Server.

    + El valor por defecto (100) puede ser aumentado o disminuido en función de los recursos de la máquina que aloja el servidor 4D web.

    - **Tiempo de espera antes de desconexión**: este valor define el periodo máximo de espera (en segundos) durante el cual el servidor web mantiene una conexión TCP abierta sin recibir ninguna petición del navegador web. Una vez finalizado este periodo, el servidor cierra la conexión.

    Si el navegador web envía una solicitud después de cerrar la conexión, se crea automáticamente una nueva conexión TCP. Esta operación no es visible para el usuario.

    diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-set-attributes.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-set-attributes.md index 997c3cd500b662..f8956a27455b98 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-set-attributes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-set-attributes.md @@ -19,7 +19,7 @@ displayed_sidebar: docs ## Descripción -El comando **WP SET ATTRIBUTES** le permite definir el valor de cualquier atributo en un rango, elemento, documento. This command gives you access to any kind of 4D Write Pro internal attribute: character, paragraph, document, table, or image. +El comando **WP SET ATTRIBUTES** le permite definir el valor de cualquier atributo en un rango, elemento, documento. Este comando le da acceso a cualquier tipo de atributo interno de 4D Write Pro: caracter, párrafo, documento, tabla o imagen. En *targetObj*, puede pasar: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md index a95cc219922320..d0f2771d9fd7e4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/writeprointerface.md @@ -10,7 +10,7 @@ Un desarrollador 4D puede implementar fácilmente estas paletas en su aplicació ## Instalación y documentación -4D Write Pro Interface is a **4D component** that needs to be [installed in your project](../Project/components.md#overview). Los archivos fuente de 4D Write Pro Interface están [disponibles en Github](https://github.com/4d/4D-WritePro-Interface). +4D Write Pro Interface es un **componente 4D** que necesita ser [instalado en su proyecto](../Project/components.md#overview). Los archivos fuente de 4D Write Pro Interface están [disponibles en Github](https://github.com/4d/4D-WritePro-Interface). La documentación principal de [la interfaz de 4D Write Pro](https://doc.4d.com/4Dv20/4D/20/Entry-areas.300-6263967.en.html) se encuentra en el manual *Diseño 4D*. Encontrará a continuación: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md index 996a8855114733..fe00828500b736 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -La classe Collection gère les variables de type [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Une collection est initialisée avec les commandes [`New collection`](../commands/new-collection.md) ou [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md index a25daf3d4cb3a8..61f05df1675a24 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/DataClassClass.md @@ -939,7 +939,7 @@ Les formules contenues dans les requêtes peuvent recevoir des paramètres via $ - Constantes de type **date** : "YYYY-MM-DD" format - Constantes **null** : en utilisant le mot-clé "null", la recherche trouvera les propriétés ayant la valeur **null** et **undefined**. - dans le cas d'une recherche avec un comparateur IN, *value* doit être une collection ou des valeurs correspondant au type de l'attribut path entre \[ ] séparés par des virgules (pour les chaînes, les caractères `"` doivent être échappés avec `\`). - - **object**: only [4D.Vector](../API/VectorClass.md) objects are supported, in the context of [**vector similarity queries**](#query-by-vector-similarity) (*attributePath* must also contain valid 4D.Vector objects). + - **object** : seuls les objets [4D.Vector](../API/VectorClass.md) sont pris en charge dans le contexte des [**requêtes de similarité vectorielle**](#query-by-vector-similarity) (*attributePath* doit également contenir des objets 4D.Vector valides). - **logicalOperator** : utilisé pour relier des conditions multiples dans la recherche (optionnel). Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) : | Conjonction | Symbole(s) | @@ -1205,18 +1205,18 @@ var $comparisonVector := {vector : $myVector; metric : mk euclidean ; threshold var $results := ds.MyClass.query("myVectorField <= :1" ; $comparisonVector) ``` -The **order by** statement is supported in the query string so that entities in the resulting entity selection are sorted by similarity. Par exemple : +L'instruction **order by** est prise en charge dans la chaîne de requête afin que les entités de l'entity selection résultante soient triées par similarité. Par exemple : ```4d -var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) - //default order, the first entity is the most similar +var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField" ; $comparisonVector) + //ordre par défaut, la première entité est la plus similaire ``` -If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: +Si le même vecteur apparaît plusieurs fois dans la chaîne de requête, l'ordre par sera appliqué aux résultats du premier, par exemple : ```4d -var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc; / - {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by +var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc ; / + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 est utilisé pour le tri ``` Voir [plus d'exemples ci-dessous](#example-4-2) (exemples 4 et 5). diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md index 775991373d04a9..5fb15d7ce18c73 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md @@ -1738,13 +1738,13 @@ Dans cet exemple, le champ objet "marks" de la dataclass **Students** contient l
    Historique -| Release | Modifications | -| ------- | ----------------------------------------------------------- | -| 21 R2 | Support of order by with 4D.Vector searches | -| 21 | Prise en charge des objets 4D.Vector | -| 17 R6 | Prise en charge des paramètres Formula | -| 17 R5 | Prise en charge des placeholders pour les valeurs | -| 17 | Ajout | +| Release | Modifications | +| ------- | ------------------------------------------------------------------------- | +| 21 R2 | Prise en charge du tri dans les recherches avec 4D.Vector | +| 21 | Prise en charge des objets 4D.Vector | +| 17 R6 | Prise en charge des paramètres Formula | +| 17 R5 | Prise en charge des placeholders pour les valeurs | +| 17 | Ajout |
    diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md index 871da10a7e85fb..0ee203d1670692 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -La classe Collection gère les variables de type [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Une collection est initialisée avec : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index 996a8855114733..fe00828500b736 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -La classe Collection gère les variables de type [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Une collection est initialisée avec les commandes [`New collection`](../commands/new-collection.md) ou [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md index 72e22a49268788..0977fd38b0cc0c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -La classe Collection gère les variables de type [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Une collection est initialisée avec : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index 996a8855114733..fe00828500b736 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -La classe Collection gère les variables de type [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Une collection est initialisée avec les commandes [`New collection`](../commands/new-collection.md) ou [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md index 924056902d2efa..dfec26067fc6ec 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -28,6 +28,7 @@ Lisez [**Les nouveautés de 4D 21**](https://blog.4d.com/fe-whats-new-in-4d-v21/ - Nouvelles commandes "trim" pour supprimer les espaces de début et de fin d'une chaîne : [`Trim`](../commands/trim.md), [`Trim start`](../commands/trim-start.md), et [`Trim end`](../commands/trim-end.md). - Les commandes [`Num`](../commands/num.md) et [`String`](../commands/string.md) ont été mises à jour pour prendre en charge des conversions dans différentes bases (radix). - [**Liste des bugs corrigés**](https://bugs.4d.fr/fixedbugslist?version=21) : liste de tous les bugs qui ont été corrigés dans 4D 21. +- [**4D Qodly Pro Release notes**](https://developer.4d.com/qodly/4DQodlyPro/release-notes) : les nouveautés de Qodly Studio. #### Developer Preview diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/CollectionClass.md index dacbb262053954..0c30323f42f8ab 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -Collectionクラスは [コレクション](Concepts/dt_collection.md) 型の変数を扱います。 +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. コレクションは [`New collection`](../commands/new-collection.md) または [`New shared collection`](../commands/new-shared-collection.md) コマンドで初期化されます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index 89818163e45e1c..ee4a6405ee282c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -35,16 +35,16 @@ API 参照: **エラーのスロー:** `file` が4D.File あるいは 4D.Blob ではない場合、あるいは`purpose` がからの場合にはエラーがスローされます。 -#### Supported Purposes +#### サポートされている目的 -- `assistants`: Used in the Assistants API (⚠️ [deprecated by OpenAI](https://platform.openai.com/docs/assistants/whats-new)) -- `batch`: Used in the [Batch API](https://platform.openai.com/docs/api-reference/batch) (expires after 30 days by default) -- `fine-tune`: Used for [fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning) -- `vision`: Images used for vision fine-tuning -- `user_data`: Flexible file type for any purpose -- `evals`: Used for eval data sets +- `assistants`: Assistants API で使用されます (⚠️ [OpenAI では非推奨](https://platform.openai.com/docs/assistants/whats-new)) +- `batch`: [Batch API](https://platform.openai.com/docs/api-reference/batch) で使用されます (デフォルトでは 30 日後に失効します) +- `fine-tune`: [微調整](https://platform.openai.com/docs/api-reference/fine-tuning) で使用されます +- `vision`: ビジョンの微調整に使用される画像 +- `user_data`: 任意の目的のための柔軟なファイルタイプ +- `evals`: eval データセットに使用する -#### File Format Requirements +#### ファイルフォーマットの要件 - **Fine-tuning API:** Only supports `.jsonl` files with specific required formats - **Batch API:** Only supports `.jsonl` files up to 200 MB with specific required format diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md index 417448a7c043dc..e4564b2e20c22b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -Collectionクラスは [コレクション](Concepts/dt_collection.md) 型の変数を扱います。 +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. コレクションは次のように初期化します: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index dacbb262053954..0c30323f42f8ab 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -Collectionクラスは [コレクション](Concepts/dt_collection.md) 型の変数を扱います。 +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. コレクションは [`New collection`](../commands/new-collection.md) または [`New shared collection`](../commands/new-shared-collection.md) コマンドで初期化されます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md index 5ad3fbfcd1dcea..79379d85d4d3e3 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -Collectionクラスは [コレクション](Concepts/dt_collection.md) 型の変数を扱います。 +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. コレクションは次のように初期化します: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index dacbb262053954..0c30323f42f8ab 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -Collectionクラスは [コレクション](Concepts/dt_collection.md) 型の変数を扱います。 +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. コレクションは [`New collection`](../commands/new-collection.md) または [`New shared collection`](../commands/new-shared-collection.md) コマンドで初期化されます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md index 0d71e8b62ad493..3fcf4224eebe8d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -28,6 +28,7 @@ title: リリースノート - 文字列から先頭と末尾のスペースを削除する新しい "trim" 系コマンド: [`Trim`](../commands/trim.md)、[`Trim start`](../commands/trim-start.md)、および[`Trim end`](../commands/trim-end.md)。 - [`Num`](../commands/num.md) および [`String`](../commands/string.md) コマンドは、異なる基数での変換をサポートするようにアップデートされました。 - [**修正リスト**](https://bugs.4d.fr/fixedbugslist?version=21): 4D 21 で修正されたバグのリストです(日本語版は [こちら](https://4d-jp.github.io/2025/279/release-note-version-21/))。 +- [**4D Qodly Pro Release notes**](https://developer.4d.com/qodly/4DQodlyPro/release-notes): what's new in Qodly Studio. #### デベロッパー・プレビュー diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/current/API/CollectionClass.md index 412569850f005e..ff4715de39e28f 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -A classe Collection gerencia variáveis do tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Uma coleção é inicializada com os comandos [`New collection`](../commands/new-collection.md) ou [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md index 9b6231b4a39768..c0445f70e19440 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-19/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -A classe Collection gerencia variáveis de tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Uma coleção se inicializa com: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index 412569850f005e..ff4715de39e28f 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -A classe Collection gerencia variáveis do tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Uma coleção é inicializada com os comandos [`New collection`](../commands/new-collection.md) ou [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md index b5f89ecf509919..62a499e5b4c099 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/API/CollectionClass.md @@ -4,7 +4,7 @@ title: Collection --- -A classe Collection gerencia variáveis de tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Uma coleção se inicializa com: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index 412569850f005e..ff4715de39e28f 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -A classe Collection gerencia variáveis do tipo [Collection](Concepts/dt_collection.md). +The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. Uma coleção é inicializada com os comandos [`New collection`](../commands/new-collection.md) ou [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md index d12f4b9b0b6889..926d07e92f6642 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Notes/updates.md @@ -28,6 +28,7 @@ Leia [**O que há de novo no 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/ - New "trim" commands to remove leading and trailing spaces from a string: [`Trim`](../commands/trim.md), [`Trim start`](../commands/trim-start.md), and [`Trim end`](../commands/trim-end.md). - [`Num`](../commands/num.md) and [`String`](../commands/string.md) commands have been updated to support conversions in different bases (radix). - [**Fixed bug list**](https://bugs.4d.fr/fixedbugslist?version=21): list of all bugs that have been fixed in 4D 21. +- [**4D Qodly Pro Release notes**](https://developer.4d.com/qodly/4DQodlyPro/release-notes): what's new in Qodly Studio. #### Prévia do desenvolvedor From 9a7dcdb9e1d241768053799a7d5d6caa7bba22bd Mon Sep 17 00:00:00 2001 From: mouna-elmaazouzi <118451160+mouna-elmaazouzi@users.noreply.github.com> Date: Fri, 28 Nov 2025 16:01:48 +0100 Subject: [PATCH 57/75] Doc/web form web event from qodly script (#3013) * pages created (not updated yet) * pages updated + properties and see also added in the two commands * see also added in classes * links fixed * Update Web_Server.md * links updates * examples update 1st pass * Update web-event.md * few fixes * sidebar and index page * pictures added + other updates * temp screenshot added * version 21 done * screenshots fix * Update version-21-sidebars.json --- docs/API/WebFormClass.md | 137 +++++++++++------- docs/API/WebFormItemClass.md | 81 +++++++---- docs/assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes docs/assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes docs/assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes docs/assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes docs/assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes docs/assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes docs/assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes docs/commands/command-index.md | 2 + docs/commands/theme/Web_Server.md | 2 + docs/commands/web-event.md | 96 ++++++++++++ docs/commands/web-form.md | 46 ++++++ sidebars.js | 2 + versioned_docs/version-21/API/WebFormClass.md | 137 +++++++++++------- .../version-21/API/WebFormItemClass.md | 81 +++++++---- .../assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes .../assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes .../assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes .../assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes .../assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes .../assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes .../assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes .../version-21/commands/command-index.md | 2 + .../version-21/commands/theme/Web_Server.md | 2 + .../version-21/commands/web-event.md | 96 ++++++++++++ .../version-21/commands/web-form.md | 46 ++++++ versioned_sidebars/version-21-sidebars.json | 2 + 28 files changed, 570 insertions(+), 162 deletions(-) create mode 100644 docs/assets/en/API/webformClass-pic1.png create mode 100644 docs/assets/en/API/webformClass-pic2.png create mode 100644 docs/assets/en/API/webformClass-pic3.png create mode 100644 docs/assets/en/commands/web-event1.png create mode 100644 docs/assets/en/commands/web-event2.png create mode 100644 docs/assets/en/commands/web-event3.png create mode 100644 docs/assets/en/commands/web-event4.png create mode 100644 docs/commands/web-event.md create mode 100644 docs/commands/web-form.md create mode 100644 versioned_docs/version-21/assets/en/API/webformClass-pic1.png create mode 100644 versioned_docs/version-21/assets/en/API/webformClass-pic2.png create mode 100644 versioned_docs/version-21/assets/en/API/webformClass-pic3.png create mode 100644 versioned_docs/version-21/assets/en/commands/web-event1.png create mode 100644 versioned_docs/version-21/assets/en/commands/web-event2.png create mode 100644 versioned_docs/version-21/assets/en/commands/web-event3.png create mode 100644 versioned_docs/version-21/assets/en/commands/web-event4.png create mode 100644 versioned_docs/version-21/commands/web-event.md create mode 100644 versioned_docs/version-21/commands/web-form.md diff --git a/docs/API/WebFormClass.md b/docs/API/WebFormClass.md index f0d979948c54db..204d39ed54c721 100644 --- a/docs/API/WebFormClass.md +++ b/docs/API/WebFormClass.md @@ -4,7 +4,7 @@ title: WebForm --- -The `WebForm` class contains functions and properties allowing to handle your Qodly webform components. This class is detailed in the [Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass). +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    History @@ -16,21 +16,16 @@ The `WebForm` class contains functions and properties allowing to handle your Qo
    - - ### Commands and functions || |---| -|[](#componentname)
    | +|[](#componentname)
    | |[](#disablestate)
    | |[](#enablestate)
    | |[](#seterror)
    | |[](#setmessage)
    | |[](#setwarning)
    | -|[](#web-form)
    | -|[](#web-event)
    | - ### *.componentName* @@ -39,11 +34,27 @@ The `WebForm` class contains functions and properties allowing to handle your Qo #### Description -The components of webforms are objects that are available directly as properties of these webforms. +The components of web pages are objects that are available directly as properties of these web pages. + +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### Example + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page -For more information, please refer to the [`.componentName` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#componentname). +``` +:::info +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. +::: ### .disableState() @@ -52,20 +63,20 @@ For more information, please refer to the [`.componentName` description in the Q |Parameter|Type||Description| |---------|--- |:---:|------| -|state|string|->|Name of state to disable from the web form| +|state|string|->|Name of state to disable from the web page| #### Description -The `.disableState()` function disables the rendering of the *state* in the current web form. +The `.disableState()` function disables the rendering of the *state* in the current web page. This function does nothing if: -- the *state* is currently not enabled in the web form, -- the *state* does not exist for the web form. +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. If you [enable](#enablestate) or disable several states in the same user function, all modifications are sent at the same time to the client once the function ends. -For more information on web form states, please refer to [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web pages states, please refer to [States section on developer.qodly.com](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). @@ -77,26 +88,26 @@ For more information on web form states, please refer to [developer.qodly.com](h |Parameter|Type||Description| |---------|--- |:---:|------| -|state|string|->|Name of state to enable on the web form| +|state|string|->|Name of state to enable on the web pages| #### Description -The `.enableState()` function enables the rendering of the *state* in the current web form. +The `.enableState()` function enables the rendering of the *state* in the current web page. This function does nothing if: -- the *state* has already been enabled on the web form, -- the *state* does not exist for the web form. +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. If you enable or [disable](#disablestate) several states within the same user function, all modifications are sent at the same time to the client once the function ends. -For more information on web form states, please refer to [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web page states, please refer to [States section on developer.qodly.com](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Example You enable a specific state named "wrongCredentials" in case of error in your login page: -```4d +```4d Function authenticationError() If (Session.info.type#"remote") Web Form.enableState("wrongCredentials") @@ -111,16 +122,31 @@ Function authenticationError() |Parameter|Type||Description| |---------|--- |:---:|------| -|msg|string|->|Error message to display in the web form| +|msg|string|->|Error message to display in the web page| #### Description -The `.setError()` function sends *msg* as an error message to the web form. +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". -For more information, please refer to the [`.setError()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#seterror). +#### Example + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -129,62 +155,67 @@ For more information, please refer to the [`.setError()` description in the Qodl |Parameter|Type||Description| |---------|--- |:---:|------| -|msg|string|->|Information message to display in the web form| +|msg|string|->|Information message to display in the web page| #### Description -The `.setMessage()` function sends *msg* as an information message to the web form. - -For more information, please refer to the [`.setMessage()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#setmessage). +The `.setMessage()` function sends *msg* as an information message to the web page. +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() +#### Example -**.setWarning**( *msg* : string) +```4d +shared singleton Class constructor() +exposed function myMessage() - -|Parameter|Type||Description| -|---------|--- |:---:|------| -|msg|string|->|Warning message to display in the web form| - +var myForm : 4D.WebForm +myForm:=web Form -#### Description +myForm.setMessage("My information message") -The `.setWarning()` function sends *msg* as a warning message to the web form. +``` -For more information, please refer to the [`.setWarning()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#setwarning). +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + |Parameter|Type||Description| |---------|--- |:---:|------| -|Result|4D.WebForm|<-|New `WebForm` proxy object +|msg|string|->|Warning message to display in the web page| #### Description -The `Web Form` command returns a `4D.WebForm` proxy object that allows you to interact with the web form. +The `.setWarning()` function sends *msg* as a warning message to the web page. -For more information, please refer to the [`webForm` command description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#webform). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". +#### Example -## Web Event +```4d +shared singleton Class constructor() +exposed function myWarning() -**Web Event** : Object +var myForm : 4D.WebForm +myForm:=web Form - -|Parameter|Type||Description| -|---------|--- |:---:|------| -|Result|object|<-| object - +myForm.setWarning("My warning message") -#### Description +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: + +![](../assets/en/API/webformClass-pic3.png) -The `Web Event` command returns an object with information on a triggered event linked to a webform component. +## See also -For more information, please refer to the [`webEvent` command description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#webevent). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/docs/API/WebFormItemClass.md b/docs/API/WebFormItemClass.md index 79a1f83eb19747..e21473dece77d5 100644 --- a/docs/API/WebFormItemClass.md +++ b/docs/API/WebFormItemClass.md @@ -4,9 +4,13 @@ title: WebFormItem --- -`4D.WebFormItem` objects are properties of the [`4D.WebForm`](WebFormItemClass.md) object returned by the [`Web Form`](WebFormClass.md#web-form) command. +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -The `WebFormItem` class is detailed in the [Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass). +`4D.WebFormItem` objects are properties of the [`4D.WebForm`](WebFormClass.md) object returned by the [`Web Form`](../commands/web-form.md) command. + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    History @@ -27,31 +31,28 @@ The `WebFormItem` class is detailed in the [Qodly documentation](https://develop |[](#show)
    | -### .hide() -**.hide**() +### .addCSSClass() - +**.addCSSClass**(*className* : string) + + |Parameter|Type||Description| |---------|--- |:---:|------| -||||Does not require any parameters| +|className|string|->|Name of the CSS class to add to the component| - #### Description -The `.hide()` function hides the component. - - -For more information, please refer to the [`.hide()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass#hide). +The `.addCSSClass` function adds the class specified in *className* to the component. -### .show() -**.show**() +### .hide() +**.hide**() - + |Parameter|Type||Description| |---------|--- |:---:|------| ||||Does not require any parameters| @@ -60,44 +61,68 @@ For more information, please refer to the [`.hide()` description in the Qodly do #### Description -The `.show()` function makes the component visible. +The `.hide()` function hides the component. -For more information, please refer to the [`.show()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass#show). +#### Example +To call a function that hides an image when the user clicks a button: -### .addCSSClass() +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -**.addCSSClass**(*className* : string) +```4d - +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. + + + +### .removeCSSClass() + + +**.removeCSSClass**(*className*: string) + + |Parameter|Type||Description| |---------|--- |:---:|------| -|className|string|->|Name of the CSS class to add to the component| +|className|string|->|Name of the CSS class to remove from the component| #### Description -The `.addCSSClass` function adds the class specified in *className* to the component. +The `.removeCSSClass()` function removes the class specified in *className* from the component. -For more information, please refer to the [`.addCSSClass` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass). -### .removeCSSClass() +### .show() +**.show**() -**.removeCSSClass**(*className*: string) - + |Parameter|Type||Description| |---------|--- |:---:|------| -|className|string|->|Name of the CSS class to remove from the component| +||||Does not require any parameters| + #### Description -The `.removeCSSClass()` function removes the class specified in *className* from the component. +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + + +## See also -For more information, please refer to the [`.removeCSSClass()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/docs/assets/en/API/webformClass-pic1.png b/docs/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/docs/assets/en/commands/web-event2.png b/docs/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 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 J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/docs/assets/en/commands/web-event3.png b/docs/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/docs/assets/en/commands/web-event4.png b/docs/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/docs/commands/command-index.md b/docs/commands/command-index.md index b0f8e1145acbba..361980267b1377 100644 --- a/docs/commands/command-index.md +++ b/docs/commands/command-index.md @@ -1290,6 +1290,8 @@ title: Commands by name [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/docs/commands/theme/Web_Server.md b/docs/commands/theme/Web_Server.md index 8bc434863cf998..4dce6a465e0174 100644 --- a/docs/commands/theme/Web_Server.md +++ b/docs/commands/theme/Web_Server.md @@ -8,6 +8,8 @@ slug: /commands/theme/Web-Server || |---| +|[](../../commands/web-event.md)
    | +|[](../../commands/web-form.md)
    | |[](../../commands-legacy/web-get-body-part.md)
    | |[](../../commands-legacy/web-get-body-part-count.md)
    | |[](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/docs/commands/web-event.md b/docs/commands/web-event.md new file mode 100644 index 00000000000000..a2811194ad76a1 --- /dev/null +++ b/docs/commands/web-event.md @@ -0,0 +1,96 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + +|Parameter|Type| |Description| +|---------|--- |:---:|------| +|Result|Object|←|Information on the triggered event | + + + +## Description + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**Result** + +The returned object contains the following properties: + +| Property | |Type| Description | +|----|---|----|----| +| caller | |string| [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | |string| Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | |object|Additional information depending on the involved component| +| |index |number|
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| |row |number|Data Table component: row number | +| |name |string|Data Table component: qodlysource name of the column (e.g. "firstname", "address.city")| + +#### Example + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +* The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +* The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +* The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## See also + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Properties + +| | | +| --- | --- | +| Command number | 1734 | +| Thread safe | ✗ | + diff --git a/docs/commands/web-form.md b/docs/commands/web-form.md new file mode 100644 index 00000000000000..1ee0923f99a51a --- /dev/null +++ b/docs/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + +|Parameter|Type| |Description| +|---------|--- |:---:|------| +|Result|4D.WebForm|←|New `Web Form` proxy object| + + +## Description + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + + +## See also + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Properties + +| | | +| --- | --- | +| Command number | 1735 | +| Thread safe | ✗ | + + + + diff --git a/sidebars.js b/sidebars.js index 2738cb9d01f5bb..1f8946e677c352 100644 --- a/sidebars.js +++ b/sidebars.js @@ -2022,6 +2022,8 @@ module.exports = "id": "commands/theme/Web_Server_theme" }, "items": [ + "commands/web-event", + "commands/web-form", "commands-legacy/web-get-body-part", "commands-legacy/web-get-body-part-count", "commands-legacy/web-get-current-session-id", diff --git a/versioned_docs/version-21/API/WebFormClass.md b/versioned_docs/version-21/API/WebFormClass.md index f0d979948c54db..204d39ed54c721 100644 --- a/versioned_docs/version-21/API/WebFormClass.md +++ b/versioned_docs/version-21/API/WebFormClass.md @@ -4,7 +4,7 @@ title: WebForm --- -The `WebForm` class contains functions and properties allowing to handle your Qodly webform components. This class is detailed in the [Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass). +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    History @@ -16,21 +16,16 @@ The `WebForm` class contains functions and properties allowing to handle your Qo
    - - ### Commands and functions || |---| -|[](#componentname)
    | +|[](#componentname)
    | |[](#disablestate)
    | |[](#enablestate)
    | |[](#seterror)
    | |[](#setmessage)
    | |[](#setwarning)
    | -|[](#web-form)
    | -|[](#web-event)
    | - ### *.componentName* @@ -39,11 +34,27 @@ The `WebForm` class contains functions and properties allowing to handle your Qo #### Description -The components of webforms are objects that are available directly as properties of these webforms. +The components of web pages are objects that are available directly as properties of these web pages. + +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### Example + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page -For more information, please refer to the [`.componentName` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#componentname). +``` +:::info +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. +::: ### .disableState() @@ -52,20 +63,20 @@ For more information, please refer to the [`.componentName` description in the Q |Parameter|Type||Description| |---------|--- |:---:|------| -|state|string|->|Name of state to disable from the web form| +|state|string|->|Name of state to disable from the web page| #### Description -The `.disableState()` function disables the rendering of the *state* in the current web form. +The `.disableState()` function disables the rendering of the *state* in the current web page. This function does nothing if: -- the *state* is currently not enabled in the web form, -- the *state* does not exist for the web form. +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. If you [enable](#enablestate) or disable several states in the same user function, all modifications are sent at the same time to the client once the function ends. -For more information on web form states, please refer to [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web pages states, please refer to [States section on developer.qodly.com](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). @@ -77,26 +88,26 @@ For more information on web form states, please refer to [developer.qodly.com](h |Parameter|Type||Description| |---------|--- |:---:|------| -|state|string|->|Name of state to enable on the web form| +|state|string|->|Name of state to enable on the web pages| #### Description -The `.enableState()` function enables the rendering of the *state* in the current web form. +The `.enableState()` function enables the rendering of the *state* in the current web page. This function does nothing if: -- the *state* has already been enabled on the web form, -- the *state* does not exist for the web form. +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. If you enable or [disable](#disablestate) several states within the same user function, all modifications are sent at the same time to the client once the function ends. -For more information on web form states, please refer to [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web page states, please refer to [States section on developer.qodly.com](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Example You enable a specific state named "wrongCredentials" in case of error in your login page: -```4d +```4d Function authenticationError() If (Session.info.type#"remote") Web Form.enableState("wrongCredentials") @@ -111,16 +122,31 @@ Function authenticationError() |Parameter|Type||Description| |---------|--- |:---:|------| -|msg|string|->|Error message to display in the web form| +|msg|string|->|Error message to display in the web page| #### Description -The `.setError()` function sends *msg* as an error message to the web form. +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". -For more information, please refer to the [`.setError()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#seterror). +#### Example + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -129,62 +155,67 @@ For more information, please refer to the [`.setError()` description in the Qodl |Parameter|Type||Description| |---------|--- |:---:|------| -|msg|string|->|Information message to display in the web form| +|msg|string|->|Information message to display in the web page| #### Description -The `.setMessage()` function sends *msg* as an information message to the web form. - -For more information, please refer to the [`.setMessage()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#setmessage). +The `.setMessage()` function sends *msg* as an information message to the web page. +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() +#### Example -**.setWarning**( *msg* : string) +```4d +shared singleton Class constructor() +exposed function myMessage() - -|Parameter|Type||Description| -|---------|--- |:---:|------| -|msg|string|->|Warning message to display in the web form| - +var myForm : 4D.WebForm +myForm:=web Form -#### Description +myForm.setMessage("My information message") -The `.setWarning()` function sends *msg* as a warning message to the web form. +``` -For more information, please refer to the [`.setWarning()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#setwarning). +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + |Parameter|Type||Description| |---------|--- |:---:|------| -|Result|4D.WebForm|<-|New `WebForm` proxy object +|msg|string|->|Warning message to display in the web page| #### Description -The `Web Form` command returns a `4D.WebForm` proxy object that allows you to interact with the web form. +The `.setWarning()` function sends *msg* as a warning message to the web page. -For more information, please refer to the [`webForm` command description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#webform). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". +#### Example -## Web Event +```4d +shared singleton Class constructor() +exposed function myWarning() -**Web Event** : Object +var myForm : 4D.WebForm +myForm:=web Form - -|Parameter|Type||Description| -|---------|--- |:---:|------| -|Result|object|<-| object - +myForm.setWarning("My warning message") -#### Description +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: + +![](../assets/en/API/webformClass-pic3.png) -The `Web Event` command returns an object with information on a triggered event linked to a webform component. +## See also -For more information, please refer to the [`webEvent` command description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormClass#webevent). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/versioned_docs/version-21/API/WebFormItemClass.md b/versioned_docs/version-21/API/WebFormItemClass.md index 79a1f83eb19747..e21473dece77d5 100644 --- a/versioned_docs/version-21/API/WebFormItemClass.md +++ b/versioned_docs/version-21/API/WebFormItemClass.md @@ -4,9 +4,13 @@ title: WebFormItem --- -`4D.WebFormItem` objects are properties of the [`4D.WebForm`](WebFormItemClass.md) object returned by the [`Web Form`](WebFormClass.md#web-form) command. +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -The `WebFormItem` class is detailed in the [Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass). +`4D.WebFormItem` objects are properties of the [`4D.WebForm`](WebFormClass.md) object returned by the [`Web Form`](../commands/web-form.md) command. + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    History @@ -27,31 +31,28 @@ The `WebFormItem` class is detailed in the [Qodly documentation](https://develop |[](#show)
    | -### .hide() -**.hide**() +### .addCSSClass() - +**.addCSSClass**(*className* : string) + + |Parameter|Type||Description| |---------|--- |:---:|------| -||||Does not require any parameters| +|className|string|->|Name of the CSS class to add to the component| - #### Description -The `.hide()` function hides the component. - - -For more information, please refer to the [`.hide()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass#hide). +The `.addCSSClass` function adds the class specified in *className* to the component. -### .show() -**.show**() +### .hide() +**.hide**() - + |Parameter|Type||Description| |---------|--- |:---:|------| ||||Does not require any parameters| @@ -60,44 +61,68 @@ For more information, please refer to the [`.hide()` description in the Qodly do #### Description -The `.show()` function makes the component visible. +The `.hide()` function hides the component. -For more information, please refer to the [`.show()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass#show). +#### Example +To call a function that hides an image when the user clicks a button: -### .addCSSClass() +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -**.addCSSClass**(*className* : string) +```4d - +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. + + + +### .removeCSSClass() + + +**.removeCSSClass**(*className*: string) + + |Parameter|Type||Description| |---------|--- |:---:|------| -|className|string|->|Name of the CSS class to add to the component| +|className|string|->|Name of the CSS class to remove from the component| #### Description -The `.addCSSClass` function adds the class specified in *className* to the component. +The `.removeCSSClass()` function removes the class specified in *className* from the component. -For more information, please refer to the [`.addCSSClass` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass). -### .removeCSSClass() +### .show() +**.show**() -**.removeCSSClass**(*className*: string) - + |Parameter|Type||Description| |---------|--- |:---:|------| -|className|string|->|Name of the CSS class to remove from the component| +||||Does not require any parameters| + #### Description -The `.removeCSSClass()` function removes the class specified in *className* from the component. +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + + +## See also -For more information, please refer to the [`.removeCSSClass()` description in the Qodly documentation](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/versioned_docs/version-21/assets/en/API/webformClass-pic1.png b/versioned_docs/version-21/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 zcmV-a5UcNrP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D59vunK~#8N?cIM+ zlXrs0@ppKD5Rw=K0w@9s6??IAt|%+Dl~t$O+B@&sZnv$yPVby{?mAPQ?(BNC|Lt7& zpSxaXd(~-o+pe9ibJcBkml@m2wLP8lCx~J#R#rp=RD=*fLVl1y9&&#?Pat_9F5M261VOmtEEXs()|N(yTtjPZ6=5a_!t~^HDj5~SXrQ^>Vwx!k!t~~FC|MQ7 zXrOg>M^p%cAWTa!vT8KYT&{=;K@fy#DMnU}2Aba=Q6UI|FfGN%s?k6j=jshX5QJ$b zMplVC1q4BuF+`vVf-qx9d));bBbk3$#^&APAA7 z1lptyiR{OY(elZsHw`m@!QLBO-nS1&ZLPLS5CkDElNM<9qernHJ*F*=Ef}QZ;32wC zoz~WjCHruDJh(kR{KMMHQGTySInFC1YbymoxTzs$Ki9sf!hZC)wrY&dBS*RV#Q}z# z{o1N2F)4x8-*gH4vFM$*?fxyc-M`fqkGOvDAfBsNwZ)N|zvA-SJGuP!TQr~cXloUN z4YcmusT}ulEzz$p76c(0$BAlszx{^pGpBK!j6Q>M)YQ`R%^7Z-{RT&MwYGXnOn9IT z4-Rszs!CfNAu%nD#I!VR@u*;sYgJVQhhq%A!URsArbk-{xX#wa9K8vGaC4H`gk&-y zdk5&Mslib@cD>zkvX-usHOSrpB=amJvsrt{l$h{Mfu1vGX#esnZE=K>Km8Ga`p2Kp zRz;Zq#1qUaUZ^crT-;Cn9~;yMDWpFA3im7sKfuoAcRs`&TE4SZkpDsn{h#c{*##7= zr}%Fdp&vQEoy+h23C|!T|L8>)-Ip>_6CyhsY5D9B-gYMp1F6~Q%h!^-ya1E>r@>jb zmn+rXP`r`+{6^ZpJWtXi+gVuL%%xoi7$6hNk5?lf*^kS;l>9B_qyhNaX{-8*{w6y? z8A!H}yrhDhbvDu@wE@jvbFS(FWZqBCszG`W97Dcu3$|4mVXXuheXd!LE@SZjsu<|> zfs{hx;`PjZ*oN8H#+5G);A(LK64HVPus&K&mND!!@w5paj^m%vRnv?-2qZ`(7FS?> zqzr55CG@q^vVXtwT*E+e2Kom#l2?{XYUnh>9=fUz;0T>3H5`9o-j!;*Bg> zUj%^c32XbXgf3?>>5ngBV9x;t0K+3&xkouP&OQh?Rt>_r&Kw&f6Xc?f=2 zi#=?nDz|)#r^iFklY^;voG^1#)A;L3yjPu|OF?Ipz-z~Ua4#*NH{w-~3;Nv3`TzVG zS1RiXctb090j1n!$NBp`xSG{BH-N8^rr+$rc|m>C0Sr1BtlQ6(55A^rP%V=Olyh_( zrSs#%_zX>GtTx~c%sZ_!YW!*7Qzn?1~?WO61y`yaymXVte)A_-EIzrDC-lm|0 z&YUvZrjM%WRomWIvzLw|&By@>o!N*^Clk1Eh>nkI=>wpLwvW~RCK}cA^x!|Zht`_V zxY|d@=kL>bL=7_lubqL)_i&u`D1Gq-M%r~byzR&YJL~EB^{04U>an5MFwQ;*H)kzd zLDtH0q*Md4$4ggDHICX-N|;qwPi>gRFyVpb>*~@L-L`>_4sFp`)*|#4ps9||kwr3@ z&boSnSkNzw9KGmmWu&G6wBtS>O0>}NperdOCpqFYl<--)BbrS170AzjGS#dD0yuM zwk>N(P6c}Fa8%pFPXIn2!PzBPHf>c-vzbQUUv6I!}9m9&UW6v`zna+gbAR zR+enrNOA&T|CSp)K+i?oc7R1>{B$czUVepp9#w`Y|WR-`7+KJ=Xj~!D+ zZK(#bez@|Eh8dF)XaR3%tn&TEbGZl1!?HYA38*vb8{dA6z9wL9DVB&Z0TK$Bz03kY zpuS#tLk%|KZU)G}R93*4naJ=Z+)V%$j7#RhfUf3mgfQ>pF2;)M{g$Bu)eU7g2gs+ ztYcam#)xrssXDciNL#iVquQ3_2iB3RK9?!Kf?4WxUH15Z9{L-V*IvJLIeMSc-vQ=f zDN+7F1TJ2{O&ZB+p8CJq!=>6bdRff9ukN7awHH~C0hldHSkg%Ep08cP{h2H%>WP?&E-0wiMrg^!kNes1yh zLAVvxvNE#D%Sq5DBMlW zbPPi0nQxE*eQ7CUCy$V^tdv9m$60#qVVegFS20(+90hQr7iGfZ#Jx}5HC4ZQo0LO> zesx+Gl9jHkjg65(V)%3P^rFnNj7YP>$^mnl`fhf))#q1bSTV%)lS@ID6#h67o%(`E z=J3Tb2}v!N`?`T{0_tqg|7B!jXyQ$#N5W%4#ZSfdM@$Qr)+pv_RfUkiYHPtxl zeUMUu#TF%8&81it0yyzBG}8O$c4dTAY75&W2xC@80${=P^i~SDjq|ns9_@FM>I#4M~0J^&7_N>$a^FZZ1>8CncA{f7p)gr!O&QQw4^(MsPOc z`uJ0>s7nB;c@@}xww;Cl{2UppOGq>-Yjz!fsKW&$hQjrRQ*&vJhrt`+k4M`z)Teo| zTuvf?qi&%OLfjlDYw4<~X4vOPN=ZR7q%iFB(^XwFEiQ_m@IW(U=V*(@IQP`koO|kN zZSfd}9PNBDx}0S{Kmr2C591#OX;~>bQF|wmQ(A%!2-a5Oybf4?!0d=!(lE(I80G>v z8Mx3*g3*Y{XvE+>&$SPC)AHf(=)B2gb5SMC!;p`%vGKo$=~35=WKSa<$JznV6%~;l z@lBI0o75s@$mVZ2k8Du-Ym%uAkugS*JQ`lIc5pfd1>_ zw<}P6fNQ;>7t6`DFHdMjTk-Zmh*v1gMm7K*SVh+TtB{PT$X+j9)yhV}ofP#gf4j^@ zh1#OqX1?bZMm^cfG0hD<$RPE;?8tfzX+bGQ3nM#?iOZKW-fUB0WZuRK5)(i^yO&G< zwUcwZc5;6AAqHI@f~losF1+2hhLPO$%DJ&u)BfgLoZIyl=igR03Q}!kt{G=tZ<6J# zc|=(}zj}zaUn%`P_jV-%JsyH`0hXm1Kmn#AnV_o&_uic}R34!5qfeAeWfBU|=K=*q z=w%PVo?1G0?V<6DN*aD&t*rIu&&Lc%3o5YW0r>D&y-UNJJ305}8(gVsCaC!h&3WKK zWz)giOz&^rp#JTh)c@zZ^fqgz{Bid|h{wof8=){OFUPuKMda?McVJ}q^G=!YK(pL? zFG;gBi$NMizkHpd*Z)mh96_I+j%DF31R6$iO4W;x=KeLAH~n4BCS#czdI?2XmTJ~y zG$d;|^EaVj3)Lobqbe=d^FL*PO^{_7sF6k*={82Lse*cQC- zB&IwIc-ryTHxlqD=b7_F3CaS6k^Idsk)bZuGw2~0Fp|9bInw_stW7A(1q=V>F$@`M z#CtqoD8RgVBL>Z(@%BN8&3^pEXqcrMlnsEe>%hjlq$AdyLX&C2FRTS{wY1W*Z=be! zMA0u_Cm4{q{EJ^`s}wpNMbAEqF)w08c!J5a|KSaKnn1Vo8ElW-!YD}g;r2m_F=gV{ zwkGr3w`*9&JupO)Aq9PmKY@O)hoM9xrf5MC&w12i;_1IU=wo0w2~&y$!;LildnJC1 znEq)ih1!*mc%EArS9{g}&~v5^$z&#L<;tkLnU0!Tx=vOjyWOOhE@$4u8?=W^oG2I8 zPD-EwbR9oI=aD1Y;<(IR{}7p_rP|_&<*KD&*C7H}Fl~8>!q_uZVVdYW{ytZZ^nkUT zd0Q$-SHsDBp_1mxMuHTP{<9~U7cEqUTQ=nEr}Nk`lFVjuRzIk%j$l7}oT2`HvL9GQ zk|p*`?R%N(Km)KJKdyY@MvQ-I5KgDlF=yR6GFL3uR!z8`!|&35!U=QNvfz2K+jZA) z)p6mSuNe&8LUnI037&Qanw3j2bjzN>w&4~=+rr%`N}x^Z;5&QOD&{}=W0Fiazmy|6 zeKv)gpP7;{W4MhQXVi->OG`zV-A&A;;rTpr=?+-GY9j6`OGRVp1P0VmVLN=G9ZaHmAjVAKyN2~9ZrUm zEg181NJ|k>_7@|{2yIFNO%McOLPZHQF*XqdVa5=FCJ4feAp%Vhgc)Nr(6o2Y3xXg_ zM=`Q$G|=?pe$Ip-2*UIdBdbOOE#8mn5d=ZFlVW7mXrN_gMpOubAWTa!vT8KYOeV07 z^TF(bAPCci)v9Dw6p_1}^XG#l;zQg8K@g?~i$%$(7)I|D2-n&Qj);HDAqawS=UA;b z4Ktz!8i3mk-QD1Ff!`nZCuRtOAbf8+owA#0HY;mpF{YW}q6eBF2*O=P+$kUk!i*sT eO%Q|`Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D5ZXyZK~#8N?cIA& zR9BwB@oztYZt3RL2ttH}$P_4wk0Dj#%#>OqV})dNW@_9jt*lx*m@4_h>>rsw%K<9twn)G>@jSTj=iFy?@->Kwn;s zHVDr7R9QuzbNco@_ul^9dtR+35C{Yi1VMNXXw?aVAPCEq2xx*JJU2AcH93dNrE5SQ^f4g1}q znJEauveGFHG3B3z?=Q@-3^`5|@QuBjTzc2v25b%)0Tv7c8LNa(3|hjw<>+BkHUWE2FIZ-3!}T zXGvFQ34$QZX>veYkVm6SJvIDW%hfr98NkD_Vg9w{Qz{?~xCe(=C^C`_!4?bKaq} z_XZWtN{-#{ROilZw3G60&v2yk8mH{HX;bGfXHR=0;yYj0QQhR+;NrVhZ!_gAE-bLV95`icq(z`|B*E>nLaV0o~&USMBsDf{lW zP9#3%u@RP+PkR2$*8@#_InXd`H_^3+b$r?1K=n{FpY+zMvlmRn0@~Mu_i%V;UqbcI zO`mYG<%&8vM9-*$`r!_B@+>@54mD5vl-4kC8@oF3N$AqqzoCQ+n~FJ{rdQ|Asmr6R zH;efJC0XgjsS7M;PkC&Fylk^Krc#?`y(^nZmTa6eUd*ceH=baYqkmbNTzcS5!|?PAVHN zQQ?CE+adO^0=mEAsJ#{R8#!zl;^ToPn*2TtS{nuN+c}(J!vHiim2t}D#uWfGMr_(- zidOHYFdmSc)UF?d@3ZfPe6nMMpWRORtv^vi0!68>;O+l{%Tf*}^R__S z75-&-5Mq8viS8cfob7Z4z^uz)&&nMXr5Leyd`;=##J+7$*v0YxC%9Dx=ip#xY(GJ;dzbbawpIW5W~FEqNW?{eR-R*MnDMBs*#= z#cOg&o7mA1_K4IS9N&FK>EK-&Bp;y1Y{=kOwjWcNGU-=Q9j$!uow9F$L6<^d!cO+T zV41X?>zq=q0nlSJ=CD8g#}rJudwB<&DetOMwxcI4dNajIQC#l1Nf!wd*F~7;#5Vrf zVbmdlKI^OJYHuCGJ{MNKnb%V`@@jJac;1!XT1I?sIdA1gUR^2YEtCZrklfg%J}!4(qI}dju|3Hp@57@?P7KRmXaJYgPI-4Z z?>79Aqy3@#R@wg{$L~-4LP1w+Xc+=dYKAXye5h02wj{5W^GZrEBUleNcF8yWv6*+> zI{BdIb1Id9A(y?*+xPCwJb)6Bx?kjo{SFP14};c3oW_UC+sX&s<&<`MlsL6$G6k6nd9@pdMiSqq- zsPF=$P-F|<_rhglYtkVuY%1ZxhC{p+EeGy~;X2xY{G1Yg6MW*1*~NuT`zT6;wg=ZJ z_X64s4rjh8zkkhZ6zTwfCubk3o6#N|fp`kz3wbLkOVw8v=-Vxp z2l$(*?gwyF)pJ8044QOI&S!3?K%*M0n&q5K>8c2~4h!JbnQ;6 zH&UexCbT)4umk3pe6~++wuVEOOVMiOsZ(d7ASqXF3P`S*pDq}p!R-Vf+q#2o2}<8n zYz7CDbLB7d=sjwJcX!2B+ddAyxQ2pN@gdD7qVm}rY+l5sv)7s-|E$2lW8jTuQ!|i_L)CT*}zR!RYa=&(o9C&BV^6HJEksEA#5j?9>6cvCs98 z@uYRPx5`iOx?Hwd86Pn>C$Cekj~2e^1EQ_+`+W7BYP?BJpOdtg-UtckaR#~R*){TC zl(sh0HWJTXB{-L)15ytS9snbSD_P7qLlY%`NrQB%*V7uLO}R1K)W^*jtMrXHakwUD#FIHw z->Nn$WWNnc^B%1U<(W!0zHfur9boqiD&=BHR)UF4&x=tZ@0^Dxsaw=|Fq7#qYbL** z#naYZs^@pXk?@u>j@TfyU<5K>+)YW0 z1w&wn>fuU`-9N*=x(j^pogCP43?ctmv>BV~f;5;@Lb^ESb56pp!vfQUd#)Bi!~$Ao z%zT?_GkeLLtWKI;QXWMHz*k2_Yn|MDG~`h@sndV5U;t$F9@X8=RQqQyA9)D`2Lv5H z)yS~Nt&GfCh?_eyK9xAV(y8qqp-*+;_xVC1&O9uQy3J+0?z(*5dHE3UPxJ5KN~LT@ zA*a{B$+?W(9JFMRrt#6{{+weiN%qHY3 z+BNlw(=!q>5SW zztjZh9eV9t?!SWzz>v;bbrU1P3~}jXBR9Xx?{|*h&0W3Kl)Kd5yh;3HQ~JOrERDL& zWxVdveZFz&iL;o9vzT!8f5GtwA94J_4VwMnXurnMTV))**Mv7Qox+!2<7A@TOmvL( zV#iHYV;M(pm2v8!kF?Z$_U7)TBpSd&lY0oFGs!i`uPghjX$l^bkxnl5%hzAfe9lR@ zbyx@$59MGM901szx`jQdTd?ZQIDKwD?XBgrXAsmP7SIafvPd$HkH=3D9OYF1t(F=c z$0o~*>f|{Y(()-Bugw~^%{nJ47yuR8Tz1Y{KJv2DcCb||cO0K;KEsh)Wfb4J$VD%J zjs2_g7e2sR^Vz2~zuQKxP<;CwN9)f}++9EIYKCB65o6amP*=v$rs=2YEQz|!#hOpC z)h18L=_#Z5RvAZco#AbVJd$XR%_lz!;^Hz$mfYA!uXFVFHO~I!8pj6YddEelW5Yzg z$%0*SQ#0@(Z#Q1&Y~w{rM*)niHOB)c3X}5WI(zFm(R_yDTjw~?e1*&EJHvd=Ntktr zw9g*a^XbD$Q!|ul8L{LN?%09)Gx99++R_>Kc4_d}X#7w=f6_MsV87xK;uo7}$@2u|CW#uBO9T+*`k za3Vg7OpOm$a2kpxp2DOz`0Yzd{jGWYX7zTq8uWO5?Nqtj=?dt{H0|PKmONq}m${qw z66Ni5jW$v>I)qmfPoeE^*dJUxk@{oaOM6ARE`7Kp59o7wD`m@+X+rZkCt=kgf-ZH} za8;Q!8>=^k%t0eK`nhsq^z&+O9hbV*6Q~wW#3t4TUGBNb#h$s>c}?fQ3qRtgw)N`d zh0%Y5qa8P~Pd6!du}MB$Eu&IQP5@@}%zd;CKvX zi*d%mqj0w4b-VFsO_=9wc88vmu9geD?Hq!r?VMkmJ7pij`Ru24wxf#w8MsTVE{fM@ z8O^-bTgTPDIvz=5Y){JJ*Dq{S7m1h!nOGaNCv^+IN__PWSTn=7>vZt63hs5I|kD%!AxqUw6>IewdW}P z&OdSNq#?d>%aej_MrAsRN;seWw0@DYnXU0__({^b8G{+XYbhJ~N#a_5l$gz)m7CSs z3nt=EXhC((c7ES}ok8#Hqh%|jtQ=mwgPhplnwdo~zAVZ}VQMi4Q`H3o;n``rca9S- zkFta+gSC3FkF_e3WK%et^-H!r>znWrvM9e;3*hzpsBt`?-q}Wndw_ng{1e>CQC40u zC9~d|&Sq;Cx<#JI;&^b0BSXEQ+rr5W>UEof@Qg`LYMQT6>K+OmP1e}hvuY1}SI#`B z_Sb090@_mL9Z}X->KC@ZK@gtGsE4khcDj6EHf4|jxmiy-HMP*K@fzc zC{ee99Ala~SzakHIpMCSi%x0czxomcL0C%Cb@9^%Go}k@0K+rY=ylB`44u~U?N-^UncELkE;b%7c5^e>bpU`) zofc~|Gtv4mbp{*SKo@r1)ClmlUwD-U3@E4-6aaXi#d_kwNaOP%X3k*%07v`ZM%NXL zzXbqrnwrC)_K}G7Lbm|>8<;N0@+93^+d?iKr+cbLnt7Z+2SIZDCi~bEvsGhRuN(6o zyPxSF?Q|HEHinqf^b=Xi)GKxjM>IJf<)5qAa4ayhsDH<5L9R4&sEw0O*1i?;`D7Q; z>D`&pwLckl9MXT%^g>X`Qz%+n?AuUbSU>pSg<4qaK?J6C<`dsd|IGHe5PLdRr`Zr~ z;dEXZAC8n#zmWK)5bX-4{{UOf@8yqYIpeMGi=Mlx6{anW9W%X;ryFEOsC9?DgPLDu z9lynik8>}l?WYgA#gh}jmSgQvfwQ`k0JJD=Y^hX*~!(GK`OSaKth7|3Ku@ms1IKFz)A zZ<6Y}iavf@^2gNr6$%*Nb}fDcy9oouEbvs+^RJ&<6ULHJ7)FI`Lr!YMMycotgK8<< z%DeX#2%HbgdL@Twer3fC&Oh(yAa*Ka+m0eib=lN^hltLH=mWE*RtnCrWQx^0Zx(WY zFj4D_URtbAZEjcAhuj|w;Q5Vz;H;g&Y zB%CrtsltUDtb7oGZ$qAC=P+XO6+xhg`9Qq~^{4E&?A{H{MQYa`FeK(cmkj*2F8rB& z-6p-#X1!qaeKN%ctV;q0s46Yaq-athZH>-w*HivKr*8m}E;Ik|P=B>D8miYyXtjv` zM1q3Ey2KiNAc?>?Sn(UYngWKdcePrD_YfuqyD@)$Y!=JJ<%>yZ)d?jq-A9nhV&VR{ zRaE4fUzo=6(rr?=1M|8`(1tQ41JTjCFE>1!rnU7#o$t{`jM&qa6tC*Jm}|H;Nk1RG#AF0P8-*=WN!t}z4VX+?eR^+pee>rVmR)4+`bZ5u@do{Vz&Hx zorL3W_}l&${!p>CeTf3Yfk?N{*Ghv<^k+;6hKm|7G8hfQpPom!xU|INv|Kne<`=IO z8jNHWsYgClcy~`JG?0Nw*ET_>ZD4W9&|vJr7RzzNkEF)1f52Q?MP97xRDlKp&b5L+ zd_nu}B!Np|t0U`CRn^hv4uYRrRb(t3Xb>Hk`U?Uj@HkbKe!{yjo+jRr91ThkYBi+y z{3WsIXIEz0XjA{;Gzqt)1e7ycX;HIL{-NBiB5y={4Sd^&PB@RBp=RrSAB>`#)|TGZ z=C$$yH9rhcKJKW7h@KC%?gaoPfEK%Zr7Gz8H}_8Iv!Pl4$`gi;2cB+KC2_H@^{tt9 z_7}5GMVuCuo?gW7r9Nfk*AWMe=EX=i_9d}D{21WY@Fem58bLY1`m3e06)WI)T!rKs z9Y?>SeGyx{89wpjIqKQ0VC~iT2gMX@9;# zU_bj(nCKKGuCVo@u3qw-wSD#afO_Kgg_Q}hiOp7AmSCpGZOQy1W6f5;v}$)o{_OPZ z>!{*_YbtL(PqOBZ;`L-6^pFG&kze5vm?V`fQDC)*zWd1mBj+5-Mr!#!GYOWSpFSeO zd>&}r^`WIcAR5;~?_7x@){afPB0~mv%I$BoU?jb(=LGKlgA?JRGZ`r5uD2@42X`x& zZWF|yiow-e+BccdJo)>Qjtn#Xg78XkeEsR=>71hRu&bph^qz>vzWXBDnW7)~1KTl+ zYNp#SqJ#$B6QjHnajRB~`=yaC(=d7Vy!kW%(t6=Is$zKBUKLMA5h|ZZpFGw?P`DPy zpIMImOj*IWzwGfNb99UvN3I7;N!`JkH1%rF7YRZ45Jm*CFaD5tpHzUaKqeh7NUXkO zBHrngke8iFv2e06w{Hb2jbVK>c4b@+o_q}T)=q|J_+U5$6@YbdYWTR}Q9qaD0P36+ zuiBC^5q+X2ASSEW^Ky_5ioC}x5}WI_$prhzy8`DN>BBje7!)wF(M3d~&d=!Ly1 zj~eZ_V=DZeG;Y!~1OM~%0-j3eR5!ppq}J4X+ut!)ntFxw)S6_&{hn$y>^B zy2~zD7g3$;xL7eoh)s{3n#LKWE`92jR*Nn1ecf<{x2|wbfKR6+>KT`YGd9hCrA%FQR$3rl8)nP2Lr{M zd<>j^2-uU`uX?;DdQBSn!FQ+RQT|i`=NTq8T(&uSNb${DkrCkTmzyX_ZeS8n(p_gM zO_H48#aB)6(f53C#W~J*e?%}^joBIcolBzxd;#XV-BPUEGzdsCm>>WB{u~i$sM-{e zUP=kHAE*AB<|(zaX`*lNu1{OEzEeV(fyaac&ep8$zY|=xxm9c0Yt4%cXACkL(Ll(k zmn(3)Sx%BCm7&_n?L;R6!NojzzoUlzE2El-@rcc3k>P62rF0!$b&U`v)k`g~*vii` zwuaJP`%yN25#nTHoMOo)y2MTp$y-I>Gk@6m+f@zQ@*}Bb#vk^|*VLSj!M&``N4f=y zQmAg!gdJY_0LF-bMb+Y;SmiN0TiEdb3*#%ivh_)xK|i`bFLHJ{FH!aF2WKf%6dd@5 zLqaR((8XUKHF&~3O_1sy)dFVf^(jT3Ff<^6YfT#K_aLGuH3SkXHd$tI2@)fFMJ zyrVn|zoMF+ZEf8#PIeENv4BbxUHCefR2K`Ip+CMh8zIu!islvxf(HFesP8<+(=HBK z(un!taq^Qfl~$WKj7@&;gq(o#`S5jGjUA?VE(+MP(>B67e_g&|_d9O$g^^c+8Lcce zjV|k!t*axQI%w6O^x3%}fAD_BhKWgpF~04XWQm)#RYk?WI>z+ze7Kkn;lP|{We=!X zk7crWje@6~LOm*9nl)T1^l~uWR#grdR*@AaS8{r*(ucCD)79qxN(Cunml^|)Fd#kP z-km6oyKLb{3MX&r@hvIujF$5qngVBa*xNU8E&3T}zo4WL=oYe{S?We>fTrDMX(NY_ zZR71PFmA7No>t6`L8cEGS}&ZAsGR(~eWLfe7h|C%0T`_9`>jT0C6#e*A;oa>ci1$9 zfcG<~-S-?_SEdt|oZLPo^dFCgCO+bdUg&uaJrMr9d6%_y*(vS*CR^7#GnH~dyV5-P z;I%W1;_(qa_X2ddykO>+jnn^5l!}f7YX{3Y7#Aj7_uGZ&yl$aZ1XpT zy&kCKw;Fvwho5>}pf82a^;)Z$$KwL@a_dRx@l?bq0u~8sD~$NkZIuGt+iym5qXj?* zE(35-)So&Z=@E4x<#B9ex;H)y+-;TD0TtN`w#gqWXGLM+;wBEm$v(gI|fY z3SFPV1wv;0HM;yJ)9NwRY1jnb=Y6Rf(L2l8UL$hd8cNI6JWrW|WhDI++Ks$bli{gk zN}z#8yNl)}4dm57VO#PQoAvORUjDGhPH#NBh~=AngIs%6-GtM&dFP7>$HzEl>Csk% zt_RxjTkf*?njcD3v{R;5sGWA@{&G(?+wqYmV;llo=c~L16wbsYwowXbVt&y|K;Et5KTMlOBs7MP?zgb zS)a_pKU3=c^1@j<{h?cP`qiIdjAr3uBu4jDednhZe!E>tDOw4C)6uBo{c0H#_PMv` zsUp7KlWFAZ2 zXM2NJqEOK0zSsoEY`okVuu}Hb9gXSXSYG);Ui5$-e(>YBrg7CzXO+k1C5@cRJ8$tv z29f3hYlJLlxHzHtx&-lh*`L^qnP7SVLWm@v@+~O0mTTyhab(qSlbrB}-h0kIzjoj3 z98Se*eafXP88xufnmANJe@~w3S*!qK5+7AjGGiaGWfav@Wh`?}va^bFJz{+1BJ!Ix zAx!1FQ7ZmFv(TOdTy8jPpsjMAN!GQ0EMzI}qIPImY)iz1?y#14eg$&%PvMr@O7sun zs(Pd?%&vB4SQOh(mXWj{$wD(Cr^zQ=wa#v#y22b?rC>nALg(&Li^tg--RJE(K4M1&Z`1uPLWp-o4H*PN9@5LbAVULKm;e@7V^5FHV z;mw9)E~3R>qQwb(2k{q0KppS1c8K2sgTbA8p)7n*&6tAEv!1uMeaU#6D>BARp&TDtS`#74&26KsInT|_ zeXoH0e*=dHyq=EC%w2qUnKND*7}?_j*T*iE>zc0~4w;2K)gn^P{Znk4H9NQ|lQDL9 zmyyMt8;e#JRR&-)Le&;QCU`n-@2sb8WPa&Mhhz8M<712TRYDv14vS0^{o9F3L($kR z{92r`q4q0xfR6tQ&y`ZP>T&dfPYNLrWZxBp|7yA^M+Oe{hiQirE(Ckbw65P@R5|5> zKA8CAqTbJf@-qD&!xHvWoywmrz+n)Fh3>`so|#EeIwfR>J`(+66Oy+Sxx(QOJt@6K z;yE+jY;|*Zct*uYjaiw4uw24YD0z8$tDP&X^J>tii_~Bx`LKIn&@6Xo^n=j*nNEp~ z65}l3*3DoS)dWn?dxq*S{?N0BRe7PYbz16`__*k|euaLhjUy+JS_C7=io2pkD*ZI6 zp;ZJub7Eh`AELb&4)O;AY^fj)N}c=lwodAt&>p2hISz|utYV}8@)1RWy=p0aWqhCm zzu0Z+$oF?Ga{q}Q)Zt$;GpY?Qqy$`@h1KkTck|qqYUk=(SeXd8g+1U54Ox9sdrwMU z_wC}@TkxF66RmOm7qY<|e(?z%E}QgYiJUzPKRIhFPmI5lGdYft9!`s|*#7M)YAXP-dx(KG^+i%Tred{|Co zB!>_|bM14&<{muxn+mtqZq0XwyahRBo!vFc<50iC&Md7O4F$N0m8`4xR{SWLbEIwH zpVgcc_ox%}qi}sw6WcV|ge|+cK7Zj3h z^fxt3RUh5Ys6RNn=u|pph2nBCQ!%cJ!CQ*_@XAaL9>=8LaBh#LBcKPuX`l^~hsTus z)mxYrdaxtk>sGOH=W5DF(H}0G2ou70XyCnod%81hC9ezZ?ronspOCccy$G@QG;-@aYt@ zPy=*cb=9BCdFn0GYN85*(fx+$aL#sq8B!NKxb27diell5_WjBG+qY2j2q%TFPbN*>xSlL@vAzk&lS{iZ4EygVi zX5wPg(WY8>0nPhx#Z(H{j5r=Nm z?@twdKJ~M{o1sHIK6N$zXRqk#9@+7B+Yf7l>kUjQM;utgyez*^tk5(NXa%gWmeAFtU~?(MTI~;|j{#+it%$r)G*!Ni;`FB$S(44{DsxOc@akOF@;~73R5QmA3(It<&~k5;DsDUp?M1dX3V9U5+!74s9YGyF`xl za&l_=s*!9`M^2N0Kt@kN;;WefK_-!JUyk0X5k$H6jy~Z2FxGx(p3Y# zxiohWZ&}Y4TYz8IL9Sy&YF9>$T>1BH_P&#;`NzNLDmg6;Lv1>4vtqHyW*)yv8 zOxqxQ(ss$6fIk+^2&eqKF@D8;-Yq@8NuB;nt>KjMZ3FqVI24IVH#9U`44q%#nh(hR z7f-vb@7VA>dw`^Z-Uku(L$zLMDcFoE^nLq~{WE_O(r4c;)#KR$#dsI|^yjPD{9D?#yv3-w zNtK^p(6*UqGEJPtp$g1R-=3_gZ)rl@c2Vs<;aRZU&G}+-Q&FFI_n@rRCEhf9yhQ#M zFMX?6ewfQthPil1^E1!8U!(taUC=cJs%JfUN*Br%T->(zHQ>g)k2g(gY1lGO(4#%* zc#4T!*lqyDJ|0HU)gnC>hddviW|DuX}~v*)KN=$!t3`eUK%s=jgcqbj%&!HuS- z_2VnG3iW8!Epd9ojPUaKmXx&_$cP<{?~<1*P+Cgwm@=sVRN?k(ii~WLw!s7NL3Sd!q(0OP0+q{b zukPSDy*uGL)RN~{xTB=AIv5bUhHjm9URbq(CgtNHldx&lz->0!W+Z2-cysT2zW{6qSMB98Sv?nAUx#v8Z`yrP z_yl8NOH&N{?6rDlwwfn-Xv_5~P~kzXx6l)aP2INrPy_o1UCKMyl|X1(;R3VTUrd`c zt)HaQw43OkqMwKPH!6$(ht4}RN9z-LF%D1Jwf&ApEsS(S99W+m*K?Uk2~2JB*76Wv z%;hD{5%R0VqeaxW=CL{RGjM*N-69D;0j+UwK@lYlR8!_w4a~JyA=U%SrVv`_JBnT# zX;Nr2r1)W8kJwU?`<+IwdE3=?J%LOpJCZ3Vr9Pn%d7a=Vi~1O)$;Ic(e!GU8aDGpR z*m_z{rcAlBo!w+JMc89zexse50cDRY>UQf=uU1w#r_quj5t~l#9S$$0{;4(x_tz9m zJKUum$2s_~3lnyN7TWJRiyQrs^n^-_!J(N*#q}Qdn2) z<2|8v`c%uGr!994ehZ)uWFy*!1(>9d-F%zmk|cY;8E%SXYrcNBx!EaSqr5q2joqzP z2^w#}$5wVN)u6z$&SUE-9a8DI;cmAQR~?mzb(<<Tx1~}_gE)KB#Ksv_`;^kD zd)`&uSzq{<>t`F{3{SSq;txvFQosla={~cv>ZtQDPZE+-W4<%7Zw3mhug{#~H!^gH zPO^O4axD^4++6)cL5=@r{@HdiqwV_{&Zd?@lc zE+*!6663GyZUe>Ru>VV7enyQhjADhF*y>KcgwB`=a&vpb&eRzF`@#^e=a_TZXVjjq zLu`X)`c~z71Kk;+S%ZJmkuHrUbZknQgDKU1pFmRI3%`&>V_&H(!5gS39uEfdMB3u_ zY4?~mKJ`GIoIO(w*Q{QEmuZgTcz0>AoDvczNtMMzB2wx@CM-AAp7#K~mcTObat zg=)UX1zf^Q4aEsH`>@|AH&e}Yh&+c%exVf)?P};y_cpP&5tyTEeTg@JRT-*~Ei}W( zMxZTv(yRUNeOF2Lbovob84nNj{$BjBMpnnhj@IMHLjsN-4<>um7vOn{0X2;Zao^c& z-kz|D4M&k~QJy-mb@~WCl<|7}cs*LMQS@ViBda&pxbN}3Q*T?JC&3jmrl5s70D0>6 z@<0X6Tjp1q8>?C-+0D5>KHQn9yY1E0;Ph7h(dsOOj%W1t`%zFWpAPyrggZ;?nt;Vrq~q0I83~0^bq|ezX=P>Vt@T__OwW7A|BpZCP|sBJ%!{=dyK|kOYLXa=BOhWg*ct0=UG6 z6KpSAN2Dn?75yU~Q4cilA|lbM-Ta$y z=EZfCG^B8bvg>rBLcl(WkEpn2U^_ZH1cnLA%{vUq1M44N%qxF}IWe_zUE!Zf4+_+H z*#-!UX5TK-cG&p4n*8S8^OLoPgOw<9iMO+FgFhA>ET^{Y1aM?$-r3kH!YA{@6Oq)=A3gF?rPH3nH(RSeC~clJ$23XIxvvAnXG>hy#eQ+8~~*8 zjk3ixT>JI~%F72)vhX@2JetlO(}IjiURt-T%F7*Hy3giTF2>Dm{N)LEnB{$?#miF` zT6Y^@!%pl0zsNC(-* z7Roi;H7iRgLPd9rcOlVz8@`^TA^8Csg$&IR)c= z#u!TzMoCM5B!Vv2U~+45fKSG;!DMf)MMLz%S7R1^vs}p~nc)y!?CJh^Zl{7`3N^^F z+6t#Ty92NAYG`6$NPZFpWAq=6KGQ!Gb78=yb2*9}@2;+o^v z@Aez1>ZE~iEdC;F@4mA-2RH2jGp-DD{tyDXQ(JOat|%bQ!1q57x_}!+6U^6_j)h(4 zrC$-`6TBL=q}O6y@#{7=Lm`^x*Z%tWTKvC~7DJIS5*m43lJz5gHZO1T06 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-21/assets/en/commands/web-event2.png b/versioned_docs/version-21/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 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 J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/versioned_docs/version-21/assets/en/commands/web-event3.png b/versioned_docs/version-21/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-21/assets/en/commands/web-event4.png b/versioned_docs/version-21/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-21/commands/command-index.md b/versioned_docs/version-21/commands/command-index.md index b0f8e1145acbba..361980267b1377 100644 --- a/versioned_docs/version-21/commands/command-index.md +++ b/versioned_docs/version-21/commands/command-index.md @@ -1290,6 +1290,8 @@ title: Commands by name [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/versioned_docs/version-21/commands/theme/Web_Server.md b/versioned_docs/version-21/commands/theme/Web_Server.md index 8bc434863cf998..4dce6a465e0174 100644 --- a/versioned_docs/version-21/commands/theme/Web_Server.md +++ b/versioned_docs/version-21/commands/theme/Web_Server.md @@ -8,6 +8,8 @@ slug: /commands/theme/Web-Server || |---| +|[](../../commands/web-event.md)
    | +|[](../../commands/web-form.md)
    | |[](../../commands-legacy/web-get-body-part.md)
    | |[](../../commands-legacy/web-get-body-part-count.md)
    | |[](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/versioned_docs/version-21/commands/web-event.md b/versioned_docs/version-21/commands/web-event.md new file mode 100644 index 00000000000000..a2811194ad76a1 --- /dev/null +++ b/versioned_docs/version-21/commands/web-event.md @@ -0,0 +1,96 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + +|Parameter|Type| |Description| +|---------|--- |:---:|------| +|Result|Object|←|Information on the triggered event | + + + +## Description + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**Result** + +The returned object contains the following properties: + +| Property | |Type| Description | +|----|---|----|----| +| caller | |string| [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | |string| Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | |object|Additional information depending on the involved component| +| |index |number|
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| |row |number|Data Table component: row number | +| |name |string|Data Table component: qodlysource name of the column (e.g. "firstname", "address.city")| + +#### Example + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +* The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +* The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +* The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## See also + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Properties + +| | | +| --- | --- | +| Command number | 1734 | +| Thread safe | ✗ | + diff --git a/versioned_docs/version-21/commands/web-form.md b/versioned_docs/version-21/commands/web-form.md new file mode 100644 index 00000000000000..1ee0923f99a51a --- /dev/null +++ b/versioned_docs/version-21/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + +|Parameter|Type| |Description| +|---------|--- |:---:|------| +|Result|4D.WebForm|←|New `Web Form` proxy object| + + +## Description + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + + +## See also + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Properties + +| | | +| --- | --- | +| Command number | 1735 | +| Thread safe | ✗ | + + + + diff --git a/versioned_sidebars/version-21-sidebars.json b/versioned_sidebars/version-21-sidebars.json index 8c6c6269ab440a..093086f95cee9d 100644 --- a/versioned_sidebars/version-21-sidebars.json +++ b/versioned_sidebars/version-21-sidebars.json @@ -2021,6 +2021,8 @@ "id": "commands/theme/Web_Server_theme" }, "items": [ + "commands/web-event", + "commands/web-form", "commands-legacy/web-get-body-part", "commands-legacy/web-get-body-part-count", "commands-legacy/web-get-current-session-id", From 9728128f14c2cefb665b0b07d08ec39905999e4d Mon Sep 17 00:00:00 2001 From: mouna-elmaazouzi <118451160+mouna-elmaazouzi@users.noreply.github.com> Date: Fri, 28 Nov 2025 17:18:55 +0100 Subject: [PATCH 58/75] Feature/wp bullets auto indent (#3014) * standard actions part extracted into its own page (main + i18n) * new paragraph on lists + release note entry + links fixed + bullet keyword added in standard actions * more edits * Update updates.md * Update using-a-4d-write-pro-area.md * include tag added * screenshots added in i18n * links updated * user level added --- docs/Notes/updates.md | 1 + .../4d-write-pro-attributes.md | 2 +- .../defining-a-4d-write-pro-area.md | 176 ----------------- docs/WritePro/user-legacy/standard-actions.md | 180 ++++++++++++++++++ .../user-legacy/using-a-4d-write-pro-area.md | 14 +- docs/WritePro/user/user-new.md | 34 ++++ docs/assets/en/WritePro/margin-bullet.png | Bin 0 -> 18358 bytes docs/assets/en/WritePro/margin-bullets.png | Bin 0 -> 17630 bytes .../4d-write-pro-attributes.md | 8 +- .../defining-a-4d-write-pro-area.md | 173 ----------------- .../WritePro/user-legacy/standard-actions.md | 180 ++++++++++++++++++ .../user-legacy/using-a-4d-write-pro-area.md | 2 + .../current/WritePro/user/user-new.md | 34 ++++ .../assets/en/WritePro/margin-bullet.png | Bin 0 -> 18358 bytes .../assets/en/WritePro/margin-bullets.png | Bin 0 -> 17630 bytes .../4d-write-pro-attributes.md | 2 +- .../defining-a-4d-write-pro-area.md | 170 ----------------- .../WritePro/user-legacy/standard-actions.md | 174 +++++++++++++++++ .../user-legacy/using-a-4d-write-pro-area.md | 2 + .../current/WritePro/user/user-new.md | 34 ++++ .../assets/en/WritePro/margin-bullet.png | Bin 0 -> 18358 bytes .../assets/en/WritePro/margin-bullets.png | Bin 0 -> 17630 bytes .../4d-write-pro-attributes.md | 8 +- .../defining-a-4d-write-pro-area.md | 173 ----------------- .../WritePro/user-legacy/standard-actions.md | 179 +++++++++++++++++ .../user-legacy/using-a-4d-write-pro-area.md | 2 + .../current/WritePro/user/user-new.md | 34 ++++ .../assets/en/WritePro/margin-bullets.png | Bin 0 -> 17630 bytes .../4d-write-pro-attributes.md | 8 +- .../defining-a-4d-write-pro-area.md | 172 ----------------- .../WritePro/user-legacy/standard-actions.md | 177 +++++++++++++++++ .../user-legacy/using-a-4d-write-pro-area.md | 2 + .../current/WritePro/user/user-new.md | 34 ++++ .../assets/en/WritePro/margin-bullet.png | Bin 0 -> 18358 bytes .../assets/en/WritePro/margin-bullets.png | Bin 0 -> 17630 bytes sidebars.js | 1 + 36 files changed, 1093 insertions(+), 883 deletions(-) create mode 100644 docs/WritePro/user-legacy/standard-actions.md create mode 100644 docs/WritePro/user/user-new.md create mode 100644 docs/assets/en/WritePro/margin-bullet.png create mode 100644 docs/assets/en/WritePro/margin-bullets.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullet.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullet.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullet.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png diff --git a/docs/Notes/updates.md b/docs/Notes/updates.md index f75b102a36f054..bde2c6277434cd 100644 --- a/docs/Notes/updates.md +++ b/docs/Notes/updates.md @@ -10,6 +10,7 @@ Read [**What’s new in 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2 #### Highlights - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). +- [4D Write Pro standard actions](../WritePro/user-legacy/standard-actions.md) that apply [lists](../WritePro/user-legacy/using-a-4d-write-pro-area.md#lists) now automatically adjust paragraph margins to keep markers positioned inside it. - Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. - [**Fixed bug list**](https://bugs.4d.fr/fixedbugslist?version=21_R2): list of all bugs that have been fixed in 4D 21 R2. diff --git a/docs/WritePro/commands-legacy/4d-write-pro-attributes.md b/docs/WritePro/commands-legacy/4d-write-pro-attributes.md index fe6664efef9eaf..abb0633d3615ab 100644 --- a/docs/WritePro/commands-legacy/4d-write-pro-attributes.md +++ b/docs/WritePro/commands-legacy/4d-write-pro-attributes.md @@ -251,7 +251,7 @@ Link attributes are used to set or get URLs added to ranges. They can be applied ### Lists -4D Write Pro supports two main types of lists: +4D Write Pro supports two main [types of lists](../user-legacy/using-a-4d-write-pro-area.md#lists): * unordered lists: where list items are marked with bullets * ordered lists: where list items are marked with numbers or letters diff --git a/docs/WritePro/user-legacy/defining-a-4d-write-pro-area.md b/docs/WritePro/user-legacy/defining-a-4d-write-pro-area.md index 360595e057011e..873d5689a668b1 100644 --- a/docs/WritePro/user-legacy/defining-a-4d-write-pro-area.md +++ b/docs/WritePro/user-legacy/defining-a-4d-write-pro-area.md @@ -74,179 +74,3 @@ The page view mode can be configured by means of the area pop-up menu: For areas embedded in 4D forms, the view mode can also be set by default using the Property List. In this case, the view mode is stored as a property of the 4D Write Pro form object (for more information, please refer to the *Configuring View properties* paragraph). - - -## Standard actions - -The user interface of 4D Write Pro areas can be handled through a wide set of **standard actions**. Standard actions can be assigned to: - -* menu commands, available through the **menu bar** or the [Dynamic pop up menu](../../commands/dynamic-pop-up-menu) command -* list items, available through pop-up/drop-down lists or hierarchical pop-up menus, -* buttons, check boxes, -* or executed by the [INVOKE ACTION](../../commands/invoke-action) command. - -When assigned to interface objects, standard actions handle the activation/disabling of the object depending on the context. For more information, please refer to the *Standard actions* section. - -Two kinds of actions are available for 4D Write Pro areas: - -* 4D Write Pro specific actions, that can be used only with 4D Write Pro areas, -* [Other actions](#other-actions), including fonts, expressions, spell check, and editing actions, that can be used with 4D Write Pro areas and other 4D areas (see *Standard actions*). - -### 4D Write Pro actions - -The following standard actions are available with 4D Write Pro areas. - -**Notes:** - -* Actions that display an automatic menu/list can only be attached to menu commands, pop-up/drop-down lists or hierarchical pop-up menus objects (see *Submenu*). -* Check boxes and 3D check boxes should be associated with status actions, such as "section/differentFirstPage" or "visibleHorizontalRuler". Three-states option is supported with standard check boxes only. -* A section action status is always equal to the selected section actual status (inherited status if attribute is inherited from parent section or from default attribute) as it must reflect the selected section status (the status which is applied currently to the section). However, modifying a section attribute with a standard action will only override the selected section attribute. -* *Submenu*: When used without any parameters and associated to a menu command, a pop-up/drop-down list or a hierarchical pop-up menu object, these actions display an automatic submenu/list. For example, if you assign the "backgroundColor" action to a menu command, selecting this menu command at runtime will display the Background color submenu items. If you assign the "zoom" action to a hierarchical pop-up menu, it will automatically contain a list of predefined zoom values. Note that these actions cannot be assigned to buttons. -* *showDialog*: Adding the "/showDialog" string to the action name allows the display of the associated standard dialog box for the action. For example, you can use "paragraph/styleSheet/showDialog" to open the input dialog allowing the entry of a new stylesheet name. - -| Action name | Pattern | Available with | Description | -|---|---|---|---| -| anchorHorizontalAlign | {image \| textBox}/anchorHorizontalAlign?value={left \| center \| right} | Image, Textbox, Submenu | Defines the horizontal alignment of the element, relative to the anchorOrigin for images/text boxes in page, or to the layout box for images/text box in embedded mode. This action will reset the horizontal offset to 0. (not enabled for inline images). | -| anchoring | {image \| textBox}/anchoring | Submenu | Default submenu with anchor settings actions for images or text boxes | -| anchorLayout | image/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare \| inline}

    textBox/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare} | Image, Textbox, Submenu | Defines the anchor layout type for an image or a text box. Can be used to transform an inline image to an anchored image, or the reverse. Note: If an image is moved from an anchored mode to inline, the image is inserted at the beginning of the current selected text. "inline" value is not supported for text boxes | -| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box \| header-box \| footer-box} | Image, TextBox, Submenu | Defines the area relative to the absolute position of an anchored image or text box. If the element is relative to the header-box/footer-box which is not visible on a page, the element is not displayed. This action will reset horizontal and vertical offsets to 0. Page mode only, not enabled for inline images. | -| anchorPage | {image \| textBox}/anchorPage?value={all \| current \| currentSubSection} | Image, TextBox, Submenu | Defines the page(s) where the selected image or text box is displayed (not enabled for inline images). Page mode only. | -| anchorSection | {image \| textBox}/anchorSection?value={all \| current} | Image, TextBox, Submenu | Defines the section(s) where the selected image or text box is displayed. (not enabled for inline images). Page mode only. | -| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top \| center \| bottom} | Image, TextBox Submenu | Defines the vertical alignment of the image or text box, relative to the anchorOrgin for an image or text box in page, or to the layout box for an image or text box in embedded mode. This action will reset the vertical offset to 0 (not enabled for inline images). Note: See "verticalAlign" action for the vertical alignment inside the text box | -| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | | -| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | For menu commands only. Default submenu for all background attributes. | -| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background clipping box (default target is paragraph). Paper-box targets document and section only. | -| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target background. | -| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Sets the display mode of images used as background. | -| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Clears target background image. (default target is paragraph) | -| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image origin box (default target is paragraph). Paper-box targets document and section only. | -| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image horizontal alignment (default target is paragraph). Ex: paragraph/backgroundPositionH?value=left | -| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image vertical alignment (default target is paragraph). Ex: paragraph/backgroundPositionV?value=top | -| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image repeat mode. (default target is paragraph) | -| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image width (default target is paragraph). Ex: paragraph/backgroundSizeH?value=100%. section/backgroundSizeH?value=cover | -| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell}/backgroundSizeV?value={ \| \| auto} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image height (default target is paragraph). Ex: paragraph/backgroundSizeV?value=50%. Ex: section/backgroundSizeV?value=40pt | -| bookmark | bookmark?index= | Submenu | Selects the Nth bookmark. Ex: bookmark?index=2 // selects the second bookmark | -| borderCollapse | borderCollapse | Paragraph | Collapses selected paragraph borders and interior margins. | -| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target border color (default target is paragraph). Ex: paragraph/borderColorLeft?value=green | -| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Submenu | Changes target border radius (default target is paragraph). Ex: paragraph/borderRadius?value=4pt | -| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Default submenu for target borders. | -| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border style (default target is paragraph). Ex: paragraph/borderStyleLeft?value=double. Ex: outside/borderStyle?value=solid //set selected paragraphs exterior borders to style solid. Ex: inside/borderStyle?value=none //remove selected paragraphs interior borders | -| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border width (default target is paragraph). Ex: paragraph/borderWidthLeft?value=4pt | -| columnCount | {section/}columnCount?value={1<=number<=20} | Document, Section, Submenu | Number of columns in the current document and/or section. (default target is doc) Ex: section/columnCount?value=3 | -| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document, Section, Submenu, showDialog | Color for the decorative line between document or section columns. Ex: columnRuleColor?value="#FFFFFF" | -| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Section, Submenu | Style for the decorative line between document or section columns. Ex: columnRuleStyle?value="solid" | -| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document, Section, Submenu | Width of the decorative line between document or section columns. Ex: columnRuleWidth?value="2pt" | -| columns | {section/}columns | Document, Section, Submenu | Only for a menu item: creates automatically a complete Columns sub-menu with all column actions sub-menus (except insertColumnBreak) | -| columnSpacing | {section/}columnSpacing?value={CSS length} | Document, Section, Submenu | Space between two columns in the current document and/or section. Ex: columnSpacing?value="1cm" | -| deleteColumns | deleteColumns | Table | Deletes all selected columns. | -| deleteRows | deleteRows | Table | Deletes all selected rows. | -| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraph, Image, Submenu | Removes the Nth stylesheet from the stored stylesheets for the selected target (default target is paragraph). Menu item name is replaced at runtime with style sheet name. | -| direction | direction?value={ltr \| rtl} | Paragraph, Submenu | Paragraph direction. | -| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Displays formula references as a # symbol. Can only be used when formulas are displayed as references. | -| doc | doc | Document, Submenu | Default submenu for document body layout (embedded mode attributes or default attributes for sections – but for margin which is reserved for embedded mode only). | -| dpi | Modifies the dpi of the current view (independent of the document attribute wk dpi used internally for pixel conversion <-> points). | Submenu | Change view dpi. Ex: dpi?value=72 | -| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable } | Table, Submenu | Defines how the table is displayed when its datasource is empty. | -| fontStyleWrite | fontStyleWrite | Submenu | For menu commands only. Displays default font styles submenu for 4D Write Pro. | -| fontSubscript | fontSubscript | | Toggles subscript font attribute. | -| fontSuperscript | fontSuperscript | | Toggles superscript font attribute. | -| footer | footer | Submenu | Displays the Footer submenu. | -| footer/remove | footer/remove | Footer | Removes the selected footer. | -| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, Submenu | Formula highlight mode for the document. Can be used with a dropdown menu or a button | -| formulaHighlightColor | formulaHighlightColor?value= | Document, Submenu,showDialog | Formula highlight color for the document | -| formulaHighlightReferences | formulaHighlightReferences | Document | Toggles formula references highlighting. Can be used with a check box or a menu item | -| formulaHighlightValues | formulaHighlightValues | Document | Toggles formula values highlighting. Can be used with a check box or a menu item | -| header | header | Submenu | Displays the Header submenu. | -| header/remove | header/remove | Header | Removes the selected header. | -| height | {image \| textBox \| row}/height?value={ \| auto} | Image, TextBox Row, Submenu | Target height. Ex: image/height?value=50pt. For image/width, see width. Ex: row/height?value=12pt | -| headerRowCount | {table/}headerRowCount | Table, Submenu | Sets the number of header rows in a table. Maximum is 5. | -| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Toggles between html wysiwyg mode. | -| image | image | Image, Submenu | Displays image layout submenu. | -| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, Submenu | Sets the display mode of anchored and inline images. Ex: image/displayMode?value=scaledToFit | -| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, Submenu | Image vertical alignment. Ex: image/verticalAlign?value=super | -| insertColumnBreak | insertColumnBreak | Paragraph | Inserts a column break at the selection. | -| insertColumnToTheLeft | insertColumnToTheLeft | Table | Inserts a column to the left of the first selected column(s). | -| insertColumnToTheRight | insertColumnToTheRight | Table | Inserts a column to the right of the last selected column(s). | -| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraph | Inserts a continuous section break at the selection. | -| insertImage | insertImage | | Opens a picture selection dialog box and inserts the selected picture (if any) as a character in the area. | -| insertPageBreak | insertPageBreak | Paragraph | Inserts a page break at the selection. | -| insertRowAbove | insertRowAbove | Table | Inserts a row above the selected row(s). | -| insertRowBelow | insertRowBelow | Table | Inserts a row below the selected row(s). | -| insertSectionBreak | insertSectionBreak | Paragraph | Inserts a section break at the selection. | -| insertSoftHyphen | insertSoftHyphen | | Inserts a soft hyphen at the cursor position. | -| insertTextBox | insertTextBox | Document | Inserts a text box near the current selection, anchored to the first selected page (page mode). | -| keepWithNext | keepWithNext | Paragraph | Links a paragraph with the next so that they cannot be separated by automatic page or column breaks. If applied to the last paragraph of the last cell in a table, the last row of the table is linked to the following paragraph. | -| lineHeight | lineHeight?value={ \| } | Paragraph, Submenu | Paragraph line height. Ex: lineHeight?value=120% | -| layer | {image \| textBox}/layer | Submenu | Default submenu with layering actions for images or text boxes | -| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraph, Submenu | List start number. Ex: listStartNumber?value=10 | -| listStyleImage | listStyleImage/showDialog | Paragraph, showDialog | Opens a file dialog to choose a image to display as list style bullet; it will set also list style type to disc – style to be used if image is not found. | -| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading- zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraph, Submenu | Paragraph list style type. | -| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table/}{inside \| outside/}{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraph, Image, Textbox, Section, Header, Footer, Table, Submenu | Changes target margin (default target is paragraph). Ex: margin?value=4pt //sets all paragraph margins to 4pt. Ex: outside/margin?value=4pt //set exterior paragraph margins to 4pt. Ex: doc/marginLeft?value=1cm //sets left margin to 1cm for the document as used in embedded mode. Ex: section/marginLeft?value=1cm //sets left margin to 1cm for the pages of the first selected section | -| merge | {paragraph/}merge
    cell/merge | Paragraph, Cell | Used with paragraphs: merges paragraphs. Used with cells: merges the selected cells. | -| minHeight | {paragraph \| image/}minHeight?value= | Paragraph, Image, Submenu | Target min height (default target is paragraph). Ex: paragraph/minHeight?value=50pt | -| minWidth | {paragraph \| image/}minWidth?value= | Paragraph, Image, Submenu | Target min width (default target is paragraph). Ex: paragraph/minWidth?value=50pt | -| moveToBack | moveToBack | Image | Moves image to the back. (not enabled for inline images) | -| moveToFront | moveToFront | Image | Moves image to the front. (not enabled for inline images) | -| newLineStyleSheet | newLineStyleSheet?index={1<=number<=number of paragraph stylesheets \| newLineStyleSheet}?value=auto | Paragraph, Submenu | Selected paragraph elements will use Nth stylesheet as stylesheet to use for new paragraphs created on Return or while splitting paragraphs; If value=auto, new paragraphs will use the same stylesheet (default). (menu item name is replaced at runtime with stylesheet name) | -| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row\| cell/}{inside \| outside/}{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom }?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Row, Column, Cell, Submenu | Changes target padding. (default target is paragraph) | -| pageMode | pageMode?value={embedded \| page \| draft} | Submenu | Changes view mode. Ex: pageMode?value=page | -| pageOrientation | {section/}pageOrientation?value={landscape \| portrait} | Section, Submenu | Changes document or first selected section page orientation (if section is not specified, it will apply to all sections otherwise to the first selected section). Ex: pageOrientation?value=portrait //change orientation to portrait for the whole document. Ex: section/pageOrientation?value=landscape //change orientation to landscape for the first selected section | -| pageSize | pageSize?index= | Submenu | Changes document page size: number is Nth page size in the list of available pages sizes. The list contains the current printer page sizes, ISO page sizes and the custom page sizes defined by the user. | -| paragraph | paragraph | Paragraph, Submenu | Default submenu for paragraph layout. | -| paragraph/avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | Allows/disallows page breaks inside paragraphs. | -| print | print | Document | Prints document as rendered in page mode with view settings of the focused 4D Write Pro area. | -| refreshImages | refreshImages | Image | Reloads images from the network for images with URLs. | -| removeSoftHyphens | removeSoftHyphens | | Removes all soft hyphens in the current selection (if the selection is empty, removes soft hyphen before or after the caret if any) | -| row/avoidPageBreakInside | row/avoidPageBreakInside | Table, Row | Allows/disallows page breaks inside table rows. This action is disabled if: the current selection does not contain a table the table does not allow page breaks the table is inside a header or footer Note: If several tables are selected and some of them don't allow page breaks, this option will be enabled but only applied to the tables that allow page breaks. | -| section | section | Section, Submenu | Default submenu for page layout for the first selected section. | -| section/differentFirstPage | section/differentFirstPage | Section | Section has different first page or not. | -| section/differentLeftRightPages | section/differentLeftRightPages | Section | Section has different left and right pages or not. | -| section/name/showDialog | section/name/showDialog | Section, showDialog | Displays a dialog allowing to enter the first selected section name. | -| section/remove | section/remove | Section | Deletes the first section that intersects the user’s selection regardless if the user has selected one or multiple sections. Disabled when only one section remains in the document. | -| section/reset | section/reset | Section | Resets all first selected section attributes to default attributes - which are inherited from doc attributes for background, border and padding (same as for embedded mode) and 2.5cm for page margins. First selected section column properties are also removed (so only default section properties will apply). | -| split | {paragraph/}split
    cell/split | Paragraph, Cell | Used with paragraph: splits paragraph. Used with cells: splits the selected cells (only cells that have been already merged may be split). | -| styleSheet | {paragraph \| image/}styleSheet?value={1<=number<=number of target style sheets} | Paragraph, Image, Submenu, showDialog | Applies Nth stylesheet to the selected target elements. With dialog, new stylesheet will use current attributes from the first selected target. (default target is paragraph) Ex: styleSheet?value=1 //apply first paragraph style sheet to the selected paragraphs and set it as paragraph stylesheets. | -| styleSheets | {paragraph \| image/}styleSheets | Paragraph, Image, Submenu | Default submenu for editing target stylesheets. | -| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, Submenu | Defines the character used as decimal separator by decimal tabulations. | -| tableAlign | tableAlign?value={left \| center \| right}
    or
    table/tableAlign?value={left \| center \| right} | Table, Submenu | Specifies horizontal alignment for a table. | -| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Allows/disallows page breaks inside tables. Disabled if: the current selection does not contain at least one table the table is in a header or a footer | -| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Toggles between display/not display of carry-over rows (see Carry-over rows). | -| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraph | Paragraph text alignment (initial=use right for rtl or left for ltr direction). | -| textBox | textBox | Submenu | Submenu with all actions available for the focused/selected text box | -| textBox/remove | textBox/remove | TextBox | Removes the selected text box | -| textIndent | textIndent?value= (may be negative) | Paragraph, Submenu | Paragraph text indentation (first line indentation). Ex: textIndent?value=2cm | -| textLinethrough | textLinethrough | Submenu | For menu commands only. Linethrough submenu (with style and color). | -| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | Submenu, showDialog | Ex: textLinethroughColor?value=red | -| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textLinethroughStyle?value=dotted | -| textShadow | textShadow | Submenu | For menu commands only. Default submenu for text shadow (with color and offset). | -| textShadowColor | textShadowColor?value={ \| none} | Submenu, showDialog | Changes shadow status or color for characters. Ex: textShadowColor?value=green | -| textShadowOffset | textShadowOffset?value= | Submenu | Only length in pt is supported. Ex: textShadowOffset?value=2pt | -| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | Submenu | Formats text. Ex: textTransform?value=capitalize | -| textUnderline | textUnderline | Submenu | For menu commands only. Underline submenu (with style and color) | -| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | Submenu, showDialog | Ex: textUnderlineColor?value=red | -| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textUnderlineStyle?value=dotted | -| updateStyleSheet | {paragraph \| image/}updateStyleSheet | Paragraph, Image, Submenu | Updates first selected target stylesheet with first selected target current attributes (default target is paragraph) | -| userUnit | userUnit?value={cm \| mm \| in \| pt} | Submenu | Changes document layout unit (will be reflected on rulers). | -| verticalAlign | {paragraph \| row \| column \| cell \| textBox/}verticalAlign?value={top \| middle \| bottom} | Paragraph, Row, Column, Cell, TextBox, Submenu | Paragraph vertical alignment. Ex: verticalAlign?value=top. The effect depends on the minHeight value of the paragraph. | -| view | view | Submenu | For menu commands only. Default submenu for view settings. | -| visibleBackground | visibleBackground | Document | Shows/hides background, anchored pictures and text boxes | -| visibleEmptyImages | visibleEmptyImages | Document | Shows/hides a default black rectangle for images that cannot be loaded or computed (empty images or images in an unsupported format). | -| visibleFooters | visibleFooters | Document | Shows/hides footers. | -| visibleHeaders | visibleHeaders | Document | Shows/hides headers. | -| visibleHiddenChars | visibleHiddenChars | Document | Shows/hides hidden characters | -| visibleHorizontalRuler | visibleHorizontalRuler | Document | Shows/hides horizontal ruler. | -| visiblePageFrames | visiblePageFrames | Document | Shows/hides page frames. | -| visibleVerticalRuler | visibleVerticalRuler | Document | Shows/hides vertical ruler (Page mode only). | -| visibleTableBorders | visibleTableBorders | Document | Shows/hides internal and external table borders as dashed lines where no borders are defined. | -| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraph | Toggles between widow and orphan control mode. | -| width | {paragraph \| image \| textBox \| column/}width?value= \| auto | Paragraph, Image, TextBox, Column, Submenu | Target width (default target is paragraph). Auto value not available for text boxes (converted to 8 cm) and columns. Ex: image/width?value=50pt | -| zoom | zoom?value={25% <= percentage in Css <= 400%} | Document, Submenu | Changes document view zoom. Ex: zoom?value=120% | - - -### Other actions - -[Several other standard actions](https://doc.4d.com/4Dv20/4D/20.2/Standard-actions.300-6750239.en.html) are available in 4D forms and can be used in 4D Write Pro areas: - -* *Edit actions*, such as copy/paste actions. -* *Font* actions, such as fontBold or fontSize. -* *Dynamic expressions* actions, allowing to handle inserted expressions.. -* *Spellchecking* actions. \ No newline at end of file diff --git a/docs/WritePro/user-legacy/standard-actions.md b/docs/WritePro/user-legacy/standard-actions.md new file mode 100644 index 00000000000000..3ac95098fefb03 --- /dev/null +++ b/docs/WritePro/user-legacy/standard-actions.md @@ -0,0 +1,180 @@ +--- +id: standard-actions +title: Standard actions +displayed_sidebar: docs +slug: /WritePro/standard-actions +--- + + +The user interface of 4D Write Pro areas can be handled through a wide set of **standard actions**. Standard actions can be assigned to: + +* menu commands, available through the **menu bar** or the [Dynamic pop up menu](../../commands/dynamic-pop-up-menu) command +* list items, available through pop-up/drop-down lists or hierarchical pop-up menus, +* buttons, check boxes, +* or executed by the [INVOKE ACTION](../../commands/invoke-action) command. + +When assigned to interface objects, standard actions handle the activation/disabling of the object depending on the context. For more information, please refer to the *Standard actions* section. + +Two kinds of actions are available for 4D Write Pro areas: + +* 4D Write Pro specific actions, that can be used only with 4D Write Pro areas, +* [Other actions](#other-actions), including fonts, expressions, spell check, and editing actions, that can be used with 4D Write Pro areas and other 4D areas (see *Standard actions*). + +### 4D Write Pro actions + +The following standard actions are available with 4D Write Pro areas. + +**Notes:** + +* Actions that display an automatic menu/list can only be attached to menu commands, pop-up/drop-down lists or hierarchical pop-up menus objects (see *Submenu*). +* Check boxes and 3D check boxes should be associated with status actions, such as "section/differentFirstPage" or "visibleHorizontalRuler". Three-states option is supported with standard check boxes only. +* A section action status is always equal to the selected section actual status (inherited status if attribute is inherited from parent section or from default attribute) as it must reflect the selected section status (the status which is applied currently to the section). However, modifying a section attribute with a standard action will only override the selected section attribute. +* *Submenu*: When used without any parameters and associated to a menu command, a pop-up/drop-down list or a hierarchical pop-up menu object, these actions display an automatic submenu/list. For example, if you assign the "backgroundColor" action to a menu command, selecting this menu command at runtime will display the Background color submenu items. If you assign the "zoom" action to a hierarchical pop-up menu, it will automatically contain a list of predefined zoom values. Note that these actions cannot be assigned to buttons. +* *showDialog*: Adding the "/showDialog" string to the action name allows the display of the associated standard dialog box for the action. For example, you can use "paragraph/styleSheet/showDialog" to open the input dialog allowing the entry of a new stylesheet name. + +| Action name | Pattern | Available with | Description | +|---|---|---|---| +| anchorHorizontalAlign | {image \| textBox}/anchorHorizontalAlign?value={left \| center \| right} | Image, Textbox, Submenu | Defines the horizontal alignment of the element, relative to the anchorOrigin for images/text boxes in page, or to the layout box for images/text box in embedded mode. This action will reset the horizontal offset to 0. (not enabled for inline images). | +| anchoring | {image \| textBox}/anchoring | Submenu | Default submenu with anchor settings actions for images or text boxes | +| anchorLayout | image/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare \| inline}

    textBox/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare} | Image, Textbox, Submenu | Defines the anchor layout type for an image or a text box. Can be used to transform an inline image to an anchored image, or the reverse. Note: If an image is moved from an anchored mode to inline, the image is inserted at the beginning of the current selected text. "inline" value is not supported for text boxes | +| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box \| header-box \| footer-box} | Image, TextBox, Submenu | Defines the area relative to the absolute position of an anchored image or text box. If the element is relative to the header-box/footer-box which is not visible on a page, the element is not displayed. This action will reset horizontal and vertical offsets to 0. Page mode only, not enabled for inline images. | +| anchorPage | {image \| textBox}/anchorPage?value={all \| current \| currentSubSection} | Image, TextBox, Submenu | Defines the page(s) where the selected image or text box is displayed (not enabled for inline images). Page mode only. | +| anchorSection | {image \| textBox}/anchorSection?value={all \| current} | Image, TextBox, Submenu | Defines the section(s) where the selected image or text box is displayed. (not enabled for inline images). Page mode only. | +| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top \| center \| bottom} | Image, TextBox Submenu | Defines the vertical alignment of the image or text box, relative to the anchorOrgin for an image or text box in page, or to the layout box for an image or text box in embedded mode. This action will reset the vertical offset to 0 (not enabled for inline images). Note: See "verticalAlign" action for the vertical alignment inside the text box | +| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | | +| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | For menu commands only. Default submenu for all background attributes. | +| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background clipping box (default target is paragraph). Paper-box targets document and section only. | +| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target background. | +| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Sets the display mode of images used as background. | +| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Clears target background image. (default target is paragraph) | +| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image origin box (default target is paragraph). Paper-box targets document and section only. | +| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image horizontal alignment (default target is paragraph). Ex: paragraph/backgroundPositionH?value=left | +| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image vertical alignment (default target is paragraph). Ex: paragraph/backgroundPositionV?value=top | +| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image repeat mode. (default target is paragraph) | +| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image width (default target is paragraph). Ex: paragraph/backgroundSizeH?value=100%. section/backgroundSizeH?value=cover | +| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell}/backgroundSizeV?value={ \| \| auto} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image height (default target is paragraph). Ex: paragraph/backgroundSizeV?value=50%. Ex: section/backgroundSizeV?value=40pt | +| bookmark | bookmark?index= | Submenu | Selects the Nth bookmark. Ex: bookmark?index=2 // selects the second bookmark | +| borderCollapse | borderCollapse | Paragraph | Collapses selected paragraph borders and interior margins. | +| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target border color (default target is paragraph). Ex: paragraph/borderColorLeft?value=green | +| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Submenu | Changes target border radius (default target is paragraph). Ex: paragraph/borderRadius?value=4pt | +| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Default submenu for target borders. | +| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border style (default target is paragraph). Ex: paragraph/borderStyleLeft?value=double. Ex: outside/borderStyle?value=solid //set selected paragraphs exterior borders to style solid. Ex: inside/borderStyle?value=none //remove selected paragraphs interior borders | +| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border width (default target is paragraph). Ex: paragraph/borderWidthLeft?value=4pt | +| columnCount | {section/}columnCount?value={1<=number<=20} | Document, Section, Submenu | Number of columns in the current document and/or section. (default target is doc) Ex: section/columnCount?value=3 | +| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document, Section, Submenu, showDialog | Color for the decorative line between document or section columns. Ex: columnRuleColor?value="#FFFFFF" | +| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Section, Submenu | Style for the decorative line between document or section columns. Ex: columnRuleStyle?value="solid" | +| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document, Section, Submenu | Width of the decorative line between document or section columns. Ex: columnRuleWidth?value="2pt" | +| columns | {section/}columns | Document, Section, Submenu | Only for a menu item: creates automatically a complete Columns sub-menu with all column actions sub-menus (except insertColumnBreak) | +| columnSpacing | {section/}columnSpacing?value={CSS length} | Document, Section, Submenu | Space between two columns in the current document and/or section. Ex: columnSpacing?value="1cm" | +| deleteColumns | deleteColumns | Table | Deletes all selected columns. | +| deleteRows | deleteRows | Table | Deletes all selected rows. | +| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraph, Image, Submenu | Removes the Nth stylesheet from the stored stylesheets for the selected target (default target is paragraph). Menu item name is replaced at runtime with style sheet name. | +| direction | direction?value={ltr \| rtl} | Paragraph, Submenu | Paragraph direction. | +| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Displays formula references as a # symbol. Can only be used when formulas are displayed as references. | +| doc | doc | Document, Submenu | Default submenu for document body layout (embedded mode attributes or default attributes for sections – but for margin which is reserved for embedded mode only). | +| dpi | Modifies the dpi of the current view (independent of the document attribute wk dpi used internally for pixel conversion <-> points). | Submenu | Change view dpi. Ex: dpi?value=72 | +| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable } | Table, Submenu | Defines how the table is displayed when its datasource is empty. | +| fontStyleWrite | fontStyleWrite | Submenu | For menu commands only. Displays default font styles submenu for 4D Write Pro. | +| fontSubscript | fontSubscript | | Toggles subscript font attribute. | +| fontSuperscript | fontSuperscript | | Toggles superscript font attribute. | +| footer | footer | Submenu | Displays the Footer submenu. | +| footer/remove | footer/remove | Footer | Removes the selected footer. | +| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, Submenu | Formula highlight mode for the document. Can be used with a dropdown menu or a button | +| formulaHighlightColor | formulaHighlightColor?value= | Document, Submenu,showDialog | Formula highlight color for the document | +| formulaHighlightReferences | formulaHighlightReferences | Document | Toggles formula references highlighting. Can be used with a check box or a menu item | +| formulaHighlightValues | formulaHighlightValues | Document | Toggles formula values highlighting. Can be used with a check box or a menu item | +| header | header | Submenu | Displays the Header submenu. | +| header/remove | header/remove | Header | Removes the selected header. | +| height | {image \| textBox \| row}/height?value={ \| auto} | Image, TextBox Row, Submenu | Target height. Ex: image/height?value=50pt. For image/width, see width. Ex: row/height?value=12pt | +| headerRowCount | {table/}headerRowCount | Table, Submenu | Sets the number of header rows in a table. Maximum is 5. | +| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Toggles between html wysiwyg mode. | +| image | image | Image, Submenu | Displays image layout submenu. | +| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, Submenu | Sets the display mode of anchored and inline images. Ex: image/displayMode?value=scaledToFit | +| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, Submenu | Image vertical alignment. Ex: image/verticalAlign?value=super | +| insertColumnBreak | insertColumnBreak | Paragraph | Inserts a column break at the selection. | +| insertColumnToTheLeft | insertColumnToTheLeft | Table | Inserts a column to the left of the first selected column(s). | +| insertColumnToTheRight | insertColumnToTheRight | Table | Inserts a column to the right of the last selected column(s). | +| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraph | Inserts a continuous section break at the selection. | +| insertImage | insertImage | | Opens a picture selection dialog box and inserts the selected picture (if any) as a character in the area. | +| insertPageBreak | insertPageBreak | Paragraph | Inserts a page break at the selection. | +| insertRowAbove | insertRowAbove | Table | Inserts a row above the selected row(s). | +| insertRowBelow | insertRowBelow | Table | Inserts a row below the selected row(s). | +| insertSectionBreak | insertSectionBreak | Paragraph | Inserts a section break at the selection. | +| insertSoftHyphen | insertSoftHyphen | | Inserts a soft hyphen at the cursor position. | +| insertTextBox | insertTextBox | Document | Inserts a text box near the current selection, anchored to the first selected page (page mode). | +| keepWithNext | keepWithNext | Paragraph | Links a paragraph with the next so that they cannot be separated by automatic page or column breaks. If applied to the last paragraph of the last cell in a table, the last row of the table is linked to the following paragraph. | +| lineHeight | lineHeight?value={ \| } | Paragraph, Submenu | Paragraph line height. Ex: lineHeight?value=120% | +| layer | {image \| textBox}/layer | Submenu | Default submenu with layering actions for images or text boxes | +| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraph, Submenu | List start number. Ex: listStartNumber?value=10 | +| listStyleImage | listStyleImage/showDialog | Paragraph, showDialog | Opens a file dialog to choose a image to display as list style bullet; it will set also list style type to disc – style to be used if image is not found. | +| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading- zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraph, Submenu | Paragraph list style type. | +| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table/}{inside \| outside/}{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraph, Image, Textbox, Section, Header, Footer, Table, Submenu | Changes target margin (default target is paragraph). Ex: margin?value=4pt //sets all paragraph margins to 4pt. Ex: outside/margin?value=4pt //set exterior paragraph margins to 4pt. Ex: doc/marginLeft?value=1cm //sets left margin to 1cm for the document as used in embedded mode. Ex: section/marginLeft?value=1cm //sets left margin to 1cm for the pages of the first selected section | +| merge | {paragraph/}merge
    cell/merge | Paragraph, Cell | Used with paragraphs: merges paragraphs. Used with cells: merges the selected cells. | +| minHeight | {paragraph \| image/}minHeight?value= | Paragraph, Image, Submenu | Target min height (default target is paragraph). Ex: paragraph/minHeight?value=50pt | +| minWidth | {paragraph \| image/}minWidth?value= | Paragraph, Image, Submenu | Target min width (default target is paragraph). Ex: paragraph/minWidth?value=50pt | +| moveToBack | moveToBack | Image | Moves image to the back. (not enabled for inline images) | +| moveToFront | moveToFront | Image | Moves image to the front. (not enabled for inline images) | +| newLineStyleSheet | newLineStyleSheet?index={1<=number<=number of paragraph stylesheets \| newLineStyleSheet}?value=auto | Paragraph, Submenu | Selected paragraph elements will use Nth stylesheet as stylesheet to use for new paragraphs created on Return or while splitting paragraphs; If value=auto, new paragraphs will use the same stylesheet (default). (menu item name is replaced at runtime with stylesheet name) | +| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row\| cell/}{inside \| outside/}{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom }?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Row, Column, Cell, Submenu | Changes target padding. (default target is paragraph) | +| pageMode | pageMode?value={embedded \| page \| draft} | Submenu | Changes view mode. Ex: pageMode?value=page | +| pageOrientation | {section/}pageOrientation?value={landscape \| portrait} | Section, Submenu | Changes document or first selected section page orientation (if section is not specified, it will apply to all sections otherwise to the first selected section). Ex: pageOrientation?value=portrait //change orientation to portrait for the whole document. Ex: section/pageOrientation?value=landscape //change orientation to landscape for the first selected section | +| pageSize | pageSize?index= | Submenu | Changes document page size: number is Nth page size in the list of available pages sizes. The list contains the current printer page sizes, ISO page sizes and the custom page sizes defined by the user. | +| paragraph | paragraph | Paragraph, Submenu | Default submenu for paragraph layout. | +| paragraph/avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | Allows/disallows page breaks inside paragraphs. | +| print | print | Document | Prints document as rendered in page mode with view settings of the focused 4D Write Pro area. | +| refreshImages | refreshImages | Image | Reloads images from the network for images with URLs. | +| removeSoftHyphens | removeSoftHyphens | | Removes all soft hyphens in the current selection (if the selection is empty, removes soft hyphen before or after the caret if any) | +| row/avoidPageBreakInside | row/avoidPageBreakInside | Table, Row | Allows/disallows page breaks inside table rows. This action is disabled if: the current selection does not contain a table the table does not allow page breaks the table is inside a header or footer Note: If several tables are selected and some of them don't allow page breaks, this option will be enabled but only applied to the tables that allow page breaks. | +| section | section | Section, Submenu | Default submenu for page layout for the first selected section. | +| section/differentFirstPage | section/differentFirstPage | Section | Section has different first page or not. | +| section/differentLeftRightPages | section/differentLeftRightPages | Section | Section has different left and right pages or not. | +| section/name/showDialog | section/name/showDialog | Section, showDialog | Displays a dialog allowing to enter the first selected section name. | +| section/remove | section/remove | Section | Deletes the first section that intersects the user’s selection regardless if the user has selected one or multiple sections. Disabled when only one section remains in the document. | +| section/reset | section/reset | Section | Resets all first selected section attributes to default attributes - which are inherited from doc attributes for background, border and padding (same as for embedded mode) and 2.5cm for page margins. First selected section column properties are also removed (so only default section properties will apply). | +| split | {paragraph/}split
    cell/split | Paragraph, Cell | Used with paragraph: splits paragraph. Used with cells: splits the selected cells (only cells that have been already merged may be split). | +| styleSheet | {paragraph \| image/}styleSheet?value={1<=number<=number of target style sheets} | Paragraph, Image, Submenu, showDialog | Applies Nth stylesheet to the selected target elements. With dialog, new stylesheet will use current attributes from the first selected target. (default target is paragraph) Ex: styleSheet?value=1 //apply first paragraph style sheet to the selected paragraphs and set it as paragraph stylesheets. | +| styleSheets | {paragraph \| image/}styleSheets | Paragraph, Image, Submenu | Default submenu for editing target stylesheets. | +| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, Submenu | Defines the character used as decimal separator by decimal tabulations. | +| tableAlign | tableAlign?value={left \| center \| right}
    or
    table/tableAlign?value={left \| center \| right} | Table, Submenu | Specifies horizontal alignment for a table. | +| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Allows/disallows page breaks inside tables. Disabled if: the current selection does not contain at least one table the table is in a header or a footer | +| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Toggles between display/not display of carry-over rows (see Carry-over rows). | +| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraph | Paragraph text alignment (initial=use right for rtl or left for ltr direction). | +| textBox | textBox | Submenu | Submenu with all actions available for the focused/selected text box | +| textBox/remove | textBox/remove | TextBox | Removes the selected text box | +| textIndent | textIndent?value= (may be negative) | Paragraph, Submenu | Paragraph text indentation (first line indentation). Ex: textIndent?value=2cm | +| textLinethrough | textLinethrough | Submenu | For menu commands only. Linethrough submenu (with style and color). | +| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | Submenu, showDialog | Ex: textLinethroughColor?value=red | +| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textLinethroughStyle?value=dotted | +| textShadow | textShadow | Submenu | For menu commands only. Default submenu for text shadow (with color and offset). | +| textShadowColor | textShadowColor?value={ \| none} | Submenu, showDialog | Changes shadow status or color for characters. Ex: textShadowColor?value=green | +| textShadowOffset | textShadowOffset?value= | Submenu | Only length in pt is supported. Ex: textShadowOffset?value=2pt | +| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | Submenu | Formats text. Ex: textTransform?value=capitalize | +| textUnderline | textUnderline | Submenu | For menu commands only. Underline submenu (with style and color) | +| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | Submenu, showDialog | Ex: textUnderlineColor?value=red | +| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textUnderlineStyle?value=dotted | +| updateStyleSheet | {paragraph \| image/}updateStyleSheet | Paragraph, Image, Submenu | Updates first selected target stylesheet with first selected target current attributes (default target is paragraph) | +| userUnit | userUnit?value={cm \| mm \| in \| pt} | Submenu | Changes document layout unit (will be reflected on rulers). | +| verticalAlign | {paragraph \| row \| column \| cell \| textBox/}verticalAlign?value={top \| middle \| bottom} | Paragraph, Row, Column, Cell, TextBox, Submenu | Paragraph vertical alignment. Ex: verticalAlign?value=top. The effect depends on the minHeight value of the paragraph. | +| view | view | Submenu | For menu commands only. Default submenu for view settings. | +| visibleBackground | visibleBackground | Document | Shows/hides background, anchored pictures and text boxes | +| visibleEmptyImages | visibleEmptyImages | Document | Shows/hides a default black rectangle for images that cannot be loaded or computed (empty images or images in an unsupported format). | +| visibleFooters | visibleFooters | Document | Shows/hides footers. | +| visibleHeaders | visibleHeaders | Document | Shows/hides headers. | +| visibleHiddenChars | visibleHiddenChars | Document | Shows/hides hidden characters | +| visibleHorizontalRuler | visibleHorizontalRuler | Document | Shows/hides horizontal ruler. | +| visiblePageFrames | visiblePageFrames | Document | Shows/hides page frames. | +| visibleVerticalRuler | visibleVerticalRuler | Document | Shows/hides vertical ruler (Page mode only). | +| visibleTableBorders | visibleTableBorders | Document | Shows/hides internal and external table borders as dashed lines where no borders are defined. | +| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraph | Toggles between widow and orphan control mode. | +| width | {paragraph \| image \| textBox \| column/}width?value= \| auto | Paragraph, Image, TextBox, Column, Submenu | Target width (default target is paragraph). Auto value not available for text boxes (converted to 8 cm) and columns. Ex: image/width?value=50pt | +| zoom | zoom?value={25% <= percentage in Css <= 400%} | Document, Submenu | Changes document view zoom. Ex: zoom?value=120% | + + +### Other actions + +[Several other standard actions](https://doc.4d.com/4Dv20/4D/20.2/Standard-actions.300-6750239.en.html) are available in 4D forms and can be used in 4D Write Pro areas: + +* *Edit actions*, such as copy/paste actions. +* *Font* actions, such as fontBold or fontSize. +* *Dynamic expressions* actions, allowing to handle inserted expressions.. +* *Spellchecking* actions. \ No newline at end of file diff --git a/docs/WritePro/user-legacy/using-a-4d-write-pro-area.md b/docs/WritePro/user-legacy/using-a-4d-write-pro-area.md index af757a0e775b30..af6c0d6f9fc763 100644 --- a/docs/WritePro/user-legacy/using-a-4d-write-pro-area.md +++ b/docs/WritePro/user-legacy/using-a-4d-write-pro-area.md @@ -25,6 +25,7 @@ You can also use additional commands such as **Document.../Page size** or **Docu * Avoid page break inside property * Widow and orphan control. + ## Paragraph breaks When displayed in Page or Draft mode (or in the context of a document printing), 4D Write Pro paragraphs can break: @@ -44,9 +45,12 @@ You can control automatic breaks in paragraphs using the following features: * **Widow and orphan control**: When this option is set for a paragraph, 4D Write Pro does not allow widows (last line of a paragraph isolated at the top of a page) or orphans (first line of a paragraph isolated at the bottom of a page) in the document. In the first case, the previous line of the paragraph is added to the top of the page so that two lines are displayed there. In the second case, the single first line is moved onto the next page. * **Avoid page break inside**: When this option is set for a paragraph, 4D Write Pro prevents this paragraph from being broken into parts on two or more pages. -* **Keep with next:** When this option is set for a paragraph, that paragraph cannot be separated from the one that follows it by an automatic break. See `wk keep with next` and the corresponding *keepWithNext* [standard action](./defining-a-4d-write-pro-area.md#standard-actions). +* **Keep with next:** When this option is set for a paragraph, that paragraph cannot be separated from the one that follows it by an automatic break. See `wk keep with next` and the corresponding *keepWithNext* [standard action](./user-legacy/standard-actions.md). + +These options can be set using the context menu, or [attributes](../commands-legacy/4d-write-pro-attributes.md) (`wk avoid widows and orphans`, `wk page break inside paragraph`, or *widowAndOrphanControlEnabled* and *avoidPageBreakInside* [standard actions](./standard-actions). -These options can be set using the context menu, or [attributes](../commands-legacy/4d-write-pro-attributes.md) (`wk avoid widows and orphans`, `wk page break inside paragraph`, or *widowAndOrphanControlEnabled* and *avoidPageBreakInside* [standard actions](./defining-a-4d-write-pro-area.md#standard-actions). + + ## Background @@ -59,7 +63,7 @@ The background of 4D Write Pro documents and document elements (tables, paragrap * painting area * repeat -These [attributes](../commands-legacy/4d-write-pro-attributes.md) can be defined programmatically for either individual elements on a page and/or entire document backgrounds with the [WP SET ATTRIBUTES](../commands/wp-set-attributes) command or by [standard actions](./defining-a-4d-write-pro-area.md#standard-actions). +These [attributes](../commands-legacy/4d-write-pro-attributes.md) can be defined programmatically for either individual elements on a page and/or entire document backgrounds with the [WP SET ATTRIBUTES](../commands/wp-set-attributes) command or by [standard actions](./standard-actions). Users can modify background attributes via the contextual menu as shown below: @@ -279,8 +283,8 @@ Columns can be set using: * the **Columns** submenu of the 4D Write Pro area context menu, * 4D Write Pro [attributes](../commands-legacy/4d-write-pro-attributes.md), -* 4D Write Pro [standard actions](./defining-a-4d-write-pro-area.md#standard-actions). - +* 4D Write Pro [standard actions](./standard-actions). +(./user-legacy/standard-actions.md) You can set or get the following properties and actions for columns: | **Property** | **Description** | **Document attributes**| **Standard actions** | diff --git a/docs/WritePro/user/user-new.md b/docs/WritePro/user/user-new.md new file mode 100644 index 00000000000000..09990ca4034c8f --- /dev/null +++ b/docs/WritePro/user/user-new.md @@ -0,0 +1,34 @@ +--- +id: user-new +title: user WP +--- + +to import + + + +## Lists + +4D Write Pro supports two main types of lists: + +* unordered lists: where list items are marked with bullets, custom bullets, or images used as markers. +* ordered lists: where list items are marked with numbers or letters + +They can be created using: +* the toolbar or sidebar of the [4D Write Pro interface](https://doc.4d.com/4Dv20/4D/20.2/Entry-areas.300-6750367.en.html#5865253) +* the `listStyleType` or `listStyleImage` [standard actions](./standard-actions.md) , +* or [programmatically](../commands-legacy/4d-write-pro-attributes.md#lists) using [WP SET ATTRIBUTE](../commands/wp-set-attributes.md). + +When a list is created using a standard action (`listStyleType` or `listStyleImage`) or the toolbar/sidebar, 4D Write Pro automatically inserts a margin before the text so that the marker is positioned inside it. The value of the inserted margin corresponds to the offset of the default tab (`wk tab default`). + +![](../../assets/en/WritePro/margin-bullets.png) + +When the list is created using [the WP SET ATTRIBUTE command](../commands-legacy/4d-write-pro-attributes.md#lists), no specific margin is managed, by default the marker is added at the left boundary of the paragraph. The developer can add a custom margin if necessary. + +:::info Related blog post + +[4D Write Pro – Adding a margin automatically when bullets are set using standard actions]() + +::: + + diff --git a/docs/assets/en/WritePro/margin-bullet.png b/docs/assets/en/WritePro/margin-bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..52737ade4cdf7c96ae595d418c364a93c89e8dad GIT binary patch literal 18358 zcmc$_XIK+a+cgTJg0z4jMVeAon)D7zl`bN^caR!7B!H+iX#!G02~9v$dJk0~gx--7 zAQE~f^v)Td_k7n^&Uw$@^CMTTJ(HQ)lfC!7*1hhvqh4#NkP$y5#>2xSQ+=iQ1`iJ( z2Yh0P?gB@8<1(y)FMO{zD)M-xgN*Ay;~&6jw174amOR(F8*J&#vLUU+!q9sfS~ zDEIHScz7!6s){e)`kQahg~SM-1hE{S$d2=)tL@YuX&5i`?DNp&(4y>P*=7d|w|^yP zi_r8C5D{5P_&NFJj`|z+cfb5i+-y83a!dEoEZM1WjG&D-za5VHk%yz$kJ|#{wo7)2Cn`?BL4VP7X+B`c&>Kam}iYr(+I2K)Vd9Zq~te0Ks`-xHi|?es%eCxh)< zgrs)6`YbL2Z?m$p{z!(%d9ai&Td=dT<^@_(ash{)(tv?Ry7m9FQQReZ-MMu%X))C5 zZBV}&kBL6Hx(+%^t=YNkMEf74wkCzZA|v&;t}k|nTB{%IT(t$EO*%u?Q&|REn?x;6 z+gHJRb+Yh~0N3!FEu-zjdH*vejhh`4|4Hpz{sz}(3t239j(Dwmu#*L@n-0jnd+M`{ z6@=;0`ojIffQh0A^|TeeY-T>I^iBA@U&}>ve{1Vr*wA9x^+an*fNQe(^(4Qm52b_O zIn6n2P-OPTVqW+3qPW$AY=r6WH3m8)eX)`Sm101csje6IVKEo8U3{@5n= zQYA8SjStCy#=G1KV(D)6eu`y4?_9(>`|rj*`6G8KxBEA?O!2gP$=&+fOd3pzs?}Kk&X1Yac_zE*DYeh&bo2*4PX0->=46rWaRhRIkQf#8@!tdE<}Cs zm1JoMmSq)VmW{6aD_-Xzb%UV3qBx!Z>}J~-)JJ*X2mC;8c@<;c44m&A%MghF>Bmr) zxjEI(^Q`X>@zKONTa`tdV+=yP2}f>Sx;ipn6(z1qIA_yU_IYok*Ij2l$L*ffPSliY z&-umNjGwmJWB1;h7IMWC z2~^7-Po=Mppmenf;V!qzIxdh?bpA_#1@#+iJjsbsB^x55(h-_3@ZD(unX6jA{=z1^gGD3e# z)UEmYxfcAAPBt@yq%B^~n~dd>d$+w&&Y!Gx57SD!d(}Wv3Xfn`YQ1@a-Nk@paxymF z8D*O`eK$+Hp@w%Y`kR*a9U)>TE$(n?yZ`X(K&h9>-hygr?KlH3MdR^UIBggEXP&I&)M9mp0a>_cG{0$3 z%%7iSWgat#T{;#Eq>Z>yA9-E|JWLx7z3+*`=3cO9%o~Nd$6XUOW?xZX&t$7wT)bKx zJC(XgI4^EQ-TB$M!V6h?Ygf+_TvyMnCnwoI3Ob=+4icWPKDyquxE8$LatI-n!>!UZ zCTPkvk8hih!~IJ>YQN)@bDt6{=;+})Dzdnu3l5qaYYZY8T*H?x&Ja+QGF3uawZ=}G zJ8?MB+ch&F7k-S8pY(e9Z!a8bnEI_0GL?QX>X>U0xh1*&GUweNj|1w6AfotVmM-Zwhxe$_TRG3j4Pt}q@0owLxIT8CfeT!D929rR9IoZh1oZeXi$E`KjVah00t+Eb zMV-7eC2M7C{pn?qN6;Z2bJAGr>EZi$?`z3mkpnjk@8TQK4Qgm1Kg;5kdCC4SyyBAyh^}%OwgWU@CSy1q36gscTDEAs<%aR}xGIPM=N;ZHoeYU- zJum_dL63(Pw$?&A#17mobo{`SH+P_Tn0A9DyS$LgeLviF_J!lMf(VyePQdyC)uDP^ zrvbMgfp!o5;IraMcNTa264c~uR(3<^s%Xo3-lzzIhK5;xhqwM}f)>}yNj$h+hD8#x zz(Z&no~b^D5OMDWP3+5^FfzyNI#=+yaL< zZ4TkM!Ntn8J2#w^Rn9!XSzI2pehn#3#Cn9_w_b^bFqd5pVRsH`_jI7gb)GEvdm|Pm zZfvH$^>gm9)4F4m)1;eCt?Lq4_1J-2#HzVYDaL#QKyLQ1;ENhq zSc!K%F>!}|%DRtqEUG3oh`2-V8^hqa&$7m4K|~E<17hJvn%JyDyll9NIW(_4zMsJ@ z#V*3E&!f)WN*LcfKx;66Kl&rAV_-ONO%B-_bg6l{Ab0gR&u@SCR_n|a|NGn~sVkOC z=gU#|OCP9Wi^1hinf>&F=(d_n#r8?-@%|f<;AyVf<~@#(_1HJ7CGK;-Ti2VTAUk(T zn;SzTu2C!K53$Tu`A)-%?uqsZ@eaU{R&Pd+w$kpi3$Lp`giO#!I?Vv#lbmqGAnoGXZq5 zHGt#>bI8<$L4@zd?)?3DvyJv23Mo%#HAmLc;%0n`Fl41y;(Nb0PyYVvD9dHO+yH>G z-Uj~LC&7_o=D~z4Yo;ACa)z;kVNrnklW{ka0IY%~6y8CzHHwd>FVh$yIBf-an z*Aa5;a$QhkY#Rt%NU(b*MAo!_azpJN;&+CorGc$H`+p%8v|01T2qDe(1u%S?bQSgH#H$A6+7U39_8)y|~)NLRNWa&#bPg6cr5=4$1d=F*mwR2V8B0 zWflsHW@p;3nWO#5X1)0Lez$@_^P~a!43uVOxL6mtF{i)qlT{1{(?23IM9`*v^I(2W zS=~*Me!~zp4C_mF>^qe!cIv&rd};F?i7u z%(8R#8*;$!++vvH zNC3^x_+k?uB7(UdI^S!%u-#uR<-cq)jnsMS)E#nJ2Fz)HS|1@_uG$G8lE}0$FZ=|R zYRs$?hRjodhv>76r0dJm!8vc-y}2Se&0GcqhG{G*%c6$81n11aCsv~aU)Q_toB2?b%c4LF0S%9#4#)N0Uw4L=VqAyyyK>ECU!k~Hh7xuQI=Bwl(3vbnY;tS} z-$gLWEX=y0nvsy#2gY%rSD-HH>V7^lyRY9R;1!^TTPBuU7t~1o=sy%X_H0l^y4fXZ z>|}gr+kbjJmBe%NWsq5xer=y#>$cM;xZ(WFabfj=@me0QbJ6Pp&3BV7;0$hb(bw%V zm%G#j*?Pwj)l4{O=Yc2$Gt665xveqhu&?=4TzgV?r3!YGiatp?`RbDkm7Tx4==-(y z}vAZ5P~#m?>C@pdN&ac*DK@`duW=cubg?qvJ- zd^fHt@)m+a^3X+pbetSRprgo;$G2LxrP}d`^AZ@*$Cy!zqO7c_!v2fOfz+TkQBTm+$t^ zY+u~=R{Psjzv=&sKq9|1!5mw_qc2TkikQ&Tuj6Lp>`H;6IQZk1E zpQ0IXoJrLaC`XE%$runj!6UkMkb-{%!IX+8JeDucUZZ9~nX-Urd8af&)FM0wd^vryBKci(2JY6*1mE zd!IXfiQmRT_BCkq#mQ9I)76L-8_KeK`RFo#>UV9D&&TAc!^M%zG0!?4nlUzhv6x|4 zLrBUgSoR7{EoqP0i>i@C^VRx8GkqheR7zli?2Bb38``oMFIC}L z8j8PP)4L^~X`@12rF2ZT?aTQmVGaE1hGwpMXlS40iA=qO9Es)N6wxmRJ}r>UC!&Rp z;W{(8w=Lb>XW3j7(WiR0-ti0Y-l{%ew(W0K5a&xJI9$IdllXbzs`NqVtz>RoSyilL zC4;xm2PN(GgQcUUAjas@;N_BJ{-H})%U38&-wggE%Pg&+<3SO}+ueJVlL|_8(4!1? z5&PPzX8~COEaGuA4eP&LB-VKLjR>%|(zl^33vq9*XwwX?eD#Bv>w_yc!bBfa02M|hqLeZrf*`AX_ zG4?38W^h>5l8ax+8k6<=oa*<+Obp$ogeMDnvUW6=BY1^Unur*xXddll5))H}mRz|# zK_14mmw~Rvz8GdhWpKbbo87zv4{b;L%NW;hj%#LKd1%YjyXwhh&{HjL3_7 z(3rcNv+K9eRhopn`*(7B`hzGuaTBE2lX#OgXjRIanf^mSj7#PR`b@ zPN#zD>Gm_G2*FGzmD*wkzh6sLXIK1ZO@=ARWrIwEZO`D+x~h=duB9pwY+KiSSuM64J=98Z$KqOz8hXYZX6!Q^vcLl6de?MWQ>Jp( z9z1Oxa^-Vb(0b~8mRih;IVc|+fCKOtap0D!QfKny&={+=t29U+wejfiZ=-i)gYd%m!uF+bhsLZrSp}eCdY>Pdx9WXXev*`wI`@2w07^MxTpkI0O;AUR z1IIKgA}xqn23g}5zLAhL>kH^?j6Qv;#|wfdX)-sK%io#`L_W1NXje;_%e;bej2SBX zHgacNCmUxQ&_$niMX?v^$y{8NQU-dcwUVt0A(Du-A?R-u=9?6a;B@_Ah21;`rC|Ev z-#pHg?OuwMuimtket;q{qvPeteTH(9$Zf6EW8Z>5s}E4DE#SL|qzT!Jiw%;6?UOG< zs^9CpzD?h!ITtMS3dpcf&aI0Ve=Meo-$=Z_?!;Yjc9d^0yW@?jHFy_f4(7qWnf0L# z3J3*Dz&VSanGD8HYMUlsfB-qZRcS> z-$BY^q*FKUqM`Ji&-~bAYMM&eR5;@_Ge^9HT$$?qjF>Z?^~&)&0kOew0*k7ccK=h` zS!)T2V1#B$ysp`GVD6+^2nLS6dvx&{8T3*wZRo476#ra&vJ=+6@qn5b-2xtMSBw6XZyH#OBFd-_bH=s|qxxnwt=f)CRs>ZK$P z)>Gj=xY0F1F?rK|KkF{JpPgwzD@97O2}2ytKug^`tKd&h(%VG{65dk}5q9Ne*)Y7^<%FJkq|4kU@<2dhp4^`v z1o-;F)~oPuF;<|N{l3>2_%IqZt@G*0hUNH{l{vRkD!Xk=0YW+`63L1NQI`IdT2Gz* z&X!WuO)WZ{)y?SP_t|k2>E3PX@mtIJt^eX8{#PK6wcPTUnA69C?=SO`jn-WoG&#{K(u2&$ zUDhVCUNtq_i7`9uJukC=m~|CgyiN{!S&*SEpg4W~9TOih<=*3@ZIt3Ztue8up_5t$EJJazu9A1}?*YJz)nn@Df%e$Q`y_; zoqgd=AxH{*kU_0g{b&;pd>lAi!+$V%v^eZ{K@}~Y`4hl-$nFkz__q%tM10%Fr&f2Oazt zL^;e?|80Q9tK`Ae*(-2>6i2f4d|>stZatl4c^wpLzb+iZ*SRzG-IpGFsR6$#>RoYm z{={s&-xfxLVwH`zvefRG(R^azsgI&j*~=A=R!6F2di`U}rUpU9r!%8OS^WdAv5|Gd zS|x|y#X4q@NG(XFQfL}|u4t_Z2TWy&+W(H#0 zwySxEzD5wH4N5JV7y^;wS=JEo#iH@r3~QA7oehp+j%1CFH7yEc>f`ij2m!ILuhqMh znuf-tAS>?f3!~%E#aGRW%F&jT*?k|nf5rPT2WU#Jm#H<5%dj|E$6GD5kqS;;ABvTP z?HPN{R;s&mPMeAHc{ehYlYey!#@lO7Wb?yKKWZ2xJ{5zsh2F{kCIbYr=(AbnTj4&B z%A8PTr+ZDWo0z+Sp-;O}6WjdWY4^!+jj1=oX9fBjeBj;pL<0Q_ru~e*zD)?kZ>9Lxiu%W`|Ie8c4?#phS6PYrZwg{Qcn!MDLo2V9f6JuF|qXSKY!c0MB2B>@2uN zzRY{0V2=V59J0xZ#O7SKf~b{7rj&2vtis&t!M0qFPwbbpiV~bN66jm)5jx6VEs6YF?g}FioKwj&?wJ`yo#(ii>%{uO%y+>pccuznwo%! zTk`)3&M0M=p22kvyt0T+O+pMh4CTA@WgaEYg@4t4w<6ML+PV6(w!%9THiRCj+9*G+ z>J_z7-Z5mFkLzl1eRj?5G8mvHh24H#9nui=J;zqIuS*0XH@Hh^&G@b{=}d1@yJ=R$ zRkhF|p2W2>dw_q@Xj4VYP$<@ML)q7UTHnwO7Sv+fvJ&HbT-jeU;mbBjT{gtb*GgV_ z5zw?dfJqVE{C_1a)}QHh?&Pj6G@;GT(^q{D76PQ!?D^hA>@|6LHyU`wEjHFi5b9pV zhAQ6I?T>t?Is363wE3CFqs?!Ij>fzxs%mM5g3^_n2Al`8zl_=ZTz+n|g_LuMzERE! z3$`{8+wi)V(h#m$&1={hwG)W-!@;t}%$AAC&oZ1P$_$|T>z{4@_mU}w7`syJiV&p@ zEJ>EGaR~swK-!y7tSCJF^Ms|h(slex!j?rcW|3qw8zr(MrTSjgMN9Tn?QP%r{5!S1 zku9GPiHlRc4%U_jnQG1DIIhPalm3lpJTgkpL~{jZG(j~t z_5MKrBI1}yq>VkLkB~oMONE4l+b+nxW>{gq_7O`cw!zU z7N#VfYrogaCnN$w|!TwJ%z&3{$Ua&21{YTt-k4CL5F7I@1I{O zRztM@_^qGop5$U%^t!(otXQ;`rE18f7zMBI?`4Ijg}}N}Si*L@+X`PcUN&;0AKA5} zY|qu78+LNI&Vw^)$#tc5rxEy*DMRP6jhP?+sU)_{b<4_hfxHRPyp747RdAo_`B#;2 zhgv0=x!3qpTb_s+9&kekkO^|X{Up5PSISOn#;M7na)WT<*cM0bfZ4~sw~vx8ZjJbg zUYJ00Yrq?yUDnvMjRR6V1uUfL4L={mXx5`V#Q{lf(|We9(<|$7<42U}m!TwhlGJ=; zqCsmTdZFT;m#8U~>AVxA$eJeM z*Z1X&zigUME<;ndRigHc@X zk_lJvAi%@!C^^Vb=tke7=ZC@I@X>`oQ5i?=nXTl^UCL;2y#8LP+Vh^c1@VhEvYOYC zWXFcL??(^E{3dGY-(>E7`~7qcy0lr@Joal9<~prf#C5-LoZ?F*4>)0yiF9V4#BgUk zxurTMTVD{<3!56H?^+cn8MS*X|7bAh?pwV+S}{weM?JR*Xzs@rtXp>rTw# z4ucX73*^3ZCmpzX3lw{hJ@7O}UhZYtLcm4VK`S<5(Pyh1Xzj?+%+m(J$<87VZ8VIT z?y45f(v!LDL^q`?*wwK|{i-&M;<5KryR#q_Mvq7(xu;~F73b?65MRa2?CTgAg|X(A zSA$}FmD!!bn?o#ifl4tu71DphWff$nIua13OHBq>aH6Znx1?fCYtCs~eaq%h3M?Hj z4jqND-F5+ZT1GtBw%H~d+_G%jUtx5Z;TK!aXzWsN{^Ds_Z?J3`Z(usqWBron{nH`I z#8x#jqc-66X(WBW&|nUPZi5*&K9K4l?fgz8%9G42b0-s#70(jZvjh%au-Y9VVHy>X za*crCQ=Xa2gVAl3Y^v7!dXFw-(MGMTd%$Pcm!Cd|?SVg4@Ph8ji!gi8kX%({F~06M zKg^2`SZ5HY9XRV!I;LVLlsP*x=rf?%8Wl-R6e4R$U`U+#qWhLKC}vhrY~ z_8EK>{TA}*$I|;3dwbD&Vp8f&!jlj^zAsjp0ZR@Hbg7v#19pHUBc60{^}J+ZUlJo5 zXXj_9hwUq`-#WJJceT8{U5ykh^f_CoN?y*UoxJmiSX+QA_(5-7^Z4bmlaCAdm@C@% za<^B65zPO#^rxhXX~+Y!e%gjmuiQ*`Qx`e>!_6TI5|J^;9X!Z^*ysl=;_2v#Y1(&5 z5|WXA+6NVp3N-H%n-+(ityoZNCi|r9HwC|39I?h|GQ+TboBrFBrDCn&}bc`}AG{e=xZ(KOh=(w)* zkWH_a?xxzssxwc{~cLm!r>Xq0-& zM7V%9^qx--6{wj85TOUms@}%RR?VD9Z+SOpM6K-$XlH&`T-%P$Ua__4e6>!_#hT~I zgYA10QrC=-`n2;*`NZ(r^yw9urwvOzI5#>OunmF!qe~=P{u3!EOYZy+UBdmNyc>@3 z9bV{S3BPuO;$wD2b!kfV$w|9YvWhm4wUw~Q zS4h^Dd$hfDgZC8JwbextX^PH+OJp)zC;LMVaQB8^mLx#~2kEpGr`{ruADUR>0v_iz zl10}qNrAP>`UTy3PP@b}#Kww>o8X(_X3uP<{J#ELN+kX3KRdvDOQKYs7Mw}=%hqPK z@q10fkR5CSsBYa4qmSpBL^isJdYP~N)>%dQC1$z^TyJ@mPi$>ZkMTLVKTeXkatVeN zw@biwV7^Eyy%Zhkd4HKsmXXp_X;-veMvW0#(R-pIvX6gW{Fk|{WV{uj!dCQOvuRf* z)ZegWSX-YhDNvi}aSEKN$>_mLnf|LfSjlLR8!aApPxJce0fZxH=OCv49e{I*VCnUT zVSMw;l`syGBE+;hgf7ue@Vz0aj%eiwP$}E)`Bp0Krc>oYVm4|A>;K>eb9meB?cRHo zeNQeb)#knl_fX}Wz`6c(U=O!*Bk9WpU4p0`H6CoGc$d{t-t*6I%bVFm*k2Zc2KsKB z3)@VsStq`osdg4i!p~%|m9T3Va_R~&vaflDK{lF-R(&(4%0@Wx*i~w5u}^5kx{!A0 zKDswZfzN1n&+_c}oe->`q0hAE3;)uuzGZItmyh_!z7rCt^`@VmN|5%YSD0gQKYG!C zVT_9gr!>%e+nm$J-{!}PEWd*HI$zcRX~ow089eNMxX+h$`g__xmH9V>Uu?FW zNZmh6Mv(gf=0458sEqLCXW6p@9wg2-8 z>gN0D8Y>f1p=*&(TU@Ew1#0DCfprgK*8g|l(a8voiViq3sd51+X zlM}uec5cW0T$MGb%X6_0+wHHf;9im1pT7hCV_Ywm^H!DfK#f}HcTk1ZH>Bjwn-lqO z`2Bj5eUiXy`5+yNP-5&orIuq%i+!W1Wyxr*oK%)l z<_7BI@3wc9!%Z&XZd0_Wumt5um?6o-uEb|qtTqSL`k zj80i3pDp_t`YoG&dqkCw_AnbOLYxNYx-8`=44Gmmnhc7s$iCJJNLC{!joDHB)Y{#a zeE9H?nvcd``Mmek!<&qkXhGuLkJPZ>Y6RgZkRFi$wdth}Cy*s#8Wq*`)ILlFVjh|H z$C}jpA|s?ca`zi(3dV7GT%mYdl2T{8JknhwePS*xnV#&?A-TZ&Shl(1{0Z&sQ%AuN2J%>=I0hMB3%RJpu8fR{P{D9clSwPixVABn@8s-dngHw`-QS zmE-=50~MiIGXG}8ne;jV^X!USa7>HH)(SZC@9CE64lwOVH9jY4rjW!P`Hkqw{o%D_>S%+z(Qnfq z4Ep;DtD$mo%ey!qkI1~OGr_W;_Xo2VDYGS-p-d7ti0z&{z}tywW})Eq_U@Y z^rhqRH8fF&_q)WV()6VpgfX{u@u>txv`dFDUzwo@Jm^2_EAjdDRnxh-syRdu#A!+? z314zW8LbpbAv^bza5F;)@hg8>7E^l^IH!Vrwc|7cOroA)jiq!>xJ6Y@8UvErPL9#yp z6fA&9b7X<$U6h>NwGAeK+Z-(mO^vB^YMFW2Kk3)dw*W4cuQF9jeM~vxYfV{3@K071 z3~Ah*dmQgq2#Gvs(oRRj$yzG;6!V-tkD+{DJ9sRRImwEC<)gm z^(|>tH4D+tzbNIkn?oTk!R#H9!PBQ>V1Ci~>CWc~o7>&s9?_KLcvJ~Q>Z>$+;DF_30)LtyR<)N^yDCE^3os80?I`fSX>E{de2d~ zivtUd+CD02`LSUT%$@IAPaMr>#@B$u`!9uGyi7V64nZ!fC|2VGlfPU8F8)4elG*_R zu&Oa+wR^$Blkx;xU-mLpwc$vA6K}of6Da9N{F!}?H`MByV$GrTpSqUo+yU=V^QL|SgQs^6IJ40p;#y2W;O;fu>SQJwtW zav2#Z`d$ed%^_BcG(w+&zW(2J@f%6($r8QqzCp0iB>*8U?<-QTxev+vR?W=#)*pSC2xU6-5DHMx;+Km{{P*YGZ3F{Z66v0IzyM z9+gF{lH_>Wn7mDwr-5=i4~HN8V8BJtE^mMGP5zYE^>C2 z+Y~$}uTCa{Tf}?-4ZDf&E&D9{*I!l1q?HQ{`av$pAI8@5yUje=ScMU z6d})*{9ANO{Ku`PRNmA?JO7!uUHSMT1J^Ua-gfJtv-lcH7~5f{aX?6-s7Tu>4bCHb z4&wO--7M*^R z<*cw)GkUTw7txs0U(Y~(d0E*LR=GAKW*~dWzL@Aa6&3l+ni3w@i~^E-H=FB_{t=Y)9~KCo`K`unT`kV^%=P2l=(AA9ThF ziq)=wBcMY*#3faZ*qiOx63zKx{<>>WOX*b)o|AqI{$?8wA7RKRVamch=$fiB?kPl3 z5go1swc$(QB0u$*Ay_^cW~FUh7H2&`EI;Py!HXBFC25!ii+LJp)phN}-s|%1$yc)p z+d1)`HvvPxpYMK~LzFs`FiB;cax(vx{8R?jFIj-O`P;pWFeiykAt>@Tem(OBn#f2w zQfmbuxb>tI)o^h;-w%;yTXd%Td#UVl_tNI7+g-RZE@ z_=C2LhIF^W3%}p;H2*5(E;oyu5*hOim$fv+lRxcvp&CJz`sl;F=Bd7gsf8HGGFj6> ze_ot&ga(MD(WmFGoJQ)}8Tf8KmVH8Akq2J5X*(|j;OH^ay`B4{A#>FM5LlX?G)(tz zOcB{mkO%#BWMnb?v}g6z!IOc8y#ExhO@)XgWwZc3?vc63!vbxoGLcdC32g$i=DD^3 zIb=pJRW=OYE!QTRp;Mke#<~7WtLiV-eD1RNI*7QQc|3{FOV3A-|7j}K#HkcwRd*Cv za#?PrkG!MOc7(~&n<~w~ZqZj1q(r7o3@MAP zTEcr2%-al^Z=ELi5uU$P)$XwTZ&dJskYgmMZQ4-b`sLExxS^tCQiHfqmcaDs3w^@l zoFZzOX-zq?B9qyQIp)aA-7O!Fv$49R>>x!OhL7wKklP9p->0TU1n9!2bck_(h57o0 z=xE42Pw?ov%olPv*O?qYuh$9C5Q_A~x&mGW){-HL$(7imBmjCJ_EQ0Srk?$l2KG#` z8k78gm|1bIg?E#LA3D8{YWJ&r$&@>3>}=}vurTi|g9@I=5nNl_Rd}D$EPw}#27H~4 z_RsEe*szz{ zXjf!pq!N@NjM;b_e+w+?#2xUZr$v16!HquQ?EAS&JW7H;eEJvNqkvte?DVTRE9-q= zbP5CE{%au0uhQld8~x-jRU0Rh*L$Ln5@_&AV|rtjcMp(%16BjBi|MopUXY4}+-7c; z_fPKWmC6hmsUViP^mX3si}`)|Q+UMl!{K+w6fdNMcroOxtU!4Bg52*M8v3w5Ob+YS zBRYHHU4|NRt`kTJ`U4pFDmJl(vf(M(+DF|t(ctm5GGG$yv{PFW3#$QhxcWIpnDM#i$C_$-G`l&45 zRzPGl`KX|66b_@;j$dRQ%xHFUTiM`DY9vk*tn(zH;{0cx*o!O^wE{T=p zsC-sM4sy+>o4Joz^LYM6hUeO|0H3seuQ1^AcbJ9sx!LS6$oQMBKdnt?^kSSXb$FXG5Kiuhv3bApUd+)r00p=p$DvvEr=K|j7 zUS4tZ7<+1CsJ%OA@yXRRZ1-EkA}>GBrIfvo3u&MOtkfl6Dm0QZbrD0z!`)oLo1|b) zu^LT4R~-$?ot_Sppkt-ZUC48IO!bf%vqlTp2!{}W=KwJ32#=tp?jJZBia)m#6~6$m zh&YYwpS>Gk2Y`dTn&!WEiv!bJ?d}J5e9ji#11{L|Ep5+zD<0?QM`SY9iP@b|U(!aG zH>6-Ohnfy`RFnfi@hcfBzCFfXC$$kX+)WrUsV0EO$#z(dL3bElhhNiOIF@pM7+M?!t1Et{ zDWqD3NbL#58|tC;f;rcvoX}%@_5y>aPGHr^5Y_?e>|{bWI!Iei)>+KRHkWpxg4=ly zJCqBSt)CyNT-aznXwavy2AQ7qEQppqm^PJK^-1NL+iYQjsNHoGd+1n$^`WZcVh%am z=U_Fy8-1!w-I(OC9QB{V>v4p@){u~$W%+SXcaJn`4U7{Y{Un<$b?lcq z12rV5e$x&f*P*fXrRs~%JhR}1S;Dw{A{(g}yM;|N+lWRpnoja0%m3QFG4e`~XcDz(_$ z#)Mk+h{w&Gre5j+vi*6b*=Sx)v_t&~FCLI_JsMkpv_jKn(dupNV9|VSL^| z(S$5Byr*UsS=DA28dI2;h6>{q?+Ccg55S46>ZmZke*4yLmV%HFCdr^u0Y@rC3*8_) zi@|wmw0x?LQ3T&)Y>x4D^!_<=gHC@fC{}X<@k6Ic3Sti=7`h^xCce2DgfuZ6Rc#7o z93%w*-EoPU&>7sjgXzN@KETMx4qj%yE4{40N{C^ez|4v`{w#~;^9Fyh$+cOXH*kN; zytw4-tBU!#c#e6fU4tnsU0)0BvjdL)zGncY(BK9PIkin?Kbn|=4BB-Q zHC#l#cgV{P_IHu{YSM2|`oS{z3R(9U8Y01X4)xPBgmDuNg=Nn>q=s0mD7s&bhx3dp zuvqbJLhSV=C@FzN*ar}imU}F6BT{%`lJ5|Ze!x?(kU^SRg!?^d9~N4C;IIb3$diAF zDy$8)+BZIw^m37pbdi_t&-0f8U!FRQFqEu1?XSLat0;k^?b!Dk8 z>TX0ogq+H8>}vXfk}$C-LOSlAy%e#YC~)7T=h@PZ_lKPT(anqLW@cHquvwB`%lHT} z<%sovi7|iz+xcH}=zn#lQt_^jWnX(=bFk*c{+m*xyVpCrD;BJ*Gf(~pQ^d%>+k3U3 zefQI;)|u|ekMDx9!_H=o539b1@)jh${`f{sPFVe6ULNw&ll6xLAijQ;-S^%|@3m1Y z@;G_#RhE1m3~{O|!p8#$m7|^Zw;n+R73I5ImLA{PVNZb_1uw4Mf?&R#kDnE!S!gMW z076KtFUZn~#ooGY=FV`|iymU5!AvKf%gzao?P<~e976g}g?r!w7wwDsnIBk+2Y|i| zNXj-pR-;Vj_EAL-=iFBM1=dsay&CMqD$`QZPqKapl3{cZdFq~>J`zjaKB=j`4g_sG zWQ^14iee$Ry(On71rL%ptqmIIMa-6FH1@;x`zDSI809EO>@0!oZh60R^5sOc{4ZyUXW#0?R+%`tSZ~e^fO4-?J?|j<+nh)3kEvr5E!tcJ_Ou+!V1$(PB zU=zIS*e3)AOAD!mbFd1f#kw6lV=qu)!6M|&=<4I}hmtK|;er23J&Bxd9GnW2YCkcbx(ueEtfu4_V z{%u*cla*KWrl(Uv)X4ku9{CL-pl)s6C~>;lq@k#fAGgY9+6ntJ!_zt3f>(svieyFD zRHO%<#)GuRMQH>_ybiwfD7lB#3#_+y+s5@t9}K?gVHC5vi~oV1ez|MFo0%B4G_;dT zOPFHN%Re-q=@`#OIzy&7@@E@xk;tQ&mHw}t0v5+h+?rkIyjXSno6@;=z^sjQUd1BS zzvtfn@k3;~<@SGH{_%EkktVp85v^bcwq*(Le;n0=Z+GZu=!}LA{{6#5rjY;kY7y%W VO{xx70-m+Q;OXk;vd$@?2>{vzGI9U_ literal 0 HcmV?d00001 diff --git a/docs/assets/en/WritePro/margin-bullets.png b/docs/assets/en/WritePro/margin-bullets.png new file mode 100644 index 0000000000000000000000000000000000000000..de7143eb0507419e39da91e2ee6cd717c4714586 GIT binary patch literal 17630 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 HoD!M
    textBox/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare} | Image, Textbox, Submenu | Defines the anchor layout type for an image or a text box. Can be used to transform an inline image to an anchored image, or the reverse. Note: If an image is moved from an anchored mode to inline, the image is inserted at the beginning of the current selected text. "inline" value is not supported for text boxes | -| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box \| header-box \| footer-box} | Image, TextBox, Submenu | Defines the area relative to the absolute position of an anchored image or text box. If the element is relative to the header-box/footer-box which is not visible on a page, the element is not displayed. This action will reset horizontal and vertical offsets to 0. Page mode only, not enabled for inline images. | -| anchorPage | {image \| textBox}/anchorPage?value={all \| current \| currentSubSection} | Image, TextBox, Submenu | Defines the page(s) where the selected image or text box is displayed (not enabled for inline images). Page mode only. | -| anchorSection | {image \| textBox}/anchorSection?value={all \| current} | Image, TextBox, Submenu | Defines the section(s) where the selected image or text box is displayed. (not enabled for inline images). Page mode only. | -| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top \| center \| bottom} | Image, TextBox Submenu | Defines the vertical alignment of the image or text box, relative to the anchorOrgin for an image or text box in page, or to the layout box for an image or text box in embedded mode. This action will reset the vertical offset to 0 (not enabled for inline images). Note: See "verticalAlign" action for the vertical alignment inside the text box | -| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | | -| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | For menu commands only. Default submenu for all background attributes. | -| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background clipping box (default target is paragraph). Paper-box targets document and section only. | -| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target background. | -| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Sets the display mode of images used as background. | -| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Clears target background image. (default target is paragraph) | -| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image origin box (default target is paragraph). Paper-box targets document and section only. | -| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image horizontal alignment (default target is paragraph). Ex: paragraph/backgroundPositionH?value=left | -| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image vertical alignment (default target is paragraph). Ex: paragraph/backgroundPositionV?value=top | -| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image repeat mode. (default target is paragraph) | -| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image width (default target is paragraph). Ex: paragraph/backgroundSizeH?value=100%. section/backgroundSizeH?value=cover | -| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell}/backgroundSizeV?value={ \| \| auto} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image height (default target is paragraph). Ex: paragraph/backgroundSizeV?value=50%. Ex: section/backgroundSizeV?value=40pt | -| bookmark | bookmark?index= | Submenu | Selects the Nth bookmark. Ex: bookmark?index=2 // selects the second bookmark | -| borderCollapse | borderCollapse | Paragraph | Collapses selected paragraph borders and interior margins. | -| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target border color (default target is paragraph). Ex: paragraph/borderColorLeft?value=green | -| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Submenu | Changes target border radius (default target is paragraph). Ex: paragraph/borderRadius?value=4pt | -| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Default submenu for target borders. | -| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border style (default target is paragraph). Ex: paragraph/borderStyleLeft?value=double. Ex: outside/borderStyle?value=solid //set selected paragraphs exterior borders to style solid. Ex: inside/borderStyle?value=none //remove selected paragraphs interior borders | -| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border width (default target is paragraph). Ex: paragraph/borderWidthLeft?value=4pt | -| columnCount | {section/}columnCount?value={1<=number<=20} | Document, Section, Submenu | Number of columns in the current document and/or section. (default target is doc) Ex: section/columnCount?value=3 | -| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document, Section, Submenu, showDialog | Color for the decorative line between document or section columns. Ex: columnRuleColor?value="#FFFFFF" | -| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Section, Submenu | Style for the decorative line between document or section columns. Ex: columnRuleStyle?value="solid" | -| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document, Section, Submenu | Width of the decorative line between document or section columns. Ex: columnRuleWidth?value="2pt" | -| columns | {section/}columns | Document, Section, Submenu | Only for a menu item: creates automatically a complete Columns sub-menu with all column actions sub-menus (except insertColumnBreak) | -| columnSpacing | {section/}columnSpacing?value={CSS length} | Document, Section, Submenu | Space between two columns in the current document and/or section. Ex: columnSpacing?value="1cm" | -| deleteColumns | deleteColumns | Table | Deletes all selected columns. | -| deleteRows | deleteRows | Table | Deletes all selected rows. | -| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraph, Image, Submenu | Removes the Nth stylesheet from the stored stylesheets for the selected target (default target is paragraph). Menu item name is replaced at runtime with style sheet name. | -| direction | direction?value={ltr \| rtl} | Paragraph, Submenu | Paragraph direction. | -| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Displays formula references as a # symbol. Can only be used when formulas are displayed as references. | -| doc | doc | Document, Submenu | Default submenu for document body layout (embedded mode attributes or default attributes for sections – but for margin which is reserved for embedded mode only). | -| dpi | Modifies the dpi of the current view (independent of the document attribute wk dpi used internally for pixel conversion <-> points). | Submenu | Change view dpi. Ex: dpi?value=72 | -| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable } | Table, Submenu | Defines how the table is displayed when its datasource is empty. | -| fontStyleWrite | fontStyleWrite | Submenu | For menu commands only. Displays default font styles submenu for 4D Write Pro. | -| fontSubscript | fontSubscript | | Toggles subscript font attribute. | -| fontSuperscript | fontSuperscript | | Toggles superscript font attribute. | -| footer | footer | Submenu | Displays the Footer submenu. | -| footer/remove | footer/remove | Footer | Removes the selected footer. | -| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, Submenu | Formula highlight mode for the document. Can be used with a dropdown menu or a button | -| formulaHighlightColor | formulaHighlightColor?value= | Document, Submenu,showDialog | Formula highlight color for the document | -| formulaHighlightReferences | formulaHighlightReferences | Document | Toggles formula references highlighting. Can be used with a check box or a menu item | -| formulaHighlightValues | formulaHighlightValues | Document | Toggles formula values highlighting. Can be used with a check box or a menu item | -| header | header | Submenu | Displays the Header submenu. | -| header/remove | header/remove | Header | Removes the selected header. | -| height | {image \| textBox \| row}/height?value={ \| auto} | Image, TextBox Row, Submenu | Target height. Ex: image/height?value=50pt. For image/width, see width. Ex: row/height?value=12pt | -| headerRowCount | {table/}headerRowCount | Table, Submenu | Sets the number of header rows in a table. Maximum is 5. | -| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Toggles between html wysiwyg mode. | -| image | image | Image, Submenu | Displays image layout submenu. | -| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, Submenu | Sets the display mode of anchored and inline images. Ex: image/displayMode?value=scaledToFit | -| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, Submenu | Image vertical alignment. Ex: image/verticalAlign?value=super | -| insertColumnBreak | insertColumnBreak | Paragraph | Inserts a column break at the selection. | -| insertColumnToTheLeft | insertColumnToTheLeft | Table | Inserts a column to the left of the first selected column(s). | -| insertColumnToTheRight | insertColumnToTheRight | Table | Inserts a column to the right of the last selected column(s). | -| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraph | Inserts a continuous section break at the selection. | -| insertImage | insertImage | | Opens a picture selection dialog box and inserts the selected picture (if any) as a character in the area. | -| insertPageBreak | insertPageBreak | Paragraph | Inserts a page break at the selection. | -| insertRowAbove | insertRowAbove | Table | Inserts a row above the selected row(s). | -| insertRowBelow | insertRowBelow | Table | Inserts a row below the selected row(s). | -| insertSectionBreak | insertSectionBreak | Paragraph | Inserts a section break at the selection. | -| insertSoftHyphen | insertSoftHyphen | | Inserts a soft hyphen at the cursor position. | -| insertTextBox | insertTextBox | Document | Inserts a text box near the current selection, anchored to the first selected page (page mode). | -| keepWithNext | keepWithNext | Paragraph | Links a paragraph with the next so that they cannot be separated by automatic page or column breaks. If applied to the last paragraph of the last cell in a table, the last row of the table is linked to the following paragraph. | -| lineHeight | lineHeight?value={ \| } | Paragraph, Submenu | Paragraph line height. Ex: lineHeight?value=120% | -| layer | {image \| textBox}/layer | Submenu | Default submenu with layering actions for images or text boxes | -| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraph, Submenu | List start number. Ex: listStartNumber?value=10 | -| listStyleImage | listStyleImage/showDialog | Paragraph, showDialog | Opens a file dialog to choose a image to display as list style bullet; it will set also list style type to disc – style to be used if image is not found. | -| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading- zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraph, Submenu | Paragraph list style type. | -| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table/}{inside \| outside/}{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraph, Image, Textbox, Section, Header, Footer, Table, Submenu | Changes target margin (default target is paragraph). Ex: margin?value=4pt //sets all paragraph margins to 4pt. Ex: outside/margin?value=4pt //set exterior paragraph margins to 4pt. Ex: doc/marginLeft?value=1cm //sets left margin to 1cm for the document as used in embedded mode. Ex: section/marginLeft?value=1cm //sets left margin to 1cm for the pages of the first selected section | -| merge | {paragraph/}merge
    cell/merge | Paragraph, Cell | Used with paragraphs: merges paragraphs. Used with cells: merges the selected cells. | -| minHeight | {paragraph \| image/}minHeight?value= | Paragraph, Image, Submenu | Target min height (default target is paragraph). Ex: paragraph/minHeight?value=50pt | -| minWidth | {paragraph \| image/}minWidth?value= | Paragraph, Image, Submenu | Target min width (default target is paragraph). Ex: paragraph/minWidth?value=50pt | -| moveToBack | moveToBack | Image | Moves image to the back. (not enabled for inline images) | -| moveToFront | moveToFront | Image | Moves image to the front. (not enabled for inline images) | -| newLineStyleSheet | newLineStyleSheet?index={1<=number<=number of paragraph stylesheets \| newLineStyleSheet}?value=auto | Paragraph, Submenu | Selected paragraph elements will use Nth stylesheet as stylesheet to use for new paragraphs created on Return or while splitting paragraphs; If value=auto, new paragraphs will use the same stylesheet (default). (menu item name is replaced at runtime with stylesheet name) | -| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row\| cell/}{inside \| outside/}{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom }?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Row, Column, Cell, Submenu | Changes target padding. (default target is paragraph) | -| pageMode | pageMode?value={embedded \| page \| draft} | Submenu | Changes view mode. Ex: pageMode?value=page | -| pageOrientation | {section/}pageOrientation?value={landscape \| portrait} | Section, Submenu | Changes document or first selected section page orientation (if section is not specified, it will apply to all sections otherwise to the first selected section). Ex: pageOrientation?value=portrait //change orientation to portrait for the whole document. Ex: section/pageOrientation?value=landscape //change orientation to landscape for the first selected section | -| pageSize | pageSize?index= | Submenu | Changes document page size: number is Nth page size in the list of available pages sizes. The list contains the current printer page sizes, ISO page sizes and the custom page sizes defined by the user. | -| paragraph | paragraph | Paragraph, Submenu | Default submenu for paragraph layout. | -| paragraph/avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | Allows/disallows page breaks inside paragraphs. | -| print | print | Document | Prints document as rendered in page mode with view settings of the focused 4D Write Pro area. | -| refreshImages | refreshImages | Image | Reloads images from the network for images with URLs. | -| removeSoftHyphens | removeSoftHyphens | | Removes all soft hyphens in the current selection (if the selection is empty, removes soft hyphen before or after the caret if any) | -| row/avoidPageBreakInside | row/avoidPageBreakInside | Table, Row | Allows/disallows page breaks inside table rows. This action is disabled if: the current selection does not contain a table the table does not allow page breaks the table is inside a header or footer Note: If several tables are selected and some of them don't allow page breaks, this option will be enabled but only applied to the tables that allow page breaks. | -| section | section | Section, Submenu | Default submenu for page layout for the first selected section. | -| section/differentFirstPage | section/differentFirstPage | Section | Section has different first page or not. | -| section/differentLeftRightPages | section/differentLeftRightPages | Section | Section has different left and right pages or not. | -| section/name/showDialog | section/name/showDialog | Section, showDialog | Displays a dialog allowing to enter the first selected section name. | -| section/remove | section/remove | Section | Deletes the first section that intersects the user’s selection regardless if the user has selected one or multiple sections. Disabled when only one section remains in the document. | -| section/reset | section/reset | Section | Resets all first selected section attributes to default attributes - which are inherited from doc attributes for background, border and padding (same as for embedded mode) and 2.5cm for page margins. First selected section column properties are also removed (so only default section properties will apply). | -| split | {paragraph/}split
    cell/split | Paragraph, Cell | Used with paragraph: splits paragraph. Used with cells: splits the selected cells (only cells that have been already merged may be split). | -| styleSheet | {paragraph \| image/}styleSheet?value={1<=number<=number of target style sheets} | Paragraph, Image, Submenu, showDialog | Applies Nth stylesheet to the selected target elements. With dialog, new stylesheet will use current attributes from the first selected target. (default target is paragraph) Ex: styleSheet?value=1 //apply first paragraph style sheet to the selected paragraphs and set it as paragraph stylesheets. | -| styleSheets | {paragraph \| image/}styleSheets | Paragraph, Image, Submenu | Default submenu for editing target stylesheets. | -| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, Submenu | Defines the character used as decimal separator by decimal tabulations. | -| tableAlign | tableAlign?value={left \| center \| right}
    or
    table/tableAlign?value={left \| center \| right} | Table, Submenu | Specifies horizontal alignment for a table. | -| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Allows/disallows page breaks inside tables. Disabled if: the current selection does not contain at least one table the table is in a header or a footer | -| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Toggles between display/not display of carry-over rows (see Carry-over rows). | -| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraph | Paragraph text alignment (initial=use right for rtl or left for ltr direction). | -| textBox | textBox | Submenu | Submenu with all actions available for the focused/selected text box | -| textBox/remove | textBox/remove | TextBox | Removes the selected text box | -| textIndent | textIndent?value= (may be negative) | Paragraph, Submenu | Paragraph text indentation (first line indentation). Ex: textIndent?value=2cm | -| textLinethrough | textLinethrough | Submenu | For menu commands only. Linethrough submenu (with style and color). | -| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | Submenu, showDialog | Ex: textLinethroughColor?value=red | -| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textLinethroughStyle?value=dotted | -| textShadow | textShadow | Submenu | For menu commands only. Default submenu for text shadow (with color and offset). | -| textShadowColor | textShadowColor?value={ \| none} | Submenu, showDialog | Changes shadow status or color for characters. Ex: textShadowColor?value=green | -| textShadowOffset | textShadowOffset?value= | Submenu | Only length in pt is supported. Ex: textShadowOffset?value=2pt | -| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | Submenu | Formats text. Ex: textTransform?value=capitalize | -| textUnderline | textUnderline | Submenu | For menu commands only. Underline submenu (with style and color) | -| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | Submenu, showDialog | Ex: textUnderlineColor?value=red | -| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textUnderlineStyle?value=dotted | -| updateStyleSheet | {paragraph \| image/}updateStyleSheet | Paragraph, Image, Submenu | Updates first selected target stylesheet with first selected target current attributes (default target is paragraph) | -| userUnit | userUnit?value={cm \| mm \| in \| pt} | Submenu | Changes document layout unit (will be reflected on rulers). | -| verticalAlign | {paragraph \| row \| column \| cell \| textBox/}verticalAlign?value={top \| middle \| bottom} | Paragraph, Row, Column, Cell, TextBox, Submenu | Paragraph vertical alignment. Ex: verticalAlign?value=top. The effect depends on the minHeight value of the paragraph. | -| view | view | Submenu | For menu commands only. Default submenu for view settings. | -| visibleBackground | visibleBackground | Document | Shows/hides background, anchored pictures and text boxes | -| visibleEmptyImages | visibleEmptyImages | Document | Shows/hides a default black rectangle for images that cannot be loaded or computed (empty images or images in an unsupported format). | -| visibleFooters | visibleFooters | Document | Shows/hides footers. | -| visibleHeaders | visibleHeaders | Document | Shows/hides headers. | -| visibleHiddenChars | visibleHiddenChars | Document | Shows/hides hidden characters | -| visibleHorizontalRuler | visibleHorizontalRuler | Document | Shows/hides horizontal ruler. | -| visiblePageFrames | visiblePageFrames | Document | Shows/hides page frames. | -| visibleVerticalRuler | visibleVerticalRuler | Document | Shows/hides vertical ruler (Page mode only). | -| visibleTableBorders | visibleTableBorders | Document | Shows/hides internal and external table borders as dashed lines where no borders are defined. | -| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraph | Toggles between widow and orphan control mode. | -| width | {paragraph \| image \| textBox \| column/}width?value= \| auto | Paragraph, Image, TextBox, Column, Submenu | Target width (default target is paragraph). Auto value not available for text boxes (converted to 8 cm) and columns. Ex: image/width?value=50pt | -| zoom | zoom?value={25% <= percentage in Css <= 400%} | Document, Submenu | Changes document view zoom. Ex: zoom?value=120% | - -### Otras acciones - -Otras acciones estándar están disponibles en los formularios 4D y pueden ser utilizadas en las áreas 4D Write Pro: - -* *Acciones de edición*, tales como acciones de copiar/pegar. -* acciones *Fuente*, tales como FontBold o fontSize. -* acciones *Expresiones dinámicas*, permitiendo manejar la inserción de expresiones. -* acciones *Corrector ortográfico*. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md new file mode 100644 index 00000000000000..184e18268276ff --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md @@ -0,0 +1,180 @@ +--- +id: standard-actions +title: Las acciones estandar +displayed_sidebar: docs +slug: /WritePro/standard-actions +--- + + + +La interfaz de usuario de áreas 4D Write Pro se puede manejar a través de un amplio conjunto de **acciones estándar**. Las acciones estándar pueden asignarse a: + +* comandos de menú, disponibles a través de la **barra de menú** o del comando [Dynamic pop up menu](../../commands/dynamic-pop-up-menu) +* elementos de lista, disponibles por medio de listas pop-up/desplegables o menús pop-up jerárquicos, +* botones, casillas de selección, +* o ejecutados por el comando [INVOKE ACTION](../../commands/invoke-action). + +Cuando se le asignan a los objetos de interfaz, las acciones estándar manejan la activación/desactivación del objeto en función del contexto. Para más información, consulte la sección *Acciones estándar*. + +Dos tipos de acciones están disponibles para áreas 4D Write Pro: + +* Las acciones específicas 4D Write Pro, que sólo pueden utilizarse con áreas 4D Write Pro, +* *[Otras acciones](#other-actions)*, incluyendo las fuentes, expresiones, corrector ortográfico y acciones de edición, que se pueden utilizar con las áreas 4D Write Pro y las otras áreas 4D (ver *Acciones estándar*). + +### Acciones 4D Write Pro + +Las siguientes acciones estándar están disponibles para las áreas 4D Write Pro. + +**Notas:** + +* Las acciones que muestran un menú/lista automático sólo se pueden asociar a los comandos de menús o a los objetos pop-ups/listas desplegables y menús pop-up jerárquicos (ver *Submenú*). +* Las casillas de selección y las casillas de selección 3D deben estar asociadas con acciones de estado, tales como "section/differentFirstPage" o "visibleHorizontalRuler". La opción de tres estados sólo se admite con casillas de selección estándar. +* Un estado de acción de sección siempre es igual al estado actual de la sección seleccionada (estado heredado si el atributo se hereda de la sección principal o del atributo por defecto) ya que debe reflejar el estado de sección seleccionado (el estado que se aplica actualmente a la sección). Sin embargo, la modificación de un atributo de sección con una acción estándar solo anulará el atributo de sección seleccionado. +* *Submenú*: cuando se utilizan sin parámetros y asociados a un comando de menú, un objeto pop-up/lista desplegable o pop-up menú jerárquico, estas acciones muestran un submenú automático. Por ejemplo, si asigna la acción "backgroundColor" a un comando de menú, la selección de este comando de menú a la ejecución mostrará automáticamente los comandos del submenú "Color de fondo". Si asigna la acción "zoom" a un menú pop-up jerárquico, contendrá automáticamente una lista de valores de zoom predefinidos. Tenga en cuenta que estas acciones no pueden asignarse a botones. +* *showDialog*: agregar la cadena "/showDialog" al nombre de la acción permite la visualización del diálogo estándar asociado a la acción. Por ejemplo, puede utilizar "paragraph/styleSheet/showDialog" para abrir el diálogo de entrada que permite la entrada de un nuevo nombre de hoja de estilo. + +| Acción | Modelo | Disponible con | Descripción | +|---|---|---|---| +| anchorHorizontalAlign | {image \| textBox}/anchorHorizontalAlign?value={left \| center \| right} | Image, Textbox, Submenu | Defines the horizontal alignment of the element, relative to the anchorOrigin for images/text boxes in page, or to the layout box for images/text box in embedded mode. This action will reset the horizontal offset to 0. (not enabled for inline images). | +| anchoring | {image \| textBox}/anchoring | Submenu | Default submenu with anchor settings actions for images or text boxes | +| anchorLayout | image/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare \| inline}

    textBox/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare} | Image, Textbox, Submenu | Defines the anchor layout type for an image or a text box. Can be used to transform an inline image to an anchored image, or the reverse. Note: If an image is moved from an anchored mode to inline, the image is inserted at the beginning of the current selected text. "inline" value is not supported for text boxes | +| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box \| header-box \| footer-box} | Image, TextBox, Submenu | Defines the area relative to the absolute position of an anchored image or text box. If the element is relative to the header-box/footer-box which is not visible on a page, the element is not displayed. This action will reset horizontal and vertical offsets to 0. Page mode only, not enabled for inline images. | +| anchorPage | {image \| textBox}/anchorPage?value={all \| current \| currentSubSection} | Image, TextBox, Submenu | Defines the page(s) where the selected image or text box is displayed (not enabled for inline images). Page mode only. | +| anchorSection | {image \| textBox}/anchorSection?value={all \| current} | Image, TextBox, Submenu | Defines the section(s) where the selected image or text box is displayed. (not enabled for inline images). Page mode only. | +| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top \| center \| bottom} | Image, TextBox Submenu | Defines the vertical alignment of the image or text box, relative to the anchorOrgin for an image or text box in page, or to the layout box for an image or text box in embedded mode. This action will reset the vertical offset to 0 (not enabled for inline images). Note: See "verticalAlign" action for the vertical alignment inside the text box | +| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | | +| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | For menu commands only. Default submenu for all background attributes. | +| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background clipping box (default target is paragraph). Paper-box targets document and section only. | +| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target background. | +| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Sets the display mode of images used as background. | +| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Clears target background image. (default target is paragraph) | +| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image origin box (default target is paragraph). Paper-box targets document and section only. | +| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image horizontal alignment (default target is paragraph). Ex: paragraph/backgroundPositionH?value=left | +| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image vertical alignment (default target is paragraph). Ex: paragraph/backgroundPositionV?value=top | +| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image repeat mode. (default target is paragraph) | +| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image width (default target is paragraph). Ex: paragraph/backgroundSizeH?value=100%. section/backgroundSizeH?value=cover | +| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell}/backgroundSizeV?value={ \| \| auto} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image height (default target is paragraph). Ex: paragraph/backgroundSizeV?value=50%. Ex: section/backgroundSizeV?value=40pt | +| bookmark | bookmark?index= | Submenu | Selects the Nth bookmark. Ex: bookmark?index=2 // selects the second bookmark | +| borderCollapse | borderCollapse | Paragraph | Collapses selected paragraph borders and interior margins. | +| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target border color (default target is paragraph). Ex: paragraph/borderColorLeft?value=green | +| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Submenu | Changes target border radius (default target is paragraph). Ex: paragraph/borderRadius?value=4pt | +| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Default submenu for target borders. | +| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border style (default target is paragraph). Ex: paragraph/borderStyleLeft?value=double. Ex: outside/borderStyle?value=solid //set selected paragraphs exterior borders to style solid. Ex: inside/borderStyle?value=none //remove selected paragraphs interior borders | +| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border width (default target is paragraph). Ex: paragraph/borderWidthLeft?value=4pt | +| columnCount | {section/}columnCount?value={1<=number<=20} | Document, Section, Submenu | Number of columns in the current document and/or section. (default target is doc) Ex: section/columnCount?value=3 | +| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document, Section, Submenu, showDialog | Color for the decorative line between document or section columns. Ex: columnRuleColor?value="#FFFFFF" | +| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Section, Submenu | Style for the decorative line between document or section columns. Ex: columnRuleStyle?value="solid" | +| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document, Section, Submenu | Width of the decorative line between document or section columns. Ex: columnRuleWidth?value="2pt" | +| columns | {section/}columns | Document, Section, Submenu | Only for a menu item: creates automatically a complete Columns sub-menu with all column actions sub-menus (except insertColumnBreak) | +| columnSpacing | {section/}columnSpacing?value={CSS length} | Document, Section, Submenu | Space between two columns in the current document and/or section. Ex: columnSpacing?value="1cm" | +| deleteColumns | deleteColumns | Table | Deletes all selected columns. | +| deleteRows | deleteRows | Table | Deletes all selected rows. | +| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraph, Image, Submenu | Removes the Nth stylesheet from the stored stylesheets for the selected target (default target is paragraph). Menu item name is replaced at runtime with style sheet name. | +| direction | direction?value={ltr \| rtl} | Paragraph, Submenu | Paragraph direction. | +| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Displays formula references as a # symbol. Can only be used when formulas are displayed as references. | +| doc | doc | Document, Submenu | Default submenu for document body layout (embedded mode attributes or default attributes for sections – but for margin which is reserved for embedded mode only). | +| dpi | Modifies the dpi of the current view (independent of the document attribute wk dpi used internally for pixel conversion <-> points). | Submenu | Change view dpi. Ex: dpi?value=72 | +| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable } | Table, Submenu | Defines how the table is displayed when its datasource is empty. | +| fontStyleWrite | fontStyleWrite | Submenu | For menu commands only. Displays default font styles submenu for 4D Write Pro. | +| fontSubscript | fontSubscript | | Toggles subscript font attribute. | +| fontSuperscript | fontSuperscript | | Toggles superscript font attribute. | +| footer | footer | Submenu | Displays the Footer submenu. | +| footer/remove | footer/remove | Footer | Removes the selected footer. | +| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, Submenu | Formula highlight mode for the document. Can be used with a dropdown menu or a button | +| formulaHighlightColor | formulaHighlightColor?value= | Document, Submenu,showDialog | Formula highlight color for the document | +| formulaHighlightReferences | formulaHighlightReferences | Document | Toggles formula references highlighting. Can be used with a check box or a menu item | +| formulaHighlightValues | formulaHighlightValues | Document | Toggles formula values highlighting. Can be used with a check box or a menu item | +| header | header | Submenu | Displays the Header submenu. | +| header/remove | header/remove | Header | Removes the selected header. | +| height | {image \| textBox \| row}/height?value={ \| auto} | Image, TextBox Row, Submenu | Target height. Ex: image/height?value=50pt. For image/width, see width. Ex: row/height?value=12pt | +| headerRowCount | {table/}headerRowCount | Table, Submenu | Sets the number of header rows in a table. Maximum is 5. | +| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Toggles between html wysiwyg mode. | +| image | image | Image, Submenu | Displays image layout submenu. | +| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, Submenu | Sets the display mode of anchored and inline images. Ex: image/displayMode?value=scaledToFit | +| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, Submenu | Image vertical alignment. Ex: image/verticalAlign?value=super | +| insertColumnBreak | insertColumnBreak | Paragraph | Inserts a column break at the selection. | +| insertColumnToTheLeft | insertColumnToTheLeft | Table | Inserts a column to the left of the first selected column(s). | +| insertColumnToTheRight | insertColumnToTheRight | Table | Inserts a column to the right of the last selected column(s). | +| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraph | Inserts a continuous section break at the selection. | +| insertImage | insertImage | | Opens a picture selection dialog box and inserts the selected picture (if any) as a character in the area. | +| insertPageBreak | insertPageBreak | Paragraph | Inserts a page break at the selection. | +| insertRowAbove | insertRowAbove | Table | Inserts a row above the selected row(s). | +| insertRowBelow | insertRowBelow | Table | Inserts a row below the selected row(s). | +| insertSectionBreak | insertSectionBreak | Paragraph | Inserts a section break at the selection. | +| insertSoftHyphen | insertSoftHyphen | | Inserts a soft hyphen at the cursor position. | +| insertTextBox | insertTextBox | Document | Inserts a text box near the current selection, anchored to the first selected page (page mode). | +| keepWithNext | keepWithNext | Paragraph | Links a paragraph with the next so that they cannot be separated by automatic page or column breaks. If applied to the last paragraph of the last cell in a table, the last row of the table is linked to the following paragraph. | +| lineHeight | lineHeight?value={ \| } | Paragraph, Submenu | Paragraph line height. Ex: lineHeight?value=120% | +| layer | {image \| textBox}/layer | Submenu | Default submenu with layering actions for images or text boxes | +| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraph, Submenu | List start number. Ex: listStartNumber?value=10 | +| listStyleImage | listStyleImage/showDialog | Paragraph, showDialog | Opens a file dialog to choose a image to display as list style bullet; it will set also list style type to disc – style to be used if image is not found. | +| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading- zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraph, Submenu | Paragraph list style type. | +| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table/}{inside \| outside/}{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraph, Image, Textbox, Section, Header, Footer, Table, Submenu | Changes target margin (default target is paragraph). Ex: margin?value=4pt //sets all paragraph margins to 4pt. Ex: outside/margin?value=4pt //set exterior paragraph margins to 4pt. Ex: doc/marginLeft?value=1cm //sets left margin to 1cm for the document as used in embedded mode. Ex: section/marginLeft?value=1cm //sets left margin to 1cm for the pages of the first selected section | +| merge | {paragraph/}merge
    cell/merge | Paragraph, Cell | Used with paragraphs: merges paragraphs. Used with cells: merges the selected cells. | +| minHeight | {paragraph \| image/}minHeight?value= | Paragraph, Image, Submenu | Target min height (default target is paragraph). Ex: paragraph/minHeight?value=50pt | +| minWidth | {paragraph \| image/}minWidth?value= | Paragraph, Image, Submenu | Target min width (default target is paragraph). Ex: paragraph/minWidth?value=50pt | +| moveToBack | moveToBack | Image | Moves image to the back. (not enabled for inline images) | +| moveToFront | moveToFront | Image | Moves image to the front. (not enabled for inline images) | +| newLineStyleSheet | newLineStyleSheet?index={1<=number<=number of paragraph stylesheets \| newLineStyleSheet}?value=auto | Paragraph, Submenu | Selected paragraph elements will use Nth stylesheet as stylesheet to use for new paragraphs created on Return or while splitting paragraphs; If value=auto, new paragraphs will use the same stylesheet (default). (menu item name is replaced at runtime with stylesheet name) | +| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row\| cell/}{inside \| outside/}{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom }?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Row, Column, Cell, Submenu | Changes target padding. (default target is paragraph) | +| pageMode | pageMode?value={embedded \| page \| draft} | Submenu | Changes view mode. Ex: pageMode?value=page | +| pageOrientation | {section/}pageOrientation?value={landscape \| portrait} | Section, Submenu | Changes document or first selected section page orientation (if section is not specified, it will apply to all sections otherwise to the first selected section). Ex: pageOrientation?value=portrait //change orientation to portrait for the whole document. Ex: section/pageOrientation?value=landscape //change orientation to landscape for the first selected section | +| pageSize | pageSize?index= | Submenu | Changes document page size: number is Nth page size in the list of available pages sizes. The list contains the current printer page sizes, ISO page sizes and the custom page sizes defined by the user. | +| paragraph | paragraph | Paragraph, Submenu | Default submenu for paragraph layout. | +| paragraph/avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | Allows/disallows page breaks inside paragraphs. | +| print | print | Document | Prints document as rendered in page mode with view settings of the focused 4D Write Pro area. | +| refreshImages | refreshImages | Image | Reloads images from the network for images with URLs. | +| removeSoftHyphens | removeSoftHyphens | | Removes all soft hyphens in the current selection (if the selection is empty, removes soft hyphen before or after the caret if any) | +| row/avoidPageBreakInside | row/avoidPageBreakInside | Table, Row | Allows/disallows page breaks inside table rows. This action is disabled if: the current selection does not contain a table the table does not allow page breaks the table is inside a header or footer Note: If several tables are selected and some of them don't allow page breaks, this option will be enabled but only applied to the tables that allow page breaks. | +| section | section | Section, Submenu | Default submenu for page layout for the first selected section. | +| section/differentFirstPage | section/differentFirstPage | Section | Section has different first page or not. | +| section/differentLeftRightPages | section/differentLeftRightPages | Section | Section has different left and right pages or not. | +| section/name/showDialog | section/name/showDialog | Section, showDialog | Displays a dialog allowing to enter the first selected section name. | +| section/remove | section/remove | Section | Deletes the first section that intersects the user’s selection regardless if the user has selected one or multiple sections. Disabled when only one section remains in the document. | +| section/reset | section/reset | Section | Resets all first selected section attributes to default attributes - which are inherited from doc attributes for background, border and padding (same as for embedded mode) and 2.5cm for page margins. First selected section column properties are also removed (so only default section properties will apply). | +| split | {paragraph/}split
    cell/split | Paragraph, Cell | Used with paragraph: splits paragraph. Used with cells: splits the selected cells (only cells that have been already merged may be split). | +| styleSheet | {paragraph \| image/}styleSheet?value={1<=number<=number of target style sheets} | Paragraph, Image, Submenu, showDialog | Applies Nth stylesheet to the selected target elements. With dialog, new stylesheet will use current attributes from the first selected target. (default target is paragraph) Ex: styleSheet?value=1 //apply first paragraph style sheet to the selected paragraphs and set it as paragraph stylesheets. | +| styleSheets | {paragraph \| image/}styleSheets | Paragraph, Image, Submenu | Default submenu for editing target stylesheets. | +| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, Submenu | Defines the character used as decimal separator by decimal tabulations. | +| tableAlign | tableAlign?value={left \| center \| right}
    or
    table/tableAlign?value={left \| center \| right} | Table, Submenu | Specifies horizontal alignment for a table. | +| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Allows/disallows page breaks inside tables. Disabled if: the current selection does not contain at least one table the table is in a header or a footer | +| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Toggles between display/not display of carry-over rows (see Carry-over rows). | +| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraph | Paragraph text alignment (initial=use right for rtl or left for ltr direction). | +| textBox | textBox | Submenu | Submenu with all actions available for the focused/selected text box | +| textBox/remove | textBox/remove | TextBox | Removes the selected text box | +| textIndent | textIndent?value= (may be negative) | Paragraph, Submenu | Paragraph text indentation (first line indentation). Ex: textIndent?value=2cm | +| textLinethrough | textLinethrough | Submenu | For menu commands only. Linethrough submenu (with style and color). | +| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | Submenu, showDialog | Ex: textLinethroughColor?value=red | +| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textLinethroughStyle?value=dotted | +| textShadow | textShadow | Submenu | For menu commands only. Default submenu for text shadow (with color and offset). | +| textShadowColor | textShadowColor?value={ \| none} | Submenu, showDialog | Changes shadow status or color for characters. Ex: textShadowColor?value=green | +| textShadowOffset | textShadowOffset?value= | Submenu | Only length in pt is supported. Ex: textShadowOffset?value=2pt | +| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | Submenu | Formats text. Ex: textTransform?value=capitalize | +| textUnderline | textUnderline | Submenu | For menu commands only. Underline submenu (with style and color) | +| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | Submenu, showDialog | Ex: textUnderlineColor?value=red | +| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textUnderlineStyle?value=dotted | +| updateStyleSheet | {paragraph \| image/}updateStyleSheet | Paragraph, Image, Submenu | Updates first selected target stylesheet with first selected target current attributes (default target is paragraph) | +| userUnit | userUnit?value={cm \| mm \| in \| pt} | Submenu | Changes document layout unit (will be reflected on rulers). | +| verticalAlign | {paragraph \| row \| column \| cell \| textBox/}verticalAlign?value={top \| middle \| bottom} | Paragraph, Row, Column, Cell, TextBox, Submenu | Paragraph vertical alignment. Ex: verticalAlign?value=top. The effect depends on the minHeight value of the paragraph. | +| view | view | Submenu | For menu commands only. Default submenu for view settings. | +| visibleBackground | visibleBackground | Document | Shows/hides background, anchored pictures and text boxes | +| visibleEmptyImages | visibleEmptyImages | Document | Shows/hides a default black rectangle for images that cannot be loaded or computed (empty images or images in an unsupported format). | +| visibleFooters | visibleFooters | Document | Shows/hides footers. | +| visibleHeaders | visibleHeaders | Document | Shows/hides headers. | +| visibleHiddenChars | visibleHiddenChars | Document | Shows/hides hidden characters | +| visibleHorizontalRuler | visibleHorizontalRuler | Document | Shows/hides horizontal ruler. | +| visiblePageFrames | visiblePageFrames | Document | Shows/hides page frames. | +| visibleVerticalRuler | visibleVerticalRuler | Document | Shows/hides vertical ruler (Page mode only). | +| visibleTableBorders | visibleTableBorders | Document | Shows/hides internal and external table borders as dashed lines where no borders are defined. | +| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraph | Toggles between widow and orphan control mode. | +| width | {paragraph \| image \| textBox \| column/}width?value= \| auto | Paragraph, Image, TextBox, Column, Submenu | Target width (default target is paragraph). Auto value not available for text boxes (converted to 8 cm) and columns. Ex: image/width?value=50pt | +| zoom | zoom?value={25% <= percentage in Css <= 400%} | Document, Submenu | Changes document view zoom. Ex: zoom?value=120% | + +### Otras acciones + +Otras acciones estándar están disponibles en los formularios 4D y pueden ser utilizadas en las áreas 4D Write Pro: + +* *Acciones de edición*, tales como acciones de copiar/pegar. +* acciones *Fuente*, tales como FontBold o fontSize. +* acciones *Expresiones dinámicas*, permitiendo manejar la inserción de expresiones. +* acciones *Corrector ortográfico*. \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md index 0c7b7d9482aafe..8c728c11d5d499 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md @@ -48,6 +48,8 @@ Puede controlar los saltos automáticos en los párrafos mediante las siguientes Estas opciones pueden definirse mediante el menú contextual, o los [atributos](../commands-legacy/4d-write-pro-attributes.md) (`wk avoid widows and orphans`, `wk page break inside paragraph`, o las [acciones estándar](./defining-a-4d-write-pro-area.md#standard-actions) *widowAndOrphanControlEnabled*, *avoidPageBreakInside*). + + ## Fondo El fondo de los documentos 4D Write Pro y los elementos del documento (tablas, párrafos, secciones, encabezados/pies, etc.) se pueden configurar con los siguientes efectos: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md new file mode 100644 index 00000000000000..09990ca4034c8f --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md @@ -0,0 +1,34 @@ +--- +id: user-new +title: user WP +--- + +to import + + + +## Lists + +4D Write Pro supports two main types of lists: + +* unordered lists: where list items are marked with bullets, custom bullets, or images used as markers. +* ordered lists: where list items are marked with numbers or letters + +They can be created using: +* the toolbar or sidebar of the [4D Write Pro interface](https://doc.4d.com/4Dv20/4D/20.2/Entry-areas.300-6750367.en.html#5865253) +* the `listStyleType` or `listStyleImage` [standard actions](./standard-actions.md) , +* or [programmatically](../commands-legacy/4d-write-pro-attributes.md#lists) using [WP SET ATTRIBUTE](../commands/wp-set-attributes.md). + +When a list is created using a standard action (`listStyleType` or `listStyleImage`) or the toolbar/sidebar, 4D Write Pro automatically inserts a margin before the text so that the marker is positioned inside it. The value of the inserted margin corresponds to the offset of the default tab (`wk tab default`). + +![](../../assets/en/WritePro/margin-bullets.png) + +When the list is created using [the WP SET ATTRIBUTE command](../commands-legacy/4d-write-pro-attributes.md#lists), no specific margin is managed, by default the marker is added at the left boundary of the paragraph. The developer can add a custom margin if necessary. + +:::info Related blog post + +[4D Write Pro – Adding a margin automatically when bullets are set using standard actions]() + +::: + + diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullet.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..52737ade4cdf7c96ae595d418c364a93c89e8dad GIT binary patch literal 18358 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 VO{xx70-m+Q;OXk;vd$@?2>{vzGI9U_ literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png new file mode 100644 index 0000000000000000000000000000000000000000..de7143eb0507419e39da91e2ee6cd717c4714586 GIT binary patch literal 17630 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 HoD!Mzone de texte,
    *Sous-menu* | Définit l'alignement horizontal de l'élément, relatif à **anchorOrigin** pour les images/zones de texte en page ou à la zone de format pour les images/zones de texte en mode inclus. Cette action réinitialise à 0 le décalage horizontal. (non activée pour les images en ligne). | -| anchoring | {image \| textBox}/anchoring | *Sous-menu* | Sous-menu par défaut avec des actions de paramètres d'ancrage pour les images ou les zones de texte | -| anchorLayout | image/anchorLayout?value={front \| behind | wrapTopBottom | wrapSquareLeft | wrapSquareRight | wrapSquareLargest | wrapSquare | inline}


    textBox/anchorLayout?value={front | behind | wrapTopBottom | wrapSquareLeft | wrapSquareRight | wrapSquareLargest | wrapSquare} | Image,
    zone de texte,
    *Sous-menu* | Définit le type de position d'ancre pour une image ou une zone de texte. Peut être utilisée pour transformer une image en ligne en image ancrée, ou l'inverse.

    Note : Si une image ancrée est transformée en image en ligne, elle est insérée au début du texte sélectionné.

    La valeur " en ligne " n'est pas supportée pour les zones de texte.
    | -| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box | header-box | footer-box} | Image,
    zone de texte,
    *Sous-menu* |
    Définit la zone relative à la position absolue d'une image ancrée ou d'une zone de texte. Si l'élément est relative à la zone d'en-tête ou de pied (header-box/footer-box) qui n'est pas visible sur une page, l'image n'est pas affichée. Cette action remet à zéro les valeurs de décalage horizontal et vertical.

    Mode Page uniquement, non activée pour les images en ligne.

    | -| anchorPage | {image \| textBox}/anchorPage?value={all | current | currentSubSection} | Image,
    zone de texte,
    *Sous-menu* |
    Définit la ou les page(s) où l'image ou la zone de texte sélectionnée est affichée (non activée pour les images en ligne).

    Mode page uniquement.

    | -| anchorSection | {image \| textBox}/anchorSection?value={all | current} | Image,
    zone de texte,
    *Sous-menu* |
    Définit la ou les section(s) où l'image ou la zone de texte sélectionnée est affichée (non activée pour les images en ligne).

    Mode page uniquement.

    | -| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top | center | bottom} | Image,
    zone de texte,
    *Sous-menu* |
    Définit l'alignement vertical de l'image ou la zone de texte, relatif à **anchorOrigin** pour une image ou une zone texte en page, ou à la zone de format pour une image ou une zone texte en mode inclus. Cette action réinitialise à 0 le décalage vertical (non activée pour les images en ligne).
    Note : Voir l'action "verticalAlign" pour l'alignement vertical à l'intérieur de la zone de texte.

    | -| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraphe |


    | -| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Table, Ligne, Colonne, Cellule, *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu par défaut pour tous les attributs de fond. | -| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie la zone de découpe du fond de la cible (par défaut, la cible est le paragraphe). Paper-box est disponible uniquement avec doc et section. | -| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu*, *showDialog* | Modifie l'arrière-plan de la cible. | -| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Définit le mode d'affichage des images utilisées comme arrière-plan. | -| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu*, *showDialog* | Efface l'image d'arrière-plan de la cible (par défaut, la cible est le paragraphe). | -| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie l'origine de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe). Paper-box est disponible uniquement avec doc et section. | -| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie l'alignement horizontal de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe).
    Ex: `paragraph/backgroundPositionH?value=left` | -| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie l'alignement vertical de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe).
    Ex: `paragraph/backgroundPositionV?value=top` | -| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie le mode de répétition de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe). | -| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie la largeur de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe).
    Ex: `paragraph/backgroundSizeH?value=100%`, `section/backgroundSizeH?value=cover` | -| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeV?value={ \| \| auto} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie la hauteur de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe).
    Ex: `paragraph/backgroundSizeV?value=50%`, `section/backgroundSizeV?value=40pt` | -| bookmark | bookmark?index=\ | *Sous-menu* | Sélectionne le Nième signet.

    Ex: *bookmark?index=2 // sélectionne le deuxième signet* | -| borderCollapse | borderCollapse | Paragraphe | Fusionne les bordures de paragraphes et les marges intérieures (padding). | -| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value=\ | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    Tableau,
    Ligne,
    Colonne,
    Cellule,
    *Sous-menu*,
    *showDialog* | Modifie la couleur de la bordure de la cible (la cible par défaut est le paragraphe).

    Ex: *paragraph/borderColorLeft?value=green* | -| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value=\ | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    *Sous-menu* | Change le rayon pour les coins arrondis de la cible (par défaut la cible est le paragraphe).

    Ex: *paragraph/borderRadius?value=4pt* | -| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    Table,
    Ligne,
    Colonne,
    Cellule,
    *Sous-menu* | Sous-menu par défaut pour les bordures de la cible. | -| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    Tableau,
    Ligne,
    Colonne,
    Cellule,
    *Sous-menu* | Modifie le style de la bordure de la cible (par défaut la cible est le paragraphe).

    Ex: *paragraph/borderStyleLeft?value=double*
    Ex: *outside/borderStyle?value=solid*
    Ex: *inside/borderStyle?value=none* | -| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value=\ | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    Tableau,
    Ligne,
    Colonne,
    Cellule,
    *Sous-menu* | Modifie la largeur de la bordure de la cible (par défaut la cible est le paragraphe).

    Ex: *paragraph/borderWidthLeft?value=4pt* | -| columnCount | {section/}columnCount?value={1<=number<=20} | Document,
    Section,
    *Sous-menu* | Nombre de colonnes dans le document et/ou la section courante (la cible par défaut est le document).

    Ex: *section/columnCount?value=3* | -| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document,
    Section,
    *Sous-menu*,
    *showDialog* | Couleur de la ligne de séparation verticale entre les colonnes du document ou de la section.

    Ex: *columnRuleColor?value="#FFFFFF"* | -| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document,
    Section,
    *Sous-menu* | Style de la ligne de séparation verticale entre les colonnes du document ou de la section.

    Ex: *columnRuleStyle?value=solid* | -| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document,
    Section,
    *Sous-menu* | Largeur de la ligne de séparation verticale entre les colonnes du document ou de la section.

    Ex: *columnRuleWidth?value=2pt* | -| columns | {section/}columns | Document,
    Section,
    *Sous-menu* | Pour les commandes de menu uniquement. Crée automatiquement un sous-menu **Colonnes** complet avec tous les sous-menus d'action de colonne (hormis *insertColumnBreak*). | -| columnSpacing | {section/}columnSpacing?value={CSS length} | Document,
    Section,
    *Sous-menu* | Espacement entre deux colonnes dans le document et/ou la section courante.

    Ex: *columnSpacing?value=1cm* | -| deleteColumns | deleteColumns | Table | Supprime toutes les colonnes sélectionnées. | -| deleteRows | deleteRows | Table | Supprime toutes les lignes sélectionnées. | -| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraphe,
    Image,
    *Sous-menu* | Supprime la Nième feuille de style parmi les feuilles de style stockées pour la cible sélectionnée (par défaut la cible est le paragraphe). Le nom de l'élément de menu est remplacé, au moment de l'exécution, par le nom de la feuille de style sur le point d'être supprimée. | -| direction | direction?value={ltr \| rtl} | Paragraphe,
    *Sous-menu* | Sens de l'écriture du paragraphe (ltr : left to right - rtl : right to left). | -| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Affiche les références de formules sous la forme d'un symbole ![](../../assets/en/WritePro/pict6013182.en.png). Ne peut être utilisé que lorsque les formules sont affichées en tant que références. | -| doc | doc | Document,
    *Sous-menu* | Sous-menu par défaut pour la disposition du corps du document (attributs du mode inclus ou attributs par défaut des sections - mais pour la marge réservée au mode inclus seulement). | -| dpi | dpi?value=\ | *Sous-menu* | Modifie le dpi de la vue courante (indépendant de l'attribut de document wk dpi utilisé en interne pour la conversion pixels <-> points).

    Ex: *dpi?value=72* | -| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable} | Table,
    *Sous-menu* | Définit la manière dont la table est affichée lorsque sa source de données est vide. | -| fontStyleWrite | fontStyleWrite | *Sous-menu* | Pour les commandes de menu uniquement. Affiche le sous-menu Style de police par défaut de 4D Write Pro. | -| fontSubscript | fontSubscript | | Bascule l'attribut de police indice. | -| fontSuperscript | fontSuperscript | | Bascule l'attribut de police exposant. | -| footer | footer | *Sous-menu* | Affiche le sous-menu Pied de page. | -| footer/remove | footer/remove | Pied | Supprime le pied de page sélectionné. | -| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, *Sous-menu* | Mode de surbrillance de formule pour le document. Peut être utilisé avec un menu déroulant ou un bouton. | -| formulaHighlightColor | formulaHighlightColor?value= | Document, *Sous-menu*, *showDialog* | Couleur de surbrillance de la formule pour le document. | -| formulaHighlightReferences | formulaHighlightReferences | Document | Bascule la surbrillance des références de formule. Peut être utilisé avec une case à cocher ou un élément de menu. | -| formulaHighlightValues | formulaHighlightValues | Document | Active ou désactive la mise en surbrillance des valeurs de formule. Peut être utilisé avec une case à cocher ou un élément de menu. | -| header | header | *Sous-menu* | Affiche le sous-menu En-tête. | -| header/remove | header/remove | En-tête | Supprime l'en-tête sélectionné. | -| height | {image \| textBox \| row}/height?value={ \| auto} | Image, zone de texte, Ligne, *Sous-menu* | Hauteur de la cible.
    Ex : image/height?value=50pt.
    Pour image/width, voir width.
    Ex : row/height?value=12pt | -| headerRowCount | {table}/headerRowCount | Tableau, *Sous-menu* | Définit le nombre de lignes d’en-tête dans un tableau (5 au maximum). | -| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Bascule du mode html au mode wysiwyg. | -| image | image | Image, *Sous-menu* | Affiche le sous-menu Image. | -| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, *Sous-menu* | Définit le mode d'affichage des images ancrées et des images en ligne.

    Ex : image/displayMode?value=scaledToFit | -| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, *Sous-menu* | Alignement vertical de l'image.

    Ex: image/verticalAlign?value=super | -| insertColumnBreak | insertColumnBreak | Paragraphe | Insère un saut de colonne dans la sélection. | -| insertColumnToTheLeft | insertColumnToTheLeft | Table | Insère une colonne à gauche de la première colonne sélectionnée. | -| insertColumnToTheRight | insertColumnToTheRight | Table | Insère une colonne à droite de la dernière colonne sélectionnée. | -| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraphe | Insère un saut de section continu à la sélection. | -| insertImage | insertImage | | Ouvre une boîte de dialogue de sélection d'image et insère l'image sélectionnée (le cas échéant) en tant que caractère dans la zone. | -| insertPageBreak | insertPageBreak | Paragraphe | Insère un saut de page à l'endroit sélectionné. | -| insertRowAbove | insertRowAbove | Table | Insère une ligne au-dessus de la ligne ou des lignes sélectionnée(s). | -| insertRowBelow | insertRowBelow | Table | Insère une ligne en-dessous de la ligne ou des lignes sélectionnée(s). | -| insertSectionBreak | insertSectionBreak | Paragraphe | Insère un saut de section à l'endroit sélectionné. | -| insertSoftHyphen | insertSoftHyphen | | Insère un trait d'union au niveau du curseur. | -| keepWithNext | keepWithNext | Paragraphe | Relie un paragraphe au suivant afin qu'ils ne puissent pas être séparés par des sauts de page ou de colonne automatiques.

    Si cette action est appliquée au dernier paragraphe de la dernière cellule d'un tableau, la dernière ligne du tableau est reliée au paragraphe suivant. | -| lineHeight | lineHeight?value={ \| } | Paragraphe, *Sous-menu* | Hauteur de ligne du paragraphe.

    Ex: lineHeight?value=120% | -| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraphe, *Sous-menu* | Numéro de départ de la liste.

    Ex: listStartNumber?value=10 | -| listStyleImage | listStyleImage/showDialog | Paragraphe, *showDialog* | Ouvre un dialogue d'ouverture de fichier pour choisir une image à afficher en tant que puce pour une liste ; définit également un élément de liste sous forme de disque – style à utiliser si l'image n'est pas trouvée. | -| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading-zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraphe, *Sous-menu* | Type de style de liste de paragraphes. | -| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table}/{inside \| outside}/{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, *Sous-menu* | Modifie la marge de la cible (la cible par défaut est le paragraphe).

    Ex : `margin?value=4pt` – définit toutes les marges du paragraphe sur 4pt.

    Ex : `outside/margin?value=4pt` – définit les marges extérieures du paragraphe sur 4pt.

    Ex : `doc/marginLeft?value=1cm` – définit la marge gauche à 1cm pour le document, comme dans le mode intégré.

    Ex : `section/marginLeft?value=1cm` – définit la marge gauche à 1cm pour les pages de la première section sélectionnée. | -| merge | {paragraph/}merge cell/merge | Paragraphe, cellule | Utilisé avec les paragraphes : fusionne les paragraphes. Utilisé avec les cellules : fusionne les cellules sélectionnées. | -| minHeight | {paragraph \| image}/minHeight?value= | Paragraphe, Image, *Sous-menu* | Hauteur minimum de la cible (la cible par défaut est le paragraphe).

    Ex: paragraph/minHeight?value=50pt | -| minWidth | {paragraph \| image}/minWidth?value= | Paragraphe, Image, *Sous-menu* | Largeur minimum de la cible (la cible par défaut est le paragraphe).

    Ex: paragraph/minWidth?value=50pt | -| moveToFront | moveToFront | Image | Place l'image au premier plan (non activée pour les images en ligne). | -| moveToBack | moveToBack | Image | Place l'image à l'arrière-plan (non activée pour les images en ligne). | -| newLineStyleSheet | newLineStyleSheet?index={1<=number<=nombre de feuilles de style paragraphe} \| newLineStyleSheet?value=auto | Paragraphe, *Sous-menu* | Les éléments du paragraphe sélectionné utiliseront la Nième feuille de style pour les nouveaux paragraphes créés par Retour Chariot ou lors d'un fractionnement de paragraphes. Si value=auto, les nouveaux paragraphes utiliseront la même feuille de style (fonctionnement par défaut).

    (Le libellé de la ligne de menu est remplacé, à l'exécution, par le nom de la feuille de style.) | -| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row \| cell}/{inside \| outside}/{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom}?value= | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Ligne, Colonne, Cellule, *Sous-menu* | Modifie le padding de la cible (la cible par défaut est le paragraphe). | -| pageMode | pageMode?value={embedded \| page \| draft} | *Sous-menu* | Change le mode d'affichage.

    Ex: pageMode?value=page | -| pageOrientation | {section}/pageOrientation?value={landscape \| portrait} | Section, *Sous-menu* | Modifie l'orientation de la page de la première section sélectionnée.
    Si la section n'est pas spécifiée, l'orientation s'applique à toutes les sections.

    Ex: pageOrientation?value=portrait // change l'orientation en Portrait pour tout le document.

    Ex: section/pageOrientation?value=landscape // change l'orientation en Paysage pour la première section sélectionnée. | -| pageSize | pageSize?index= | *Sous-menu* | Modifie la taille de la page du document. `` est la Nième taille de page dans la liste des tailles disponibles.
    La liste contient les formats courants de l'imprimante, les formats ISO et les formats personnalisés définis par l'utilisateur. | -| paragraph | paragraph | Paragraphe, *Sous-menu* | Sous-menu par défaut pour le paragraphe. | -| print | print | Document | Imprime le document en mode Page avec les paramètres de vue courants de la zone 4D Write Pro qui a le focus. | -| refreshImages | refreshImages | Image | Recharge les images du réseau pour les images avec URLs. | -| removeSoftHyphens | removeSoftHyphens | | Supprime tous les traits d'union conditionnels de la sélection courante. Si la sélection est vide, supprime le trait d'union conditionnel avant ou après le curseur, le cas échéant. | -| row/avoidPageBreakInside | row/avoidPageBreakInside | Tableau, Ligne | Autorise ou désactive les sauts de page à l'intérieur des lignes du tableau.

    Cette action est désactivée si :
    - la sélection courante ne contient pas de tableau
    - le tableau n'autorise pas les sauts de page
    - le tableau se trouve dans un en-tête ou un pied de page.

    Note : si plusieurs tableaux sont sélectionnés et que certains n'autorisent pas les sauts de page, cette option sera activée mais ne s'appliquera qu'aux tableaux qui les autorisent. | -| section | section | Section, *Sous-menu* | Sous-menu par défaut de disposition de la page pour la première section sélectionnée. | -| section/differentFirstPage | section/differentFirstPage | Section | Active ou désactive une première page différente pour la section. | -| section/differentLeftRightPages | section/differentLeftRightPages | Section | Active ou désactive des pages droites et gauches différentes pour la section. | -| section/name/showDialog | section/name/showDialog | Section, *showDialog* | Affiche un dialogue permettant d'entrer le nom de la première section sélectionnée. | -| section/reset | section/reset | Section | Réinitialise tous les attributs de la première section sélectionnée pour les remplacer par les valeurs par défaut :
    - héritées du document pour l'arrière-plan, la bordure et les marges intérieures (même en mode inclus)
    - 2,5 cm pour les marges de page.

    Les propriétés de colonnes de la première section sélectionnée sont également réinitialisées (seules les propriétés par défaut sont appliquées). | -| split | {paragraph}/split \| cell/split | Paragraphe, Cellule | Utilisé avec un paragraphe : fractionne le paragraphe.
    Utilisé avec une cellule : fractionne les cellules sélectionnées (seules les cellules préalablement fusionnées peuvent être fractionnées). | -| styleSheet | {paragraph \| image}/styleSheet?value={1<=number<=nombre de feuilles de style} | Paragraphe, Image, *Sous-menu*, *showDialog* | Applique la Nième feuille de style aux éléments sélectionnés de la cible.
    Avec la boîte de dialogue, la nouvelle feuille de style utilise les attributs courants de la prem -| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, *Sous-menu* | Définit le caractère utilisé comme séparateur décimal par les tabulations décimales. | -| tableAlign | tableAlign?value={left \| center \| right}
    ou
    table/tableAlign?value={left \| center \| right} | Tableau, *Sous-menu* | Indique l'alignement horizontal d'un tableau. | -| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Active ou désactive les sauts de page dans les tableaux.

    Désactivée si :
    - la sélection courante ne contient pas de tableau
    - le tableau se trouve dans un en-tête ou un pied de page | -| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Bascule l'affichage des lignes à reporter en bas (voir *Carry-over rows*). | -| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraphe | Alignement du texte du paragraphe.
    (`initial` utilise `right` pour la direction RTL ou `left` pour la direction LTR). | -| textBox | textBox | *Sous-menu* | Sous-menu avec toutes les actions disponibles pour la zone de texte ciblée ou sélectionnée. | -| textBox/remove | textBox/remove | Zone de texte | Supprime la zone de texte sélectionnée. | -| textIndent | textIndent?value= (peut être négatif) | Paragraphe, *Sous-menu* | Indentation de la première ligne du paragraphe.

    Ex: textIndent?value=2cm | -| textLinethrough | textLinethrough | *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu Texte barré (avec style et couleur). | -| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | *Sous-menu*, *showDialog* | Définit la couleur du texte barré.

    Ex: textLinethroughColor?value=red | -| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | *Sous-menu* | Définit le style du texte barré.

    Ex: textLinethroughStyle?value=dotted | -| textShadow | textShadow | *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu Texte ombré (avec couleur et décalage). | -| textShadowColor | textShadowColor?value={ \| none} | *Sous-menu*, *showDialog* | Modifie la couleur de l'ombre du texte.

    Ex: textShadowColor?value=green | -| textShadowOffset | textShadowOffset?value= | *Sous-menu* | Définit le décalage de l'ombre (uniquement en points).

    Ex: textShadowOffset?value=2pt | -| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | *Sous-menu* | Formate le texte.

    Ex: textTransform?value=capitalize | -| textUnderline | textUnderline | *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu Texte souligné (avec style et couleur). | -| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | *Sous-menu*, *showDialog* | Définit la couleur du soulignement.

    Ex: textUnderlineColor?value=red | -| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | *Sous-menu* | Définit le style du soulignement.

    Ex: textUnderlineStyle?value=dotted | -| updateStyleSheet | {paragraph \| image}/updateStyleSheet | Paragraphe, Image, *Sous-menu* | Met à jour la première feuille de style de la cible sélectionnée (la cible par défaut est le paragraphe). | -| userUnit | userUnit?value={cm \| mm \| in \| pt} | *Sous-menu* | Modifie l'unité de mise en page du document (répercutée sur les règles). | -| verticalAlign | {paragraph \| row \| column \| cell \| textBox}/verticalAlign?value={top \| middle \| bottom} | Paragraphe, Ligne, Colonne, Cellule, zone de texte, *Sous-menu* | Alignement vertical de la cible (par défaut le paragraphe).

    Ex: verticalAlign?value=top
    L'effet dépend de la valeur `minHeight` de la cible. | -| view | view | *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu par défaut pour les paramétrages de vue. | -| visibleBackground | visibleBackground | Document | Affiche ou masque l'arrière-plan, les images ancrées et les zones de texte. | -| visibleEmptyImages | visibleEmptyImages | Document | Affiche ou masque un rectangle noir par défaut pour les images qui ne peuvent pas être chargées ou calculées (images vides ou dans un format non supporté). | -| visibleFooters | visibleFooters | Document | Affiche ou masque les pieds de page. | -| visibleHeaders | visibleHeaders | Document | Affiche ou masque les en-têtes. | -| visibleHiddenChars | visibleHiddenChars | Document | Affiche ou masque les caractères cachés. | -| visibleHorizontalRuler | visibleHorizontalRuler | Document | Affiche ou masque la règle horizontale. | -| visiblePageFrames | visiblePageFrames | Document | Affiche ou masque les cadres des pages. | -| visibleVerticalRuler | visibleVerticalRuler | Document | Affiche ou masque la règle verticale (Mode Page uniquement). | -| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraphe | Active ou désactive le contrôle des veuves et orphelines. | -| width | {paragraph \| image \| textBox \| column}/width?value={ \| auto} | Paragraphe, Image, zone de texte, Colonne, *Sous-menu* | Largeur de la cible (par défaut le paragraphe).
    La valeur `auto` n'est pas disponible pour les zones de texte (converties en 8 cm) et pour les colonnes.

    Ex: image/width?value=50pt | -| zoom | zoom?value={25% <= percentage <= 400%} | Document, *Sous-menu* | Modifie le zoom du document.

    Ex: zoom?value=120% | - - -### Autres actions - -De nombreuses autres actions standard proposées avec les formulaires 4D peuvent être utilisées dans les zones 4D Write Pro : - -* *Actions d'édition*, comme les actions Copier/Coller. -* Actions sur la *Police*, telles que **fontBold** ou **fontSize**. -* Actions sur les *Expressions dynamiques*, permettant de gérer l'insertion d'expressions. -* Actions du *Correcteur orthographique*. \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md new file mode 100644 index 00000000000000..15d39e1cc7f1ce --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md @@ -0,0 +1,174 @@ +--- +id: standard-actions +title: Actions standard +displayed_sidebar: docs +slug: /WritePro/standard-actions +--- + + +L'interface utilisateur des zones 4D Write Pro peut être gérée grâce à un grand nombre d'**actions standard**. Les actions standard peuvent être assignées : + +* aux commandes de menu, disponibles via une **barre de menu** ou la commande [Pop up menu dynamique](../../commands/pop-up-menu-dynamique), +* aux éléments de listes, disponibles via des pop-ups/listes déroulantes ou des pop-up menus hiérarchiques, +* aux boutons, cases à cocher, +* ou exécutées avec la commande [APPELER ACTION](../../commands/appeler-action). + +Lorsqu'elles sont assignées à des objets d'interface, les actions standard gèrent les activations/désactivations de l'objet en fonction du contexte. Pour plus d'informations, référez-vous à la section [Actions standard](#standard-actions). + +Deux catégories d'actions sont disponibles pour les zones 4D Write Pro : + +* des actions spécifiques à 4D Write Pro, qui ne peuvent être utilisées qu'avec les zones 4D Write Pro, +* des *[Autres actions](#other-actions)* plus génériques de gestion des polices, expressions, du correcteur orthographique et des opérations d'édition, qui peuvent être utilisées avec les zones 4D Write Pro et les autres zones 4D. Ces actions sont détaillées dans la section [Actions standard](#standard-actions). + +### Actions 4D Write Pro + +Les actions standard ci-dessous sont disponibles pour les zones 4D Write Pro : + +**Notes :** + +* Les actions qui affichent un menu/une liste automatique peuvent uniquement être attachées aux commandes de menus ou aux objets pop-ups/liste déroulantes et pop-up menus hiérarchiques (voir *Sous-menu*). +* Les cases à cocher et cases à cocher 3D doivent être associées à des actions de statut, telles que "section/differentFirstPage" ou "visibleHorizontalRuler". L'option "Trois états" est prise en charge avec les cases à cocher standard uniquement. +* Un statut d'action de section est toujours égal au statut courant de la section sélectionnée (statut hérité si l'attribut est hérité de la section parente ou de l'attribut par défaut) car il doit refléter le statut de la section sélectionnée (le statut qui est actuellement appliqué à la section). Cependant, modifier un attribut de section avec une action standard surchargera uniquement l'attribut de la section sélectionnée. +* *Sous-menu* : Lorsqu'elles sont utilisées sans paramètres et associées à une commande de menu, un objet pop-up/Liste déroulante ou pop-up menu hiérarchqiue, ces actions affichent un sous-menu automatique. Par exemple, si vous assignez l'action "backgroundColor" à une commande de menu, la sélection de cette commande de menu à l'exécution affichera automatiquement les commandes du sous-menu "couleur de fond". Si vous assignez l'action "zoom" à un pop-up menu hiérarchique, il contiendra automatiquement une liste de valeurs de zoom prédéfinies. A noter que ces actions ne peuvent pas être assignées à des boutons. +* *showDialog* : Ajouter la chaîne "/showDialog**"** au nom de l'action permet d'afficher la boîte de dialogue standard associée à l'action. Par exemple, vous pouvez utiliser "paragraph/styleSheet/showDialog" pour ouvrir le dialogue permettant de saisir le nom d'une nouvelle feuille de style. + +| **Nom de l'action** | **Syntaxe** | **Disponible avec** | **Description** | +|----------------------|-------------|----------------------|------------------| +| anchorHorizontalAlign | {image \| textBox}/anchorHorizontalAlign?value={left | center | right} | Image,
    zone de texte,
    *Sous-menu* | Définit l'alignement horizontal de l'élément, relatif à **anchorOrigin** pour les images/zones de texte en page ou à la zone de format pour les images/zones de texte en mode inclus. Cette action réinitialise à 0 le décalage horizontal. (non activée pour les images en ligne). | +| anchoring | {image \| textBox}/anchoring | *Sous-menu* | Sous-menu par défaut avec des actions de paramètres d'ancrage pour les images ou les zones de texte | +| anchorLayout | image/anchorLayout?value={front \| behind | wrapTopBottom | wrapSquareLeft | wrapSquareRight | wrapSquareLargest | wrapSquare | inline}


    textBox/anchorLayout?value={front | behind | wrapTopBottom | wrapSquareLeft | wrapSquareRight | wrapSquareLargest | wrapSquare} | Image,
    zone de texte,
    *Sous-menu* | Définit le type de position d'ancre pour une image ou une zone de texte. Peut être utilisée pour transformer une image en ligne en image ancrée, ou l'inverse.

    Note : Si une image ancrée est transformée en image en ligne, elle est insérée au début du texte sélectionné.

    La valeur " en ligne " n'est pas supportée pour les zones de texte.
    | +| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box | header-box | footer-box} | Image,
    zone de texte,
    *Sous-menu* |
    Définit la zone relative à la position absolue d'une image ancrée ou d'une zone de texte. Si l'élément est relative à la zone d'en-tête ou de pied (header-box/footer-box) qui n'est pas visible sur une page, l'image n'est pas affichée. Cette action remet à zéro les valeurs de décalage horizontal et vertical.

    Mode Page uniquement, non activée pour les images en ligne.

    | +| anchorPage | {image \| textBox}/anchorPage?value={all | current | currentSubSection} | Image,
    zone de texte,
    *Sous-menu* |
    Définit la ou les page(s) où l'image ou la zone de texte sélectionnée est affichée (non activée pour les images en ligne).

    Mode page uniquement.

    | +| anchorSection | {image \| textBox}/anchorSection?value={all | current} | Image,
    zone de texte,
    *Sous-menu* |
    Définit la ou les section(s) où l'image ou la zone de texte sélectionnée est affichée (non activée pour les images en ligne).

    Mode page uniquement.

    | +| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top | center | bottom} | Image,
    zone de texte,
    *Sous-menu* |
    Définit l'alignement vertical de l'image ou la zone de texte, relatif à **anchorOrigin** pour une image ou une zone texte en page, ou à la zone de format pour une image ou une zone texte en mode inclus. Cette action réinitialise à 0 le décalage vertical (non activée pour les images en ligne).
    Note : Voir l'action "verticalAlign" pour l'alignement vertical à l'intérieur de la zone de texte.

    | +| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraphe |


    | +| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Table, Ligne, Colonne, Cellule, *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu par défaut pour tous les attributs de fond. | +| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie la zone de découpe du fond de la cible (par défaut, la cible est le paragraphe). Paper-box est disponible uniquement avec doc et section. | +| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu*, *showDialog* | Modifie l'arrière-plan de la cible. | +| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Définit le mode d'affichage des images utilisées comme arrière-plan. | +| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu*, *showDialog* | Efface l'image d'arrière-plan de la cible (par défaut, la cible est le paragraphe). | +| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie l'origine de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe). Paper-box est disponible uniquement avec doc et section. | +| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie l'alignement horizontal de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe).
    Ex: `paragraph/backgroundPositionH?value=left` | +| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie l'alignement vertical de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe).
    Ex: `paragraph/backgroundPositionV?value=top` | +| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie le mode de répétition de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe). | +| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie la largeur de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe).
    Ex: `paragraph/backgroundSizeH?value=100%`, `section/backgroundSizeH?value=cover` | +| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeV?value={ \| \| auto} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, Ligne, Colonne, Cellule, *Sous-menu* | Modifie la hauteur de l'image d'arrière-plan de la cible (la cible par défaut est le paragraphe).
    Ex: `paragraph/backgroundSizeV?value=50%`, `section/backgroundSizeV?value=40pt` | +| bookmark | bookmark?index=\ | *Sous-menu* | Sélectionne le Nième signet.

    Ex: *bookmark?index=2 // sélectionne le deuxième signet* | +| borderCollapse | borderCollapse | Paragraphe | Fusionne les bordures de paragraphes et les marges intérieures (padding). | +| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value=\ | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    Tableau,
    Ligne,
    Colonne,
    Cellule,
    *Sous-menu*,
    *showDialog* | Modifie la couleur de la bordure de la cible (la cible par défaut est le paragraphe).

    Ex: *paragraph/borderColorLeft?value=green* | +| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value=\ | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    *Sous-menu* | Change le rayon pour les coins arrondis de la cible (par défaut la cible est le paragraphe).

    Ex: *paragraph/borderRadius?value=4pt* | +| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    Table,
    Ligne,
    Colonne,
    Cellule,
    *Sous-menu* | Sous-menu par défaut pour les bordures de la cible. | +| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    Tableau,
    Ligne,
    Colonne,
    Cellule,
    *Sous-menu* | Modifie le style de la bordure de la cible (par défaut la cible est le paragraphe).

    Ex: *paragraph/borderStyleLeft?value=double*
    Ex: *outside/borderStyle?value=solid*
    Ex: *inside/borderStyle?value=none* | +| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value=\ | Document,
    Paragraphe,
    Image,
    zone de texte,
    Section,
    En-tête,
    Pied,
    Tableau,
    Ligne,
    Colonne,
    Cellule,
    *Sous-menu* | Modifie la largeur de la bordure de la cible (par défaut la cible est le paragraphe).

    Ex: *paragraph/borderWidthLeft?value=4pt* | +| columnCount | {section/}columnCount?value={1<=number<=20} | Document,
    Section,
    *Sous-menu* | Nombre de colonnes dans le document et/ou la section courante (la cible par défaut est le document).

    Ex: *section/columnCount?value=3* | +| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document,
    Section,
    *Sous-menu*,
    *showDialog* | Couleur de la ligne de séparation verticale entre les colonnes du document ou de la section.

    Ex: *columnRuleColor?value="#FFFFFF"* | +| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document,
    Section,
    *Sous-menu* | Style de la ligne de séparation verticale entre les colonnes du document ou de la section.

    Ex: *columnRuleStyle?value=solid* | +| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document,
    Section,
    *Sous-menu* | Largeur de la ligne de séparation verticale entre les colonnes du document ou de la section.

    Ex: *columnRuleWidth?value=2pt* | +| columns | {section/}columns | Document,
    Section,
    *Sous-menu* | Pour les commandes de menu uniquement. Crée automatiquement un sous-menu **Colonnes** complet avec tous les sous-menus d'action de colonne (hormis *insertColumnBreak*). | +| columnSpacing | {section/}columnSpacing?value={CSS length} | Document,
    Section,
    *Sous-menu* | Espacement entre deux colonnes dans le document et/ou la section courante.

    Ex: *columnSpacing?value=1cm* | +| deleteColumns | deleteColumns | Table | Supprime toutes les colonnes sélectionnées. | +| deleteRows | deleteRows | Table | Supprime toutes les lignes sélectionnées. | +| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraphe,
    Image,
    *Sous-menu* | Supprime la Nième feuille de style parmi les feuilles de style stockées pour la cible sélectionnée (par défaut la cible est le paragraphe). Le nom de l'élément de menu est remplacé, au moment de l'exécution, par le nom de la feuille de style sur le point d'être supprimée. | +| direction | direction?value={ltr \| rtl} | Paragraphe,
    *Sous-menu* | Sens de l'écriture du paragraphe (ltr : left to right - rtl : right to left). | +| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Affiche les références de formules sous la forme d'un symbole ![](../../assets/en/WritePro/pict6013182.en.png). Ne peut être utilisé que lorsque les formules sont affichées en tant que références. | +| doc | doc | Document,
    *Sous-menu* | Sous-menu par défaut pour la disposition du corps du document (attributs du mode inclus ou attributs par défaut des sections - mais pour la marge réservée au mode inclus seulement). | +| dpi | dpi?value=\ | *Sous-menu* | Modifie le dpi de la vue courante (indépendant de l'attribut de document wk dpi utilisé en interne pour la conversion pixels <-> points).

    Ex: *dpi?value=72* | +| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable} | Table,
    *Sous-menu* | Définit la manière dont la table est affichée lorsque sa source de données est vide. | +| fontStyleWrite | fontStyleWrite | *Sous-menu* | Pour les commandes de menu uniquement. Affiche le sous-menu Style de police par défaut de 4D Write Pro. | +| fontSubscript | fontSubscript | | Bascule l'attribut de police indice. | +| fontSuperscript | fontSuperscript | | Bascule l'attribut de police exposant. | +| footer | footer | *Sous-menu* | Affiche le sous-menu Pied de page. | +| footer/remove | footer/remove | Pied | Supprime le pied de page sélectionné. | +| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, *Sous-menu* | Mode de surbrillance de formule pour le document. Peut être utilisé avec un menu déroulant ou un bouton. | +| formulaHighlightColor | formulaHighlightColor?value= | Document, *Sous-menu*, *showDialog* | Couleur de surbrillance de la formule pour le document. | +| formulaHighlightReferences | formulaHighlightReferences | Document | Bascule la surbrillance des références de formule. Peut être utilisé avec une case à cocher ou un élément de menu. | +| formulaHighlightValues | formulaHighlightValues | Document | Active ou désactive la mise en surbrillance des valeurs de formule. Peut être utilisé avec une case à cocher ou un élément de menu. | +| header | header | *Sous-menu* | Affiche le sous-menu En-tête. | +| header/remove | header/remove | En-tête | Supprime l'en-tête sélectionné. | +| height | {image \| textBox \| row}/height?value={ \| auto} | Image, zone de texte, Ligne, *Sous-menu* | Hauteur de la cible.
    Ex : image/height?value=50pt.
    Pour image/width, voir width.
    Ex : row/height?value=12pt | +| headerRowCount | {table}/headerRowCount | Tableau, *Sous-menu* | Définit le nombre de lignes d’en-tête dans un tableau (5 au maximum). | +| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Bascule du mode html au mode wysiwyg. | +| image | image | Image, *Sous-menu* | Affiche le sous-menu Image. | +| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, *Sous-menu* | Définit le mode d'affichage des images ancrées et des images en ligne.

    Ex : image/displayMode?value=scaledToFit | +| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, *Sous-menu* | Alignement vertical de l'image.

    Ex: image/verticalAlign?value=super | +| insertColumnBreak | insertColumnBreak | Paragraphe | Insère un saut de colonne dans la sélection. | +| insertColumnToTheLeft | insertColumnToTheLeft | Table | Insère une colonne à gauche de la première colonne sélectionnée. | +| insertColumnToTheRight | insertColumnToTheRight | Table | Insère une colonne à droite de la dernière colonne sélectionnée. | +| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraphe | Insère un saut de section continu à la sélection. | +| insertImage | insertImage | | Ouvre une boîte de dialogue de sélection d'image et insère l'image sélectionnée (le cas échéant) en tant que caractère dans la zone. | +| insertPageBreak | insertPageBreak | Paragraphe | Insère un saut de page à l'endroit sélectionné. | +| insertRowAbove | insertRowAbove | Table | Insère une ligne au-dessus de la ligne ou des lignes sélectionnée(s). | +| insertRowBelow | insertRowBelow | Table | Insère une ligne en-dessous de la ligne ou des lignes sélectionnée(s). | +| insertSectionBreak | insertSectionBreak | Paragraphe | Insère un saut de section à l'endroit sélectionné. | +| insertSoftHyphen | insertSoftHyphen | | Insère un trait d'union au niveau du curseur. | +| keepWithNext | keepWithNext | Paragraphe | Relie un paragraphe au suivant afin qu'ils ne puissent pas être séparés par des sauts de page ou de colonne automatiques.

    Si cette action est appliquée au dernier paragraphe de la dernière cellule d'un tableau, la dernière ligne du tableau est reliée au paragraphe suivant. | +| lineHeight | lineHeight?value={ \| } | Paragraphe, *Sous-menu* | Hauteur de ligne du paragraphe.

    Ex: lineHeight?value=120% | +| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraphe, *Sous-menu* | Numéro de départ de la liste.

    Ex: listStartNumber?value=10 | +| listStyleImage | listStyleImage/showDialog | Paragraphe, *showDialog* | Ouvre un dialogue d'ouverture de fichier pour choisir une image à afficher en tant que puce pour une liste ; définit également un élément de liste sous forme de disque – style à utiliser si l'image n'est pas trouvée. | +| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading-zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraphe, *Sous-menu* | Type de style de liste de paragraphes. | +| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table}/{inside \| outside}/{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Tableau, *Sous-menu* | Modifie la marge de la cible (la cible par défaut est le paragraphe).

    Ex : `margin?value=4pt` – définit toutes les marges du paragraphe sur 4pt.

    Ex : `outside/margin?value=4pt` – définit les marges extérieures du paragraphe sur 4pt.

    Ex : `doc/marginLeft?value=1cm` – définit la marge gauche à 1cm pour le document, comme dans le mode intégré.

    Ex : `section/marginLeft?value=1cm` – définit la marge gauche à 1cm pour les pages de la première section sélectionnée. | +| merge | {paragraph/}merge cell/merge | Paragraphe, cellule | Utilisé avec les paragraphes : fusionne les paragraphes. Utilisé avec les cellules : fusionne les cellules sélectionnées. | +| minHeight | {paragraph \| image}/minHeight?value= | Paragraphe, Image, *Sous-menu* | Hauteur minimum de la cible (la cible par défaut est le paragraphe).

    Ex: paragraph/minHeight?value=50pt | +| minWidth | {paragraph \| image}/minWidth?value= | Paragraphe, Image, *Sous-menu* | Largeur minimum de la cible (la cible par défaut est le paragraphe).

    Ex: paragraph/minWidth?value=50pt | +| moveToFront | moveToFront | Image | Place l'image au premier plan (non activée pour les images en ligne). | +| moveToBack | moveToBack | Image | Place l'image à l'arrière-plan (non activée pour les images en ligne). | +| newLineStyleSheet | newLineStyleSheet?index={1<=number<=nombre de feuilles de style paragraphe} \| newLineStyleSheet?value=auto | Paragraphe, *Sous-menu* | Les éléments du paragraphe sélectionné utiliseront la Nième feuille de style pour les nouveaux paragraphes créés par Retour Chariot ou lors d'un fractionnement de paragraphes. Si value=auto, les nouveaux paragraphes utiliseront la même feuille de style (fonctionnement par défaut).

    (Le libellé de la ligne de menu est remplacé, à l'exécution, par le nom de la feuille de style.) | +| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row \| cell}/{inside \| outside}/{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom}?value= | Document, Paragraphe, Image, zone de texte, Section, En-tête, Pied, Ligne, Colonne, Cellule, *Sous-menu* | Modifie le padding de la cible (la cible par défaut est le paragraphe). | +| pageMode | pageMode?value={embedded \| page \| draft} | *Sous-menu* | Change le mode d'affichage.

    Ex: pageMode?value=page | +| pageOrientation | {section}/pageOrientation?value={landscape \| portrait} | Section, *Sous-menu* | Modifie l'orientation de la page de la première section sélectionnée.
    Si la section n'est pas spécifiée, l'orientation s'applique à toutes les sections.

    Ex: pageOrientation?value=portrait // change l'orientation en Portrait pour tout le document.

    Ex: section/pageOrientation?value=landscape // change l'orientation en Paysage pour la première section sélectionnée. | +| pageSize | pageSize?index= | *Sous-menu* | Modifie la taille de la page du document. `` est la Nième taille de page dans la liste des tailles disponibles.
    La liste contient les formats courants de l'imprimante, les formats ISO et les formats personnalisés définis par l'utilisateur. | +| paragraph | paragraph | Paragraphe, *Sous-menu* | Sous-menu par défaut pour le paragraphe. | +| print | print | Document | Imprime le document en mode Page avec les paramètres de vue courants de la zone 4D Write Pro qui a le focus. | +| refreshImages | refreshImages | Image | Recharge les images du réseau pour les images avec URLs. | +| removeSoftHyphens | removeSoftHyphens | | Supprime tous les traits d'union conditionnels de la sélection courante. Si la sélection est vide, supprime le trait d'union conditionnel avant ou après le curseur, le cas échéant. | +| row/avoidPageBreakInside | row/avoidPageBreakInside | Tableau, Ligne | Autorise ou désactive les sauts de page à l'intérieur des lignes du tableau.

    Cette action est désactivée si :
    - la sélection courante ne contient pas de tableau
    - le tableau n'autorise pas les sauts de page
    - le tableau se trouve dans un en-tête ou un pied de page.

    Note : si plusieurs tableaux sont sélectionnés et que certains n'autorisent pas les sauts de page, cette option sera activée mais ne s'appliquera qu'aux tableaux qui les autorisent. | +| section | section | Section, *Sous-menu* | Sous-menu par défaut de disposition de la page pour la première section sélectionnée. | +| section/differentFirstPage | section/differentFirstPage | Section | Active ou désactive une première page différente pour la section. | +| section/differentLeftRightPages | section/differentLeftRightPages | Section | Active ou désactive des pages droites et gauches différentes pour la section. | +| section/name/showDialog | section/name/showDialog | Section, *showDialog* | Affiche un dialogue permettant d'entrer le nom de la première section sélectionnée. | +| section/reset | section/reset | Section | Réinitialise tous les attributs de la première section sélectionnée pour les remplacer par les valeurs par défaut :
    - héritées du document pour l'arrière-plan, la bordure et les marges intérieures (même en mode inclus)
    - 2,5 cm pour les marges de page.

    Les propriétés de colonnes de la première section sélectionnée sont également réinitialisées (seules les propriétés par défaut sont appliquées). | +| split | {paragraph}/split \| cell/split | Paragraphe, Cellule | Utilisé avec un paragraphe : fractionne le paragraphe.
    Utilisé avec une cellule : fractionne les cellules sélectionnées (seules les cellules préalablement fusionnées peuvent être fractionnées). | +| styleSheet | {paragraph \| image}/styleSheet?value={1<=number<=nombre de feuilles de style} | Paragraphe, Image, *Sous-menu*, *showDialog* | Applique la Nième feuille de style aux éléments sélectionnés de la cible.
    Avec la boîte de dialogue, la nouvelle feuille de style utilise les attributs courants de la prem +| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, *Sous-menu* | Définit le caractère utilisé comme séparateur décimal par les tabulations décimales. | +| tableAlign | tableAlign?value={left \| center \| right}
    ou
    table/tableAlign?value={left \| center \| right} | Tableau, *Sous-menu* | Indique l'alignement horizontal d'un tableau. | +| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Active ou désactive les sauts de page dans les tableaux.

    Désactivée si :
    - la sélection courante ne contient pas de tableau
    - le tableau se trouve dans un en-tête ou un pied de page | +| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Bascule l'affichage des lignes à reporter en bas (voir *Carry-over rows*). | +| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraphe | Alignement du texte du paragraphe.
    (`initial` utilise `right` pour la direction RTL ou `left` pour la direction LTR). | +| textBox | textBox | *Sous-menu* | Sous-menu avec toutes les actions disponibles pour la zone de texte ciblée ou sélectionnée. | +| textBox/remove | textBox/remove | Zone de texte | Supprime la zone de texte sélectionnée. | +| textIndent | textIndent?value= (peut être négatif) | Paragraphe, *Sous-menu* | Indentation de la première ligne du paragraphe.

    Ex: textIndent?value=2cm | +| textLinethrough | textLinethrough | *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu Texte barré (avec style et couleur). | +| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | *Sous-menu*, *showDialog* | Définit la couleur du texte barré.

    Ex: textLinethroughColor?value=red | +| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | *Sous-menu* | Définit le style du texte barré.

    Ex: textLinethroughStyle?value=dotted | +| textShadow | textShadow | *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu Texte ombré (avec couleur et décalage). | +| textShadowColor | textShadowColor?value={ \| none} | *Sous-menu*, *showDialog* | Modifie la couleur de l'ombre du texte.

    Ex: textShadowColor?value=green | +| textShadowOffset | textShadowOffset?value= | *Sous-menu* | Définit le décalage de l'ombre (uniquement en points).

    Ex: textShadowOffset?value=2pt | +| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | *Sous-menu* | Formate le texte.

    Ex: textTransform?value=capitalize | +| textUnderline | textUnderline | *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu Texte souligné (avec style et couleur). | +| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | *Sous-menu*, *showDialog* | Définit la couleur du soulignement.

    Ex: textUnderlineColor?value=red | +| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | *Sous-menu* | Définit le style du soulignement.

    Ex: textUnderlineStyle?value=dotted | +| updateStyleSheet | {paragraph \| image}/updateStyleSheet | Paragraphe, Image, *Sous-menu* | Met à jour la première feuille de style de la cible sélectionnée (la cible par défaut est le paragraphe). | +| userUnit | userUnit?value={cm \| mm \| in \| pt} | *Sous-menu* | Modifie l'unité de mise en page du document (répercutée sur les règles). | +| verticalAlign | {paragraph \| row \| column \| cell \| textBox}/verticalAlign?value={top \| middle \| bottom} | Paragraphe, Ligne, Colonne, Cellule, zone de texte, *Sous-menu* | Alignement vertical de la cible (par défaut le paragraphe).

    Ex: verticalAlign?value=top
    L'effet dépend de la valeur `minHeight` de la cible. | +| view | view | *Sous-menu* | Pour les commandes de menu uniquement. Sous-menu par défaut pour les paramétrages de vue. | +| visibleBackground | visibleBackground | Document | Affiche ou masque l'arrière-plan, les images ancrées et les zones de texte. | +| visibleEmptyImages | visibleEmptyImages | Document | Affiche ou masque un rectangle noir par défaut pour les images qui ne peuvent pas être chargées ou calculées (images vides ou dans un format non supporté). | +| visibleFooters | visibleFooters | Document | Affiche ou masque les pieds de page. | +| visibleHeaders | visibleHeaders | Document | Affiche ou masque les en-têtes. | +| visibleHiddenChars | visibleHiddenChars | Document | Affiche ou masque les caractères cachés. | +| visibleHorizontalRuler | visibleHorizontalRuler | Document | Affiche ou masque la règle horizontale. | +| visiblePageFrames | visiblePageFrames | Document | Affiche ou masque les cadres des pages. | +| visibleVerticalRuler | visibleVerticalRuler | Document | Affiche ou masque la règle verticale (Mode Page uniquement). | +| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraphe | Active ou désactive le contrôle des veuves et orphelines. | +| width | {paragraph \| image \| textBox \| column}/width?value={ \| auto} | Paragraphe, Image, zone de texte, Colonne, *Sous-menu* | Largeur de la cible (par défaut le paragraphe).
    La valeur `auto` n'est pas disponible pour les zones de texte (converties en 8 cm) et pour les colonnes.

    Ex: image/width?value=50pt | +| zoom | zoom?value={25% <= percentage <= 400%} | Document, *Sous-menu* | Modifie le zoom du document.

    Ex: zoom?value=120% | + + +### Autres actions + +De nombreuses autres actions standard proposées avec les formulaires 4D peuvent être utilisées dans les zones 4D Write Pro : + +* *Actions d'édition*, comme les actions Copier/Coller. +* Actions sur la *Police*, telles que **fontBold** ou **fontSize**. +* Actions sur les *Expressions dynamiques*, permettant de gérer l'insertion d'expressions. +* Actions du *Correcteur orthographique*. \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md index 7120168f047e1d..ea3471b1dab461 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md @@ -48,6 +48,8 @@ Vous pouvez contrôler les sauts de paragraphe automatiques à l'aide des foncti Ces options peuvent être définies à l'aide du menu contextuel, ou des [attributs](../commands-legacy/4d-write-pro-attributes.md) (`wk avoid widows and orphans`, `wk page break inside paragraph`, ou des [actions standard](./defining-a-4d-write-pro-area.md#standard-actions) *widowAndOrphanControlEnabled* et *avoidPageBreakInsidev*). + + ## Fond L'arrière-plan (le fond) des documents et des éléments de documents de 4D Write Pro (tableaux, paragraphes, sections, en-têtes/pieds de pages, etc.) peut être défini à l'aide des attributs suivants : diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md new file mode 100644 index 00000000000000..09990ca4034c8f --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md @@ -0,0 +1,34 @@ +--- +id: user-new +title: user WP +--- + +to import + + + +## Lists + +4D Write Pro supports two main types of lists: + +* unordered lists: where list items are marked with bullets, custom bullets, or images used as markers. +* ordered lists: where list items are marked with numbers or letters + +They can be created using: +* the toolbar or sidebar of the [4D Write Pro interface](https://doc.4d.com/4Dv20/4D/20.2/Entry-areas.300-6750367.en.html#5865253) +* the `listStyleType` or `listStyleImage` [standard actions](./standard-actions.md) , +* or [programmatically](../commands-legacy/4d-write-pro-attributes.md#lists) using [WP SET ATTRIBUTE](../commands/wp-set-attributes.md). + +When a list is created using a standard action (`listStyleType` or `listStyleImage`) or the toolbar/sidebar, 4D Write Pro automatically inserts a margin before the text so that the marker is positioned inside it. The value of the inserted margin corresponds to the offset of the default tab (`wk tab default`). + +![](../../assets/en/WritePro/margin-bullets.png) + +When the list is created using [the WP SET ATTRIBUTE command](../commands-legacy/4d-write-pro-attributes.md#lists), no specific margin is managed, by default the marker is added at the left boundary of the paragraph. The developer can add a custom margin if necessary. + +:::info Related blog post + +[4D Write Pro – Adding a margin automatically when bullets are set using standard actions]() + +::: + + diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullet.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..52737ade4cdf7c96ae595d418c364a93c89e8dad GIT binary patch literal 18358 zcmc$_XIK+a+cgTJg0z4jMVeAon)D7zl`bN^caR!7B!H+iX#!G02~9v$dJk0~gx--7 zAQE~f^v)Td_k7n^&Uw$@^CMTTJ(HQ)lfC!7*1hhvqh4#NkP$y5#>2xSQ+=iQ1`iJ( z2Yh0P?gB@8<1(y)FMO{zD)M-xgN*Ay;~&6jw174amOR(F8*J&#vLUU+!q9sfS~ zDEIHScz7!6s){e)`kQahg~SM-1hE{S$d2=)tL@YuX&5i`?DNp&(4y>P*=7d|w|^yP zi_r8C5D{5P_&NFJj`|z+cfb5i+-y83a!dEoEZM1WjG&D-za5VHk%yz$kJ|#{wo7)2Cn`?BL4VP7X+B`c&>Kam}iYr(+I2K)Vd9Zq~te0Ks`-xHi|?es%eCxh)< zgrs)6`YbL2Z?m$p{z!(%d9ai&Td=dT<^@_(ash{)(tv?Ry7m9FQQReZ-MMu%X))C5 zZBV}&kBL6Hx(+%^t=YNkMEf74wkCzZA|v&;t}k|nTB{%IT(t$EO*%u?Q&|REn?x;6 z+gHJRb+Yh~0N3!FEu-zjdH*vejhh`4|4Hpz{sz}(3t239j(Dwmu#*L@n-0jnd+M`{ z6@=;0`ojIffQh0A^|TeeY-T>I^iBA@U&}>ve{1Vr*wA9x^+an*fNQe(^(4Qm52b_O zIn6n2P-OPTVqW+3qPW$AY=r6WH3m8)eX)`Sm101csje6IVKEo8U3{@5n= zQYA8SjStCy#=G1KV(D)6eu`y4?_9(>`|rj*`6G8KxBEA?O!2gP$=&+fOd3pzs?}Kk&X1Yac_zE*DYeh&bo2*4PX0->=46rWaRhRIkQf#8@!tdE<}Cs zm1JoMmSq)VmW{6aD_-Xzb%UV3qBx!Z>}J~-)JJ*X2mC;8c@<;c44m&A%MghF>Bmr) zxjEI(^Q`X>@zKONTa`tdV+=yP2}f>Sx;ipn6(z1qIA_yU_IYok*Ij2l$L*ffPSliY z&-umNjGwmJWB1;h7IMWC z2~^7-Po=Mppmenf;V!qzIxdh?bpA_#1@#+iJjsbsB^x55(h-_3@ZD(unX6jA{=z1^gGD3e# z)UEmYxfcAAPBt@yq%B^~n~dd>d$+w&&Y!Gx57SD!d(}Wv3Xfn`YQ1@a-Nk@paxymF z8D*O`eK$+Hp@w%Y`kR*a9U)>TE$(n?yZ`X(K&h9>-hygr?KlH3MdR^UIBggEXP&I&)M9mp0a>_cG{0$3 z%%7iSWgat#T{;#Eq>Z>yA9-E|JWLx7z3+*`=3cO9%o~Nd$6XUOW?xZX&t$7wT)bKx zJC(XgI4^EQ-TB$M!V6h?Ygf+_TvyMnCnwoI3Ob=+4icWPKDyquxE8$LatI-n!>!UZ zCTPkvk8hih!~IJ>YQN)@bDt6{=;+})Dzdnu3l5qaYYZY8T*H?x&Ja+QGF3uawZ=}G zJ8?MB+ch&F7k-S8pY(e9Z!a8bnEI_0GL?QX>X>U0xh1*&GUweNj|1w6AfotVmM-Zwhxe$_TRG3j4Pt}q@0owLxIT8CfeT!D929rR9IoZh1oZeXi$E`KjVah00t+Eb zMV-7eC2M7C{pn?qN6;Z2bJAGr>EZi$?`z3mkpnjk@8TQK4Qgm1Kg;5kdCC4SyyBAyh^}%OwgWU@CSy1q36gscTDEAs<%aR}xGIPM=N;ZHoeYU- zJum_dL63(Pw$?&A#17mobo{`SH+P_Tn0A9DyS$LgeLviF_J!lMf(VyePQdyC)uDP^ zrvbMgfp!o5;IraMcNTa264c~uR(3<^s%Xo3-lzzIhK5;xhqwM}f)>}yNj$h+hD8#x zz(Z&no~b^D5OMDWP3+5^FfzyNI#=+yaL< zZ4TkM!Ntn8J2#w^Rn9!XSzI2pehn#3#Cn9_w_b^bFqd5pVRsH`_jI7gb)GEvdm|Pm zZfvH$^>gm9)4F4m)1;eCt?Lq4_1J-2#HzVYDaL#QKyLQ1;ENhq zSc!K%F>!}|%DRtqEUG3oh`2-V8^hqa&$7m4K|~E<17hJvn%JyDyll9NIW(_4zMsJ@ z#V*3E&!f)WN*LcfKx;66Kl&rAV_-ONO%B-_bg6l{Ab0gR&u@SCR_n|a|NGn~sVkOC z=gU#|OCP9Wi^1hinf>&F=(d_n#r8?-@%|f<;AyVf<~@#(_1HJ7CGK;-Ti2VTAUk(T zn;SzTu2C!K53$Tu`A)-%?uqsZ@eaU{R&Pd+w$kpi3$Lp`giO#!I?Vv#lbmqGAnoGXZq5 zHGt#>bI8<$L4@zd?)?3DvyJv23Mo%#HAmLc;%0n`Fl41y;(Nb0PyYVvD9dHO+yH>G z-Uj~LC&7_o=D~z4Yo;ACa)z;kVNrnklW{ka0IY%~6y8CzHHwd>FVh$yIBf-an z*Aa5;a$QhkY#Rt%NU(b*MAo!_azpJN;&+CorGc$H`+p%8v|01T2qDe(1u%S?bQSgH#H$A6+7U39_8)y|~)NLRNWa&#bPg6cr5=4$1d=F*mwR2V8B0 zWflsHW@p;3nWO#5X1)0Lez$@_^P~a!43uVOxL6mtF{i)qlT{1{(?23IM9`*v^I(2W zS=~*Me!~zp4C_mF>^qe!cIv&rd};F?i7u z%(8R#8*;$!++vvH zNC3^x_+k?uB7(UdI^S!%u-#uR<-cq)jnsMS)E#nJ2Fz)HS|1@_uG$G8lE}0$FZ=|R zYRs$?hRjodhv>76r0dJm!8vc-y}2Se&0GcqhG{G*%c6$81n11aCsv~aU)Q_toB2?b%c4LF0S%9#4#)N0Uw4L=VqAyyyK>ECU!k~Hh7xuQI=Bwl(3vbnY;tS} z-$gLWEX=y0nvsy#2gY%rSD-HH>V7^lyRY9R;1!^TTPBuU7t~1o=sy%X_H0l^y4fXZ z>|}gr+kbjJmBe%NWsq5xer=y#>$cM;xZ(WFabfj=@me0QbJ6Pp&3BV7;0$hb(bw%V zm%G#j*?Pwj)l4{O=Yc2$Gt665xveqhu&?=4TzgV?r3!YGiatp?`RbDkm7Tx4==-(y z}vAZ5P~#m?>C@pdN&ac*DK@`duW=cubg?qvJ- zd^fHt@)m+a^3X+pbetSRprgo;$G2LxrP}d`^AZ@*$Cy!zqO7c_!v2fOfz+TkQBTm+$t^ zY+u~=R{Psjzv=&sKq9|1!5mw_qc2TkikQ&Tuj6Lp>`H;6IQZk1E zpQ0IXoJrLaC`XE%$runj!6UkMkb-{%!IX+8JeDucUZZ9~nX-Urd8af&)FM0wd^vryBKci(2JY6*1mE zd!IXfiQmRT_BCkq#mQ9I)76L-8_KeK`RFo#>UV9D&&TAc!^M%zG0!?4nlUzhv6x|4 zLrBUgSoR7{EoqP0i>i@C^VRx8GkqheR7zli?2Bb38``oMFIC}L z8j8PP)4L^~X`@12rF2ZT?aTQmVGaE1hGwpMXlS40iA=qO9Es)N6wxmRJ}r>UC!&Rp z;W{(8w=Lb>XW3j7(WiR0-ti0Y-l{%ew(W0K5a&xJI9$IdllXbzs`NqVtz>RoSyilL zC4;xm2PN(GgQcUUAjas@;N_BJ{-H})%U38&-wggE%Pg&+<3SO}+ueJVlL|_8(4!1? z5&PPzX8~COEaGuA4eP&LB-VKLjR>%|(zl^33vq9*XwwX?eD#Bv>w_yc!bBfa02M|hqLeZrf*`AX_ zG4?38W^h>5l8ax+8k6<=oa*<+Obp$ogeMDnvUW6=BY1^Unur*xXddll5))H}mRz|# zK_14mmw~Rvz8GdhWpKbbo87zv4{b;L%NW;hj%#LKd1%YjyXwhh&{HjL3_7 z(3rcNv+K9eRhopn`*(7B`hzGuaTBE2lX#OgXjRIanf^mSj7#PR`b@ zPN#zD>Gm_G2*FGzmD*wkzh6sLXIK1ZO@=ARWrIwEZO`D+x~h=duB9pwY+KiSSuM64J=98Z$KqOz8hXYZX6!Q^vcLl6de?MWQ>Jp( z9z1Oxa^-Vb(0b~8mRih;IVc|+fCKOtap0D!QfKny&={+=t29U+wejfiZ=-i)gYd%m!uF+bhsLZrSp}eCdY>Pdx9WXXev*`wI`@2w07^MxTpkI0O;AUR z1IIKgA}xqn23g}5zLAhL>kH^?j6Qv;#|wfdX)-sK%io#`L_W1NXje;_%e;bej2SBX zHgacNCmUxQ&_$niMX?v^$y{8NQU-dcwUVt0A(Du-A?R-u=9?6a;B@_Ah21;`rC|Ev z-#pHg?OuwMuimtket;q{qvPeteTH(9$Zf6EW8Z>5s}E4DE#SL|qzT!Jiw%;6?UOG< zs^9CpzD?h!ITtMS3dpcf&aI0Ve=Meo-$=Z_?!;Yjc9d^0yW@?jHFy_f4(7qWnf0L# z3J3*Dz&VSanGD8HYMUlsfB-qZRcS> z-$BY^q*FKUqM`Ji&-~bAYMM&eR5;@_Ge^9HT$$?qjF>Z?^~&)&0kOew0*k7ccK=h` zS!)T2V1#B$ysp`GVD6+^2nLS6dvx&{8T3*wZRo476#ra&vJ=+6@qn5b-2xtMSBw6XZyH#OBFd-_bH=s|qxxnwt=f)CRs>ZK$P z)>Gj=xY0F1F?rK|KkF{JpPgwzD@97O2}2ytKug^`tKd&h(%VG{65dk}5q9Ne*)Y7^<%FJkq|4kU@<2dhp4^`v z1o-;F)~oPuF;<|N{l3>2_%IqZt@G*0hUNH{l{vRkD!Xk=0YW+`63L1NQI`IdT2Gz* z&X!WuO)WZ{)y?SP_t|k2>E3PX@mtIJt^eX8{#PK6wcPTUnA69C?=SO`jn-WoG&#{K(u2&$ zUDhVCUNtq_i7`9uJukC=m~|CgyiN{!S&*SEpg4W~9TOih<=*3@ZIt3Ztue8up_5t$EJJazu9A1}?*YJz)nn@Df%e$Q`y_; zoqgd=AxH{*kU_0g{b&;pd>lAi!+$V%v^eZ{K@}~Y`4hl-$nFkz__q%tM10%Fr&f2Oazt zL^;e?|80Q9tK`Ae*(-2>6i2f4d|>stZatl4c^wpLzb+iZ*SRzG-IpGFsR6$#>RoYm z{={s&-xfxLVwH`zvefRG(R^azsgI&j*~=A=R!6F2di`U}rUpU9r!%8OS^WdAv5|Gd zS|x|y#X4q@NG(XFQfL}|u4t_Z2TWy&+W(H#0 zwySxEzD5wH4N5JV7y^;wS=JEo#iH@r3~QA7oehp+j%1CFH7yEc>f`ij2m!ILuhqMh znuf-tAS>?f3!~%E#aGRW%F&jT*?k|nf5rPT2WU#Jm#H<5%dj|E$6GD5kqS;;ABvTP z?HPN{R;s&mPMeAHc{ehYlYey!#@lO7Wb?yKKWZ2xJ{5zsh2F{kCIbYr=(AbnTj4&B z%A8PTr+ZDWo0z+Sp-;O}6WjdWY4^!+jj1=oX9fBjeBj;pL<0Q_ru~e*zD)?kZ>9Lxiu%W`|Ie8c4?#phS6PYrZwg{Qcn!MDLo2V9f6JuF|qXSKY!c0MB2B>@2uN zzRY{0V2=V59J0xZ#O7SKf~b{7rj&2vtis&t!M0qFPwbbpiV~bN66jm)5jx6VEs6YF?g}FioKwj&?wJ`yo#(ii>%{uO%y+>pccuznwo%! zTk`)3&M0M=p22kvyt0T+O+pMh4CTA@WgaEYg@4t4w<6ML+PV6(w!%9THiRCj+9*G+ z>J_z7-Z5mFkLzl1eRj?5G8mvHh24H#9nui=J;zqIuS*0XH@Hh^&G@b{=}d1@yJ=R$ zRkhF|p2W2>dw_q@Xj4VYP$<@ML)q7UTHnwO7Sv+fvJ&HbT-jeU;mbBjT{gtb*GgV_ z5zw?dfJqVE{C_1a)}QHh?&Pj6G@;GT(^q{D76PQ!?D^hA>@|6LHyU`wEjHFi5b9pV zhAQ6I?T>t?Is363wE3CFqs?!Ij>fzxs%mM5g3^_n2Al`8zl_=ZTz+n|g_LuMzERE! z3$`{8+wi)V(h#m$&1={hwG)W-!@;t}%$AAC&oZ1P$_$|T>z{4@_mU}w7`syJiV&p@ zEJ>EGaR~swK-!y7tSCJF^Ms|h(slex!j?rcW|3qw8zr(MrTSjgMN9Tn?QP%r{5!S1 zku9GPiHlRc4%U_jnQG1DIIhPalm3lpJTgkpL~{jZG(j~t z_5MKrBI1}yq>VkLkB~oMONE4l+b+nxW>{gq_7O`cw!zU z7N#VfYrogaCnN$w|!TwJ%z&3{$Ua&21{YTt-k4CL5F7I@1I{O zRztM@_^qGop5$U%^t!(otXQ;`rE18f7zMBI?`4Ijg}}N}Si*L@+X`PcUN&;0AKA5} zY|qu78+LNI&Vw^)$#tc5rxEy*DMRP6jhP?+sU)_{b<4_hfxHRPyp747RdAo_`B#;2 zhgv0=x!3qpTb_s+9&kekkO^|X{Up5PSISOn#;M7na)WT<*cM0bfZ4~sw~vx8ZjJbg zUYJ00Yrq?yUDnvMjRR6V1uUfL4L={mXx5`V#Q{lf(|We9(<|$7<42U}m!TwhlGJ=; zqCsmTdZFT;m#8U~>AVxA$eJeM z*Z1X&zigUME<;ndRigHc@X zk_lJvAi%@!C^^Vb=tke7=ZC@I@X>`oQ5i?=nXTl^UCL;2y#8LP+Vh^c1@VhEvYOYC zWXFcL??(^E{3dGY-(>E7`~7qcy0lr@Joal9<~prf#C5-LoZ?F*4>)0yiF9V4#BgUk zxurTMTVD{<3!56H?^+cn8MS*X|7bAh?pwV+S}{weM?JR*Xzs@rtXp>rTw# z4ucX73*^3ZCmpzX3lw{hJ@7O}UhZYtLcm4VK`S<5(Pyh1Xzj?+%+m(J$<87VZ8VIT z?y45f(v!LDL^q`?*wwK|{i-&M;<5KryR#q_Mvq7(xu;~F73b?65MRa2?CTgAg|X(A zSA$}FmD!!bn?o#ifl4tu71DphWff$nIua13OHBq>aH6Znx1?fCYtCs~eaq%h3M?Hj z4jqND-F5+ZT1GtBw%H~d+_G%jUtx5Z;TK!aXzWsN{^Ds_Z?J3`Z(usqWBron{nH`I z#8x#jqc-66X(WBW&|nUPZi5*&K9K4l?fgz8%9G42b0-s#70(jZvjh%au-Y9VVHy>X za*crCQ=Xa2gVAl3Y^v7!dXFw-(MGMTd%$Pcm!Cd|?SVg4@Ph8ji!gi8kX%({F~06M zKg^2`SZ5HY9XRV!I;LVLlsP*x=rf?%8Wl-R6e4R$U`U+#qWhLKC}vhrY~ z_8EK>{TA}*$I|;3dwbD&Vp8f&!jlj^zAsjp0ZR@Hbg7v#19pHUBc60{^}J+ZUlJo5 zXXj_9hwUq`-#WJJceT8{U5ykh^f_CoN?y*UoxJmiSX+QA_(5-7^Z4bmlaCAdm@C@% za<^B65zPO#^rxhXX~+Y!e%gjmuiQ*`Qx`e>!_6TI5|J^;9X!Z^*ysl=;_2v#Y1(&5 z5|WXA+6NVp3N-H%n-+(ityoZNCi|r9HwC|39I?h|GQ+TboBrFBrDCn&}bc`}AG{e=xZ(KOh=(w)* zkWH_a?xxzssxwc{~cLm!r>Xq0-& zM7V%9^qx--6{wj85TOUms@}%RR?VD9Z+SOpM6K-$XlH&`T-%P$Ua__4e6>!_#hT~I zgYA10QrC=-`n2;*`NZ(r^yw9urwvOzI5#>OunmF!qe~=P{u3!EOYZy+UBdmNyc>@3 z9bV{S3BPuO;$wD2b!kfV$w|9YvWhm4wUw~Q zS4h^Dd$hfDgZC8JwbextX^PH+OJp)zC;LMVaQB8^mLx#~2kEpGr`{ruADUR>0v_iz zl10}qNrAP>`UTy3PP@b}#Kww>o8X(_X3uP<{J#ELN+kX3KRdvDOQKYs7Mw}=%hqPK z@q10fkR5CSsBYa4qmSpBL^isJdYP~N)>%dQC1$z^TyJ@mPi$>ZkMTLVKTeXkatVeN zw@biwV7^Eyy%Zhkd4HKsmXXp_X;-veMvW0#(R-pIvX6gW{Fk|{WV{uj!dCQOvuRf* z)ZegWSX-YhDNvi}aSEKN$>_mLnf|LfSjlLR8!aApPxJce0fZxH=OCv49e{I*VCnUT zVSMw;l`syGBE+;hgf7ue@Vz0aj%eiwP$}E)`Bp0Krc>oYVm4|A>;K>eb9meB?cRHo zeNQeb)#knl_fX}Wz`6c(U=O!*Bk9WpU4p0`H6CoGc$d{t-t*6I%bVFm*k2Zc2KsKB z3)@VsStq`osdg4i!p~%|m9T3Va_R~&vaflDK{lF-R(&(4%0@Wx*i~w5u}^5kx{!A0 zKDswZfzN1n&+_c}oe->`q0hAE3;)uuzGZItmyh_!z7rCt^`@VmN|5%YSD0gQKYG!C zVT_9gr!>%e+nm$J-{!}PEWd*HI$zcRX~ow089eNMxX+h$`g__xmH9V>Uu?FW zNZmh6Mv(gf=0458sEqLCXW6p@9wg2-8 z>gN0D8Y>f1p=*&(TU@Ew1#0DCfprgK*8g|l(a8voiViq3sd51+X zlM}uec5cW0T$MGb%X6_0+wHHf;9im1pT7hCV_Ywm^H!DfK#f}HcTk1ZH>Bjwn-lqO z`2Bj5eUiXy`5+yNP-5&orIuq%i+!W1Wyxr*oK%)l z<_7BI@3wc9!%Z&XZd0_Wumt5um?6o-uEb|qtTqSL`k zj80i3pDp_t`YoG&dqkCw_AnbOLYxNYx-8`=44Gmmnhc7s$iCJJNLC{!joDHB)Y{#a zeE9H?nvcd``Mmek!<&qkXhGuLkJPZ>Y6RgZkRFi$wdth}Cy*s#8Wq*`)ILlFVjh|H z$C}jpA|s?ca`zi(3dV7GT%mYdl2T{8JknhwePS*xnV#&?A-TZ&Shl(1{0Z&sQ%AuN2J%>=I0hMB3%RJpu8fR{P{D9clSwPixVABn@8s-dngHw`-QS zmE-=50~MiIGXG}8ne;jV^X!USa7>HH)(SZC@9CE64lwOVH9jY4rjW!P`Hkqw{o%D_>S%+z(Qnfq z4Ep;DtD$mo%ey!qkI1~OGr_W;_Xo2VDYGS-p-d7ti0z&{z}tywW})Eq_U@Y z^rhqRH8fF&_q)WV()6VpgfX{u@u>txv`dFDUzwo@Jm^2_EAjdDRnxh-syRdu#A!+? z314zW8LbpbAv^bza5F;)@hg8>7E^l^IH!Vrwc|7cOroA)jiq!>xJ6Y@8UvErPL9#yp z6fA&9b7X<$U6h>NwGAeK+Z-(mO^vB^YMFW2Kk3)dw*W4cuQF9jeM~vxYfV{3@K071 z3~Ah*dmQgq2#Gvs(oRRj$yzG;6!V-tkD+{DJ9sRRImwEC<)gm z^(|>tH4D+tzbNIkn?oTk!R#H9!PBQ>V1Ci~>CWc~o7>&s9?_KLcvJ~Q>Z>$+;DF_30)LtyR<)N^yDCE^3os80?I`fSX>E{de2d~ zivtUd+CD02`LSUT%$@IAPaMr>#@B$u`!9uGyi7V64nZ!fC|2VGlfPU8F8)4elG*_R zu&Oa+wR^$Blkx;xU-mLpwc$vA6K}of6Da9N{F!}?H`MByV$GrTpSqUo+yU=V^QL|SgQs^6IJ40p;#y2W;O;fu>SQJwtW zav2#Z`d$ed%^_BcG(w+&zW(2J@f%6($r8QqzCp0iB>*8U?<-QTxev+vR?W=#)*pSC2xU6-5DHMx;+Km{{P*YGZ3F{Z66v0IzyM z9+gF{lH_>Wn7mDwr-5=i4~HN8V8BJtE^mMGP5zYE^>C2 z+Y~$}uTCa{Tf}?-4ZDf&E&D9{*I!l1q?HQ{`av$pAI8@5yUje=ScMU z6d})*{9ANO{Ku`PRNmA?JO7!uUHSMT1J^Ua-gfJtv-lcH7~5f{aX?6-s7Tu>4bCHb z4&wO--7M*^R z<*cw)GkUTw7txs0U(Y~(d0E*LR=GAKW*~dWzL@Aa6&3l+ni3w@i~^E-H=FB_{t=Y)9~KCo`K`unT`kV^%=P2l=(AA9ThF ziq)=wBcMY*#3faZ*qiOx63zKx{<>>WOX*b)o|AqI{$?8wA7RKRVamch=$fiB?kPl3 z5go1swc$(QB0u$*Ay_^cW~FUh7H2&`EI;Py!HXBFC25!ii+LJp)phN}-s|%1$yc)p z+d1)`HvvPxpYMK~LzFs`FiB;cax(vx{8R?jFIj-O`P;pWFeiykAt>@Tem(OBn#f2w zQfmbuxb>tI)o^h;-w%;yTXd%Td#UVl_tNI7+g-RZE@ z_=C2LhIF^W3%}p;H2*5(E;oyu5*hOim$fv+lRxcvp&CJz`sl;F=Bd7gsf8HGGFj6> ze_ot&ga(MD(WmFGoJQ)}8Tf8KmVH8Akq2J5X*(|j;OH^ay`B4{A#>FM5LlX?G)(tz zOcB{mkO%#BWMnb?v}g6z!IOc8y#ExhO@)XgWwZc3?vc63!vbxoGLcdC32g$i=DD^3 zIb=pJRW=OYE!QTRp;Mke#<~7WtLiV-eD1RNI*7QQc|3{FOV3A-|7j}K#HkcwRd*Cv za#?PrkG!MOc7(~&n<~w~ZqZj1q(r7o3@MAP zTEcr2%-al^Z=ELi5uU$P)$XwTZ&dJskYgmMZQ4-b`sLExxS^tCQiHfqmcaDs3w^@l zoFZzOX-zq?B9qyQIp)aA-7O!Fv$49R>>x!OhL7wKklP9p->0TU1n9!2bck_(h57o0 z=xE42Pw?ov%olPv*O?qYuh$9C5Q_A~x&mGW){-HL$(7imBmjCJ_EQ0Srk?$l2KG#` z8k78gm|1bIg?E#LA3D8{YWJ&r$&@>3>}=}vurTi|g9@I=5nNl_Rd}D$EPw}#27H~4 z_RsEe*szz{ zXjf!pq!N@NjM;b_e+w+?#2xUZr$v16!HquQ?EAS&JW7H;eEJvNqkvte?DVTRE9-q= zbP5CE{%au0uhQld8~x-jRU0Rh*L$Ln5@_&AV|rtjcMp(%16BjBi|MopUXY4}+-7c; z_fPKWmC6hmsUViP^mX3si}`)|Q+UMl!{K+w6fdNMcroOxtU!4Bg52*M8v3w5Ob+YS zBRYHHU4|NRt`kTJ`U4pFDmJl(vf(M(+DF|t(ctm5GGG$yv{PFW3#$QhxcWIpnDM#i$C_$-G`l&45 zRzPGl`KX|66b_@;j$dRQ%xHFUTiM`DY9vk*tn(zH;{0cx*o!O^wE{T=p zsC-sM4sy+>o4Joz^LYM6hUeO|0H3seuQ1^AcbJ9sx!LS6$oQMBKdnt?^kSSXb$FXG5Kiuhv3bApUd+)r00p=p$DvvEr=K|j7 zUS4tZ7<+1CsJ%OA@yXRRZ1-EkA}>GBrIfvo3u&MOtkfl6Dm0QZbrD0z!`)oLo1|b) zu^LT4R~-$?ot_Sppkt-ZUC48IO!bf%vqlTp2!{}W=KwJ32#=tp?jJZBia)m#6~6$m zh&YYwpS>Gk2Y`dTn&!WEiv!bJ?d}J5e9ji#11{L|Ep5+zD<0?QM`SY9iP@b|U(!aG zH>6-Ohnfy`RFnfi@hcfBzCFfXC$$kX+)WrUsV0EO$#z(dL3bElhhNiOIF@pM7+M?!t1Et{ zDWqD3NbL#58|tC;f;rcvoX}%@_5y>aPGHr^5Y_?e>|{bWI!Iei)>+KRHkWpxg4=ly zJCqBSt)CyNT-aznXwavy2AQ7qEQppqm^PJK^-1NL+iYQjsNHoGd+1n$^`WZcVh%am z=U_Fy8-1!w-I(OC9QB{V>v4p@){u~$W%+SXcaJn`4U7{Y{Un<$b?lcq z12rV5e$x&f*P*fXrRs~%JhR}1S;Dw{A{(g}yM;|N+lWRpnoja0%m3QFG4e`~XcDz(_$ z#)Mk+h{w&Gre5j+vi*6b*=Sx)v_t&~FCLI_JsMkpv_jKn(dupNV9|VSL^| z(S$5Byr*UsS=DA28dI2;h6>{q?+Ccg55S46>ZmZke*4yLmV%HFCdr^u0Y@rC3*8_) zi@|wmw0x?LQ3T&)Y>x4D^!_<=gHC@fC{}X<@k6Ic3Sti=7`h^xCce2DgfuZ6Rc#7o z93%w*-EoPU&>7sjgXzN@KETMx4qj%yE4{40N{C^ez|4v`{w#~;^9Fyh$+cOXH*kN; zytw4-tBU!#c#e6fU4tnsU0)0BvjdL)zGncY(BK9PIkin?Kbn|=4BB-Q zHC#l#cgV{P_IHu{YSM2|`oS{z3R(9U8Y01X4)xPBgmDuNg=Nn>q=s0mD7s&bhx3dp zuvqbJLhSV=C@FzN*ar}imU}F6BT{%`lJ5|Ze!x?(kU^SRg!?^d9~N4C;IIb3$diAF zDy$8)+BZIw^m37pbdi_t&-0f8U!FRQFqEu1?XSLat0;k^?b!Dk8 z>TX0ogq+H8>}vXfk}$C-LOSlAy%e#YC~)7T=h@PZ_lKPT(anqLW@cHquvwB`%lHT} z<%sovi7|iz+xcH}=zn#lQt_^jWnX(=bFk*c{+m*xyVpCrD;BJ*Gf(~pQ^d%>+k3U3 zefQI;)|u|ekMDx9!_H=o539b1@)jh${`f{sPFVe6ULNw&ll6xLAijQ;-S^%|@3m1Y z@;G_#RhE1m3~{O|!p8#$m7|^Zw;n+R73I5ImLA{PVNZb_1uw4Mf?&R#kDnE!S!gMW z076KtFUZn~#ooGY=FV`|iymU5!AvKf%gzao?P<~e976g}g?r!w7wwDsnIBk+2Y|i| zNXj-pR-;Vj_EAL-=iFBM1=dsay&CMqD$`QZPqKapl3{cZdFq~>J`zjaKB=j`4g_sG zWQ^14iee$Ry(On71rL%ptqmIIMa-6FH1@;x`zDSI809EO>@0!oZh60R^5sOc{4ZyUXW#0?R+%`tSZ~e^fO4-?J?|j<+nh)3kEvr5E!tcJ_Ou+!V1$(PB zU=zIS*e3)AOAD!mbFd1f#kw6lV=qu)!6M|&=<4I}hmtK|;er23J&Bxd9GnW2YCkcbx(ueEtfu4_V z{%u*cla*KWrl(Uv)X4ku9{CL-pl)s6C~>;lq@k#fAGgY9+6ntJ!_zt3f>(svieyFD zRHO%<#)GuRMQH>_ybiwfD7lB#3#_+y+s5@t9}K?gVHC5vi~oV1ez|MFo0%B4G_;dT zOPFHN%Re-q=@`#OIzy&7@@E@xk;tQ&mHw}t0v5+h+?rkIyjXSno6@;=z^sjQUd1BS zzvtfn@k3;~<@SGH{_%EkktVp85v^bcwq*(Le;n0=Z+GZu=!}LA{{6#5rjY;kY7y%W VO{xx70-m+Q;OXk;vd$@?2>{vzGI9U_ literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png new file mode 100644 index 0000000000000000000000000000000000000000..de7143eb0507419e39da91e2ee6cd717c4714586 GIT binary patch literal 17630 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 HoD!M
    textBox/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare} | Image, Textbox, Submenu | Defines the anchor layout type for an image or a text box. Can be used to transform an inline image to an anchored image, or the reverse. Note: If an image is moved from an anchored mode to inline, the image is inserted at the beginning of the current selected text. "inline" value is not supported for text boxes | -| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box \| header-box \| footer-box} | Image, TextBox, Submenu | Defines the area relative to the absolute position of an anchored image or text box. If the element is relative to the header-box/footer-box which is not visible on a page, the element is not displayed. This action will reset horizontal and vertical offsets to 0. Page mode only, not enabled for inline images. | -| anchorPage | {image \| textBox}/anchorPage?value={all \| current \| currentSubSection} | Image, TextBox, Submenu | Defines the page(s) where the selected image or text box is displayed (not enabled for inline images). Page mode only. | -| anchorSection | {image \| textBox}/anchorSection?value={all \| current} | Image, TextBox, Submenu | Defines the section(s) where the selected image or text box is displayed. (not enabled for inline images). Page mode only. | -| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top \| center \| bottom} | Image, TextBox Submenu | Defines the vertical alignment of the image or text box, relative to the anchorOrgin for an image or text box in page, or to the layout box for an image or text box in embedded mode. This action will reset the vertical offset to 0 (not enabled for inline images). Note: See "verticalAlign" action for the vertical alignment inside the text box | -| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | | -| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | For menu commands only. Default submenu for all background attributes. | -| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background clipping box (default target is paragraph). Paper-box targets document and section only. | -| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target background. | -| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Sets the display mode of images used as background. | -| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Clears target background image. (default target is paragraph) | -| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image origin box (default target is paragraph). Paper-box targets document and section only. | -| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image horizontal alignment (default target is paragraph). Ex: paragraph/backgroundPositionH?value=left | -| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image vertical alignment (default target is paragraph). Ex: paragraph/backgroundPositionV?value=top | -| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image repeat mode. (default target is paragraph) | -| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image width (default target is paragraph). Ex: paragraph/backgroundSizeH?value=100%. section/backgroundSizeH?value=cover | -| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell}/backgroundSizeV?value={ \| \| auto} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image height (default target is paragraph). Ex: paragraph/backgroundSizeV?value=50%. Ex: section/backgroundSizeV?value=40pt | -| bookmark | bookmark?index= | Submenu | Selects the Nth bookmark. Ex: bookmark?index=2 // selects the second bookmark | -| borderCollapse | borderCollapse | Paragraph | Collapses selected paragraph borders and interior margins. | -| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target border color (default target is paragraph). Ex: paragraph/borderColorLeft?value=green | -| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Submenu | Changes target border radius (default target is paragraph). Ex: paragraph/borderRadius?value=4pt | -| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Default submenu for target borders. | -| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border style (default target is paragraph). Ex: paragraph/borderStyleLeft?value=double. Ex: outside/borderStyle?value=solid //set selected paragraphs exterior borders to style solid. Ex: inside/borderStyle?value=none //remove selected paragraphs interior borders | -| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border width (default target is paragraph). Ex: paragraph/borderWidthLeft?value=4pt | -| columnCount | {section/}columnCount?value={1<=number<=20} | Document, Section, Submenu | Number of columns in the current document and/or section. (default target is doc) Ex: section/columnCount?value=3 | -| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document, Section, Submenu, showDialog | Color for the decorative line between document or section columns. Ex: columnRuleColor?value="#FFFFFF" | -| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Section, Submenu | Style for the decorative line between document or section columns. Ex: columnRuleStyle?value="solid" | -| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document, Section, Submenu | Width of the decorative line between document or section columns. Ex: columnRuleWidth?value="2pt" | -| columns | {section/}columns | Document, Section, Submenu | Only for a menu item: creates automatically a complete Columns sub-menu with all column actions sub-menus (except insertColumnBreak) | -| columnSpacing | {section/}columnSpacing?value={CSS length} | Document, Section, Submenu | Space between two columns in the current document and/or section. Ex: columnSpacing?value="1cm" | -| deleteColumns | deleteColumns | Table | Deletes all selected columns. | -| deleteRows | deleteRows | Table | Deletes all selected rows. | -| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraph, Image, Submenu | Removes the Nth stylesheet from the stored stylesheets for the selected target (default target is paragraph). Menu item name is replaced at runtime with style sheet name. | -| direction | direction?value={ltr \| rtl} | Paragraph, Submenu | Paragraph direction. | -| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Displays formula references as a # symbol. Can only be used when formulas are displayed as references. | -| doc | doc | Document, Submenu | Default submenu for document body layout (embedded mode attributes or default attributes for sections – but for margin which is reserved for embedded mode only). | -| dpi | Modifies the dpi of the current view (independent of the document attribute wk dpi used internally for pixel conversion <-> points). | Submenu | Change view dpi. Ex: dpi?value=72 | -| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable } | Table, Submenu | Defines how the table is displayed when its datasource is empty. | -| fontStyleWrite | fontStyleWrite | Submenu | For menu commands only. Displays default font styles submenu for 4D Write Pro. | -| fontSubscript | fontSubscript | | Toggles subscript font attribute. | -| fontSuperscript | fontSuperscript | | Toggles superscript font attribute. | -| footer | footer | Submenu | Displays the Footer submenu. | -| footer/remove | footer/remove | Footer | Removes the selected footer. | -| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, Submenu | Formula highlight mode for the document. Can be used with a dropdown menu or a button | -| formulaHighlightColor | formulaHighlightColor?value= | Document, Submenu,showDialog | Formula highlight color for the document | -| formulaHighlightReferences | formulaHighlightReferences | Document | Toggles formula references highlighting. Can be used with a check box or a menu item | -| formulaHighlightValues | formulaHighlightValues | Document | Toggles formula values highlighting. Can be used with a check box or a menu item | -| header | header | Submenu | Displays the Header submenu. | -| header/remove | header/remove | Header | Removes the selected header. | -| height | {image \| textBox \| row}/height?value={ \| auto} | Image, TextBox Row, Submenu | Target height. Ex: image/height?value=50pt. For image/width, see width. Ex: row/height?value=12pt | -| headerRowCount | {table/}headerRowCount | Table, Submenu | Sets the number of header rows in a table. Maximum is 5. | -| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Toggles between html wysiwyg mode. | -| image | image | Image, Submenu | Displays image layout submenu. | -| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, Submenu | Sets the display mode of anchored and inline images. Ex: image/displayMode?value=scaledToFit | -| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, Submenu | Image vertical alignment. Ex: image/verticalAlign?value=super | -| insertColumnBreak | insertColumnBreak | Paragraph | Inserts a column break at the selection. | -| insertColumnToTheLeft | insertColumnToTheLeft | Table | Inserts a column to the left of the first selected column(s). | -| insertColumnToTheRight | insertColumnToTheRight | Table | Inserts a column to the right of the last selected column(s). | -| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraph | Inserts a continuous section break at the selection. | -| insertImage | insertImage | | Opens a picture selection dialog box and inserts the selected picture (if any) as a character in the area. | -| insertPageBreak | insertPageBreak | Paragraph | Inserts a page break at the selection. | -| insertRowAbove | insertRowAbove | Table | Inserts a row above the selected row(s). | -| insertRowBelow | insertRowBelow | Table | Inserts a row below the selected row(s). | -| insertSectionBreak | insertSectionBreak | Paragraph | Inserts a section break at the selection. | -| insertSoftHyphen | insertSoftHyphen | | Inserts a soft hyphen at the cursor position. | -| insertTextBox | insertTextBox | Document | Inserts a text box near the current selection, anchored to the first selected page (page mode). | -| keepWithNext | keepWithNext | Paragraph | Links a paragraph with the next so that they cannot be separated by automatic page or column breaks. If applied to the last paragraph of the last cell in a table, the last row of the table is linked to the following paragraph. | -| lineHeight | lineHeight?value={ \| } | Paragraph, Submenu | Paragraph line height. Ex: lineHeight?value=120% | -| layer | {image \| textBox}/layer | Submenu | Default submenu with layering actions for images or text boxes | -| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraph, Submenu | List start number. Ex: listStartNumber?value=10 | -| listStyleImage | listStyleImage/showDialog | Paragraph, showDialog | Opens a file dialog to choose a image to display as list style bullet; it will set also list style type to disc – style to be used if image is not found. | -| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading- zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraph, Submenu | Paragraph list style type. | -| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table/}{inside \| outside/}{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraph, Image, Textbox, Section, Header, Footer, Table, Submenu | Changes target margin (default target is paragraph). Ex: margin?value=4pt //sets all paragraph margins to 4pt. Ex: outside/margin?value=4pt //set exterior paragraph margins to 4pt. Ex: doc/marginLeft?value=1cm //sets left margin to 1cm for the document as used in embedded mode. Ex: section/marginLeft?value=1cm //sets left margin to 1cm for the pages of the first selected section | -| merge | {paragraph/}merge
    cell/merge | Paragraph, Cell | Used with paragraphs: merges paragraphs. Used with cells: merges the selected cells. | -| minHeight | {paragraph \| image/}minHeight?value= | Paragraph, Image, Submenu | Target min height (default target is paragraph). Ex: paragraph/minHeight?value=50pt | -| minWidth | {paragraph \| image/}minWidth?value= | Paragraph, Image, Submenu | Target min width (default target is paragraph). Ex: paragraph/minWidth?value=50pt | -| moveToBack | moveToBack | Image | Moves image to the back. (not enabled for inline images) | -| moveToFront | moveToFront | Image | Moves image to the front. (not enabled for inline images) | -| newLineStyleSheet | newLineStyleSheet?index={1<=number<=number of paragraph stylesheets \| newLineStyleSheet}?value=auto | Paragraph, Submenu | Selected paragraph elements will use Nth stylesheet as stylesheet to use for new paragraphs created on Return or while splitting paragraphs; If value=auto, new paragraphs will use the same stylesheet (default). (menu item name is replaced at runtime with stylesheet name) | -| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row\| cell/}{inside \| outside/}{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom }?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Row, Column, Cell, Submenu | Changes target padding. (default target is paragraph) | -| pageMode | pageMode?value={embedded \| page \| draft} | Submenu | Changes view mode. Ex: pageMode?value=page | -| pageOrientation | {section/}pageOrientation?value={landscape \| portrait} | Section, Submenu | Changes document or first selected section page orientation (if section is not specified, it will apply to all sections otherwise to the first selected section). Ex: pageOrientation?value=portrait //change orientation to portrait for the whole document. Ex: section/pageOrientation?value=landscape //change orientation to landscape for the first selected section | -| pageSize | pageSize?index= | Submenu | Changes document page size: number is Nth page size in the list of available pages sizes. The list contains the current printer page sizes, ISO page sizes and the custom page sizes defined by the user. | -| paragraph | paragraph | Paragraph, Submenu | Default submenu for paragraph layout. | -| paragraph/avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | Allows/disallows page breaks inside paragraphs. | -| print | print | Document | Prints document as rendered in page mode with view settings of the focused 4D Write Pro area. | -| refreshImages | refreshImages | Image | Reloads images from the network for images with URLs. | -| removeSoftHyphens | removeSoftHyphens | | Removes all soft hyphens in the current selection (if the selection is empty, removes soft hyphen before or after the caret if any) | -| row/avoidPageBreakInside | row/avoidPageBreakInside | Table, Row | Allows/disallows page breaks inside table rows. This action is disabled if: the current selection does not contain a table the table does not allow page breaks the table is inside a header or footer Note: If several tables are selected and some of them don't allow page breaks, this option will be enabled but only applied to the tables that allow page breaks. | -| section | section | Section, Submenu | Default submenu for page layout for the first selected section. | -| section/differentFirstPage | section/differentFirstPage | Section | Section has different first page or not. | -| section/differentLeftRightPages | section/differentLeftRightPages | Section | Section has different left and right pages or not. | -| section/name/showDialog | section/name/showDialog | Section, showDialog | Displays a dialog allowing to enter the first selected section name. | -| section/remove | section/remove | Section | Deletes the first section that intersects the user’s selection regardless if the user has selected one or multiple sections. Disabled when only one section remains in the document. | -| section/reset | section/reset | Section | Resets all first selected section attributes to default attributes - which are inherited from doc attributes for background, border and padding (same as for embedded mode) and 2.5cm for page margins. First selected section column properties are also removed (so only default section properties will apply). | -| split | {paragraph/}split
    cell/split | Paragraph, Cell | Used with paragraph: splits paragraph. Used with cells: splits the selected cells (only cells that have been already merged may be split). | -| styleSheet | {paragraph \| image/}styleSheet?value={1<=number<=number of target style sheets} | Paragraph, Image, Submenu, showDialog | Applies Nth stylesheet to the selected target elements. With dialog, new stylesheet will use current attributes from the first selected target. (default target is paragraph) Ex: styleSheet?value=1 //apply first paragraph style sheet to the selected paragraphs and set it as paragraph stylesheets. | -| styleSheets | {paragraph \| image/}styleSheets | Paragraph, Image, Submenu | Default submenu for editing target stylesheets. | -| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, Submenu | Defines the character used as decimal separator by decimal tabulations. | -| tableAlign | tableAlign?value={left \| center \| right}
    or
    table/tableAlign?value={left \| center \| right} | Table, Submenu | Specifies horizontal alignment for a table. | -| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Allows/disallows page breaks inside tables. Disabled if: the current selection does not contain at least one table the table is in a header or a footer | -| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Toggles between display/not display of carry-over rows (see Carry-over rows). | -| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraph | Paragraph text alignment (initial=use right for rtl or left for ltr direction). | -| textBox | textBox | Submenu | Submenu with all actions available for the focused/selected text box | -| textBox/remove | textBox/remove | TextBox | Removes the selected text box | -| textIndent | textIndent?value= (may be negative) | Paragraph, Submenu | Paragraph text indentation (first line indentation). Ex: textIndent?value=2cm | -| textLinethrough | textLinethrough | Submenu | For menu commands only. Linethrough submenu (with style and color). | -| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | Submenu, showDialog | Ex: textLinethroughColor?value=red | -| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textLinethroughStyle?value=dotted | -| textShadow | textShadow | Submenu | For menu commands only. Default submenu for text shadow (with color and offset). | -| textShadowColor | textShadowColor?value={ \| none} | Submenu, showDialog | Changes shadow status or color for characters. Ex: textShadowColor?value=green | -| textShadowOffset | textShadowOffset?value= | Submenu | Only length in pt is supported. Ex: textShadowOffset?value=2pt | -| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | Submenu | Formats text. Ex: textTransform?value=capitalize | -| textUnderline | textUnderline | Submenu | For menu commands only. Underline submenu (with style and color) | -| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | Submenu, showDialog | Ex: textUnderlineColor?value=red | -| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textUnderlineStyle?value=dotted | -| updateStyleSheet | {paragraph \| image/}updateStyleSheet | Paragraph, Image, Submenu | Updates first selected target stylesheet with first selected target current attributes (default target is paragraph) | -| userUnit | userUnit?value={cm \| mm \| in \| pt} | Submenu | Changes document layout unit (will be reflected on rulers). | -| verticalAlign | {paragraph \| row \| column \| cell \| textBox/}verticalAlign?value={top \| middle \| bottom} | Paragraph, Row, Column, Cell, TextBox, Submenu | Paragraph vertical alignment. Ex: verticalAlign?value=top. The effect depends on the minHeight value of the paragraph. | -| view | view | Submenu | For menu commands only. Default submenu for view settings. | -| visibleBackground | visibleBackground | Document | Shows/hides background, anchored pictures and text boxes | -| visibleEmptyImages | visibleEmptyImages | Document | Shows/hides a default black rectangle for images that cannot be loaded or computed (empty images or images in an unsupported format). | -| visibleFooters | visibleFooters | Document | Shows/hides footers. | -| visibleHeaders | visibleHeaders | Document | Shows/hides headers. | -| visibleHiddenChars | visibleHiddenChars | Document | Shows/hides hidden characters | -| visibleHorizontalRuler | visibleHorizontalRuler | Document | Shows/hides horizontal ruler. | -| visiblePageFrames | visiblePageFrames | Document | Shows/hides page frames. | -| visibleVerticalRuler | visibleVerticalRuler | Document | Shows/hides vertical ruler (Page mode only). | -| visibleTableBorders | visibleTableBorders | Document | Shows/hides internal and external table borders as dashed lines where no borders are defined. | -| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraph | Toggles between widow and orphan control mode. | -| width | {paragraph \| image \| textBox \| column/}width?value= \| auto | Paragraph, Image, TextBox, Column, Submenu | Target width (default target is paragraph). Auto value not available for text boxes (converted to 8 cm) and columns. Ex: image/width?value=50pt | -| zoom | zoom?value={25% <= percentage in Css <= 400%} | Document, Submenu | Changes document view zoom. Ex: zoom?value=120% | - -### その他のアクション - -4D フォームで使用可能な他の複数の標準アクションも、4D Write Proエリアで使用することができます: - -* *編集アクション*、例えばコピー/ペーストアクションなど -* *フォント* アクション、例えばfontBold あるいは fontSize など -* *動的な式* アクション。挿入された式などを管理することができます。 -* *スペルチェック* アクション。 \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md new file mode 100644 index 00000000000000..1d38388f241997 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md @@ -0,0 +1,179 @@ +--- +id: standard-actions +title: 標準アクション +displayed_sidebar: docs +slug: /WritePro/standard-actions +--- + + +4D Write Proエリアのユーザーインターフェースは、多様な**標準アクション**を使用して管理することができます。標準アクションは次のようなものに割り当てることが可能です: + +* **メニューバー**あるいは[Dynamic pop up menu](../../commands/dynamic-pop-up-menu) コマンドを通して利用可能なメニューコマンド +* ポップアップ・ドロップダウンリストや階層ポップアップメニューを通して利用可能なリスト項目 +* ボタン、チェックボックス +* あるいは[INVOKE ACTION](../../commands/invoke-action) コマンドによって実行 + +インターフェースオブジェクトに割り当てた場合、標準アクションはコンテキストに応じてオブジェクトの有効化/無効化を管理します。詳細な情報については*標準アクション* の章を参照してください。 + +4D Write Proエリアでは二種類のアクションが利用可能です: + +* 4D Write Pro 特有の、4D Write Proエリアに対してのみ使用可能なアクション +* フォント、式、スペルチェック、編集アクションを含む、4D Write Proエリアと他の4Dエリアで使用可能な*その他のアクション*(*標準アクション*参照)。 + +### 4D Write Pro アクション + +4D Write Proエリアでは以下の標準アクションが利用可能です。 + +**注:** + +* 自動メニュー/リストを表示するアクションは、メニューコマンド、ポップアップ/ドロップダウンリスト、あるいは階層ポップアップメニューオブジェクトにのみ割り当て可能です(*サブメニュー* 参照)。 +* チェックボックスと3Dチェックボックスはステータスアクション("section/differentFirstPage" あるいは "visibleHorizontalRuler"など)を割り当てて下さい。スリーステートオプションは標準のチェックボックスでのみサポートされます。 +* セクションのアクションステータスは、常にその選択されたセクションの実際のステータスと一致します(属性が親セクションあるいはデフォルト属性から継承される場合にはステータスが継承されます)。選択されたセクションのステータス(セクションに現在適用されているステータス)を反映する必要があるからです。しかしながら標準アクションを使用してセクション属性を変更した場合には、選択されたセクションの属性のみが上書きされます。 +* *サブメニュー*: 引数を渡さず、メニューコマンド、ポップアップ/ドロップダウンリスト、あるいは階層ポップアップメニューに割り当てて使用した場合、これらのアクションは自動サブメニュー/リストを表示します。例えば、"backgroundColor"アクションをメニューコマンドに割り当てた場合、このメニューコマンドをランタイムで選択するとBackground color サブメニュー項目が表示されます。"zoom"アクションを階層ポップアップメニューに割り当てた場合、このメニューには既定のズーム値の一覧が自動的に含まれます。これらのアクションはボタンに対しては割り当てられない点に注意してください。 +* *showDialog*: アクション名に"/showDialog " の文字列を追加することで、アクションに割り当てられた標準のダイアログボックスを表示します。例えば、"paragraph/styleSheet/showDialog"と入力することで新しいスタイルシート名を入力する入力ダイアログを開くことができます。 + +| アクション名 | シンタックス | 割り当て可能オブジェクト | 詳細 | +|---|---|---|---| +| anchorHorizontalAlign | {image \| textBox}/anchorHorizontalAlign?value={left \| center \| right} | Image, Textbox, Submenu | Defines the horizontal alignment of the element, relative to the anchorOrigin for images/text boxes in page, or to the layout box for images/text box in embedded mode. This action will reset the horizontal offset to 0. (not enabled for inline images). | +| anchoring | {image \| textBox}/anchoring | Submenu | Default submenu with anchor settings actions for images or text boxes | +| anchorLayout | image/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare \| inline}

    textBox/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare} | Image, Textbox, Submenu | Defines the anchor layout type for an image or a text box. Can be used to transform an inline image to an anchored image, or the reverse. Note: If an image is moved from an anchored mode to inline, the image is inserted at the beginning of the current selected text. "inline" value is not supported for text boxes | +| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box \| header-box \| footer-box} | Image, TextBox, Submenu | Defines the area relative to the absolute position of an anchored image or text box. If the element is relative to the header-box/footer-box which is not visible on a page, the element is not displayed. This action will reset horizontal and vertical offsets to 0. Page mode only, not enabled for inline images. | +| anchorPage | {image \| textBox}/anchorPage?value={all \| current \| currentSubSection} | Image, TextBox, Submenu | Defines the page(s) where the selected image or text box is displayed (not enabled for inline images). Page mode only. | +| anchorSection | {image \| textBox}/anchorSection?value={all \| current} | Image, TextBox, Submenu | Defines the section(s) where the selected image or text box is displayed. (not enabled for inline images). Page mode only. | +| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top \| center \| bottom} | Image, TextBox Submenu | Defines the vertical alignment of the image or text box, relative to the anchorOrgin for an image or text box in page, or to the layout box for an image or text box in embedded mode. This action will reset the vertical offset to 0 (not enabled for inline images). Note: See "verticalAlign" action for the vertical alignment inside the text box | +| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | | +| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | For menu commands only. Default submenu for all background attributes. | +| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background clipping box (default target is paragraph). Paper-box targets document and section only. | +| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target background. | +| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Sets the display mode of images used as background. | +| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Clears target background image. (default target is paragraph) | +| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image origin box (default target is paragraph). Paper-box targets document and section only. | +| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image horizontal alignment (default target is paragraph). Ex: paragraph/backgroundPositionH?value=left | +| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image vertical alignment (default target is paragraph). Ex: paragraph/backgroundPositionV?value=top | +| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image repeat mode. (default target is paragraph) | +| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image width (default target is paragraph). Ex: paragraph/backgroundSizeH?value=100%. section/backgroundSizeH?value=cover | +| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell}/backgroundSizeV?value={ \| \| auto} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image height (default target is paragraph). Ex: paragraph/backgroundSizeV?value=50%. Ex: section/backgroundSizeV?value=40pt | +| bookmark | bookmark?index= | Submenu | Selects the Nth bookmark. Ex: bookmark?index=2 // selects the second bookmark | +| borderCollapse | borderCollapse | Paragraph | Collapses selected paragraph borders and interior margins. | +| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target border color (default target is paragraph). Ex: paragraph/borderColorLeft?value=green | +| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Submenu | Changes target border radius (default target is paragraph). Ex: paragraph/borderRadius?value=4pt | +| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Default submenu for target borders. | +| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border style (default target is paragraph). Ex: paragraph/borderStyleLeft?value=double. Ex: outside/borderStyle?value=solid //set selected paragraphs exterior borders to style solid. Ex: inside/borderStyle?value=none //remove selected paragraphs interior borders | +| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border width (default target is paragraph). Ex: paragraph/borderWidthLeft?value=4pt | +| columnCount | {section/}columnCount?value={1<=number<=20} | Document, Section, Submenu | Number of columns in the current document and/or section. (default target is doc) Ex: section/columnCount?value=3 | +| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document, Section, Submenu, showDialog | Color for the decorative line between document or section columns. Ex: columnRuleColor?value="#FFFFFF" | +| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Section, Submenu | Style for the decorative line between document or section columns. Ex: columnRuleStyle?value="solid" | +| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document, Section, Submenu | Width of the decorative line between document or section columns. Ex: columnRuleWidth?value="2pt" | +| columns | {section/}columns | Document, Section, Submenu | Only for a menu item: creates automatically a complete Columns sub-menu with all column actions sub-menus (except insertColumnBreak) | +| columnSpacing | {section/}columnSpacing?value={CSS length} | Document, Section, Submenu | Space between two columns in the current document and/or section. Ex: columnSpacing?value="1cm" | +| deleteColumns | deleteColumns | Table | Deletes all selected columns. | +| deleteRows | deleteRows | Table | Deletes all selected rows. | +| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraph, Image, Submenu | Removes the Nth stylesheet from the stored stylesheets for the selected target (default target is paragraph). Menu item name is replaced at runtime with style sheet name. | +| direction | direction?value={ltr \| rtl} | Paragraph, Submenu | Paragraph direction. | +| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Displays formula references as a # symbol. Can only be used when formulas are displayed as references. | +| doc | doc | Document, Submenu | Default submenu for document body layout (embedded mode attributes or default attributes for sections – but for margin which is reserved for embedded mode only). | +| dpi | Modifies the dpi of the current view (independent of the document attribute wk dpi used internally for pixel conversion <-> points). | Submenu | Change view dpi. Ex: dpi?value=72 | +| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable } | Table, Submenu | Defines how the table is displayed when its datasource is empty. | +| fontStyleWrite | fontStyleWrite | Submenu | For menu commands only. Displays default font styles submenu for 4D Write Pro. | +| fontSubscript | fontSubscript | | Toggles subscript font attribute. | +| fontSuperscript | fontSuperscript | | Toggles superscript font attribute. | +| footer | footer | Submenu | Displays the Footer submenu. | +| footer/remove | footer/remove | Footer | Removes the selected footer. | +| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, Submenu | Formula highlight mode for the document. Can be used with a dropdown menu or a button | +| formulaHighlightColor | formulaHighlightColor?value= | Document, Submenu,showDialog | Formula highlight color for the document | +| formulaHighlightReferences | formulaHighlightReferences | Document | Toggles formula references highlighting. Can be used with a check box or a menu item | +| formulaHighlightValues | formulaHighlightValues | Document | Toggles formula values highlighting. Can be used with a check box or a menu item | +| header | header | Submenu | Displays the Header submenu. | +| header/remove | header/remove | Header | Removes the selected header. | +| height | {image \| textBox \| row}/height?value={ \| auto} | Image, TextBox Row, Submenu | Target height. Ex: image/height?value=50pt. For image/width, see width. Ex: row/height?value=12pt | +| headerRowCount | {table/}headerRowCount | Table, Submenu | Sets the number of header rows in a table. Maximum is 5. | +| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Toggles between html wysiwyg mode. | +| image | image | Image, Submenu | Displays image layout submenu. | +| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, Submenu | Sets the display mode of anchored and inline images. Ex: image/displayMode?value=scaledToFit | +| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, Submenu | Image vertical alignment. Ex: image/verticalAlign?value=super | +| insertColumnBreak | insertColumnBreak | Paragraph | Inserts a column break at the selection. | +| insertColumnToTheLeft | insertColumnToTheLeft | Table | Inserts a column to the left of the first selected column(s). | +| insertColumnToTheRight | insertColumnToTheRight | Table | Inserts a column to the right of the last selected column(s). | +| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraph | Inserts a continuous section break at the selection. | +| insertImage | insertImage | | Opens a picture selection dialog box and inserts the selected picture (if any) as a character in the area. | +| insertPageBreak | insertPageBreak | Paragraph | Inserts a page break at the selection. | +| insertRowAbove | insertRowAbove | Table | Inserts a row above the selected row(s). | +| insertRowBelow | insertRowBelow | Table | Inserts a row below the selected row(s). | +| insertSectionBreak | insertSectionBreak | Paragraph | Inserts a section break at the selection. | +| insertSoftHyphen | insertSoftHyphen | | Inserts a soft hyphen at the cursor position. | +| insertTextBox | insertTextBox | Document | Inserts a text box near the current selection, anchored to the first selected page (page mode). | +| keepWithNext | keepWithNext | Paragraph | Links a paragraph with the next so that they cannot be separated by automatic page or column breaks. If applied to the last paragraph of the last cell in a table, the last row of the table is linked to the following paragraph. | +| lineHeight | lineHeight?value={ \| } | Paragraph, Submenu | Paragraph line height. Ex: lineHeight?value=120% | +| layer | {image \| textBox}/layer | Submenu | Default submenu with layering actions for images or text boxes | +| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraph, Submenu | List start number. Ex: listStartNumber?value=10 | +| listStyleImage | listStyleImage/showDialog | Paragraph, showDialog | Opens a file dialog to choose a image to display as list style bullet; it will set also list style type to disc – style to be used if image is not found. | +| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading- zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraph, Submenu | Paragraph list style type. | +| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table/}{inside \| outside/}{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraph, Image, Textbox, Section, Header, Footer, Table, Submenu | Changes target margin (default target is paragraph). Ex: margin?value=4pt //sets all paragraph margins to 4pt. Ex: outside/margin?value=4pt //set exterior paragraph margins to 4pt. Ex: doc/marginLeft?value=1cm //sets left margin to 1cm for the document as used in embedded mode. Ex: section/marginLeft?value=1cm //sets left margin to 1cm for the pages of the first selected section | +| merge | {paragraph/}merge
    cell/merge | Paragraph, Cell | Used with paragraphs: merges paragraphs. Used with cells: merges the selected cells. | +| minHeight | {paragraph \| image/}minHeight?value= | Paragraph, Image, Submenu | Target min height (default target is paragraph). Ex: paragraph/minHeight?value=50pt | +| minWidth | {paragraph \| image/}minWidth?value= | Paragraph, Image, Submenu | Target min width (default target is paragraph). Ex: paragraph/minWidth?value=50pt | +| moveToBack | moveToBack | Image | Moves image to the back. (not enabled for inline images) | +| moveToFront | moveToFront | Image | Moves image to the front. (not enabled for inline images) | +| newLineStyleSheet | newLineStyleSheet?index={1<=number<=number of paragraph stylesheets \| newLineStyleSheet}?value=auto | Paragraph, Submenu | Selected paragraph elements will use Nth stylesheet as stylesheet to use for new paragraphs created on Return or while splitting paragraphs; If value=auto, new paragraphs will use the same stylesheet (default). (menu item name is replaced at runtime with stylesheet name) | +| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row\| cell/}{inside \| outside/}{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom }?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Row, Column, Cell, Submenu | Changes target padding. (default target is paragraph) | +| pageMode | pageMode?value={embedded \| page \| draft} | Submenu | Changes view mode. Ex: pageMode?value=page | +| pageOrientation | {section/}pageOrientation?value={landscape \| portrait} | Section, Submenu | Changes document or first selected section page orientation (if section is not specified, it will apply to all sections otherwise to the first selected section). Ex: pageOrientation?value=portrait //change orientation to portrait for the whole document. Ex: section/pageOrientation?value=landscape //change orientation to landscape for the first selected section | +| pageSize | pageSize?index= | Submenu | Changes document page size: number is Nth page size in the list of available pages sizes. The list contains the current printer page sizes, ISO page sizes and the custom page sizes defined by the user. | +| paragraph | paragraph | Paragraph, Submenu | Default submenu for paragraph layout. | +| paragraph/avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | Allows/disallows page breaks inside paragraphs. | +| print | print | Document | Prints document as rendered in page mode with view settings of the focused 4D Write Pro area. | +| refreshImages | refreshImages | Image | Reloads images from the network for images with URLs. | +| removeSoftHyphens | removeSoftHyphens | | Removes all soft hyphens in the current selection (if the selection is empty, removes soft hyphen before or after the caret if any) | +| row/avoidPageBreakInside | row/avoidPageBreakInside | Table, Row | Allows/disallows page breaks inside table rows. This action is disabled if: the current selection does not contain a table the table does not allow page breaks the table is inside a header or footer Note: If several tables are selected and some of them don't allow page breaks, this option will be enabled but only applied to the tables that allow page breaks. | +| section | section | Section, Submenu | Default submenu for page layout for the first selected section. | +| section/differentFirstPage | section/differentFirstPage | Section | Section has different first page or not. | +| section/differentLeftRightPages | section/differentLeftRightPages | Section | Section has different left and right pages or not. | +| section/name/showDialog | section/name/showDialog | Section, showDialog | Displays a dialog allowing to enter the first selected section name. | +| section/remove | section/remove | Section | Deletes the first section that intersects the user’s selection regardless if the user has selected one or multiple sections. Disabled when only one section remains in the document. | +| section/reset | section/reset | Section | Resets all first selected section attributes to default attributes - which are inherited from doc attributes for background, border and padding (same as for embedded mode) and 2.5cm for page margins. First selected section column properties are also removed (so only default section properties will apply). | +| split | {paragraph/}split
    cell/split | Paragraph, Cell | Used with paragraph: splits paragraph. Used with cells: splits the selected cells (only cells that have been already merged may be split). | +| styleSheet | {paragraph \| image/}styleSheet?value={1<=number<=number of target style sheets} | Paragraph, Image, Submenu, showDialog | Applies Nth stylesheet to the selected target elements. With dialog, new stylesheet will use current attributes from the first selected target. (default target is paragraph) Ex: styleSheet?value=1 //apply first paragraph style sheet to the selected paragraphs and set it as paragraph stylesheets. | +| styleSheets | {paragraph \| image/}styleSheets | Paragraph, Image, Submenu | Default submenu for editing target stylesheets. | +| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, Submenu | Defines the character used as decimal separator by decimal tabulations. | +| tableAlign | tableAlign?value={left \| center \| right}
    or
    table/tableAlign?value={left \| center \| right} | Table, Submenu | Specifies horizontal alignment for a table. | +| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Allows/disallows page breaks inside tables. Disabled if: the current selection does not contain at least one table the table is in a header or a footer | +| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Toggles between display/not display of carry-over rows (see Carry-over rows). | +| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraph | Paragraph text alignment (initial=use right for rtl or left for ltr direction). | +| textBox | textBox | Submenu | Submenu with all actions available for the focused/selected text box | +| textBox/remove | textBox/remove | TextBox | Removes the selected text box | +| textIndent | textIndent?value= (may be negative) | Paragraph, Submenu | Paragraph text indentation (first line indentation). Ex: textIndent?value=2cm | +| textLinethrough | textLinethrough | Submenu | For menu commands only. Linethrough submenu (with style and color). | +| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | Submenu, showDialog | Ex: textLinethroughColor?value=red | +| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textLinethroughStyle?value=dotted | +| textShadow | textShadow | Submenu | For menu commands only. Default submenu for text shadow (with color and offset). | +| textShadowColor | textShadowColor?value={ \| none} | Submenu, showDialog | Changes shadow status or color for characters. Ex: textShadowColor?value=green | +| textShadowOffset | textShadowOffset?value= | Submenu | Only length in pt is supported. Ex: textShadowOffset?value=2pt | +| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | Submenu | Formats text. Ex: textTransform?value=capitalize | +| textUnderline | textUnderline | Submenu | For menu commands only. Underline submenu (with style and color) | +| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | Submenu, showDialog | Ex: textUnderlineColor?value=red | +| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textUnderlineStyle?value=dotted | +| updateStyleSheet | {paragraph \| image/}updateStyleSheet | Paragraph, Image, Submenu | Updates first selected target stylesheet with first selected target current attributes (default target is paragraph) | +| userUnit | userUnit?value={cm \| mm \| in \| pt} | Submenu | Changes document layout unit (will be reflected on rulers). | +| verticalAlign | {paragraph \| row \| column \| cell \| textBox/}verticalAlign?value={top \| middle \| bottom} | Paragraph, Row, Column, Cell, TextBox, Submenu | Paragraph vertical alignment. Ex: verticalAlign?value=top. The effect depends on the minHeight value of the paragraph. | +| view | view | Submenu | For menu commands only. Default submenu for view settings. | +| visibleBackground | visibleBackground | Document | Shows/hides background, anchored pictures and text boxes | +| visibleEmptyImages | visibleEmptyImages | Document | Shows/hides a default black rectangle for images that cannot be loaded or computed (empty images or images in an unsupported format). | +| visibleFooters | visibleFooters | Document | Shows/hides footers. | +| visibleHeaders | visibleHeaders | Document | Shows/hides headers. | +| visibleHiddenChars | visibleHiddenChars | Document | Shows/hides hidden characters | +| visibleHorizontalRuler | visibleHorizontalRuler | Document | Shows/hides horizontal ruler. | +| visiblePageFrames | visiblePageFrames | Document | Shows/hides page frames. | +| visibleVerticalRuler | visibleVerticalRuler | Document | Shows/hides vertical ruler (Page mode only). | +| visibleTableBorders | visibleTableBorders | Document | Shows/hides internal and external table borders as dashed lines where no borders are defined. | +| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraph | Toggles between widow and orphan control mode. | +| width | {paragraph \| image \| textBox \| column/}width?value= \| auto | Paragraph, Image, TextBox, Column, Submenu | Target width (default target is paragraph). Auto value not available for text boxes (converted to 8 cm) and columns. Ex: image/width?value=50pt | +| zoom | zoom?value={25% <= percentage in Css <= 400%} | Document, Submenu | Changes document view zoom. Ex: zoom?value=120% | + +### その他のアクション + +4D フォームで使用可能な他の複数の標準アクションも、4D Write Proエリアで使用することができます: + +* *編集アクション*、例えばコピー/ペーストアクションなど +* *フォント* アクション、例えばfontBold あるいは fontSize など +* *動的な式* アクション。挿入された式などを管理することができます。 +* *スペルチェック* アクション。 \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md index ce26fa6371dc91..e89d229add514a 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md @@ -50,6 +50,8 @@ slug: /WritePro/properties これらのオプションはコンテキストメニューを使用するか、あるいは[属性](../commands-legacy/4d-write-pro-attributes.md)(`wk avoid widows and orphans`、`wk page break inside paragraph`、または[標準アクション](./defining-a-4d-write-pro-area.md#standard-actions)(*widowAndOrphanControlEnabled*、 *avoidPageBreakInside*。 + + ## 背景 4D Write Pro ドキュメントの背景とドキュメント要素(表、段落、セクション、ヘッダー/フッター等)には、以下のエフェクトを設定することができます: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md new file mode 100644 index 00000000000000..09990ca4034c8f --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md @@ -0,0 +1,34 @@ +--- +id: user-new +title: user WP +--- + +to import + + + +## Lists + +4D Write Pro supports two main types of lists: + +* unordered lists: where list items are marked with bullets, custom bullets, or images used as markers. +* ordered lists: where list items are marked with numbers or letters + +They can be created using: +* the toolbar or sidebar of the [4D Write Pro interface](https://doc.4d.com/4Dv20/4D/20.2/Entry-areas.300-6750367.en.html#5865253) +* the `listStyleType` or `listStyleImage` [standard actions](./standard-actions.md) , +* or [programmatically](../commands-legacy/4d-write-pro-attributes.md#lists) using [WP SET ATTRIBUTE](../commands/wp-set-attributes.md). + +When a list is created using a standard action (`listStyleType` or `listStyleImage`) or the toolbar/sidebar, 4D Write Pro automatically inserts a margin before the text so that the marker is positioned inside it. The value of the inserted margin corresponds to the offset of the default tab (`wk tab default`). + +![](../../assets/en/WritePro/margin-bullets.png) + +When the list is created using [the WP SET ATTRIBUTE command](../commands-legacy/4d-write-pro-attributes.md#lists), no specific margin is managed, by default the marker is added at the left boundary of the paragraph. The developer can add a custom margin if necessary. + +:::info Related blog post + +[4D Write Pro – Adding a margin automatically when bullets are set using standard actions]() + +::: + + diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png new file mode 100644 index 0000000000000000000000000000000000000000..de7143eb0507419e39da91e2ee6cd717c4714586 GIT binary patch literal 17630 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 HoD!M
    textBox/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare} | Image, Textbox, Submenu | Defines the anchor layout type for an image or a text box. Can be used to transform an inline image to an anchored image, or the reverse. Note: If an image is moved from an anchored mode to inline, the image is inserted at the beginning of the current selected text. "inline" value is not supported for text boxes | -| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box \| header-box \| footer-box} | Image, TextBox, Submenu | Defines the area relative to the absolute position of an anchored image or text box. If the element is relative to the header-box/footer-box which is not visible on a page, the element is not displayed. This action will reset horizontal and vertical offsets to 0. Page mode only, not enabled for inline images. | -| anchorPage | {image \| textBox}/anchorPage?value={all \| current \| currentSubSection} | Image, TextBox, Submenu | Defines the page(s) where the selected image or text box is displayed (not enabled for inline images). Page mode only. | -| anchorSection | {image \| textBox}/anchorSection?value={all \| current} | Image, TextBox, Submenu | Defines the section(s) where the selected image or text box is displayed. (not enabled for inline images). Page mode only. | -| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top \| center \| bottom} | Image, TextBox Submenu | Defines the vertical alignment of the image or text box, relative to the anchorOrgin for an image or text box in page, or to the layout box for an image or text box in embedded mode. This action will reset the vertical offset to 0 (not enabled for inline images). Note: See "verticalAlign" action for the vertical alignment inside the text box | -| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | | -| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | For menu commands only. Default submenu for all background attributes. | -| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background clipping box (default target is paragraph). Paper-box targets document and section only. | -| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target background. | -| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Sets the display mode of images used as background. | -| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Clears target background image. (default target is paragraph) | -| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image origin box (default target is paragraph). Paper-box targets document and section only. | -| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image horizontal alignment (default target is paragraph). Ex: paragraph/backgroundPositionH?value=left | -| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image vertical alignment (default target is paragraph). Ex: paragraph/backgroundPositionV?value=top | -| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image repeat mode. (default target is paragraph) | -| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image width (default target is paragraph). Ex: paragraph/backgroundSizeH?value=100%. section/backgroundSizeH?value=cover | -| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell}/backgroundSizeV?value={ \| \| auto} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image height (default target is paragraph). Ex: paragraph/backgroundSizeV?value=50%. Ex: section/backgroundSizeV?value=40pt | -| bookmark | bookmark?index= | Submenu | Selects the Nth bookmark. Ex: bookmark?index=2 // selects the second bookmark | -| borderCollapse | borderCollapse | Paragraph | Collapses selected paragraph borders and interior margins. | -| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target border color (default target is paragraph). Ex: paragraph/borderColorLeft?value=green | -| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Submenu | Changes target border radius (default target is paragraph). Ex: paragraph/borderRadius?value=4pt | -| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Default submenu for target borders. | -| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border style (default target is paragraph). Ex: paragraph/borderStyleLeft?value=double. Ex: outside/borderStyle?value=solid //set selected paragraphs exterior borders to style solid. Ex: inside/borderStyle?value=none //remove selected paragraphs interior borders | -| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border width (default target is paragraph). Ex: paragraph/borderWidthLeft?value=4pt | -| columnCount | {section/}columnCount?value={1<=number<=20} | Document, Section, Submenu | Number of columns in the current document and/or section. (default target is doc) Ex: section/columnCount?value=3 | -| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document, Section, Submenu, showDialog | Color for the decorative line between document or section columns. Ex: columnRuleColor?value="#FFFFFF" | -| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Section, Submenu | Style for the decorative line between document or section columns. Ex: columnRuleStyle?value="solid" | -| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document, Section, Submenu | Width of the decorative line between document or section columns. Ex: columnRuleWidth?value="2pt" | -| columns | {section/}columns | Document, Section, Submenu | Only for a menu item: creates automatically a complete Columns sub-menu with all column actions sub-menus (except insertColumnBreak) | -| columnSpacing | {section/}columnSpacing?value={CSS length} | Document, Section, Submenu | Space between two columns in the current document and/or section. Ex: columnSpacing?value="1cm" | -| deleteColumns | deleteColumns | Table | Deletes all selected columns. | -| deleteRows | deleteRows | Table | Deletes all selected rows. | -| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraph, Image, Submenu | Removes the Nth stylesheet from the stored stylesheets for the selected target (default target is paragraph). Menu item name is replaced at runtime with style sheet name. | -| direction | direction?value={ltr \| rtl} | Paragraph, Submenu | Paragraph direction. | -| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Displays formula references as a # symbol. Can only be used when formulas are displayed as references. | -| doc | doc | Document, Submenu | Default submenu for document body layout (embedded mode attributes or default attributes for sections – but for margin which is reserved for embedded mode only). | -| dpi | Modifies the dpi of the current view (independent of the document attribute wk dpi used internally for pixel conversion <-> points). | Submenu | Change view dpi. Ex: dpi?value=72 | -| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable } | Table, Submenu | Defines how the table is displayed when its datasource is empty. | -| fontStyleWrite | fontStyleWrite | Submenu | For menu commands only. Displays default font styles submenu for 4D Write Pro. | -| fontSubscript | fontSubscript | | Toggles subscript font attribute. | -| fontSuperscript | fontSuperscript | | Toggles superscript font attribute. | -| footer | footer | Submenu | Displays the Footer submenu. | -| footer/remove | footer/remove | Footer | Removes the selected footer. | -| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, Submenu | Formula highlight mode for the document. Can be used with a dropdown menu or a button | -| formulaHighlightColor | formulaHighlightColor?value= | Document, Submenu,showDialog | Formula highlight color for the document | -| formulaHighlightReferences | formulaHighlightReferences | Document | Toggles formula references highlighting. Can be used with a check box or a menu item | -| formulaHighlightValues | formulaHighlightValues | Document | Toggles formula values highlighting. Can be used with a check box or a menu item | -| header | header | Submenu | Displays the Header submenu. | -| header/remove | header/remove | Header | Removes the selected header. | -| height | {image \| textBox \| row}/height?value={ \| auto} | Image, TextBox Row, Submenu | Target height. Ex: image/height?value=50pt. For image/width, see width. Ex: row/height?value=12pt | -| headerRowCount | {table/}headerRowCount | Table, Submenu | Sets the number of header rows in a table. Maximum is 5. | -| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Toggles between html wysiwyg mode. | -| image | image | Image, Submenu | Displays image layout submenu. | -| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, Submenu | Sets the display mode of anchored and inline images. Ex: image/displayMode?value=scaledToFit | -| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, Submenu | Image vertical alignment. Ex: image/verticalAlign?value=super | -| insertColumnBreak | insertColumnBreak | Paragraph | Inserts a column break at the selection. | -| insertColumnToTheLeft | insertColumnToTheLeft | Table | Inserts a column to the left of the first selected column(s). | -| insertColumnToTheRight | insertColumnToTheRight | Table | Inserts a column to the right of the last selected column(s). | -| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraph | Inserts a continuous section break at the selection. | -| insertImage | insertImage | | Opens a picture selection dialog box and inserts the selected picture (if any) as a character in the area. | -| insertPageBreak | insertPageBreak | Paragraph | Inserts a page break at the selection. | -| insertRowAbove | insertRowAbove | Table | Inserts a row above the selected row(s). | -| insertRowBelow | insertRowBelow | Table | Inserts a row below the selected row(s). | -| insertSectionBreak | insertSectionBreak | Paragraph | Inserts a section break at the selection. | -| insertSoftHyphen | insertSoftHyphen | | Inserts a soft hyphen at the cursor position. | -| insertTextBox | insertTextBox | Document | Inserts a text box near the current selection, anchored to the first selected page (page mode). | -| keepWithNext | keepWithNext | Paragraph | Links a paragraph with the next so that they cannot be separated by automatic page or column breaks. If applied to the last paragraph of the last cell in a table, the last row of the table is linked to the following paragraph. | -| lineHeight | lineHeight?value={ \| } | Paragraph, Submenu | Paragraph line height. Ex: lineHeight?value=120% | -| layer | {image \| textBox}/layer | Submenu | Default submenu with layering actions for images or text boxes | -| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraph, Submenu | List start number. Ex: listStartNumber?value=10 | -| listStyleImage | listStyleImage/showDialog | Paragraph, showDialog | Opens a file dialog to choose a image to display as list style bullet; it will set also list style type to disc – style to be used if image is not found. | -| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading- zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraph, Submenu | Paragraph list style type. | -| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table/}{inside \| outside/}{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraph, Image, Textbox, Section, Header, Footer, Table, Submenu | Changes target margin (default target is paragraph). Ex: margin?value=4pt //sets all paragraph margins to 4pt. Ex: outside/margin?value=4pt //set exterior paragraph margins to 4pt. Ex: doc/marginLeft?value=1cm //sets left margin to 1cm for the document as used in embedded mode. Ex: section/marginLeft?value=1cm //sets left margin to 1cm for the pages of the first selected section | -| merge | {paragraph/}merge
    cell/merge | Paragraph, Cell | Used with paragraphs: merges paragraphs. Used with cells: merges the selected cells. | -| minHeight | {paragraph \| image/}minHeight?value= | Paragraph, Image, Submenu | Target min height (default target is paragraph). Ex: paragraph/minHeight?value=50pt | -| minWidth | {paragraph \| image/}minWidth?value= | Paragraph, Image, Submenu | Target min width (default target is paragraph). Ex: paragraph/minWidth?value=50pt | -| moveToBack | moveToBack | Image | Moves image to the back. (not enabled for inline images) | -| moveToFront | moveToFront | Image | Moves image to the front. (not enabled for inline images) | -| newLineStyleSheet | newLineStyleSheet?index={1<=number<=number of paragraph stylesheets \| newLineStyleSheet}?value=auto | Paragraph, Submenu | Selected paragraph elements will use Nth stylesheet as stylesheet to use for new paragraphs created on Return or while splitting paragraphs; If value=auto, new paragraphs will use the same stylesheet (default). (menu item name is replaced at runtime with stylesheet name) | -| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row\| cell/}{inside \| outside/}{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom }?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Row, Column, Cell, Submenu | Changes target padding. (default target is paragraph) | -| pageMode | pageMode?value={embedded \| page \| draft} | Submenu | Changes view mode. Ex: pageMode?value=page | -| pageOrientation | {section/}pageOrientation?value={landscape \| portrait} | Section, Submenu | Changes document or first selected section page orientation (if section is not specified, it will apply to all sections otherwise to the first selected section). Ex: pageOrientation?value=portrait //change orientation to portrait for the whole document. Ex: section/pageOrientation?value=landscape //change orientation to landscape for the first selected section | -| pageSize | pageSize?index= | Submenu | Changes document page size: number is Nth page size in the list of available pages sizes. The list contains the current printer page sizes, ISO page sizes and the custom page sizes defined by the user. | -| paragraph | paragraph | Paragraph, Submenu | Default submenu for paragraph layout. | -| paragraph/avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | Allows/disallows page breaks inside paragraphs. | -| print | print | Document | Prints document as rendered in page mode with view settings of the focused 4D Write Pro area. | -| refreshImages | refreshImages | Image | Reloads images from the network for images with URLs. | -| removeSoftHyphens | removeSoftHyphens | | Removes all soft hyphens in the current selection (if the selection is empty, removes soft hyphen before or after the caret if any) | -| row/avoidPageBreakInside | row/avoidPageBreakInside | Table, Row | Allows/disallows page breaks inside table rows. This action is disabled if: the current selection does not contain a table the table does not allow page breaks the table is inside a header or footer Note: If several tables are selected and some of them don't allow page breaks, this option will be enabled but only applied to the tables that allow page breaks. | -| section | section | Section, Submenu | Default submenu for page layout for the first selected section. | -| section/differentFirstPage | section/differentFirstPage | Section | Section has different first page or not. | -| section/differentLeftRightPages | section/differentLeftRightPages | Section | Section has different left and right pages or not. | -| section/name/showDialog | section/name/showDialog | Section, showDialog | Displays a dialog allowing to enter the first selected section name. | -| section/remove | section/remove | Section | Deletes the first section that intersects the user’s selection regardless if the user has selected one or multiple sections. Disabled when only one section remains in the document. | -| section/reset | section/reset | Section | Resets all first selected section attributes to default attributes - which are inherited from doc attributes for background, border and padding (same as for embedded mode) and 2.5cm for page margins. First selected section column properties are also removed (so only default section properties will apply). | -| split | {paragraph/}split
    cell/split | Paragraph, Cell | Used with paragraph: splits paragraph. Used with cells: splits the selected cells (only cells that have been already merged may be split). | -| styleSheet | {paragraph \| image/}styleSheet?value={1<=number<=number of target style sheets} | Paragraph, Image, Submenu, showDialog | Applies Nth stylesheet to the selected target elements. With dialog, new stylesheet will use current attributes from the first selected target. (default target is paragraph) Ex: styleSheet?value=1 //apply first paragraph style sheet to the selected paragraphs and set it as paragraph stylesheets. | -| styleSheets | {paragraph \| image/}styleSheets | Paragraph, Image, Submenu | Default submenu for editing target stylesheets. | -| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, Submenu | Defines the character used as decimal separator by decimal tabulations. | -| tableAlign | tableAlign?value={left \| center \| right}
    or
    table/tableAlign?value={left \| center \| right} | Table, Submenu | Specifies horizontal alignment for a table. | -| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Allows/disallows page breaks inside tables. Disabled if: the current selection does not contain at least one table the table is in a header or a footer | -| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Toggles between display/not display of carry-over rows (see Carry-over rows). | -| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraph | Paragraph text alignment (initial=use right for rtl or left for ltr direction). | -| textBox | textBox | Submenu | Submenu with all actions available for the focused/selected text box | -| textBox/remove | textBox/remove | TextBox | Removes the selected text box | -| textIndent | textIndent?value= (may be negative) | Paragraph, Submenu | Paragraph text indentation (first line indentation). Ex: textIndent?value=2cm | -| textLinethrough | textLinethrough | Submenu | For menu commands only. Linethrough submenu (with style and color). | -| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | Submenu, showDialog | Ex: textLinethroughColor?value=red | -| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textLinethroughStyle?value=dotted | -| textShadow | textShadow | Submenu | For menu commands only. Default submenu for text shadow (with color and offset). | -| textShadowColor | textShadowColor?value={ \| none} | Submenu, showDialog | Changes shadow status or color for characters. Ex: textShadowColor?value=green | -| textShadowOffset | textShadowOffset?value= | Submenu | Only length in pt is supported. Ex: textShadowOffset?value=2pt | -| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | Submenu | Formats text. Ex: textTransform?value=capitalize | -| textUnderline | textUnderline | Submenu | For menu commands only. Underline submenu (with style and color) | -| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | Submenu, showDialog | Ex: textUnderlineColor?value=red | -| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textUnderlineStyle?value=dotted | -| updateStyleSheet | {paragraph \| image/}updateStyleSheet | Paragraph, Image, Submenu | Updates first selected target stylesheet with first selected target current attributes (default target is paragraph) | -| userUnit | userUnit?value={cm \| mm \| in \| pt} | Submenu | Changes document layout unit (will be reflected on rulers). | -| verticalAlign | {paragraph \| row \| column \| cell \| textBox/}verticalAlign?value={top \| middle \| bottom} | Paragraph, Row, Column, Cell, TextBox, Submenu | Paragraph vertical alignment. Ex: verticalAlign?value=top. The effect depends on the minHeight value of the paragraph. | -| view | view | Submenu | For menu commands only. Default submenu for view settings. | -| visibleBackground | visibleBackground | Document | Shows/hides background, anchored pictures and text boxes | -| visibleEmptyImages | visibleEmptyImages | Document | Shows/hides a default black rectangle for images that cannot be loaded or computed (empty images or images in an unsupported format). | -| visibleFooters | visibleFooters | Document | Shows/hides footers. | -| visibleHeaders | visibleHeaders | Document | Shows/hides headers. | -| visibleHiddenChars | visibleHiddenChars | Document | Shows/hides hidden characters | -| visibleHorizontalRuler | visibleHorizontalRuler | Document | Shows/hides horizontal ruler. | -| visiblePageFrames | visiblePageFrames | Document | Shows/hides page frames. | -| visibleVerticalRuler | visibleVerticalRuler | Document | Shows/hides vertical ruler (Page mode only). | -| visibleTableBorders | visibleTableBorders | Document | Shows/hides internal and external table borders as dashed lines where no borders are defined. | -| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraph | Toggles between widow and orphan control mode. | -| width | {paragraph \| image \| textBox \| column/}width?value= \| auto | Paragraph, Image, TextBox, Column, Submenu | Target width (default target is paragraph). Auto value not available for text boxes (converted to 8 cm) and columns. Ex: image/width?value=50pt | -| zoom | zoom?value={25% <= percentage in Css <= 400%} | Document, Submenu | Changes document view zoom. Ex: zoom?value=120% | - -### Outras ações - -Outras ações padrão estão disponíveis nos formulários 4D e podem ser utilizadas nas áreas 4D Write Pro: - -* *Ações Edição*, tais como ações de copiar/colar. -* Ações *Fonte*, tais como FontBold ou fontSize. -* Ações *Expressões dinâmicas*, permitendo manejar a inserção de expressões. -* Ações *Correção ortográfica*. \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md new file mode 100644 index 00000000000000..4c41d09667f653 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user-legacy/standard-actions.md @@ -0,0 +1,177 @@ +--- +id: standard-actions +title: Ações padrão +displayed_sidebar: docs +slug: /WritePro/standard-actions +--- + + +A interface de usuário de áreas 4D Write Pro pode ser manejada através de um amplo conjunto de **ações padrão**. As ações padrão podem ser atribuidas a: + +* comandos de menu, disponíveis através da **barra de menu** ou do comando [Dynamic pop up menu](../../commands/dynamic-pop-up-menu) +* list items, listas pop up ou drop down, menus pop up hierárquicos +* botões, check boxes +* ou executados pelo comando [INVOKE ACTION](../../commands/invoke-action). + +Quando são atribuidos aos objetos de interface, as ações padrão manejam a ativação/desativação de objeto em função de contexto. Para mais informação, consulte a seção *Ações padrões*. + +Dois tipos de ações estão disponíveis para áreas 4D Write Pro: + +* As ações específicas 4D Write Pro, que só podem ser utilizadas com áreas 4D Write Pro, +* *[Outras ações](#other-actions)*, incluido as fontes, expressões, corretor ortográfico e ações de edição, que podem ser utilizadas com as áreas 4D Write Pro e as outras áreas 4D (ver [*Ações padrões*](#standard-actions)). + +### Ações 4D Write Pro + +**Notas:** + +* As ações que mostram um menu/lista só podem ser associadas aos comandos de menu ou aos objetos pop-up/listas suspensas e menus pop-up hierárquicos (ver *Submenu*). +* Check boxes e 3D check boxes devem ser associadas com ações de estado, tais como "section/differentFirstPage" ou "visibleHorizontalRuler". Três opções de estado são suportadas com check boxes padrão apenas. +* um status de ação de seção é sempre igual ao status atual de seção selecionada (estado herdado se o atributo for herdado da seção pai ou de um atributo padrão) já que deve refletir o status de seção selecionada (o status que é aplicado atualmente para a seção). Entretanto, modificar o atributo de seção com uma ação padrão vai sobrepujar o atributo de seção selecionado. +* *Submenu*: Quando usado sem parâmetros e associados ao comando menu, um pop-up/lista drop down ou um objeto de menu hierárquico pop-up, essas ações exibem um submenu/lista automática. Por exemplo, se atribuir a ação "backgroundColor" a um comando de menu, selecionando este comando de menu na execução vai exibir os itens de submenu de Cor de Fundo. Se atribuir a ação "zoom" a um menu hierárquico pop-up menu, vai conter automaticamente conter uma lista de valores pré-definidos de zoom. Note que essas ações não podem ser atribuídas aos botões. +* *showDialog*:Adicionar a string "/showDialog" ao nome de ação permite a exibição da caixa de diálogo padrão associada para a ação. Por exemplo, pode ser usado "paragraph/styleSheet/showDialog" para abrir o diálogo de input que permite a entrada de um novo nome de folha de estilo. . + +| Ação | Sintaxe | Disponível com | Descrição | +|---|---|---|---| +| anchorHorizontalAlign | {image \| textBox}/anchorHorizontalAlign?value={left \| center \| right} | Image, Textbox, Submenu | Defines the horizontal alignment of the element, relative to the anchorOrigin for images/text boxes in page, or to the layout box for images/text box in embedded mode. This action will reset the horizontal offset to 0. (not enabled for inline images). | +| anchoring | {image \| textBox}/anchoring | Submenu | Default submenu with anchor settings actions for images or text boxes | +| anchorLayout | image/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare \| inline}

    textBox/anchorLayout?value={front \| behind \| wrapTopBottom \| wrapSquareLeft \| wrapSquareRight \| wrapSquareLargest \| wrapSquare} | Image, Textbox, Submenu | Defines the anchor layout type for an image or a text box. Can be used to transform an inline image to an anchored image, or the reverse. Note: If an image is moved from an anchored mode to inline, the image is inserted at the beginning of the current selected text. "inline" value is not supported for text boxes | +| anchorOrigin | {image \| textBox}/anchorOrigin?value={paper-box \| header-box \| footer-box} | Image, TextBox, Submenu | Defines the area relative to the absolute position of an anchored image or text box. If the element is relative to the header-box/footer-box which is not visible on a page, the element is not displayed. This action will reset horizontal and vertical offsets to 0. Page mode only, not enabled for inline images. | +| anchorPage | {image \| textBox}/anchorPage?value={all \| current \| currentSubSection} | Image, TextBox, Submenu | Defines the page(s) where the selected image or text box is displayed (not enabled for inline images). Page mode only. | +| anchorSection | {image \| textBox}/anchorSection?value={all \| current} | Image, TextBox, Submenu | Defines the section(s) where the selected image or text box is displayed. (not enabled for inline images). Page mode only. | +| anchorVerticalAlign | {image \| textBox}/anchorVerticalAlign?value={top \| center \| bottom} | Image, TextBox Submenu | Defines the vertical alignment of the image or text box, relative to the anchorOrgin for an image or text box in page, or to the layout box for an image or text box in embedded mode. This action will reset the vertical offset to 0 (not enabled for inline images). Note: See "verticalAlign" action for the vertical alignment inside the text box | +| avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | | +| background | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}background | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | For menu commands only. Default submenu for all background attributes. | +| backgroundClip | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundClip?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background clipping box (default target is paragraph). Paper-box targets document and section only. | +| backgroundColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundColor?value={ \| transparent} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target background. | +| backgroundDisplayMode | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundDisplayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Sets the display mode of images used as background. | +| backgroundImage | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundImage?value=none | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Clears target background image. (default target is paragraph) | +| backgroundOrigin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundOrigin?value={paper-box \| border-box \| padding-box \| content-box} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image origin box (default target is paragraph). Paper-box targets document and section only. | +| backgroundPositionH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionH?value={left \| right \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image horizontal alignment (default target is paragraph). Ex: paragraph/backgroundPositionH?value=left | +| backgroundPositionV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundPositionV?value={top \| bottom \| center} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image vertical alignment (default target is paragraph). Ex: paragraph/backgroundPositionV?value=top | +| backgroundRepeat | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundRepeat?value={no-repeat \| repeat \| repeat-x \| repeat-y} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image repeat mode. (default target is paragraph) | +| backgroundSizeH | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}backgroundSizeH?value={ \| \| auto \| cover \| contain} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image width (default target is paragraph). Ex: paragraph/backgroundSizeH?value=100%. section/backgroundSizeH?value=cover | +| backgroundSizeV | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell}/backgroundSizeV?value={ \| \| auto} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target background image height (default target is paragraph). Ex: paragraph/backgroundSizeV?value=50%. Ex: section/backgroundSizeV?value=40pt | +| bookmark | bookmark?index= | Submenu | Selects the Nth bookmark. Ex: bookmark?index=2 // selects the second bookmark | +| borderCollapse | borderCollapse | Paragraph | Collapses selected paragraph borders and interior margins. | +| borderColor | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderColor \| borderColorLeft \| borderColorRight \| borderColorTop \| borderColorBottom \| borderColorLeftRight \| borderColorTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu, showDialog | Changes target border color (default target is paragraph). Ex: paragraph/borderColorLeft?value=green | +| borderRadius | {doc \| paragraph \| image \| textBox \| section \| header \| footer/}borderRadius?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Submenu | Changes target border radius (default target is paragraph). Ex: paragraph/borderRadius?value=4pt | +| borders | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}borders | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Default submenu for target borders. | +| borderStyle | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderStyle \| borderStyleLeft \| borderStyleRight \| borderStyleTop \| borderStyleBottom \| borderStyleLeftRight \| borderStyleTopBottom}?value={none \| hidden \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border style (default target is paragraph). Ex: paragraph/borderStyleLeft?value=double. Ex: outside/borderStyle?value=solid //set selected paragraphs exterior borders to style solid. Ex: inside/borderStyle?value=none //remove selected paragraphs interior borders | +| borderWidth | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table \| row \| column \| cell/}{inside \| outside/}{borderWidth \| borderWidthLeft \| borderWidthRight \| borderWidthTop \| borderWidthBottom \| borderWidthLeftRight \| borderWidthTopBottom}?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Table, Row, Column, Cell, Submenu | Changes target border width (default target is paragraph). Ex: paragraph/borderWidthLeft?value=4pt | +| columnCount | {section/}columnCount?value={1<=number<=20} | Document, Section, Submenu | Number of columns in the current document and/or section. (default target is doc) Ex: section/columnCount?value=3 | +| columnRuleColor | {section/}columnRuleColor?value={CSS color} | Document, Section, Submenu, showDialog | Color for the decorative line between document or section columns. Ex: columnRuleColor?value="#FFFFFF" | +| columnRuleStyle | {section/}columnRuleStyle?value={none \| dotted \| dashed \| solid \| double \| groove \| ridge \| inset \| outset} | Document, Section, Submenu | Style for the decorative line between document or section columns. Ex: columnRuleStyle?value="solid" | +| columnRuleWidth | {section/}columnRuleWidth?value={CSS length} | Document, Section, Submenu | Width of the decorative line between document or section columns. Ex: columnRuleWidth?value="2pt" | +| columns | {section/}columns | Document, Section, Submenu | Only for a menu item: creates automatically a complete Columns sub-menu with all column actions sub-menus (except insertColumnBreak) | +| columnSpacing | {section/}columnSpacing?value={CSS length} | Document, Section, Submenu | Space between two columns in the current document and/or section. Ex: columnSpacing?value="1cm" | +| deleteColumns | deleteColumns | Table | Deletes all selected columns. | +| deleteRows | deleteRows | Table | Deletes all selected rows. | +| deleteStyleSheet | {paragraph \| image/}deleteStyleSheet?index={1<= number <= number of target style sheets} | Paragraph, Image, Submenu | Removes the Nth stylesheet from the stored stylesheets for the selected target (default target is paragraph). Menu item name is replaced at runtime with style sheet name. | +| direction | direction?value={ltr \| rtl} | Paragraph, Submenu | Paragraph direction. | +| displayFormulaAsSymbol | displayFormulaAsSymbol | Document | Displays formula references as a # symbol. Can only be used when formulas are displayed as references. | +| doc | doc | Document, Submenu | Default submenu for document body layout (embedded mode attributes or default attributes for sections – but for margin which is reserved for embedded mode only). | +| dpi | Modifies the dpi of the current view (independent of the document attribute wk dpi used internally for pixel conversion <-> points). | Submenu | Change view dpi. Ex: dpi?value=72 | +| emptyDatasource | {table}/emptyDatasource?value={showDataRow \| hideDataRow \| showPlaceholderRow \| hideTable } | Table, Submenu | Defines how the table is displayed when its datasource is empty. | +| fontStyleWrite | fontStyleWrite | Submenu | For menu commands only. Displays default font styles submenu for 4D Write Pro. | +| fontSubscript | fontSubscript | | Toggles subscript font attribute. | +| fontSuperscript | fontSuperscript | | Toggles superscript font attribute. | +| footer | footer | Submenu | Displays the Footer submenu. | +| footer/remove | footer/remove | Footer | Removes the selected footer. | +| formulaHighlight | formulaHighlight?value={values \| references \| always \| never} | Document, Submenu | Formula highlight mode for the document. Can be used with a dropdown menu or a button | +| formulaHighlightColor | formulaHighlightColor?value= | Document, Submenu,showDialog | Formula highlight color for the document | +| formulaHighlightReferences | formulaHighlightReferences | Document | Toggles formula references highlighting. Can be used with a check box or a menu item | +| formulaHighlightValues | formulaHighlightValues | Document | Toggles formula values highlighting. Can be used with a check box or a menu item | +| header | header | Submenu | Displays the Header submenu. | +| header/remove | header/remove | Header | Removes the selected header. | +| height | {image \| textBox \| row}/height?value={ \| auto} | Image, TextBox Row, Submenu | Target height. Ex: image/height?value=50pt. For image/width, see width. Ex: row/height?value=12pt | +| headerRowCount | {table/}headerRowCount | Table, Submenu | Sets the number of header rows in a table. Maximum is 5. | +| htmlWYSIWIGEnabled | htmlWYSIWIGEnabled | Document | Toggles between html wysiwyg mode. | +| image | image | Image, Submenu | Displays image layout submenu. | +| image/displayMode | image/displayMode?value=scaledToFit \| truncated \| truncatedCentered \| proportional \| proportionalCentered \| replicated \| replicatedCentered | Image, Submenu | Sets the display mode of anchored and inline images. Ex: image/displayMode?value=scaledToFit | +| image/verticalAlign | image/verticalAlign?value={top \| middle \| bottom \| baseline \| super \| sub} | Image, Submenu | Image vertical alignment. Ex: image/verticalAlign?value=super | +| insertColumnBreak | insertColumnBreak | Paragraph | Inserts a column break at the selection. | +| insertColumnToTheLeft | insertColumnToTheLeft | Table | Inserts a column to the left of the first selected column(s). | +| insertColumnToTheRight | insertColumnToTheRight | Table | Inserts a column to the right of the last selected column(s). | +| insertContinuousSectionBreak | insertContinuousSectionBreak | Paragraph | Inserts a continuous section break at the selection. | +| insertImage | insertImage | | Opens a picture selection dialog box and inserts the selected picture (if any) as a character in the area. | +| insertPageBreak | insertPageBreak | Paragraph | Inserts a page break at the selection. | +| insertRowAbove | insertRowAbove | Table | Inserts a row above the selected row(s). | +| insertRowBelow | insertRowBelow | Table | Inserts a row below the selected row(s). | +| insertSectionBreak | insertSectionBreak | Paragraph | Inserts a section break at the selection. | +| insertSoftHyphen | insertSoftHyphen | | Inserts a soft hyphen at the cursor position. | +| insertTextBox | insertTextBox | Document | Inserts a text box near the current selection, anchored to the first selected page (page mode). | +| keepWithNext | keepWithNext | Paragraph | Links a paragraph with the next so that they cannot be separated by automatic page or column breaks. If applied to the last paragraph of the last cell in a table, the last row of the table is linked to the following paragraph. | +| lineHeight | lineHeight?value={ \| } | Paragraph, Submenu | Paragraph line height. Ex: lineHeight?value=120% | +| layer | {image \| textBox}/layer | Submenu | Default submenu with layering actions for images or text boxes | +| listStartNumber | listStartNumber?value={ (longint) \| auto} | Paragraph, Submenu | List start number. Ex: listStartNumber?value=10 | +| listStyleImage | listStyleImage/showDialog | Paragraph, showDialog | Opens a file dialog to choose a image to display as list style bullet; it will set also list style type to disc – style to be used if image is not found. | +| listStyleType | listStyleType?value={none \| disc \| circle \| square \| hollow-square \| diamond \| club \| decimal \| decimal-leading- zero \| lower-latin \| lower-roman \| upper-latin \| upper-roman \| lower-greek \| decimal-greek \| armenian \| georgian \| hebrew \| hiragana \| katakana \| cjk-ideographic} | Paragraph, Submenu | Paragraph list style type. | +| margin | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| table/}{inside \| outside/}{margin \| marginLeft \| marginRight \| marginTop \| marginBottom \| marginLeftRight \| marginTopBottom}?value={ \| auto} | Document, Paragraph, Image, Textbox, Section, Header, Footer, Table, Submenu | Changes target margin (default target is paragraph). Ex: margin?value=4pt //sets all paragraph margins to 4pt. Ex: outside/margin?value=4pt //set exterior paragraph margins to 4pt. Ex: doc/marginLeft?value=1cm //sets left margin to 1cm for the document as used in embedded mode. Ex: section/marginLeft?value=1cm //sets left margin to 1cm for the pages of the first selected section | +| merge | {paragraph/}merge
    cell/merge | Paragraph, Cell | Used with paragraphs: merges paragraphs. Used with cells: merges the selected cells. | +| minHeight | {paragraph \| image/}minHeight?value= | Paragraph, Image, Submenu | Target min height (default target is paragraph). Ex: paragraph/minHeight?value=50pt | +| minWidth | {paragraph \| image/}minWidth?value= | Paragraph, Image, Submenu | Target min width (default target is paragraph). Ex: paragraph/minWidth?value=50pt | +| moveToBack | moveToBack | Image | Moves image to the back. (not enabled for inline images) | +| moveToFront | moveToFront | Image | Moves image to the front. (not enabled for inline images) | +| newLineStyleSheet | newLineStyleSheet?index={1<=number<=number of paragraph stylesheets \| newLineStyleSheet}?value=auto | Paragraph, Submenu | Selected paragraph elements will use Nth stylesheet as stylesheet to use for new paragraphs created on Return or while splitting paragraphs; If value=auto, new paragraphs will use the same stylesheet (default). (menu item name is replaced at runtime with stylesheet name) | +| padding | {doc \| paragraph \| image \| textBox \| section \| header \| footer \| column \| row\| cell/}{inside \| outside/}{padding \| paddingLeft \| paddingRight \| paddingTop \| paddingBottom \| paddingLeftRight \| paddingTopBottom }?value= | Document, Paragraph, Image, TextBox, Section, Header, Footer, Row, Column, Cell, Submenu | Changes target padding. (default target is paragraph) | +| pageMode | pageMode?value={embedded \| page \| draft} | Submenu | Changes view mode. Ex: pageMode?value=page | +| pageOrientation | {section/}pageOrientation?value={landscape \| portrait} | Section, Submenu | Changes document or first selected section page orientation (if section is not specified, it will apply to all sections otherwise to the first selected section). Ex: pageOrientation?value=portrait //change orientation to portrait for the whole document. Ex: section/pageOrientation?value=landscape //change orientation to landscape for the first selected section | +| pageSize | pageSize?index= | Submenu | Changes document page size: number is Nth page size in the list of available pages sizes. The list contains the current printer page sizes, ISO page sizes and the custom page sizes defined by the user. | +| paragraph | paragraph | Paragraph, Submenu | Default submenu for paragraph layout. | +| paragraph/avoidPageBreakInside | {paragraph/}avoidPageBreakInside | Paragraph | Allows/disallows page breaks inside paragraphs. | +| print | print | Document | Prints document as rendered in page mode with view settings of the focused 4D Write Pro area. | +| refreshImages | refreshImages | Image | Reloads images from the network for images with URLs. | +| removeSoftHyphens | removeSoftHyphens | | Removes all soft hyphens in the current selection (if the selection is empty, removes soft hyphen before or after the caret if any) | +| row/avoidPageBreakInside | row/avoidPageBreakInside | Table, Row | Allows/disallows page breaks inside table rows. This action is disabled if: the current selection does not contain a table the table does not allow page breaks the table is inside a header or footer Note: If several tables are selected and some of them don't allow page breaks, this option will be enabled but only applied to the tables that allow page breaks. | +| section | section | Section, Submenu | Default submenu for page layout for the first selected section. | +| section/differentFirstPage | section/differentFirstPage | Section | Section has different first page or not. | +| section/differentLeftRightPages | section/differentLeftRightPages | Section | Section has different left and right pages or not. | +| section/name/showDialog | section/name/showDialog | Section, showDialog | Displays a dialog allowing to enter the first selected section name. | +| section/remove | section/remove | Section | Deletes the first section that intersects the user’s selection regardless if the user has selected one or multiple sections. Disabled when only one section remains in the document. | +| section/reset | section/reset | Section | Resets all first selected section attributes to default attributes - which are inherited from doc attributes for background, border and padding (same as for embedded mode) and 2.5cm for page margins. First selected section column properties are also removed (so only default section properties will apply). | +| split | {paragraph/}split
    cell/split | Paragraph, Cell | Used with paragraph: splits paragraph. Used with cells: splits the selected cells (only cells that have been already merged may be split). | +| styleSheet | {paragraph \| image/}styleSheet?value={1<=number<=number of target style sheets} | Paragraph, Image, Submenu, showDialog | Applies Nth stylesheet to the selected target elements. With dialog, new stylesheet will use current attributes from the first selected target. (default target is paragraph) Ex: styleSheet?value=1 //apply first paragraph style sheet to the selected paragraphs and set it as paragraph stylesheets. | +| styleSheets | {paragraph \| image/}styleSheets | Paragraph, Image, Submenu | Default submenu for editing target stylesheets. | +| tabDecimalSeparator | tabDecimalSeparator?value={point \| comma \| pointOrComma \| system} | Document, Submenu | Defines the character used as decimal separator by decimal tabulations. | +| tableAlign | tableAlign?value={left \| center \| right}
    or
    table/tableAlign?value={left \| center \| right} | Table, Submenu | Specifies horizontal alignment for a table. | +| table/avoidPageBreakInside | table/avoidPageBreakInside | Table | Allows/disallows page breaks inside tables. Disabled if: the current selection does not contain at least one table the table is in a header or a footer | +| table/bottomCarryOverRow | table/bottomCarryOverRow | Table | Toggles between display/not display of carry-over rows (see Carry-over rows). | +| textAlign | textAlign?value={left \| right \| center \| justify \| initial} | Paragraph | Paragraph text alignment (initial=use right for rtl or left for ltr direction). | +| textBox | textBox | Submenu | Submenu with all actions available for the focused/selected text box | +| textBox/remove | textBox/remove | TextBox | Removes the selected text box | +| textIndent | textIndent?value= (may be negative) | Paragraph, Submenu | Paragraph text indentation (first line indentation). Ex: textIndent?value=2cm | +| textLinethrough | textLinethrough | Submenu | For menu commands only. Linethrough submenu (with style and color). | +| textLinethroughColor | textLinethroughColor?value={ \| currentColor} | Submenu, showDialog | Ex: textLinethroughColor?value=red | +| textLinethroughStyle | textLinethroughStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textLinethroughStyle?value=dotted | +| textShadow | textShadow | Submenu | For menu commands only. Default submenu for text shadow (with color and offset). | +| textShadowColor | textShadowColor?value={ \| none} | Submenu, showDialog | Changes shadow status or color for characters. Ex: textShadowColor?value=green | +| textShadowOffset | textShadowOffset?value= | Submenu | Only length in pt is supported. Ex: textShadowOffset?value=2pt | +| textTransform | textTransform?value={none \| capitalize \| uppercase \| lowercase \| small-uppercase} | Submenu | Formats text. Ex: textTransform?value=capitalize | +| textUnderline | textUnderline | Submenu | For menu commands only. Underline submenu (with style and color) | +| textUnderlineColor | textUnderlineColor?value={ \| currentColor} | Submenu, showDialog | Ex: textUnderlineColor?value=red | +| textUnderlineStyle | textUnderlineStyle?value={none \| solid \| dotted \| dashed \| double \| semi-transparent \| word} | Submenu | Ex: textUnderlineStyle?value=dotted | +| updateStyleSheet | {paragraph \| image/}updateStyleSheet | Paragraph, Image, Submenu | Updates first selected target stylesheet with first selected target current attributes (default target is paragraph) | +| userUnit | userUnit?value={cm \| mm \| in \| pt} | Submenu | Changes document layout unit (will be reflected on rulers). | +| verticalAlign | {paragraph \| row \| column \| cell \| textBox/}verticalAlign?value={top \| middle \| bottom} | Paragraph, Row, Column, Cell, TextBox, Submenu | Paragraph vertical alignment. Ex: verticalAlign?value=top. The effect depends on the minHeight value of the paragraph. | +| view | view | Submenu | For menu commands only. Default submenu for view settings. | +| visibleBackground | visibleBackground | Document | Shows/hides background, anchored pictures and text boxes | +| visibleEmptyImages | visibleEmptyImages | Document | Shows/hides a default black rectangle for images that cannot be loaded or computed (empty images or images in an unsupported format). | +| visibleFooters | visibleFooters | Document | Shows/hides footers. | +| visibleHeaders | visibleHeaders | Document | Shows/hides headers. | +| visibleHiddenChars | visibleHiddenChars | Document | Shows/hides hidden characters | +| visibleHorizontalRuler | visibleHorizontalRuler | Document | Shows/hides horizontal ruler. | +| visiblePageFrames | visiblePageFrames | Document | Shows/hides page frames. | +| visibleVerticalRuler | visibleVerticalRuler | Document | Shows/hides vertical ruler (Page mode only). | +| visibleTableBorders | visibleTableBorders | Document | Shows/hides internal and external table borders as dashed lines where no borders are defined. | +| widowAndOrphanControlEnabled | widowAndOrphanControlEnabled | Paragraph | Toggles between widow and orphan control mode. | +| width | {paragraph \| image \| textBox \| column/}width?value= \| auto | Paragraph, Image, TextBox, Column, Submenu | Target width (default target is paragraph). Auto value not available for text boxes (converted to 8 cm) and columns. Ex: image/width?value=50pt | +| zoom | zoom?value={25% <= percentage in Css <= 400%} | Document, Submenu | Changes document view zoom. Ex: zoom?value=120% | + +### Outras ações + +Outras ações padrão estão disponíveis nos formulários 4D e podem ser utilizadas nas áreas 4D Write Pro: + +* *Ações Edição*, tais como ações de copiar/colar. +* Ações *Fonte*, tais como FontBold ou fontSize. +* Ações *Expressões dinâmicas*, permitendo manejar a inserção de expressões. +* Ações *Correção ortográfica*. \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md index 8bcb7317d2a7d0..152f10565627d1 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user-legacy/using-a-4d-write-pro-area.md @@ -48,6 +48,8 @@ Pode controlar quebras automáticas em parágrafos usando as funcionalidades aba Essas opções podem ser estabelecidas usando o menu contextual, ou [atributos](../commands-legacy/4d-write-pro-attributes.md) (`wk avoid widows and orphans`, `wk page break inside paragraph`, ou [ações padrão](./defining-a-4d-write-pro-area.md#standard-actions) *widowAndOrphanControlEnabled*, *avoidPageBreakInside*. + + ## Fundo O fundo de documentos 4D Write e elementos de documentos (tabelas, parágrafos, seções, cabeçalhos/rodapés, etc) podem ser estabelecidos com os efeitos abaixo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md new file mode 100644 index 00000000000000..09990ca4034c8f --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/WritePro/user/user-new.md @@ -0,0 +1,34 @@ +--- +id: user-new +title: user WP +--- + +to import + + + +## Lists + +4D Write Pro supports two main types of lists: + +* unordered lists: where list items are marked with bullets, custom bullets, or images used as markers. +* ordered lists: where list items are marked with numbers or letters + +They can be created using: +* the toolbar or sidebar of the [4D Write Pro interface](https://doc.4d.com/4Dv20/4D/20.2/Entry-areas.300-6750367.en.html#5865253) +* the `listStyleType` or `listStyleImage` [standard actions](./standard-actions.md) , +* or [programmatically](../commands-legacy/4d-write-pro-attributes.md#lists) using [WP SET ATTRIBUTE](../commands/wp-set-attributes.md). + +When a list is created using a standard action (`listStyleType` or `listStyleImage`) or the toolbar/sidebar, 4D Write Pro automatically inserts a margin before the text so that the marker is positioned inside it. The value of the inserted margin corresponds to the offset of the default tab (`wk tab default`). + +![](../../assets/en/WritePro/margin-bullets.png) + +When the list is created using [the WP SET ATTRIBUTE command](../commands-legacy/4d-write-pro-attributes.md#lists), no specific margin is managed, by default the marker is added at the left boundary of the paragraph. The developer can add a custom margin if necessary. + +:::info Related blog post + +[4D Write Pro – Adding a margin automatically when bullets are set using standard actions]() + +::: + + diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullet.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..52737ade4cdf7c96ae595d418c364a93c89e8dad GIT binary patch literal 18358 zcmc$_XIK+a+cgTJg0z4jMVeAon)D7zl`bN^caR!7B!H+iX#!G02~9v$dJk0~gx--7 zAQE~f^v)Td_k7n^&Uw$@^CMTTJ(HQ)lfC!7*1hhvqh4#NkP$y5#>2xSQ+=iQ1`iJ( z2Yh0P?gB@8<1(y)FMO{zD)M-xgN*Ay;~&6jw174amOR(F8*J&#vLUU+!q9sfS~ zDEIHScz7!6s){e)`kQahg~SM-1hE{S$d2=)tL@YuX&5i`?DNp&(4y>P*=7d|w|^yP zi_r8C5D{5P_&NFJj`|z+cfb5i+-y83a!dEoEZM1WjG&D-za5VHk%yz$kJ|#{wo7)2Cn`?BL4VP7X+B`c&>Kam}iYr(+I2K)Vd9Zq~te0Ks`-xHi|?es%eCxh)< zgrs)6`YbL2Z?m$p{z!(%d9ai&Td=dT<^@_(ash{)(tv?Ry7m9FQQReZ-MMu%X))C5 zZBV}&kBL6Hx(+%^t=YNkMEf74wkCzZA|v&;t}k|nTB{%IT(t$EO*%u?Q&|REn?x;6 z+gHJRb+Yh~0N3!FEu-zjdH*vejhh`4|4Hpz{sz}(3t239j(Dwmu#*L@n-0jnd+M`{ z6@=;0`ojIffQh0A^|TeeY-T>I^iBA@U&}>ve{1Vr*wA9x^+an*fNQe(^(4Qm52b_O zIn6n2P-OPTVqW+3qPW$AY=r6WH3m8)eX)`Sm101csje6IVKEo8U3{@5n= zQYA8SjStCy#=G1KV(D)6eu`y4?_9(>`|rj*`6G8KxBEA?O!2gP$=&+fOd3pzs?}Kk&X1Yac_zE*DYeh&bo2*4PX0->=46rWaRhRIkQf#8@!tdE<}Cs zm1JoMmSq)VmW{6aD_-Xzb%UV3qBx!Z>}J~-)JJ*X2mC;8c@<;c44m&A%MghF>Bmr) zxjEI(^Q`X>@zKONTa`tdV+=yP2}f>Sx;ipn6(z1qIA_yU_IYok*Ij2l$L*ffPSliY z&-umNjGwmJWB1;h7IMWC z2~^7-Po=Mppmenf;V!qzIxdh?bpA_#1@#+iJjsbsB^x55(h-_3@ZD(unX6jA{=z1^gGD3e# z)UEmYxfcAAPBt@yq%B^~n~dd>d$+w&&Y!Gx57SD!d(}Wv3Xfn`YQ1@a-Nk@paxymF z8D*O`eK$+Hp@w%Y`kR*a9U)>TE$(n?yZ`X(K&h9>-hygr?KlH3MdR^UIBggEXP&I&)M9mp0a>_cG{0$3 z%%7iSWgat#T{;#Eq>Z>yA9-E|JWLx7z3+*`=3cO9%o~Nd$6XUOW?xZX&t$7wT)bKx zJC(XgI4^EQ-TB$M!V6h?Ygf+_TvyMnCnwoI3Ob=+4icWPKDyquxE8$LatI-n!>!UZ zCTPkvk8hih!~IJ>YQN)@bDt6{=;+})Dzdnu3l5qaYYZY8T*H?x&Ja+QGF3uawZ=}G zJ8?MB+ch&F7k-S8pY(e9Z!a8bnEI_0GL?QX>X>U0xh1*&GUweNj|1w6AfotVmM-Zwhxe$_TRG3j4Pt}q@0owLxIT8CfeT!D929rR9IoZh1oZeXi$E`KjVah00t+Eb zMV-7eC2M7C{pn?qN6;Z2bJAGr>EZi$?`z3mkpnjk@8TQK4Qgm1Kg;5kdCC4SyyBAyh^}%OwgWU@CSy1q36gscTDEAs<%aR}xGIPM=N;ZHoeYU- zJum_dL63(Pw$?&A#17mobo{`SH+P_Tn0A9DyS$LgeLviF_J!lMf(VyePQdyC)uDP^ zrvbMgfp!o5;IraMcNTa264c~uR(3<^s%Xo3-lzzIhK5;xhqwM}f)>}yNj$h+hD8#x zz(Z&no~b^D5OMDWP3+5^FfzyNI#=+yaL< zZ4TkM!Ntn8J2#w^Rn9!XSzI2pehn#3#Cn9_w_b^bFqd5pVRsH`_jI7gb)GEvdm|Pm zZfvH$^>gm9)4F4m)1;eCt?Lq4_1J-2#HzVYDaL#QKyLQ1;ENhq zSc!K%F>!}|%DRtqEUG3oh`2-V8^hqa&$7m4K|~E<17hJvn%JyDyll9NIW(_4zMsJ@ z#V*3E&!f)WN*LcfKx;66Kl&rAV_-ONO%B-_bg6l{Ab0gR&u@SCR_n|a|NGn~sVkOC z=gU#|OCP9Wi^1hinf>&F=(d_n#r8?-@%|f<;AyVf<~@#(_1HJ7CGK;-Ti2VTAUk(T zn;SzTu2C!K53$Tu`A)-%?uqsZ@eaU{R&Pd+w$kpi3$Lp`giO#!I?Vv#lbmqGAnoGXZq5 zHGt#>bI8<$L4@zd?)?3DvyJv23Mo%#HAmLc;%0n`Fl41y;(Nb0PyYVvD9dHO+yH>G z-Uj~LC&7_o=D~z4Yo;ACa)z;kVNrnklW{ka0IY%~6y8CzHHwd>FVh$yIBf-an z*Aa5;a$QhkY#Rt%NU(b*MAo!_azpJN;&+CorGc$H`+p%8v|01T2qDe(1u%S?bQSgH#H$A6+7U39_8)y|~)NLRNWa&#bPg6cr5=4$1d=F*mwR2V8B0 zWflsHW@p;3nWO#5X1)0Lez$@_^P~a!43uVOxL6mtF{i)qlT{1{(?23IM9`*v^I(2W zS=~*Me!~zp4C_mF>^qe!cIv&rd};F?i7u z%(8R#8*;$!++vvH zNC3^x_+k?uB7(UdI^S!%u-#uR<-cq)jnsMS)E#nJ2Fz)HS|1@_uG$G8lE}0$FZ=|R zYRs$?hRjodhv>76r0dJm!8vc-y}2Se&0GcqhG{G*%c6$81n11aCsv~aU)Q_toB2?b%c4LF0S%9#4#)N0Uw4L=VqAyyyK>ECU!k~Hh7xuQI=Bwl(3vbnY;tS} z-$gLWEX=y0nvsy#2gY%rSD-HH>V7^lyRY9R;1!^TTPBuU7t~1o=sy%X_H0l^y4fXZ z>|}gr+kbjJmBe%NWsq5xer=y#>$cM;xZ(WFabfj=@me0QbJ6Pp&3BV7;0$hb(bw%V zm%G#j*?Pwj)l4{O=Yc2$Gt665xveqhu&?=4TzgV?r3!YGiatp?`RbDkm7Tx4==-(y z}vAZ5P~#m?>C@pdN&ac*DK@`duW=cubg?qvJ- zd^fHt@)m+a^3X+pbetSRprgo;$G2LxrP}d`^AZ@*$Cy!zqO7c_!v2fOfz+TkQBTm+$t^ zY+u~=R{Psjzv=&sKq9|1!5mw_qc2TkikQ&Tuj6Lp>`H;6IQZk1E zpQ0IXoJrLaC`XE%$runj!6UkMkb-{%!IX+8JeDucUZZ9~nX-Urd8af&)FM0wd^vryBKci(2JY6*1mE zd!IXfiQmRT_BCkq#mQ9I)76L-8_KeK`RFo#>UV9D&&TAc!^M%zG0!?4nlUzhv6x|4 zLrBUgSoR7{EoqP0i>i@C^VRx8GkqheR7zli?2Bb38``oMFIC}L z8j8PP)4L^~X`@12rF2ZT?aTQmVGaE1hGwpMXlS40iA=qO9Es)N6wxmRJ}r>UC!&Rp z;W{(8w=Lb>XW3j7(WiR0-ti0Y-l{%ew(W0K5a&xJI9$IdllXbzs`NqVtz>RoSyilL zC4;xm2PN(GgQcUUAjas@;N_BJ{-H})%U38&-wggE%Pg&+<3SO}+ueJVlL|_8(4!1? z5&PPzX8~COEaGuA4eP&LB-VKLjR>%|(zl^33vq9*XwwX?eD#Bv>w_yc!bBfa02M|hqLeZrf*`AX_ zG4?38W^h>5l8ax+8k6<=oa*<+Obp$ogeMDnvUW6=BY1^Unur*xXddll5))H}mRz|# zK_14mmw~Rvz8GdhWpKbbo87zv4{b;L%NW;hj%#LKd1%YjyXwhh&{HjL3_7 z(3rcNv+K9eRhopn`*(7B`hzGuaTBE2lX#OgXjRIanf^mSj7#PR`b@ zPN#zD>Gm_G2*FGzmD*wkzh6sLXIK1ZO@=ARWrIwEZO`D+x~h=duB9pwY+KiSSuM64J=98Z$KqOz8hXYZX6!Q^vcLl6de?MWQ>Jp( z9z1Oxa^-Vb(0b~8mRih;IVc|+fCKOtap0D!QfKny&={+=t29U+wejfiZ=-i)gYd%m!uF+bhsLZrSp}eCdY>Pdx9WXXev*`wI`@2w07^MxTpkI0O;AUR z1IIKgA}xqn23g}5zLAhL>kH^?j6Qv;#|wfdX)-sK%io#`L_W1NXje;_%e;bej2SBX zHgacNCmUxQ&_$niMX?v^$y{8NQU-dcwUVt0A(Du-A?R-u=9?6a;B@_Ah21;`rC|Ev z-#pHg?OuwMuimtket;q{qvPeteTH(9$Zf6EW8Z>5s}E4DE#SL|qzT!Jiw%;6?UOG< zs^9CpzD?h!ITtMS3dpcf&aI0Ve=Meo-$=Z_?!;Yjc9d^0yW@?jHFy_f4(7qWnf0L# z3J3*Dz&VSanGD8HYMUlsfB-qZRcS> z-$BY^q*FKUqM`Ji&-~bAYMM&eR5;@_Ge^9HT$$?qjF>Z?^~&)&0kOew0*k7ccK=h` zS!)T2V1#B$ysp`GVD6+^2nLS6dvx&{8T3*wZRo476#ra&vJ=+6@qn5b-2xtMSBw6XZyH#OBFd-_bH=s|qxxnwt=f)CRs>ZK$P z)>Gj=xY0F1F?rK|KkF{JpPgwzD@97O2}2ytKug^`tKd&h(%VG{65dk}5q9Ne*)Y7^<%FJkq|4kU@<2dhp4^`v z1o-;F)~oPuF;<|N{l3>2_%IqZt@G*0hUNH{l{vRkD!Xk=0YW+`63L1NQI`IdT2Gz* z&X!WuO)WZ{)y?SP_t|k2>E3PX@mtIJt^eX8{#PK6wcPTUnA69C?=SO`jn-WoG&#{K(u2&$ zUDhVCUNtq_i7`9uJukC=m~|CgyiN{!S&*SEpg4W~9TOih<=*3@ZIt3Ztue8up_5t$EJJazu9A1}?*YJz)nn@Df%e$Q`y_; zoqgd=AxH{*kU_0g{b&;pd>lAi!+$V%v^eZ{K@}~Y`4hl-$nFkz__q%tM10%Fr&f2Oazt zL^;e?|80Q9tK`Ae*(-2>6i2f4d|>stZatl4c^wpLzb+iZ*SRzG-IpGFsR6$#>RoYm z{={s&-xfxLVwH`zvefRG(R^azsgI&j*~=A=R!6F2di`U}rUpU9r!%8OS^WdAv5|Gd zS|x|y#X4q@NG(XFQfL}|u4t_Z2TWy&+W(H#0 zwySxEzD5wH4N5JV7y^;wS=JEo#iH@r3~QA7oehp+j%1CFH7yEc>f`ij2m!ILuhqMh znuf-tAS>?f3!~%E#aGRW%F&jT*?k|nf5rPT2WU#Jm#H<5%dj|E$6GD5kqS;;ABvTP z?HPN{R;s&mPMeAHc{ehYlYey!#@lO7Wb?yKKWZ2xJ{5zsh2F{kCIbYr=(AbnTj4&B z%A8PTr+ZDWo0z+Sp-;O}6WjdWY4^!+jj1=oX9fBjeBj;pL<0Q_ru~e*zD)?kZ>9Lxiu%W`|Ie8c4?#phS6PYrZwg{Qcn!MDLo2V9f6JuF|qXSKY!c0MB2B>@2uN zzRY{0V2=V59J0xZ#O7SKf~b{7rj&2vtis&t!M0qFPwbbpiV~bN66jm)5jx6VEs6YF?g}FioKwj&?wJ`yo#(ii>%{uO%y+>pccuznwo%! zTk`)3&M0M=p22kvyt0T+O+pMh4CTA@WgaEYg@4t4w<6ML+PV6(w!%9THiRCj+9*G+ z>J_z7-Z5mFkLzl1eRj?5G8mvHh24H#9nui=J;zqIuS*0XH@Hh^&G@b{=}d1@yJ=R$ zRkhF|p2W2>dw_q@Xj4VYP$<@ML)q7UTHnwO7Sv+fvJ&HbT-jeU;mbBjT{gtb*GgV_ z5zw?dfJqVE{C_1a)}QHh?&Pj6G@;GT(^q{D76PQ!?D^hA>@|6LHyU`wEjHFi5b9pV zhAQ6I?T>t?Is363wE3CFqs?!Ij>fzxs%mM5g3^_n2Al`8zl_=ZTz+n|g_LuMzERE! z3$`{8+wi)V(h#m$&1={hwG)W-!@;t}%$AAC&oZ1P$_$|T>z{4@_mU}w7`syJiV&p@ zEJ>EGaR~swK-!y7tSCJF^Ms|h(slex!j?rcW|3qw8zr(MrTSjgMN9Tn?QP%r{5!S1 zku9GPiHlRc4%U_jnQG1DIIhPalm3lpJTgkpL~{jZG(j~t z_5MKrBI1}yq>VkLkB~oMONE4l+b+nxW>{gq_7O`cw!zU z7N#VfYrogaCnN$w|!TwJ%z&3{$Ua&21{YTt-k4CL5F7I@1I{O zRztM@_^qGop5$U%^t!(otXQ;`rE18f7zMBI?`4Ijg}}N}Si*L@+X`PcUN&;0AKA5} zY|qu78+LNI&Vw^)$#tc5rxEy*DMRP6jhP?+sU)_{b<4_hfxHRPyp747RdAo_`B#;2 zhgv0=x!3qpTb_s+9&kekkO^|X{Up5PSISOn#;M7na)WT<*cM0bfZ4~sw~vx8ZjJbg zUYJ00Yrq?yUDnvMjRR6V1uUfL4L={mXx5`V#Q{lf(|We9(<|$7<42U}m!TwhlGJ=; zqCsmTdZFT;m#8U~>AVxA$eJeM z*Z1X&zigUME<;ndRigHc@X zk_lJvAi%@!C^^Vb=tke7=ZC@I@X>`oQ5i?=nXTl^UCL;2y#8LP+Vh^c1@VhEvYOYC zWXFcL??(^E{3dGY-(>E7`~7qcy0lr@Joal9<~prf#C5-LoZ?F*4>)0yiF9V4#BgUk zxurTMTVD{<3!56H?^+cn8MS*X|7bAh?pwV+S}{weM?JR*Xzs@rtXp>rTw# z4ucX73*^3ZCmpzX3lw{hJ@7O}UhZYtLcm4VK`S<5(Pyh1Xzj?+%+m(J$<87VZ8VIT z?y45f(v!LDL^q`?*wwK|{i-&M;<5KryR#q_Mvq7(xu;~F73b?65MRa2?CTgAg|X(A zSA$}FmD!!bn?o#ifl4tu71DphWff$nIua13OHBq>aH6Znx1?fCYtCs~eaq%h3M?Hj z4jqND-F5+ZT1GtBw%H~d+_G%jUtx5Z;TK!aXzWsN{^Ds_Z?J3`Z(usqWBron{nH`I z#8x#jqc-66X(WBW&|nUPZi5*&K9K4l?fgz8%9G42b0-s#70(jZvjh%au-Y9VVHy>X za*crCQ=Xa2gVAl3Y^v7!dXFw-(MGMTd%$Pcm!Cd|?SVg4@Ph8ji!gi8kX%({F~06M zKg^2`SZ5HY9XRV!I;LVLlsP*x=rf?%8Wl-R6e4R$U`U+#qWhLKC}vhrY~ z_8EK>{TA}*$I|;3dwbD&Vp8f&!jlj^zAsjp0ZR@Hbg7v#19pHUBc60{^}J+ZUlJo5 zXXj_9hwUq`-#WJJceT8{U5ykh^f_CoN?y*UoxJmiSX+QA_(5-7^Z4bmlaCAdm@C@% za<^B65zPO#^rxhXX~+Y!e%gjmuiQ*`Qx`e>!_6TI5|J^;9X!Z^*ysl=;_2v#Y1(&5 z5|WXA+6NVp3N-H%n-+(ityoZNCi|r9HwC|39I?h|GQ+TboBrFBrDCn&}bc`}AG{e=xZ(KOh=(w)* zkWH_a?xxzssxwc{~cLm!r>Xq0-& zM7V%9^qx--6{wj85TOUms@}%RR?VD9Z+SOpM6K-$XlH&`T-%P$Ua__4e6>!_#hT~I zgYA10QrC=-`n2;*`NZ(r^yw9urwvOzI5#>OunmF!qe~=P{u3!EOYZy+UBdmNyc>@3 z9bV{S3BPuO;$wD2b!kfV$w|9YvWhm4wUw~Q zS4h^Dd$hfDgZC8JwbextX^PH+OJp)zC;LMVaQB8^mLx#~2kEpGr`{ruADUR>0v_iz zl10}qNrAP>`UTy3PP@b}#Kww>o8X(_X3uP<{J#ELN+kX3KRdvDOQKYs7Mw}=%hqPK z@q10fkR5CSsBYa4qmSpBL^isJdYP~N)>%dQC1$z^TyJ@mPi$>ZkMTLVKTeXkatVeN zw@biwV7^Eyy%Zhkd4HKsmXXp_X;-veMvW0#(R-pIvX6gW{Fk|{WV{uj!dCQOvuRf* z)ZegWSX-YhDNvi}aSEKN$>_mLnf|LfSjlLR8!aApPxJce0fZxH=OCv49e{I*VCnUT zVSMw;l`syGBE+;hgf7ue@Vz0aj%eiwP$}E)`Bp0Krc>oYVm4|A>;K>eb9meB?cRHo zeNQeb)#knl_fX}Wz`6c(U=O!*Bk9WpU4p0`H6CoGc$d{t-t*6I%bVFm*k2Zc2KsKB z3)@VsStq`osdg4i!p~%|m9T3Va_R~&vaflDK{lF-R(&(4%0@Wx*i~w5u}^5kx{!A0 zKDswZfzN1n&+_c}oe->`q0hAE3;)uuzGZItmyh_!z7rCt^`@VmN|5%YSD0gQKYG!C zVT_9gr!>%e+nm$J-{!}PEWd*HI$zcRX~ow089eNMxX+h$`g__xmH9V>Uu?FW zNZmh6Mv(gf=0458sEqLCXW6p@9wg2-8 z>gN0D8Y>f1p=*&(TU@Ew1#0DCfprgK*8g|l(a8voiViq3sd51+X zlM}uec5cW0T$MGb%X6_0+wHHf;9im1pT7hCV_Ywm^H!DfK#f}HcTk1ZH>Bjwn-lqO z`2Bj5eUiXy`5+yNP-5&orIuq%i+!W1Wyxr*oK%)l z<_7BI@3wc9!%Z&XZd0_Wumt5um?6o-uEb|qtTqSL`k zj80i3pDp_t`YoG&dqkCw_AnbOLYxNYx-8`=44Gmmnhc7s$iCJJNLC{!joDHB)Y{#a zeE9H?nvcd``Mmek!<&qkXhGuLkJPZ>Y6RgZkRFi$wdth}Cy*s#8Wq*`)ILlFVjh|H z$C}jpA|s?ca`zi(3dV7GT%mYdl2T{8JknhwePS*xnV#&?A-TZ&Shl(1{0Z&sQ%AuN2J%>=I0hMB3%RJpu8fR{P{D9clSwPixVABn@8s-dngHw`-QS zmE-=50~MiIGXG}8ne;jV^X!USa7>HH)(SZC@9CE64lwOVH9jY4rjW!P`Hkqw{o%D_>S%+z(Qnfq z4Ep;DtD$mo%ey!qkI1~OGr_W;_Xo2VDYGS-p-d7ti0z&{z}tywW})Eq_U@Y z^rhqRH8fF&_q)WV()6VpgfX{u@u>txv`dFDUzwo@Jm^2_EAjdDRnxh-syRdu#A!+? z314zW8LbpbAv^bza5F;)@hg8>7E^l^IH!Vrwc|7cOroA)jiq!>xJ6Y@8UvErPL9#yp z6fA&9b7X<$U6h>NwGAeK+Z-(mO^vB^YMFW2Kk3)dw*W4cuQF9jeM~vxYfV{3@K071 z3~Ah*dmQgq2#Gvs(oRRj$yzG;6!V-tkD+{DJ9sRRImwEC<)gm z^(|>tH4D+tzbNIkn?oTk!R#H9!PBQ>V1Ci~>CWc~o7>&s9?_KLcvJ~Q>Z>$+;DF_30)LtyR<)N^yDCE^3os80?I`fSX>E{de2d~ zivtUd+CD02`LSUT%$@IAPaMr>#@B$u`!9uGyi7V64nZ!fC|2VGlfPU8F8)4elG*_R zu&Oa+wR^$Blkx;xU-mLpwc$vA6K}of6Da9N{F!}?H`MByV$GrTpSqUo+yU=V^QL|SgQs^6IJ40p;#y2W;O;fu>SQJwtW zav2#Z`d$ed%^_BcG(w+&zW(2J@f%6($r8QqzCp0iB>*8U?<-QTxev+vR?W=#)*pSC2xU6-5DHMx;+Km{{P*YGZ3F{Z66v0IzyM z9+gF{lH_>Wn7mDwr-5=i4~HN8V8BJtE^mMGP5zYE^>C2 z+Y~$}uTCa{Tf}?-4ZDf&E&D9{*I!l1q?HQ{`av$pAI8@5yUje=ScMU z6d})*{9ANO{Ku`PRNmA?JO7!uUHSMT1J^Ua-gfJtv-lcH7~5f{aX?6-s7Tu>4bCHb z4&wO--7M*^R z<*cw)GkUTw7txs0U(Y~(d0E*LR=GAKW*~dWzL@Aa6&3l+ni3w@i~^E-H=FB_{t=Y)9~KCo`K`unT`kV^%=P2l=(AA9ThF ziq)=wBcMY*#3faZ*qiOx63zKx{<>>WOX*b)o|AqI{$?8wA7RKRVamch=$fiB?kPl3 z5go1swc$(QB0u$*Ay_^cW~FUh7H2&`EI;Py!HXBFC25!ii+LJp)phN}-s|%1$yc)p z+d1)`HvvPxpYMK~LzFs`FiB;cax(vx{8R?jFIj-O`P;pWFeiykAt>@Tem(OBn#f2w zQfmbuxb>tI)o^h;-w%;yTXd%Td#UVl_tNI7+g-RZE@ z_=C2LhIF^W3%}p;H2*5(E;oyu5*hOim$fv+lRxcvp&CJz`sl;F=Bd7gsf8HGGFj6> ze_ot&ga(MD(WmFGoJQ)}8Tf8KmVH8Akq2J5X*(|j;OH^ay`B4{A#>FM5LlX?G)(tz zOcB{mkO%#BWMnb?v}g6z!IOc8y#ExhO@)XgWwZc3?vc63!vbxoGLcdC32g$i=DD^3 zIb=pJRW=OYE!QTRp;Mke#<~7WtLiV-eD1RNI*7QQc|3{FOV3A-|7j}K#HkcwRd*Cv za#?PrkG!MOc7(~&n<~w~ZqZj1q(r7o3@MAP zTEcr2%-al^Z=ELi5uU$P)$XwTZ&dJskYgmMZQ4-b`sLExxS^tCQiHfqmcaDs3w^@l zoFZzOX-zq?B9qyQIp)aA-7O!Fv$49R>>x!OhL7wKklP9p->0TU1n9!2bck_(h57o0 z=xE42Pw?ov%olPv*O?qYuh$9C5Q_A~x&mGW){-HL$(7imBmjCJ_EQ0Srk?$l2KG#` z8k78gm|1bIg?E#LA3D8{YWJ&r$&@>3>}=}vurTi|g9@I=5nNl_Rd}D$EPw}#27H~4 z_RsEe*szz{ zXjf!pq!N@NjM;b_e+w+?#2xUZr$v16!HquQ?EAS&JW7H;eEJvNqkvte?DVTRE9-q= zbP5CE{%au0uhQld8~x-jRU0Rh*L$Ln5@_&AV|rtjcMp(%16BjBi|MopUXY4}+-7c; z_fPKWmC6hmsUViP^mX3si}`)|Q+UMl!{K+w6fdNMcroOxtU!4Bg52*M8v3w5Ob+YS zBRYHHU4|NRt`kTJ`U4pFDmJl(vf(M(+DF|t(ctm5GGG$yv{PFW3#$QhxcWIpnDM#i$C_$-G`l&45 zRzPGl`KX|66b_@;j$dRQ%xHFUTiM`DY9vk*tn(zH;{0cx*o!O^wE{T=p zsC-sM4sy+>o4Joz^LYM6hUeO|0H3seuQ1^AcbJ9sx!LS6$oQMBKdnt?^kSSXb$FXG5Kiuhv3bApUd+)r00p=p$DvvEr=K|j7 zUS4tZ7<+1CsJ%OA@yXRRZ1-EkA}>GBrIfvo3u&MOtkfl6Dm0QZbrD0z!`)oLo1|b) zu^LT4R~-$?ot_Sppkt-ZUC48IO!bf%vqlTp2!{}W=KwJ32#=tp?jJZBia)m#6~6$m zh&YYwpS>Gk2Y`dTn&!WEiv!bJ?d}J5e9ji#11{L|Ep5+zD<0?QM`SY9iP@b|U(!aG zH>6-Ohnfy`RFnfi@hcfBzCFfXC$$kX+)WrUsV0EO$#z(dL3bElhhNiOIF@pM7+M?!t1Et{ zDWqD3NbL#58|tC;f;rcvoX}%@_5y>aPGHr^5Y_?e>|{bWI!Iei)>+KRHkWpxg4=ly zJCqBSt)CyNT-aznXwavy2AQ7qEQppqm^PJK^-1NL+iYQjsNHoGd+1n$^`WZcVh%am z=U_Fy8-1!w-I(OC9QB{V>v4p@){u~$W%+SXcaJn`4U7{Y{Un<$b?lcq z12rV5e$x&f*P*fXrRs~%JhR}1S;Dw{A{(g}yM;|N+lWRpnoja0%m3QFG4e`~XcDz(_$ z#)Mk+h{w&Gre5j+vi*6b*=Sx)v_t&~FCLI_JsMkpv_jKn(dupNV9|VSL^| z(S$5Byr*UsS=DA28dI2;h6>{q?+Ccg55S46>ZmZke*4yLmV%HFCdr^u0Y@rC3*8_) zi@|wmw0x?LQ3T&)Y>x4D^!_<=gHC@fC{}X<@k6Ic3Sti=7`h^xCce2DgfuZ6Rc#7o z93%w*-EoPU&>7sjgXzN@KETMx4qj%yE4{40N{C^ez|4v`{w#~;^9Fyh$+cOXH*kN; zytw4-tBU!#c#e6fU4tnsU0)0BvjdL)zGncY(BK9PIkin?Kbn|=4BB-Q zHC#l#cgV{P_IHu{YSM2|`oS{z3R(9U8Y01X4)xPBgmDuNg=Nn>q=s0mD7s&bhx3dp zuvqbJLhSV=C@FzN*ar}imU}F6BT{%`lJ5|Ze!x?(kU^SRg!?^d9~N4C;IIb3$diAF zDy$8)+BZIw^m37pbdi_t&-0f8U!FRQFqEu1?XSLat0;k^?b!Dk8 z>TX0ogq+H8>}vXfk}$C-LOSlAy%e#YC~)7T=h@PZ_lKPT(anqLW@cHquvwB`%lHT} z<%sovi7|iz+xcH}=zn#lQt_^jWnX(=bFk*c{+m*xyVpCrD;BJ*Gf(~pQ^d%>+k3U3 zefQI;)|u|ekMDx9!_H=o539b1@)jh${`f{sPFVe6ULNw&ll6xLAijQ;-S^%|@3m1Y z@;G_#RhE1m3~{O|!p8#$m7|^Zw;n+R73I5ImLA{PVNZb_1uw4Mf?&R#kDnE!S!gMW z076KtFUZn~#ooGY=FV`|iymU5!AvKf%gzao?P<~e976g}g?r!w7wwDsnIBk+2Y|i| zNXj-pR-;Vj_EAL-=iFBM1=dsay&CMqD$`QZPqKapl3{cZdFq~>J`zjaKB=j`4g_sG zWQ^14iee$Ry(On71rL%ptqmIIMa-6FH1@;x`zDSI809EO>@0!oZh60R^5sOc{4ZyUXW#0?R+%`tSZ~e^fO4-?J?|j<+nh)3kEvr5E!tcJ_Ou+!V1$(PB zU=zIS*e3)AOAD!mbFd1f#kw6lV=qu)!6M|&=<4I}hmtK|;er23J&Bxd9GnW2YCkcbx(ueEtfu4_V z{%u*cla*KWrl(Uv)X4ku9{CL-pl)s6C~>;lq@k#fAGgY9+6ntJ!_zt3f>(svieyFD zRHO%<#)GuRMQH>_ybiwfD7lB#3#_+y+s5@t9}K?gVHC5vi~oV1ez|MFo0%B4G_;dT zOPFHN%Re-q=@`#OIzy&7@@E@xk;tQ&mHw}t0v5+h+?rkIyjXSno6@;=z^sjQUd1BS zzvtfn@k3;~<@SGH{_%EkktVp85v^bcwq*(Le;n0=Z+GZu=!}LA{{6#5rjY;kY7y%W VO{xx70-m+Q;OXk;vd$@?2>{vzGI9U_ literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/WritePro/margin-bullets.png new file mode 100644 index 0000000000000000000000000000000000000000..de7143eb0507419e39da91e2ee6cd717c4714586 GIT binary patch literal 17630 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 HoD!M Date: Fri, 28 Nov 2025 20:34:39 +0100 Subject: [PATCH 59/75] update webform class --- docs/API/WebFormClass.md | 4 ++-- versioned_docs/version-21/API/WebFormClass.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/API/WebFormClass.md b/docs/API/WebFormClass.md index 204d39ed54c721..8dbb4b7206aa72 100644 --- a/docs/API/WebFormClass.md +++ b/docs/API/WebFormClass.md @@ -76,7 +76,7 @@ This function does nothing if: If you [enable](#enablestate) or disable several states in the same user function, all modifications are sent at the same time to the client once the function ends. -For more information on web pages states, please refer to [States section on developer.qodly.com](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). @@ -101,7 +101,7 @@ This function does nothing if: If you enable or [disable](#disablestate) several states within the same user function, all modifications are sent at the same time to the client once the function ends. -For more information on web page states, please refer to [States section on developer.qodly.com](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Example diff --git a/versioned_docs/version-21/API/WebFormClass.md b/versioned_docs/version-21/API/WebFormClass.md index 204d39ed54c721..8dbb4b7206aa72 100644 --- a/versioned_docs/version-21/API/WebFormClass.md +++ b/versioned_docs/version-21/API/WebFormClass.md @@ -76,7 +76,7 @@ This function does nothing if: If you [enable](#enablestate) or disable several states in the same user function, all modifications are sent at the same time to the client once the function ends. -For more information on web pages states, please refer to [States section on developer.qodly.com](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). @@ -101,7 +101,7 @@ This function does nothing if: If you enable or [disable](#disablestate) several states within the same user function, all modifications are sent at the same time to the client once the function ends. -For more information on web page states, please refer to [States section on developer.qodly.com](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Example From 2c0e15709917d9d952d5103d699b5ff56452b9a1 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 1 Dec 2025 10:21:32 +0100 Subject: [PATCH 60/75] added target --- docs/Concepts/quick-tour.md | 2 +- versioned_docs/version-18/Concepts/quick-tour.md | 2 +- versioned_docs/version-19/Concepts/quick-tour.md | 2 +- versioned_docs/version-20-R10/Concepts/quick-tour.md | 2 +- versioned_docs/version-20/Concepts/quick-tour.md | 2 +- versioned_docs/version-21/Concepts/quick-tour.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/Concepts/quick-tour.md b/docs/Concepts/quick-tour.md index 7547dbfaeebd65..68fb952e598f44 100644 --- a/docs/Concepts/quick-tour.md +++ b/docs/Concepts/quick-tour.md @@ -318,7 +318,7 @@ You refer to an expression by the data type it returns. There are several expres |Col[5]|Collection element|A collection element is an expression that can be of any supported type| |$entitySel[0]|Entity|A element of an ORDA entity selection is an expression of the entity type. This kind of expression is **non-assignable**| -### Assignable vs non-assignable expressions +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} {#assignable-vs-non-assignable-expressions} An expression can simply be a literal constant, such as the number 4 or the string "Hello", or a variable like `$myButton`. It can also use operators. For example, 4 + 2 is an expression that uses the addition operator to add two numbers together and return the result 6. In any cases, these expressions are **non-assignable**, which means that you cannot assign a value to them. In 4D, expressions can be **assignable**. An expression is assignable when it can be used on the left side of an assignation. For example: diff --git a/versioned_docs/version-18/Concepts/quick-tour.md b/versioned_docs/version-18/Concepts/quick-tour.md index 5329bd867668eb..52e9da5db7893f 100644 --- a/versioned_docs/version-18/Concepts/quick-tour.md +++ b/versioned_docs/version-18/Concepts/quick-tour.md @@ -247,7 +247,7 @@ You refer to an expression by the data type it returns. There are several expres |Col[5]|Collection element|A collection element is an expression that can be of any supported type| |$entitySel[0]|Entity|A element of an ORDA entity selection is an expression of the entity type. This kind of expression is **non-assignable**| -### Assignable vs non-assignable expressions +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} An expression can simply be a literal constant, such as the number 4 or the string "Hello", or a variable like `$myButton`. It can also use operators. For example, 4 + 2 is an expression that uses the addition operator to add two numbers together and return the result 6. In any cases, these expressions are **non-assignable**, which means that you cannot assign a value to them. In 4D, expressions can be **assignable**. An expression is assignable when it can be used on the left side of an assignation. For example: diff --git a/versioned_docs/version-19/Concepts/quick-tour.md b/versioned_docs/version-19/Concepts/quick-tour.md index 01263fedb859f9..98b472784c52c6 100644 --- a/versioned_docs/version-19/Concepts/quick-tour.md +++ b/versioned_docs/version-19/Concepts/quick-tour.md @@ -315,7 +315,7 @@ You refer to an expression by the data type it returns. There are several expres |Col[5]|Collection element|A collection element is an expression that can be of any supported type| |$entitySel[0]|Entity|A element of an ORDA entity selection is an expression of the entity type. This kind of expression is **non-assignable**| -### Assignable vs non-assignable expressions +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} An expression can simply be a literal constant, such as the number 4 or the string "Hello", or a variable like `$myButton`. It can also use operators. For example, 4 + 2 is an expression that uses the addition operator to add two numbers together and return the result 6. In any cases, these expressions are **non-assignable**, which means that you cannot assign a value to them. In 4D, expressions can be **assignable**. An expression is assignable when it can be used on the left side of an assignation. For example: diff --git a/versioned_docs/version-20-R10/Concepts/quick-tour.md b/versioned_docs/version-20-R10/Concepts/quick-tour.md index 103b219de54170..8488983019d49e 100644 --- a/versioned_docs/version-20-R10/Concepts/quick-tour.md +++ b/versioned_docs/version-20-R10/Concepts/quick-tour.md @@ -318,7 +318,7 @@ You refer to an expression by the data type it returns. There are several expres |Col[5]|Collection element|A collection element is an expression that can be of any supported type| |$entitySel[0]|Entity|A element of an ORDA entity selection is an expression of the entity type. This kind of expression is **non-assignable**| -### Assignable vs non-assignable expressions +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} An expression can simply be a literal constant, such as the number 4 or the string "Hello", or a variable like `$myButton`. It can also use operators. For example, 4 + 2 is an expression that uses the addition operator to add two numbers together and return the result 6. In any cases, these expressions are **non-assignable**, which means that you cannot assign a value to them. In 4D, expressions can be **assignable**. An expression is assignable when it can be used on the left side of an assignation. For example: diff --git a/versioned_docs/version-20/Concepts/quick-tour.md b/versioned_docs/version-20/Concepts/quick-tour.md index 103b219de54170..8488983019d49e 100644 --- a/versioned_docs/version-20/Concepts/quick-tour.md +++ b/versioned_docs/version-20/Concepts/quick-tour.md @@ -318,7 +318,7 @@ You refer to an expression by the data type it returns. There are several expres |Col[5]|Collection element|A collection element is an expression that can be of any supported type| |$entitySel[0]|Entity|A element of an ORDA entity selection is an expression of the entity type. This kind of expression is **non-assignable**| -### Assignable vs non-assignable expressions +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} An expression can simply be a literal constant, such as the number 4 or the string "Hello", or a variable like `$myButton`. It can also use operators. For example, 4 + 2 is an expression that uses the addition operator to add two numbers together and return the result 6. In any cases, these expressions are **non-assignable**, which means that you cannot assign a value to them. In 4D, expressions can be **assignable**. An expression is assignable when it can be used on the left side of an assignation. For example: diff --git a/versioned_docs/version-21/Concepts/quick-tour.md b/versioned_docs/version-21/Concepts/quick-tour.md index 7547dbfaeebd65..5cc1d247e13bb2 100644 --- a/versioned_docs/version-21/Concepts/quick-tour.md +++ b/versioned_docs/version-21/Concepts/quick-tour.md @@ -318,7 +318,7 @@ You refer to an expression by the data type it returns. There are several expres |Col[5]|Collection element|A collection element is an expression that can be of any supported type| |$entitySel[0]|Entity|A element of an ORDA entity selection is an expression of the entity type. This kind of expression is **non-assignable**| -### Assignable vs non-assignable expressions +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} An expression can simply be a literal constant, such as the number 4 or the string "Hello", or a variable like `$myButton`. It can also use operators. For example, 4 + 2 is an expression that uses the addition operator to add two numbers together and return the result 6. In any cases, these expressions are **non-assignable**, which means that you cannot assign a value to them. In 4D, expressions can be **assignable**. An expression is assignable when it can be used on the left side of an assignation. For example: From 76e549fcf64f9b52440e16ab0e3f793e58c73ed6 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 1 Dec 2025 10:32:46 +0100 Subject: [PATCH 61/75] New Crowdin updates (#3015) * New translations collectionclass.md (French) * New translations webformclass.md (French) * New translations webformitemclass.md (French) * New translations command-index.md (French) * New translations web_server.md (French) * New translations collectionclass.md (French) * New translations collectionclass.md (French) * New translations webformclass.md (French) * New translations webformitemclass.md (French) * New translations command-index.md (French) * New translations web_server.md (French) * New translations operators.md (Spanish) * New translations webformclass.md (Spanish) * New translations webformitemclass.md (Spanish) * New translations command-index.md (Spanish) * New translations tcpeventclass.md (Spanish) * New translations web_server.md (Spanish) * New translations datastoreclass.md (Spanish) * New translations tcpeventclass.md (Spanish) * New translations datastoreclass.md (Spanish) * New translations tcpeventclass.md (Spanish) * New translations webformclass.md (Spanish) * New translations webformitemclass.md (Spanish) * New translations command-index.md (Spanish) * New translations web_server.md (Spanish) * New translations webformclass.md (Japanese) * New translations webformitemclass.md (Japanese) * New translations command-index.md (Japanese) * New translations web_server.md (Japanese) * New translations webformclass.md (Japanese) * New translations webformitemclass.md (Japanese) * New translations command-index.md (Japanese) * New translations web_server.md (Japanese) * New translations webformclass.md (Portuguese, Brazilian) * New translations webformitemclass.md (Portuguese, Brazilian) * New translations command-index.md (Portuguese, Brazilian) * New translations web_server.md (Portuguese, Brazilian) * New translations webformclass.md (Portuguese, Brazilian) * New translations webformitemclass.md (Portuguese, Brazilian) * New translations command-index.md (Portuguese, Brazilian) * New translations web_server.md (Portuguese, Brazilian) * New translations webformclass-pic1.png (French) * New translations webformclass-pic2.png (French) * New translations webformclass-pic3.png (French) * New translations web-event1.png (French) * New translations web-event2.png (French) * New translations web-event3.png (French) * New translations web-event4.png (French) * New translations web-event.md (French) * New translations web-form.md (French) * New translations webformclass-pic1.png (French) * New translations webformclass-pic2.png (French) * New translations webformclass-pic3.png (French) * New translations web-event1.png (French) * New translations web-event2.png (French) * New translations web-event3.png (French) * New translations web-event4.png (French) * New translations web-event.md (French) * New translations web-form.md (French) * New translations webformclass-pic1.png (Spanish) * New translations webformclass-pic2.png (Spanish) * New translations webformclass-pic3.png (Spanish) * New translations web-event1.png (Spanish) * New translations web-event2.png (Spanish) * New translations web-event3.png (Spanish) * New translations web-event4.png (Spanish) * New translations web-event.md (Spanish) * New translations web-form.md (Spanish) * New translations webformclass-pic1.png (Spanish) * New translations webformclass-pic2.png (Spanish) * New translations webformclass-pic3.png (Spanish) * New translations web-event1.png (Spanish) * New translations web-event2.png (Spanish) * New translations web-event3.png (Spanish) * New translations web-event4.png (Spanish) * New translations web-event.md (Spanish) * New translations web-form.md (Spanish) * New translations webformclass-pic1.png (Japanese) * New translations webformclass-pic2.png (Japanese) * New translations webformclass-pic3.png (Japanese) * New translations web-event1.png (Japanese) * New translations web-event2.png (Japanese) * New translations web-event3.png (Japanese) * New translations web-event4.png (Japanese) * New translations web-event.md (Japanese) * New translations web-form.md (Japanese) * New translations webformclass-pic1.png (Japanese) * New translations webformclass-pic2.png (Japanese) * New translations webformclass-pic3.png (Japanese) * New translations web-event1.png (Japanese) * New translations web-event2.png (Japanese) * New translations web-event3.png (Japanese) * New translations web-event4.png (Japanese) * New translations web-event.md (Japanese) * New translations web-form.md (Japanese) * New translations webformclass-pic1.png (Portuguese, Brazilian) * New translations webformclass-pic2.png (Portuguese, Brazilian) * New translations webformclass-pic3.png (Portuguese, Brazilian) * New translations web-event1.png (Portuguese, Brazilian) * New translations web-event2.png (Portuguese, Brazilian) * New translations web-event3.png (Portuguese, Brazilian) * New translations web-event4.png (Portuguese, Brazilian) * New translations web-event.md (Portuguese, Brazilian) * New translations web-form.md (Portuguese, Brazilian) * New translations webformclass-pic1.png (Portuguese, Brazilian) * New translations webformclass-pic2.png (Portuguese, Brazilian) * New translations webformclass-pic3.png (Portuguese, Brazilian) * New translations web-event1.png (Portuguese, Brazilian) * New translations web-event2.png (Portuguese, Brazilian) * New translations web-event3.png (Portuguese, Brazilian) * New translations web-event4.png (Portuguese, Brazilian) * New translations web-event.md (Portuguese, Brazilian) * New translations web-form.md (Portuguese, Brazilian) --- .../current/API/TCPEventClass.md | 4 +- .../current/API/WebFormClass.md | 156 ++++++++++------- .../current/API/WebFormItemClass.md | 82 +++++---- .../assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes .../assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes .../assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes .../current/assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes .../current/assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes .../current/assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes .../current/assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes .../current/commands/command-index.md | 2 + .../current/commands/theme/Web_Server.md | 2 + .../current/commands/web-event.md | 97 +++++++++++ .../current/commands/web-form.md | 46 +++++ .../version-20-R10/API/DataStoreClass.md | 18 +- .../version-20-R10/API/TCPEventClass.md | 4 +- .../version-20/Concepts/operators.md | 2 +- .../version-21/API/DataStoreClass.md | 2 +- .../version-21/API/TCPEventClass.md | 4 +- .../version-21/API/WebFormClass.md | 156 ++++++++++------- .../version-21/API/WebFormItemClass.md | 82 +++++---- .../assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes .../assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes .../assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes .../assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes .../assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes .../assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes .../assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes .../version-21/commands/command-index.md | 2 + .../version-21/commands/theme/Web_Server.md | 2 + .../version-21/commands/web-event.md | 97 +++++++++++ .../version-21/commands/web-form.md | 46 +++++ .../current/API/CollectionClass.md | 2 +- .../current/API/WebFormClass.md | 156 ++++++++++------- .../current/API/WebFormItemClass.md | 82 +++++---- .../assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes .../assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes .../assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes .../current/assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes .../current/assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes .../current/assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes .../current/assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes .../current/commands/command-index.md | 6 +- .../current/commands/theme/Web_Server.md | 2 + .../current/commands/web-event.md | 97 +++++++++++ .../current/commands/web-form.md | 46 +++++ .../version-20-R10/API/CollectionClass.md | 2 +- .../version-21/API/CollectionClass.md | 2 +- .../version-21/API/WebFormClass.md | 156 ++++++++++------- .../version-21/API/WebFormItemClass.md | 82 +++++---- .../assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes .../assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes .../assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes .../assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes .../assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes .../assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes .../assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes .../version-21/commands/command-index.md | 6 +- .../version-21/commands/theme/Web_Server.md | 2 + .../version-21/commands/web-event.md | 97 +++++++++++ .../version-21/commands/web-form.md | 46 +++++ .../current/API/WebFormClass.md | 158 +++++++++++------- .../current/API/WebFormItemClass.md | 82 +++++---- .../assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes .../assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes .../assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes .../current/assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes .../current/assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes .../current/assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes .../current/assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes .../current/commands/command-index.md | 2 + .../current/commands/theme/Web_Server.md | 2 + .../current/commands/web-event.md | 97 +++++++++++ .../current/commands/web-form.md | 46 +++++ .../version-21/API/WebFormClass.md | 158 +++++++++++------- .../version-21/API/WebFormItemClass.md | 82 +++++---- .../assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes .../assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes .../assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes .../assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes .../assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes .../assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes .../assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes .../version-21/commands/command-index.md | 2 + .../version-21/commands/theme/Web_Server.md | 2 + .../version-21/commands/web-event.md | 97 +++++++++++ .../version-21/commands/web-form.md | 46 +++++ .../current/API/WebFormClass.md | 156 ++++++++++------- .../current/API/WebFormItemClass.md | 82 +++++---- .../assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes .../assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes .../assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes .../current/assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes .../current/assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes .../current/assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes .../current/assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes .../current/commands/command-index.md | 2 + .../current/commands/theme/Web_Server.md | 2 + .../current/commands/web-event.md | 97 +++++++++++ .../current/commands/web-form.md | 46 +++++ .../version-21/API/WebFormClass.md | 156 ++++++++++------- .../version-21/API/WebFormItemClass.md | 82 +++++---- .../assets/en/API/webformClass-pic1.png | Bin 0 -> 4180 bytes .../assets/en/API/webformClass-pic2.png | Bin 0 -> 4421 bytes .../assets/en/API/webformClass-pic3.png | Bin 0 -> 4018 bytes .../assets/en/commands/web-event1.png | Bin 0 -> 6464 bytes .../assets/en/commands/web-event2.png | Bin 0 -> 50241 bytes .../assets/en/commands/web-event3.png | Bin 0 -> 2889 bytes .../assets/en/commands/web-event4.png | Bin 0 -> 3082 bytes .../version-21/commands/command-index.md | 2 + .../version-21/commands/theme/Web_Server.md | 2 + .../version-21/commands/web-event.md | 97 +++++++++++ .../version-21/commands/web-form.md | 46 +++++ 113 files changed, 2392 insertions(+), 740 deletions(-) create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic2.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic3.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event1.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/commands/web-event.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/commands/web-form.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic2.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic3.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event1.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-event.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-form.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic2.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic3.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event1.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/commands/web-event.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/commands/web-form.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic2.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic3.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event1.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-event.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-form.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic2.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic3.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event1.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/commands/web-event.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/commands/web-form.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic2.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic3.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event1.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-21/commands/web-event.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/version-21/commands/web-form.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic2.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic3.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event1.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/commands/web-event.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/commands/web-form.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic2.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic3.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event1.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-21/commands/web-event.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/version-21/commands/web-form.md diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md index fb2d8d27b187e0..53282bc91a6fc1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/TCPEventClass.md @@ -3,7 +3,7 @@ id: TCPEventClass title: TCPEvent --- -La clase `TCPEvent` ofrece información sobre los eventos que se producen durante el ciclo de vida de una conexión TCP. It is generated when a [TCPConnection](TCPConnectionClass.md) is opened and is typically utilized in callbacks such as `onConnection`, `onData`, `onError`, and others. +La clase `TCPEvent` ofrece información sobre los eventos que se producen durante el ciclo de vida de una conexión TCP. Un evento se genera cuando se abre una [TCPConnection](TCPConnectionClass.md) y se utiliza normalmente en retrollamadas tales como `onConnection`, `onData`, `onError` y otras.
    Historia @@ -51,7 +51,7 @@ La propiedad `.data` contiene los datos asoci :::note -When working with low-level TCP/IP connections, keep in mind there is no guarantee that all data will arrive in a single packet. Los datos llegan en orden, pero pueden fragmentarse a través de múltiples paquetes. +Cuando trabaje con conexiones TCP/IP de bajo nivel, tenga en cuenta que no hay garantía de que todos los datos lleguen en un solo paquete. Los datos llegan en orden, pero pueden fragmentarse a través de múltiples paquetes. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormClass.md index b22060e96f189f..0f9f75307d510d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -La clase `WebForm` contiene funciones y propiedades que permiten manejar sus componentes de webforms Qodly. Esta clase se detalla en la [documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass). +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    Historia @@ -18,14 +18,12 @@ La clase `WebForm` contiene funciones y propiedades que permiten manejar sus com | | | ------------------------------------------------------------------------------------------------------------------------------- | -| [](#componentname)
    | +| [](#componentname)
    | | [](#disablestate)
    | | [](#enablestate)
    | | [](#seterror)
    | | [](#setmessage)
    | | [](#setwarning)
    | -| [](#web-form)
    | -| [](#web-event)
    | ### *.componentName* @@ -33,9 +31,28 @@ La clase `WebForm` contiene funciones y propiedades que permiten manejar sus com #### Descripción -Los componentes de los webforms son los objetos disponibles directamente como propiedades de estos webforms. +The components of web pages are objects that are available directly as properties of these web pages. -Para más información, consulte la [descripción de `.componentName` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#componentname). +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### Ejemplo + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page + +``` + +:::info + +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. + +::: ### .disableState() @@ -43,24 +60,24 @@ Para más información, consulte la [descripción de `.componentName` en la docu -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | --------------------------------------------------- | -| state | string | -> | Nombre del estado a desactivar en el formulario web | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ------------------------------------------ | +| state | string | -> | Name of state to disable from the web page | #### Descripción -La función `.disableState()` desactiva la renderización del *estado* en el formulario web actual. +The `.disableState()` function disables the rendering of the *state* in the current web page. Esta función no hace nada si: -- el *estado* no está habilitado actualmente en el formulario web, -- el *estado* no existe para el formulario web. +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. Si [activa](#enablestate) o desactiva varios estados en la misma función usuario, todas las modificaciones se envían al mismo tiempo al cliente una vez finalizada la función. -Para más información sobre los estados de los formularios web, consulte [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -68,24 +85,24 @@ Para más información sobre los estados de los formularios web, consulte [devel -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ------------------------------------------------ | -| state | string | -> | Nombre del estado a activar en el formulario web | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ---------------------------------------- | +| state | string | -> | Name of state to enable on the web pages | #### Descripción -La función `.enableState()` activa la renderización del *estado* en el formulario web actual. +The `.enableState()` function enables the rendering of the *state* in the current web page. Esta función no hace nada si: -- el *estado* ya ha sido activado en el formulario web, -- el *estado* no existe para el formulario web. +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. Si activa o [desactiva](#disablestate) varios estados dentro de la misma función usuario, todas las modificaciones se envían al mismo tiempo al cliente una vez que la función termina. -Para más información sobre los estados de los formularios web, consulte [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Ejemplo @@ -104,17 +121,34 @@ Function authenticationError() -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ----------------------------------------------- | -| msg | string | -> | Mensaje de error a mostrar en el formulario web | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ---------------------------------------- | +| msg | string | -> | Error message to display in the web page | #### Descripción -La función `.setError()` envía *msg* como mensaje de error al formulario web. +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". + +#### Ejemplo + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Para más información, consulte la [descripción de `.setError()` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#seterror). +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -122,68 +156,72 @@ Para más información, consulte la [descripción de `.setError()` en la documen -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ----------------------------------------------------- | -| msg | string | -> | Mensaje de información a mostrar en el formulario web | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ---------------------------------------------- | +| msg | string | -> | Information message to display in the web page | #### Descripción -La función `.setMessage()` envía *msg* como mensaje de información al formulario web. +The `.setMessage()` function sends *msg* as an information message to the web page. -Para más información, consulte la [descripción de `.setMessage()` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#setmessage). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() - -**.setWarning**( *msg* : string) +#### Ejemplo - +```4d +shared singleton Class constructor() +exposed function myMessage() -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | -------------------------------------------------------- | -| msg | string | -> | Mensaje de advertencia para mostrar en el formulario web | +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setMessage("My information message") -#### Descripción +``` -La función `.setWarning()` envía *msg* como mensaje de advertencia al formulario web. +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Para más información, consulte la [descripción de `.setWarning()` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#setwarning). +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + -| Parámetros | Tipo | | Descripción | -| ---------- | -------------------------- | :-------------------------: | ---------------------------- | -| Resultado | 4D.WebForm | <- | Nuevo objeto proxy `WebForm` | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ------------------------------------------ | +| msg | string | -> | Warning message to display in the web page | #### Descripción -El comando `Web Form` devuelve un objeto proxy `4D.WebForm` que permite interactuar con el formulario web. +The `.setWarning()` function sends *msg* as a warning message to the web page. -Para más información, consulte la [descripción de `webForm` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webform). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". -## Web Event +#### Ejemplo -**Web Event** : Object +```4d +shared singleton Class constructor() +exposed function myWarning() - +var myForm : 4D.WebForm +myForm:=web Form -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-------------------------: | ----------- | -| Resultado | object | <- | object | +myForm.setWarning("My warning message") - +``` -#### Descripción +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: + +![](../assets/en/API/webformClass-pic3.png) -El comando `Web Event` devuelve un objeto con información sobre un evento desencadenado vinculado a un componente de formulario web. +## Ver también -Para más información, consulte la [descripción de `webEvent` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webevent). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md index a95b62494371ff..25a53ce63f5336 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md @@ -3,9 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -Los objetos `4D.WebFormItem` son propiedades del objeto [`4D.WebForm`](WebFormItemClass.md) devuelto por el comando [`Web Form`](WebFormClass.md#web-form). +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -La clase `WebFormItem` se detalla en la [documentación Qodly](https://developer.qodly.com/docs/language/WebFormItemClass). +Los objetos `4D.WebFormItem` son propiedades del objeto [`4D.WebForm`](WebFormClass.md) devuelto por el comando [`Web Form`](../commands/web-form.md). + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    Historia @@ -24,29 +28,27 @@ La clase `WebFormItem` se detalla en la [documentación Qodly](https://developer | [](#removecssclass)
    | | [](#show)
    | -### .hide() +### .addCSSClass() -**.hide**() +**.addCSSClass**(*className* : string) - + -| Parámetros | Tipo | | Descripción | -| ---------- | ---- | :-: | ---------------------------- | -| | | | No requiere ningún parámetro | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | --------------------------------------------- | +| className | string | -> | Nombre de la clase CSS a añadir al componente | #### Descripción -La función `.hide()` oculta el componente. - -Para más información, consulte la [descripción de `.hide()` en la documentación Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#hide). +La función `.addCSSClass` añade la clase especificada en *className* al componente. -### .show() +### .hide() -**.show**() +**.hide**() - + | Parámetros | Tipo | | Descripción | | ---------- | ---- | :-: | ---------------------------- | @@ -56,27 +58,27 @@ Para más información, consulte la [descripción de `.hide()` en la documentaci #### Descripción -La función `.show()` hace visible el componente. - -Para más información, consulte la [descripción de `.show()` en la documentación Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#show). - -### .addCSSClass() - -**.addCSSClass**(*className* : string) +La función `.hide()` oculta el componente. - +#### Ejemplo -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | --------------------------------------------- | -| className | string | -> | Nombre de la clase CSS a añadir al componente | +To call a function that hides an image when the user clicks a button: - +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -#### Descripción +```4d -La función `.addCSSClass` añade la clase especificada en *className* al componente. +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` -Para más información, consulte la [descripción de `.addCSSClass` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass). +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. ### .removeCSSClass() @@ -94,7 +96,27 @@ Para más información, consulte la [descripción de `.addCSSClass` en la docume La función `.removeCSSClass()` elimina la clase especificada en *className* del componente. -Para más información, consulte la [descripción de `.removeCSSClass()` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass). +### .show() + +**.show**() + + + +| Parámetros | Tipo | | Descripción | +| ---------- | ---- | :-: | ---------------------------- | +| | | | No requiere ningún parámetro | + + + +#### Descripción + +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + +## Ver también + +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 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 J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 zcmV+l4E6JgP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D3!h0uK~#8N?cIM= zRAm~#@h{O#=D;dy1MX;wsAyn6CRb@Q%goc1g{hQM3Z8-rs0A}Zr!W;YkxXc}v4UJ3 z)6rET!4eN4nYNL~CJQqOjg@2>C*?;lX~QA*kGcH1Ilzb}8}H|wIR~EieeZqlg?V`I zeeWFHh7B9mh@`f*7C%3~rf&s75dQG4k_QAq5PA|(1O-9p(L@mx1ffS0MNklg9!(TM zK@fU0H?cb0{iswbJUu;ecXyXJ34+iGjg5_*KYyOOx;pH3yS%v#F%#@&R4NsH`}P$D zP!PJn&CQK#uf3K50|uZ}D&@^>h$7g{czSxuLxLb&BsVuVJUl$);Wk7O>}JFaP!KMy zUcGwBLv4s6C)gZsLAD27?}*Jl-Bx$M|W{JsL&Cj62X? z@h7Hq=nW}E$iwaN8N>M7#-MH$QU{J_d|>NH7e%IEN_HtL;S#$}t!Do738cLCI=B91 zoV>ZyE`1Ta^##)3N+NW$C#oA}keF&@{%!J3zZWg@-!ZayRsbG-0tsGhAU!?^_=r8Z zAF%hJyuX98wJ08W_mD<;nQ{kWAuR-!Sf}WFjX8;^P68#|z0!Ng}%(Vhni% z)D@x_J_5_}N&@;4g)ZkpUNQor7S6#7f8!VanJ0y$qU8jVICYU_cQ+4!&r-~Zsnu%RkATSWe*l^72JsL?$eN3hlx zud8gF{_YcuD~y;Qc$tk4LuU9=vLjP44L`;1pM04-+8b=AFu#{V+8!(Fc`2mbS%+!S zQnD@5{>Da;y5Lr^G3VxJ5_t5G@jxzj+} zhoz1gm46*(#V~v;Ohm6TqkA@?(hP=fyGx z81uBAaP2SbUlU8{G83ih`-omRx$Rh`0)?NJF=umFGDnZ`^Ln)N^hDhRx@8N{KSAdhtMSJE{t`l;&!DJR5aG|vY}MJB$>#H(LF7U~z{KWa2jJ{`lGZ@kWT#mCtA&x`+a;&Kt3x?0t1JY6A52tBmd9mfJy=OU#;@q6rQz#yL2&aDI%?)6fFBm+j|VVXD9Bn-9G_;#W8YIvMI7yDcYGr zZc||euzbPN^|^e0#LCPYeW^01l2K3!C-TX7{R>V>n`!^}Y#hr=BXggbQmKFSnoNq- zI^t$`BF84J&uu|5Hv9MN{ri5bl#-uX#OeMT0-O3eIghU9DRfSsK7B}7l*n~z$Io-X zb=NT?J^oS~dUn-rrg5zqGVqGVyF3&k?!C%awapUNv~UaQ&nz7s_88n?6j0RE7i7o z0IF^Ec=VOc98seiC=ZrFD*gs?cE%!s;uOl^f%k|yBN-XJ)J5zv6-Li zYx%jpmVy(T<<0P%kv&_JaIDpwns_I$_ zhUCEU3KS!P2$62Z`8+a}fPO7)ozA%%_^zTFd$pOg=i-QaE)HWEcu~!Mc}Jfy#EzA| z9vj7YUmMn=V9G0kz?sC~+cI;~&W&U8^`|J@T+|$M*`ZRb%3<6xP1>$cFt_+BDL;}e z@5y%+)p(DNrD-Wf8>3~A^oOd`$JbiHN=)CX(TU^0nn-c{9AWje_$*B<{{5XSb2y zK4vo4eS~FQGF!?<@N7mNIlJ;mpV6PA?`80*d^`YVHWZ!3&)<`h1DhP7asz9&oMd>M zk(^z5y0wwlbnwTxRV?ejqo4sTDTpj8jcx@5ML3?*F3%P`GOiF6Ou zwVbcK{0$q~&tz7bOqkv^5g+(7`R|+L-JsgWpcqFV(}Ia`Xa^Yuj)JjbQ!$#^X^u9N ziTJw}?0+K#V^^lX79%NJi}8L~+V0w!czWw)5j;1 zzsf{WZPR!A$;df|dYY6=j6X_g0_QR(=ka3m6fP{`#l>w3U`Qde-feg$2O{>y2BQzpkmN;g#h}u%15M zrcXyM>FTf`T+o;KWbVwAy>@b-Sl&?(T+`U-n5Wg$)UayBQkM&0N5o99o4M>W!N?R$ z!;1+`xcEm31mXWpdow{%1iP8bUIYc92Wqbfipya^5PCFG1O-9(Luamo?f?J) literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/command-index.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/command-index.md index 5d47e3630c0ef4..16ae77a333a7b0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/command-index.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/command-index.md @@ -1288,6 +1288,8 @@ title: Comandos por nombre [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md index 9a392d36ecc364..3a6f378477ddc9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md @@ -7,6 +7,8 @@ slug: /commands/theme/Web-Server | | | --------------------------------------------------------------------------------------------------------------------------------------- | +| [](../../commands/web-event.md)
    | +| [](../../commands/web-form.md)
    | | [](../../commands-legacy/web-get-body-part.md)
    | | [](../../commands-legacy/web-get-body-part-count.md)
    | | [](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/web-event.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/web-event.md new file mode 100644 index 00000000000000..8fa85cd29233d3 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/web-event.md @@ -0,0 +1,97 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + + +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-------------------------: | ---------------------------------- | +| Resultado | Object | ← | Information on the triggered event | + + + +## Descripción + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**Resultado** + +El objeto devuelto contiene las siguientes propiedades: + +| Propiedad | | Tipo | Descripción | +| --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | | object | Additional information depending on the involved component | +| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| | row | number | Data Table component: row number | +| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | + +#### Ejemplo + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +- The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +- The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## Ver también + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propiedades + +| | | +| ----------------- | --------------------------- | +| Número de comando | 1734 | +| Hilo seguro | ✗ | + diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/web-form.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/web-form.md new file mode 100644 index 00000000000000..d44a8703f67035 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + + +| Parámetros | Tipo | | Descripción | +| ---------- | -------------------------- | :-------------------------: | --------------------------- | +| Resultado | 4D.WebForm | ← | New `Web Form` proxy object | + + + +## Descripción + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + +## Ver también + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propiedades + +| | | +| ----------------- | --------------------------- | +| Número de comando | 1735 | +| Hilo seguro | ✗ | + + + + diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md index b66e8076cf076a..3f8c3edab31bc9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md @@ -377,11 +377,11 @@ $info:=$ds.getAllRemoteContexts() #### Descripción -The `.getGlobalStamp()` function returns the current value of the global modification stamp of the datastore. +La función `.getGlobalStamp()` devuelve el valor actual del marcador de modificación global del datastore. :::info -Esta función sólo puede llamarse: +Esta función solo puede llamarse: - en el datastore local ([`ds`](../commands/ds.md)). - en entorno cliente/servidor, en la máquina servidor. @@ -433,12 +433,12 @@ La función `.getInfo()` devuelve **Objeto devuelto** -| Propiedad | Tipo | Descripción | -| ---------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| type | string |
  • "4D": datastore principal, disponible a través de ds
  • "4D Server": datastore remoto, abrir con Open datastore
  • | -| networked | boolean |
  • True: el almacén de datos se alcanza a través de una conexión de red.
  • False: no se llega al almacén de datos a través de una conexión de red (base de datos local)
  • | -| localID | text | ID del almacén de datos en la máquina. ID del almacén de datos en la máquina. Cadena vacía ("") para el almacén de datos principal. | -| connection | object | Objeto que describe la conexión del almacén de datos remoto (no se devuelve para el almacén de datos principal). Propiedades disponibles:
    PropiedadTipoDescripción
    nombre de hosttextoDirección IP o nombre del datastore remoto + ":" + número de puerto
    tlsbooleanoTrue si se utiliza una conexión segura con el datastore remoto
    idleTimeoutnúmeroTiempo de inactividad de la sesión (en minutos)
    usuariotextoUsuario autenticado en el almacén de datos remoto
    | +| Propiedad | Tipo | Descripción | +| ---------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| type | string |
  • "4D": datastore principal, disponible a través de ds
  • "4D Server": datastore remoto, abrir con Open datastore
  • | +| networked | boolean |
  • True: el almacén de datos se alcanza a través de una conexión de red.
  • False: no se llega al almacén de datos a través de una conexión de red (base de datos local)
  • | +| localID | text | ID del almacén de datos en la máquina. ID del almacén de datos en la máquina. Cadena vacía ("") para el almacén de datos principal. | +| connection | object | Objeto que describe la conexión del almacén de datos remoto (no se devuelve para el almacén de datos principal). Propiedades disponibles:
    PropiedadTipoDescripción
    nombre de hosttextoDirección IP o nombre del datastore remoto + ":" + número de puerto
    tlsbooleanoTrue si se utiliza una conexión segura con el datastore remoto
    idleTimeoutnúmeroTiempo de inactividad de la sesión (en minutos)
    usuariotextoUsuario autenticado en el almacén de datos remoto
    | - Si la función `.getInfo()` se ejecuta en un 4D Server o en un 4D monopuesto, `networked` es False. - Si la función `.getInfo()` se ejecuta en un 4D remoto, `networked` es True @@ -1018,7 +1018,7 @@ Para crear un registro de peticiones ORDA del lado del cliente, llame a esta fun > Debe añadirse manualmente un carácter \N al final del archivo para realizar una validación JSON -- Si se pasa un entero *reqNum*, se vacía el registro en memoria (si lo hay) y se inicializa un nuevo registro. It will keep *reqNum* requests in memory until the number is reached, in which case the oldest entries are emptied (FIFO stack).
    If `.startRequestLog()` is called with a *reqNum* while a logging was previously started in a file, the file logging is stopped. +- Si se pasa un entero *reqNum*, se vacía el registro en memoria (si lo hay) y se inicializa un nuevo registro. It will keep *reqNum* requests in memory until the number is reached, in which case the oldest entries are emptied (FIFO stack).
    Si `.startRequestLog()` es llamado con un *reqNum* mientras un registro fue iniciado previamente en un archivo, el registro de archivos es detenido. - Si no ha pasado ningún parámetro, el registro se inicia en la memoria. Si `.startRequestLog()` fue llamado previamente con un *reqNum* (antes de una `.stopRequestLog()`), los datos del registro se apilan en memoria hasta la próxima vez que se vacíe el registro o se llame a `.stopRequestLog()`. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md index fb2d8d27b187e0..53282bc91a6fc1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/TCPEventClass.md @@ -3,7 +3,7 @@ id: TCPEventClass title: TCPEvent --- -La clase `TCPEvent` ofrece información sobre los eventos que se producen durante el ciclo de vida de una conexión TCP. It is generated when a [TCPConnection](TCPConnectionClass.md) is opened and is typically utilized in callbacks such as `onConnection`, `onData`, `onError`, and others. +La clase `TCPEvent` ofrece información sobre los eventos que se producen durante el ciclo de vida de una conexión TCP. Un evento se genera cuando se abre una [TCPConnection](TCPConnectionClass.md) y se utiliza normalmente en retrollamadas tales como `onConnection`, `onData`, `onError` y otras.
    Historia @@ -51,7 +51,7 @@ La propiedad `.data` contiene los datos asoci :::note -When working with low-level TCP/IP connections, keep in mind there is no guarantee that all data will arrive in a single packet. Los datos llegan en orden, pero pueden fragmentarse a través de múltiples paquetes. +Cuando trabaje con conexiones TCP/IP de bajo nivel, tenga en cuenta que no hay garantía de que todos los datos lleguen en un solo paquete. Los datos llegan en orden, pero pueden fragmentarse a través de múltiples paquetes. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/operators.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/operators.md index 9e3c43c03a09ff..47a8171566c03a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/operators.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/operators.md @@ -103,7 +103,7 @@ Se admiten los siguientes operadores de asignación compuestos: | | Time *= Number | Number | `$t1*=5 //$t1:=$t1*5` | | | Picture *= Number | Picture | `$p1*=5 //$p1:=$p1*5 (redimensionar $p1 de 5)` | -These operators apply on any [assignable expressions](quick-tour.md#assignable-vs-non-assignable-expressions) except: +Estos operadores se aplican a toda [expresión asignable](quick-tour.md#assignable-vs-non-assignable-expressions) excepto: - las imágenes como propiedades de objeto o elementos de colección, - las variables de índice de array. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md index b66e8076cf076a..3f3ccc24ccd194 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md @@ -1018,7 +1018,7 @@ Para crear un registro de peticiones ORDA del lado del cliente, llame a esta fun > Debe añadirse manualmente un carácter \N al final del archivo para realizar una validación JSON -- Si se pasa un entero *reqNum*, se vacía el registro en memoria (si lo hay) y se inicializa un nuevo registro. It will keep *reqNum* requests in memory until the number is reached, in which case the oldest entries are emptied (FIFO stack).
    If `.startRequestLog()` is called with a *reqNum* while a logging was previously started in a file, the file logging is stopped. +- Si se pasa un entero *reqNum*, se vacía el registro en memoria (si lo hay) y se inicializa un nuevo registro. It will keep *reqNum* requests in memory until the number is reached, in which case the oldest entries are emptied (FIFO stack).
    Si `.startRequestLog()` es llamado con un *reqNum* mientras un registro fue iniciado previamente en un archivo, el registro de archivos es detenido. - Si no ha pasado ningún parámetro, el registro se inicia en la memoria. Si `.startRequestLog()` fue llamado previamente con un *reqNum* (antes de una `.stopRequestLog()`), los datos del registro se apilan en memoria hasta la próxima vez que se vacíe el registro o se llame a `.stopRequestLog()`. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md index fb2d8d27b187e0..53282bc91a6fc1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/TCPEventClass.md @@ -3,7 +3,7 @@ id: TCPEventClass title: TCPEvent --- -La clase `TCPEvent` ofrece información sobre los eventos que se producen durante el ciclo de vida de una conexión TCP. It is generated when a [TCPConnection](TCPConnectionClass.md) is opened and is typically utilized in callbacks such as `onConnection`, `onData`, `onError`, and others. +La clase `TCPEvent` ofrece información sobre los eventos que se producen durante el ciclo de vida de una conexión TCP. Un evento se genera cuando se abre una [TCPConnection](TCPConnectionClass.md) y se utiliza normalmente en retrollamadas tales como `onConnection`, `onData`, `onError` y otras.
    Historia @@ -51,7 +51,7 @@ La propiedad `.data` contiene los datos asoci :::note -When working with low-level TCP/IP connections, keep in mind there is no guarantee that all data will arrive in a single packet. Los datos llegan en orden, pero pueden fragmentarse a través de múltiples paquetes. +Cuando trabaje con conexiones TCP/IP de bajo nivel, tenga en cuenta que no hay garantía de que todos los datos lleguen en un solo paquete. Los datos llegan en orden, pero pueden fragmentarse a través de múltiples paquetes. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md index b22060e96f189f..0f9f75307d510d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -La clase `WebForm` contiene funciones y propiedades que permiten manejar sus componentes de webforms Qodly. Esta clase se detalla en la [documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass). +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    Historia @@ -18,14 +18,12 @@ La clase `WebForm` contiene funciones y propiedades que permiten manejar sus com | | | ------------------------------------------------------------------------------------------------------------------------------- | -| [](#componentname)
    | +| [](#componentname)
    | | [](#disablestate)
    | | [](#enablestate)
    | | [](#seterror)
    | | [](#setmessage)
    | | [](#setwarning)
    | -| [](#web-form)
    | -| [](#web-event)
    | ### *.componentName* @@ -33,9 +31,28 @@ La clase `WebForm` contiene funciones y propiedades que permiten manejar sus com #### Descripción -Los componentes de los webforms son los objetos disponibles directamente como propiedades de estos webforms. +The components of web pages are objects that are available directly as properties of these web pages. -Para más información, consulte la [descripción de `.componentName` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#componentname). +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### Ejemplo + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page + +``` + +:::info + +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. + +::: ### .disableState() @@ -43,24 +60,24 @@ Para más información, consulte la [descripción de `.componentName` en la docu -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | --------------------------------------------------- | -| state | string | -> | Nombre del estado a desactivar en el formulario web | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ------------------------------------------ | +| state | string | -> | Name of state to disable from the web page | #### Descripción -La función `.disableState()` desactiva la renderización del *estado* en el formulario web actual. +The `.disableState()` function disables the rendering of the *state* in the current web page. Esta función no hace nada si: -- el *estado* no está habilitado actualmente en el formulario web, -- el *estado* no existe para el formulario web. +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. Si [activa](#enablestate) o desactiva varios estados en la misma función usuario, todas las modificaciones se envían al mismo tiempo al cliente una vez finalizada la función. -Para más información sobre los estados de los formularios web, consulte [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -68,24 +85,24 @@ Para más información sobre los estados de los formularios web, consulte [devel -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ------------------------------------------------ | -| state | string | -> | Nombre del estado a activar en el formulario web | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ---------------------------------------- | +| state | string | -> | Name of state to enable on the web pages | #### Descripción -La función `.enableState()` activa la renderización del *estado* en el formulario web actual. +The `.enableState()` function enables the rendering of the *state* in the current web page. Esta función no hace nada si: -- el *estado* ya ha sido activado en el formulario web, -- el *estado* no existe para el formulario web. +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. Si activa o [desactiva](#disablestate) varios estados dentro de la misma función usuario, todas las modificaciones se envían al mismo tiempo al cliente una vez que la función termina. -Para más información sobre los estados de los formularios web, consulte [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Ejemplo @@ -104,17 +121,34 @@ Function authenticationError() -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ----------------------------------------------- | -| msg | string | -> | Mensaje de error a mostrar en el formulario web | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ---------------------------------------- | +| msg | string | -> | Error message to display in the web page | #### Descripción -La función `.setError()` envía *msg* como mensaje de error al formulario web. +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". + +#### Ejemplo + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Para más información, consulte la [descripción de `.setError()` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#seterror). +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -122,68 +156,72 @@ Para más información, consulte la [descripción de `.setError()` en la documen -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ----------------------------------------------------- | -| msg | string | -> | Mensaje de información a mostrar en el formulario web | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ---------------------------------------------- | +| msg | string | -> | Information message to display in the web page | #### Descripción -La función `.setMessage()` envía *msg* como mensaje de información al formulario web. +The `.setMessage()` function sends *msg* as an information message to the web page. -Para más información, consulte la [descripción de `.setMessage()` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#setmessage). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() - -**.setWarning**( *msg* : string) +#### Ejemplo - +```4d +shared singleton Class constructor() +exposed function myMessage() -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | -------------------------------------------------------- | -| msg | string | -> | Mensaje de advertencia para mostrar en el formulario web | +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setMessage("My information message") -#### Descripción +``` -La función `.setWarning()` envía *msg* como mensaje de advertencia al formulario web. +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Para más información, consulte la [descripción de `.setWarning()` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#setwarning). +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + -| Parámetros | Tipo | | Descripción | -| ---------- | -------------------------- | :-------------------------: | ---------------------------- | -| Resultado | 4D.WebForm | <- | Nuevo objeto proxy `WebForm` | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ------------------------------------------ | +| msg | string | -> | Warning message to display in the web page | #### Descripción -El comando `Web Form` devuelve un objeto proxy `4D.WebForm` que permite interactuar con el formulario web. +The `.setWarning()` function sends *msg* as a warning message to the web page. -Para más información, consulte la [descripción de `webForm` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webform). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". -## Web Event +#### Ejemplo -**Web Event** : Object +```4d +shared singleton Class constructor() +exposed function myWarning() - +var myForm : 4D.WebForm +myForm:=web Form -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-------------------------: | ----------- | -| Resultado | object | <- | object | +myForm.setWarning("My warning message") - +``` -#### Descripción +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: + +![](../assets/en/API/webformClass-pic3.png) -El comando `Web Event` devuelve un objeto con información sobre un evento desencadenado vinculado a un componente de formulario web. +## Ver también -Para más información, consulte la [descripción de `webEvent` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webevent). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md index a95b62494371ff..25a53ce63f5336 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md @@ -3,9 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -Los objetos `4D.WebFormItem` son propiedades del objeto [`4D.WebForm`](WebFormItemClass.md) devuelto por el comando [`Web Form`](WebFormClass.md#web-form). +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -La clase `WebFormItem` se detalla en la [documentación Qodly](https://developer.qodly.com/docs/language/WebFormItemClass). +Los objetos `4D.WebFormItem` son propiedades del objeto [`4D.WebForm`](WebFormClass.md) devuelto por el comando [`Web Form`](../commands/web-form.md). + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    Historia @@ -24,29 +28,27 @@ La clase `WebFormItem` se detalla en la [documentación Qodly](https://developer | [](#removecssclass)
    | | [](#show)
    | -### .hide() +### .addCSSClass() -**.hide**() +**.addCSSClass**(*className* : string) - + -| Parámetros | Tipo | | Descripción | -| ---------- | ---- | :-: | ---------------------------- | -| | | | No requiere ningún parámetro | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | --------------------------------------------- | +| className | string | -> | Nombre de la clase CSS a añadir al componente | #### Descripción -La función `.hide()` oculta el componente. - -Para más información, consulte la [descripción de `.hide()` en la documentación Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#hide). +La función `.addCSSClass` añade la clase especificada en *className* al componente. -### .show() +### .hide() -**.show**() +**.hide**() - + | Parámetros | Tipo | | Descripción | | ---------- | ---- | :-: | ---------------------------- | @@ -56,27 +58,27 @@ Para más información, consulte la [descripción de `.hide()` en la documentaci #### Descripción -La función `.show()` hace visible el componente. - -Para más información, consulte la [descripción de `.show()` en la documentación Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#show). - -### .addCSSClass() - -**.addCSSClass**(*className* : string) +La función `.hide()` oculta el componente. - +#### Ejemplo -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | --------------------------------------------- | -| className | string | -> | Nombre de la clase CSS a añadir al componente | +To call a function that hides an image when the user clicks a button: - +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -#### Descripción +```4d -La función `.addCSSClass` añade la clase especificada en *className* al componente. +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` -Para más información, consulte la [descripción de `.addCSSClass` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass). +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. ### .removeCSSClass() @@ -94,7 +96,27 @@ Para más información, consulte la [descripción de `.addCSSClass` en la docume La función `.removeCSSClass()` elimina la clase especificada en *className* del componente. -Para más información, consulte la [descripción de `.removeCSSClass()` en la documentación de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass). +### .show() + +**.show**() + + + +| Parámetros | Tipo | | Descripción | +| ---------- | ---- | :-: | ---------------------------- | +| | | | No requiere ningún parámetro | + + + +#### Descripción + +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + +## Ver también + +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png b/i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png b/i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 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 J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png b/i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png b/i18n/es/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-index.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-index.md index 5d47e3630c0ef4..16ae77a333a7b0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-index.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/command-index.md @@ -1288,6 +1288,8 @@ title: Comandos por nombre [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md index 9a392d36ecc364..3a6f378477ddc9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md @@ -7,6 +7,8 @@ slug: /commands/theme/Web-Server | | | --------------------------------------------------------------------------------------------------------------------------------------- | +| [](../../commands/web-event.md)
    | +| [](../../commands/web-form.md)
    | | [](../../commands-legacy/web-get-body-part.md)
    | | [](../../commands-legacy/web-get-body-part-count.md)
    | | [](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-event.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-event.md new file mode 100644 index 00000000000000..8fa85cd29233d3 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-event.md @@ -0,0 +1,97 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + + +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-------------------------: | ---------------------------------- | +| Resultado | Object | ← | Information on the triggered event | + + + +## Descripción + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**Resultado** + +El objeto devuelto contiene las siguientes propiedades: + +| Propiedad | | Tipo | Descripción | +| --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | | object | Additional information depending on the involved component | +| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| | row | number | Data Table component: row number | +| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | + +#### Ejemplo + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +- The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +- The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## Ver también + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propiedades + +| | | +| ----------------- | --------------------------- | +| Número de comando | 1734 | +| Hilo seguro | ✗ | + diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-form.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-form.md new file mode 100644 index 00000000000000..d44a8703f67035 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + + +| Parámetros | Tipo | | Descripción | +| ---------- | -------------------------- | :-------------------------: | --------------------------- | +| Resultado | 4D.WebForm | ← | New `Web Form` proxy object | + + + +## Descripción + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + +## Ver también + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propiedades + +| | | +| ----------------- | --------------------------- | +| Número de comando | 1735 | +| Hilo seguro | ✗ | + + + + diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md index fe00828500b736..5bc241cd9071ec 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. +La classe Collection gère les expressions de type [Collection](Concepts/dt_collection.md). Une collection est initialisée avec les commandes [`New collection`](../commands/new-collection.md) ou [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormClass.md index d16c4e85d76af2..42234f2c5de742 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -La classe `WebForm` contient des fonctions et des propriétés permettant de gérer vos composants de webforms Qodly. Cette classe est décrite en détail dans la [documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass). +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    Historique @@ -18,14 +18,12 @@ La classe `WebForm` contient des fonctions et des propriétés permettant de gé | | | ------------------------------------------------------------------------------------------------------------------------------- | -| [](#componentname)
    | +| [](#componentname)
    | | [](#disablestate)
    | | [](#enablestate)
    | | [](#seterror)
    | | [](#setmessage)
    | | [](#setwarning)
    | -| [](#web-form)
    | -| [](#web-event)
    | ### *.componentName* @@ -33,9 +31,28 @@ La classe `WebForm` contient des fonctions et des propriétés permettant de gé #### Description -Les composants des webforms sont des objets disponibles directement en tant que propriétés de ces webforms. +The components of web pages are objects that are available directly as properties of these web pages. -Pour plus d'informations, veuillez vous référer à la description de [`.componentName` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#componentname). +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### Exemple + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page + +``` + +:::info + +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. + +::: ### .disableState() @@ -43,24 +60,24 @@ Pour plus d'informations, veuillez vous référer à la description de [`.compon -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------------- | -| state | string | -> | Nom de l'état à désactiver dans le formulaire web | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------ | +| state | string | -> | Name of state to disable from the web page | #### Description -La fonction `.disableState()` désactive le rendu de l'*état* dans le formulaire web courant. +The `.disableState()` function disables the rendering of the *state* in the current web page. Cette fonction ne fait rien si : -- l'*état* n'est actuellement pas activé dans le formulaire web, -- l'*état* n'existe pas pour le formulaire web. +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. Si vous [activez](#enablestate) ou désactivez plusieurs états dans la même fonction utilisateur, toutes les modifications sont envoyées en même temps au client une fois que la fonction se termine. -Pour plus d'informations sur les états des pages Qodly, veuillez consulter [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -68,24 +85,24 @@ Pour plus d'informations sur les états des pages Qodly, veuillez consulter [dev -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | --------------------------------------------- | -| state | string | -> | Nom de l'état à activer sur le formulaire web | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ---------------------------------------- | +| state | string | -> | Name of state to enable on the web pages | #### Description -La fonction `.enableState()` active le rendu de l'*état* dans le formulaire web courant. +The `.enableState()` function enables the rendering of the *state* in the current web page. Cette fonction ne fait rien si : -- l'*état* a déjà été activé sur le formulaire web, -- l'*état* n'existe pas pour le formulaire web. +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. Si vous activez ou [désactivez](#disablestate) plusieurs états dans la même fonction utilisateur, toutes les modifications sont envoyées en même temps au client une fois que la fonction se termine. -Pour plus d'informations sur les états des pages Qodly, veuillez consulter [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Exemple @@ -104,17 +121,34 @@ Function authenticationError() -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------- | -| msg | string | -> | Message d'erreur à afficher dans le webform | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ---------------------------------------- | +| msg | string | -> | Error message to display in the web page | #### Description -La fonction `.setError()` envoie *msg* en tant que message d'erreur vers le formulaire web. +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". + +#### Exemple + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Pour plus d'informations, veuillez vous référer à la [description de la fonction `.setError()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#seterror). +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -122,68 +156,72 @@ Pour plus d'informations, veuillez vous référer à la [description de la fonct -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------------ | -| msg | string | -> | Message d'information à afficher dans le webform | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ---------------------------------------------- | +| msg | string | -> | Information message to display in the web page | #### Description -La fonction `.setMessage()` envoie *msg* en tant que message d'information au formulaire web. +The `.setMessage()` function sends *msg* as an information message to the web page. -Pour plus d'informations, veuillez vous référer à la [description de la méthode `.setMessage()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#setmessage). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() - -**.setWarning**( *msg* : string) +#### Exemple - +```4d +shared singleton Class constructor() +exposed function myMessage() -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | -------------------------------------------------- | -| msg | string | -> | Message d'avertissement à afficher dans le webform | +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setMessage("My information message") -#### Description +``` -La fonction `.setWarning()` envoie *msg* en tant que message d'avertissement au formulaire web. +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Pour plus d'informations, veuillez vous référer à la [description de la méthode `.setWarning()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#setwarning). +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + -| Paramètres | Type | | Description | -| ---------- | -------------------------- | :-------------------------: | ---------------------------- | -| Résultat | 4D.WebForm | <- | Nouvel objet proxy `WebForm` | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------ | +| msg | string | -> | Warning message to display in the web page | #### Description -La commande `Web Form` renvoie un objet proxy `4D.WebForm` qui vous permet d'interagir avec le formulaire web. +The `.setWarning()` function sends *msg* as a warning message to the web page. -Pour plus d'informations, veuillez vous référer à la [description de la commande `webForm` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webform). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". -## Web Event +#### Exemple -**Web Event** : Object +```4d +shared singleton Class constructor() +exposed function myWarning() - +var myForm : 4D.WebForm +myForm:=web Form -| Paramètres | Type | | Description | -| ---------- | ------ | :-------------------------: | ----------- | -| Résultat | object | <- | object | +myForm.setWarning("My warning message") - +``` -#### Description +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: + +![](../assets/en/API/webformClass-pic3.png) -La commande `Web Event` renvoie un objet contenant des informations sur un événement déclenché lié à un composant de formulaire web. +## Voir également -Pour plus d'informations, veuillez vous référer à la [description de la commande `webEvent` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webevent). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md index f50c3db0c62b08..37bd57c2dadc7b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md @@ -3,9 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -Les objets `4D.WebFormItem` sont des propriétés de l'objet [`4D.WebForm`](WebFormItemClass.md) renvoyé par la commande [`Web Form`](WebFormClass.md#web-form). +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -La classe `WebFormItem` est décrite en détail dans la [documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass). +Les objets `4D.WebFormItem` sont des propriétés de l'objet [`4D.WebForm`](WebFormClass.md) renvoyé par la commande [`Web Form`](../commands/web-form.md). + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    Historique @@ -24,29 +28,27 @@ La classe `WebFormItem` est décrite en détail dans la [documentation de Qodly] | [](#removecssclass)
    | | [](#show)
    | -### .hide() +### .addCSSClass() -**.hide**() +**.addCSSClass**(*className* : string) - + -| Paramètres | Type | | Description | -| ---------- | ---- | :-: | --------------------------- | -| | | | Ne requiert aucun paramètre | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------- | +| className | string | -> | Nom de la classe CSS à ajouter au composant | #### Description -La fonction `.hide()` masque le composant. - -Pour plus d'informations, veuillez vous référer à la [description de `.hide()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#hide). +La fonction `.addCSSClass` ajoute la classe *className* au composant. -### .show() +### .hide() -**.show**() +**.hide**() - + | Paramètres | Type | | Description | | ---------- | ---- | :-: | --------------------------- | @@ -56,27 +58,27 @@ Pour plus d'informations, veuillez vous référer à la [description de `.hide() #### Description -La fonction `.show()` rend le composant visible. - -Pour plus d'informations, veuillez vous référer à la [description de `.show()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#show). - -### .addCSSClass() - -**.addCSSClass**(*className* : string) +La fonction `.hide()` masque le composant. - +#### Exemple -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------- | -| className | string | -> | Nom de la classe CSS à ajouter au composant | +To call a function that hides an image when the user clicks a button: - +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -#### Description +```4d -La fonction `.addCSSClass` ajoute la classe *className* au composant. +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` -Pour plus d'informations, veuillez vous référer à la [description de `.addCSSClass` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass). +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. ### .removeCSSClass() @@ -94,7 +96,27 @@ Pour plus d'informations, veuillez vous référer à la [description de `.addCSS La fonction `.removeCSSClass()` supprime la classe *className* du composant. -Pour plus d'informations, veuillez vous référer à la [description de `.removeCSSClass()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass). +### .show() + +**.show**() + + + +| Paramètres | Type | | Description | +| ---------- | ---- | :-: | --------------------------- | +| | | | Ne requiert aucun paramètre | + + + +#### Description + +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + +## Voir également + +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 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 J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands/command-index.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands/command-index.md index 1a06efeaf1fba5..d11e797ed66392 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands/command-index.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands/command-index.md @@ -1264,7 +1264,7 @@ title: Commandes par nom [`WA Evaluate JavaScript`](../commands-legacy/wa-evaluate-javascript.md)
    [`WA EXECUTE JAVASCRIPT FUNCTION`](../commands-legacy/wa-execute-javascript-function.md)
    [`WA Forward URL available`](../commands-legacy/wa-forward-url-available.md)
    -[`WA Get context`](../commands/wa-get-context.md) **nouveau 4D 20 R9**
    +[`WA Get context`](../commands/wa-get-context.md) **new 4D 20 R9**
    [`WA Get current URL`](../commands-legacy/wa-get-current-url.md)
    [`WA GET EXTERNAL LINKS FILTERS`](../commands-legacy/wa-get-external-links-filters.md)
    [`WA Get last filtered URL`](../commands-legacy/wa-get-last-filtered-url.md)
    @@ -1280,7 +1280,7 @@ title: Commandes par nom [`WA OPEN WEB INSPECTOR`](../commands-legacy/wa-open-web-inspector.md)
    [`WA REFRESH CURRENT URL`](../commands-legacy/wa-refresh-current-url.md)
    [`WA Run offscreen area`](../commands-legacy/wa-run-offscreen-area.md)
    -[`WA SET CONTEXT`](../commands/wa-set-context.md) **nouveau 4D 20 R9**
    +[`WA SET CONTEXT`](../commands/wa-set-context.md) **new 4D 20 R9**
    [`WA SET EXTERNAL LINKS FILTERS`](../commands-legacy/wa-set-external-links-filters.md)
    [`WA SET PAGE CONTENT`](../commands-legacy/wa-set-page-content.md)
    [`WA SET PREFERENCE`](../commands-legacy/wa-set-preference.md)
    @@ -1288,6 +1288,8 @@ title: Commandes par nom [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md index 411ace58073db0..d616c373a5bca1 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md @@ -7,6 +7,8 @@ slug: /commands/theme/Web-Server | | | --------------------------------------------------------------------------------------------------------------------------------------- | +| [](../../commands/web-event.md)
    | +| [](../../commands/web-form.md)
    | | [](../../commands-legacy/web-get-body-part.md)
    | | [](../../commands-legacy/web-get-body-part-count.md)
    | | [](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-event.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-event.md new file mode 100644 index 00000000000000..2c5ef697595328 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-event.md @@ -0,0 +1,97 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + + +| Paramètres | Type | | Description | +| ---------- | ------ | :-------------------------: | ---------------------------------- | +| Résultat | Object | ← | Information on the triggered event | + + + +## Description + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**Résultat** + +L'objet retourné contient les propriétés suivantes : + +| Propriété | | Type | Description | +| --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | | object | Additional information depending on the involved component | +| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| | row | number | Data Table component: row number | +| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | + +#### Exemple + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +- The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +- The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## Voir également + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propriétés + +| | | +| ------------------ | --------------------------- | +| Numéro de commande | 1734 | +| Thread safe | ✗ | + diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-form.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-form.md new file mode 100644 index 00000000000000..87fc3b065a1053 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + + +| Paramètres | Type | | Description | +| ---------- | -------------------------- | :-------------------------: | --------------------------- | +| Résultat | 4D.WebForm | ← | New `Web Form` proxy object | + + + +## Description + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + +## Voir également + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propriétés + +| | | +| ------------------ | --------------------------- | +| Numéro de commande | 1735 | +| Thread safe | ✗ | + + + + diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index fe00828500b736..5bc241cd9071ec 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. +La classe Collection gère les expressions de type [Collection](Concepts/dt_collection.md). Une collection est initialisée avec les commandes [`New collection`](../commands/new-collection.md) ou [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index fe00828500b736..5bc241cd9071ec 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -3,7 +3,7 @@ id: CollectionClass title: Collection --- -The Collection class manages [Collection](Concepts/dt_collection.md) type expressions. +La classe Collection gère les expressions de type [Collection](Concepts/dt_collection.md). Une collection est initialisée avec les commandes [`New collection`](../commands/new-collection.md) ou [`New shared collection`](../commands/new-shared-collection.md). diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md index d16c4e85d76af2..42234f2c5de742 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -La classe `WebForm` contient des fonctions et des propriétés permettant de gérer vos composants de webforms Qodly. Cette classe est décrite en détail dans la [documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass). +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    Historique @@ -18,14 +18,12 @@ La classe `WebForm` contient des fonctions et des propriétés permettant de gé | | | ------------------------------------------------------------------------------------------------------------------------------- | -| [](#componentname)
    | +| [](#componentname)
    | | [](#disablestate)
    | | [](#enablestate)
    | | [](#seterror)
    | | [](#setmessage)
    | | [](#setwarning)
    | -| [](#web-form)
    | -| [](#web-event)
    | ### *.componentName* @@ -33,9 +31,28 @@ La classe `WebForm` contient des fonctions et des propriétés permettant de gé #### Description -Les composants des webforms sont des objets disponibles directement en tant que propriétés de ces webforms. +The components of web pages are objects that are available directly as properties of these web pages. -Pour plus d'informations, veuillez vous référer à la description de [`.componentName` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#componentname). +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### Exemple + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page + +``` + +:::info + +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. + +::: ### .disableState() @@ -43,24 +60,24 @@ Pour plus d'informations, veuillez vous référer à la description de [`.compon -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------------- | -| state | string | -> | Nom de l'état à désactiver dans le formulaire web | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------ | +| state | string | -> | Name of state to disable from the web page | #### Description -La fonction `.disableState()` désactive le rendu de l'*état* dans le formulaire web courant. +The `.disableState()` function disables the rendering of the *state* in the current web page. Cette fonction ne fait rien si : -- l'*état* n'est actuellement pas activé dans le formulaire web, -- l'*état* n'existe pas pour le formulaire web. +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. Si vous [activez](#enablestate) ou désactivez plusieurs états dans la même fonction utilisateur, toutes les modifications sont envoyées en même temps au client une fois que la fonction se termine. -Pour plus d'informations sur les états des pages Qodly, veuillez consulter [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -68,24 +85,24 @@ Pour plus d'informations sur les états des pages Qodly, veuillez consulter [dev -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | --------------------------------------------- | -| state | string | -> | Nom de l'état à activer sur le formulaire web | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ---------------------------------------- | +| state | string | -> | Name of state to enable on the web pages | #### Description -La fonction `.enableState()` active le rendu de l'*état* dans le formulaire web courant. +The `.enableState()` function enables the rendering of the *state* in the current web page. Cette fonction ne fait rien si : -- l'*état* a déjà été activé sur le formulaire web, -- l'*état* n'existe pas pour le formulaire web. +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. Si vous activez ou [désactivez](#disablestate) plusieurs états dans la même fonction utilisateur, toutes les modifications sont envoyées en même temps au client une fois que la fonction se termine. -Pour plus d'informations sur les états des pages Qodly, veuillez consulter [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Exemple @@ -104,17 +121,34 @@ Function authenticationError() -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------- | -| msg | string | -> | Message d'erreur à afficher dans le webform | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ---------------------------------------- | +| msg | string | -> | Error message to display in the web page | #### Description -La fonction `.setError()` envoie *msg* en tant que message d'erreur vers le formulaire web. +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". + +#### Exemple + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Pour plus d'informations, veuillez vous référer à la [description de la fonction `.setError()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#seterror). +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -122,68 +156,72 @@ Pour plus d'informations, veuillez vous référer à la [description de la fonct -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------------ | -| msg | string | -> | Message d'information à afficher dans le webform | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ---------------------------------------------- | +| msg | string | -> | Information message to display in the web page | #### Description -La fonction `.setMessage()` envoie *msg* en tant que message d'information au formulaire web. +The `.setMessage()` function sends *msg* as an information message to the web page. -Pour plus d'informations, veuillez vous référer à la [description de la méthode `.setMessage()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#setmessage). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() - -**.setWarning**( *msg* : string) +#### Exemple - +```4d +shared singleton Class constructor() +exposed function myMessage() -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | -------------------------------------------------- | -| msg | string | -> | Message d'avertissement à afficher dans le webform | +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setMessage("My information message") -#### Description +``` -La fonction `.setWarning()` envoie *msg* en tant que message d'avertissement au formulaire web. +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Pour plus d'informations, veuillez vous référer à la [description de la méthode `.setWarning()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#setwarning). +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + -| Paramètres | Type | | Description | -| ---------- | -------------------------- | :-------------------------: | ---------------------------- | -| Résultat | 4D.WebForm | <- | Nouvel objet proxy `WebForm` | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------ | +| msg | string | -> | Warning message to display in the web page | #### Description -La commande `Web Form` renvoie un objet proxy `4D.WebForm` qui vous permet d'interagir avec le formulaire web. +The `.setWarning()` function sends *msg* as a warning message to the web page. -Pour plus d'informations, veuillez vous référer à la [description de la commande `webForm` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webform). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". -## Web Event +#### Exemple -**Web Event** : Object +```4d +shared singleton Class constructor() +exposed function myWarning() - +var myForm : 4D.WebForm +myForm:=web Form -| Paramètres | Type | | Description | -| ---------- | ------ | :-------------------------: | ----------- | -| Résultat | object | <- | object | +myForm.setWarning("My warning message") - +``` -#### Description +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: + +![](../assets/en/API/webformClass-pic3.png) -La commande `Web Event` renvoie un objet contenant des informations sur un événement déclenché lié à un composant de formulaire web. +## Voir également -Pour plus d'informations, veuillez vous référer à la [description de la commande `webEvent` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webevent). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md index f50c3db0c62b08..37bd57c2dadc7b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md @@ -3,9 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -Les objets `4D.WebFormItem` sont des propriétés de l'objet [`4D.WebForm`](WebFormItemClass.md) renvoyé par la commande [`Web Form`](WebFormClass.md#web-form). +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -La classe `WebFormItem` est décrite en détail dans la [documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass). +Les objets `4D.WebFormItem` sont des propriétés de l'objet [`4D.WebForm`](WebFormClass.md) renvoyé par la commande [`Web Form`](../commands/web-form.md). + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    Historique @@ -24,29 +28,27 @@ La classe `WebFormItem` est décrite en détail dans la [documentation de Qodly] | [](#removecssclass)
    | | [](#show)
    | -### .hide() +### .addCSSClass() -**.hide**() +**.addCSSClass**(*className* : string) - + -| Paramètres | Type | | Description | -| ---------- | ---- | :-: | --------------------------- | -| | | | Ne requiert aucun paramètre | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------- | +| className | string | -> | Nom de la classe CSS à ajouter au composant | #### Description -La fonction `.hide()` masque le composant. - -Pour plus d'informations, veuillez vous référer à la [description de `.hide()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#hide). +La fonction `.addCSSClass` ajoute la classe *className* au composant. -### .show() +### .hide() -**.show**() +**.hide**() - + | Paramètres | Type | | Description | | ---------- | ---- | :-: | --------------------------- | @@ -56,27 +58,27 @@ Pour plus d'informations, veuillez vous référer à la [description de `.hide() #### Description -La fonction `.show()` rend le composant visible. - -Pour plus d'informations, veuillez vous référer à la [description de `.show()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#show). - -### .addCSSClass() - -**.addCSSClass**(*className* : string) +La fonction `.hide()` masque le composant. - +#### Exemple -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------- | -| className | string | -> | Nom de la classe CSS à ajouter au composant | +To call a function that hides an image when the user clicks a button: - +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -#### Description +```4d -La fonction `.addCSSClass` ajoute la classe *className* au composant. +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` -Pour plus d'informations, veuillez vous référer à la [description de `.addCSSClass` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass). +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. ### .removeCSSClass() @@ -94,7 +96,27 @@ Pour plus d'informations, veuillez vous référer à la [description de `.addCSS La fonction `.removeCSSClass()` supprime la classe *className* du composant. -Pour plus d'informations, veuillez vous référer à la [description de `.removeCSSClass()` dans la documentation de Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass). +### .show() + +**.show**() + + + +| Paramètres | Type | | Description | +| ---------- | ---- | :-: | --------------------------- | +| | | | Ne requiert aucun paramètre | + + + +#### Description + +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + +## Voir également + +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png b/i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png b/i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 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 J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png b/i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 zcmYjTc_36<93GS`L*uc(mM4lZnUP3#Lbiuw zXPE56h_WOmjeSi?yz9UB$36F)-#z#D{q8y6ckUODHZ>IB6XOGcKmy2HdgdSyhbGX6 z@o)nz@8-Yzz>R}wZg>+^J|NBp2FI|7+XxV-GKqiR?fB6g|66uM5J<4&=;G-1E4l*$ z@l7N35SAq8m8lTRQIlMHE*5Rdu5> zdBYn0UQ8FWl;)us)hP3*ilq69%I_*{34MG!a6I_TvxbPG)cta?BC2rK2baFxko)kN zj@AXumXIv2s_CY%B^(atPaxcc9Ls@;sp6m@0{ej!&rQSgoG3`NsqV2XDV`UxJeml| zbpat#lvJRY%=$6Jx2t!)*uJms=rmnRB#~FF z_hp;5rHze+wYA)f&Cw!D+B@y{*-vx#mDSW{)A2R|_d=dBUCO$Kho4&LWTiQ`3*(#H zO7J!ZTU#OQA<2QsNk{uo_o%2S$`v?|9pH;>!rnoctflM@g9KA)iK0+;o?{O?rQ73^wUc#S8oM!I4O=}P4G z_OHXJV#|_Wz8;4y78ju+qN2#&ldQS94gi*VE#Ou2X(&_=jYgM-BRz_A{#<~=ZFha3K|w*|6BD_YhF_Y?*@aVQFcZ3x8(~Z)8sxf7bSH3-m}{y9(F3kqw1||zb5H3O zy6ly0;bwY275R(gr1z7^z`*DsHsW&{c9H<@I_BtT>PSf!g+P| zbmykfO4l|{UbD_ARVqu=1s%L2UCluN_l%wnA=?Rj8!&9Ha3>ia1tzY|} zYXmJqd!H$ANnN@WpPUSF$6%1g#vM#18NgyN7;mbo+NY*o6cosMdwciv_QIs4BOg2f zEw8Lxl9RhxW}QkVcYUnIUs6=00ZhT;@j$UV7@rm5#+OfP4MQ7t_IApcG4Fe{E|sMw z4O@Hr0B!igT9@)?rc8Ocw@rKa-8RhNYR3=P9&T-sDh{BV*I{X6<>uvu9B*91U@#qp z#vMnSmO4#s_jl3xzB)~hBTnb$=f|+&*c@|FOrE7X7CU&*)QG%&J+Zi0^x=tLprMFX zDG&~i`|)YM7&^ZIzu|pdCrcACR1b+2*wuH-d)ep{tmxcxcXwcA&$*;TjzdIkGX4JV z6K_0544%a*z51~il$d4&HQ>8Boz(-N{_$nE^3JT`MY7!TvTxi#N9aNIF>dZJYionU zxrTPl;TmKz+2pyJ02Ye{3kXzJR?cp+dc`#e(a2QUVFshU#H#d`iAiT~FTbv??(*_7 zMKeUDzrQ~^E{?eV84(^H&I1PP<)DYk9Mp}BjVCHGCqT8eweu{N5CrnTD4(&*$Tt>F zGdl0|HqdLwHV5tM>G=8oIY)E@1EN1?Ce!lRb?;6x!**M8#hu@ zQjVZKy}aBu=jo)du)0!I&Rlg(mHTi?etmtt3d~z=rozQ=AU|RMO-OFwqHe9mdhCtc zdLEv!?}rj+OPnNU35=wJ8 zl$88HzBu2_oeU*<{es%gHmdN);?}Ksf<{8SjvIbb5m4M%5*I0CH~)=PHszawV?$;~ zvsPnKQ4#3JRMsJQb#)bb>XeYMa5uBm25DlVrmHYbp zc?Erc{|=*UZW6vPPw1MO3QkN+q@|}<6BkSYp3?^gXnlR)lP6Dt7$YO`Nl6#ve=O+`?e*#JB9+N;6|SJL>kP^+1+Je@e`j=&!G5?%d6UxduuNC@L*>3xL5x?7+S5 zot>Slsxt@v&01PI3WSDtRxJt&3jWz#y@UpFs)+%SSlwK}#0|3pdsqZ0-*Ihi?L-N! z41njk=EV|kdCi=hZsTxrT-@Lx$@x)S?cU?W84CvoV+XKCIrj1#<$SWyfMq-Psw?3BiN2aHg7UWdM#?r*h2~39Dfp)OO^V~W{X*x{o zact~fC}?wQv#7lM>yoO=A8LQgVFxk|a?q2zaq25Slz|_U2E%F)9ZWf*#igc;JOZmNxh>zqa0pn7fD{DX3QSxxU~hP8K9y z+kmv-B0K=Kd4Fo=hZBi{%QMEyYO3mw66_lG_`lO6+xF;7WK zCbD1MHwBUdstB*zmt2n5>3J!woi<}9QCGN7s9$DnfkwCP|J;g?k8c|sOd1`v1o-aI z-%F=UOG|U0P^eLys*sS-=!XxvOdOp~pKXog0*hZurcgux*HBzqiXRCeJ2l>KWVH}j zd>2eJTR(hA2OiRrBxlNBRE4nvugl2Dpi7zCE1%L~hEI|+GxvM`<~!TnzMfy!US3j? z!j!ksB#dvI3-*fX9(m?ukN9Syrtim$aI&(Zzdx1zsv)GBnK`r7(^wNF#e*7|8hl+^ zA{U?do1 literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png b/i18n/fr/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 zcmV+l4E6JgP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D3!h0uK~#8N?cIM= zRAm~#@h{O#=D;dy1MX;wsAyn6CRb@Q%goc1g{hQM3Z8-rs0A}Zr!W;YkxXc}v4UJ3 z)6rET!4eN4nYNL~CJQqOjg@2>C*?;lX~QA*kGcH1Ilzb}8}H|wIR~EieeZqlg?V`I zeeWFHh7B9mh@`f*7C%3~rf&s75dQG4k_QAq5PA|(1O-9p(L@mx1ffS0MNklg9!(TM zK@fU0H?cb0{iswbJUu;ecXyXJ34+iGjg5_*KYyOOx;pH3yS%v#F%#@&R4NsH`}P$D zP!PJn&CQK#uf3K50|uZ}D&@^>h$7g{czSxuLxLb&BsVuVJUl$);Wk7O>}JFaP!KMy zUcGwBLv4s6C)gZsLAD27?}*Jl-Bx$M|W{JsL&Cj62X? z@h7Hq=nW}E$iwaN8N>M7#-MH$QU{J_d|>NH7e%IEN_HtL;S#$}t!Do738cLCI=B91 zoV>ZyE`1Ta^##)3N+NW$C#oA}keF&@{%!J3zZWg@-!ZayRsbG-0tsGhAU!?^_=r8Z zAF%hJyuX98wJ08W_mD<;nQ{kWAuR-!Sf}WFjX8;^P68#|z0!Ng}%(Vhni% z)D@x_J_5_}N&@;4g)ZkpUNQor7S6#7f8!VanJ0y$qU8jVICYU_cQ+4!&r-~Zsnu%RkATSWe*l^72JsL?$eN3hlx zud8gF{_YcuD~y;Qc$tk4LuU9=vLjP44L`;1pM04-+8b=AFu#{V+8!(Fc`2mbS%+!S zQnD@5{>Da;y5Lr^G3VxJ5_t5G@jxzj+} zhoz1gm46*(#V~v;Ohm6TqkA@?(hP=fyGx z81uBAaP2SbUlU8{G83ih`-omRx$Rh`0)?NJF=umFGDnZ`^Ln)N^hDhRx@8N{KSAdhtMSJE{t`l;&!DJR5aG|vY}MJB$>#H(LF7U~z{KWa2jJ{`lGZ@kWT#mCtA&x`+a;&Kt3x?0t1JY6A52tBmd9mfJy=OU#;@q6rQz#yL2&aDI%?)6fFBm+j|VVXD9Bn-9G_;#W8YIvMI7yDcYGr zZc||euzbPN^|^e0#LCPYeW^01l2K3!C-TX7{R>V>n`!^}Y#hr=BXggbQmKFSnoNq- zI^t$`BF84J&uu|5Hv9MN{ri5bl#-uX#OeMT0-O3eIghU9DRfSsK7B}7l*n~z$Io-X zb=NT?J^oS~dUn-rrg5zqGVqGVyF3&k?!C%awapUNv~UaQ&nz7s_88n?6j0RE7i7o z0IF^Ec=VOc98seiC=ZrFD*gs?cE%!s;uOl^f%k|yBN-XJ)J5zv6-Li zYx%jpmVy(T<<0P%kv&_JaIDpwns_I$_ zhUCEU3KS!P2$62Z`8+a}fPO7)ozA%%_^zTFd$pOg=i-QaE)HWEcu~!Mc}Jfy#EzA| z9vj7YUmMn=V9G0kz?sC~+cI;~&W&U8^`|J@T+|$M*`ZRb%3<6xP1>$cFt_+BDL;}e z@5y%+)p(DNrD-Wf8>3~A^oOd`$JbiHN=)CX(TU^0nn-c{9AWje_$*B<{{5XSb2y zK4vo4eS~FQGF!?<@N7mNIlJ;mpV6PA?`80*d^`YVHWZ!3&)<`h1DhP7asz9&oMd>M zk(^z5y0wwlbnwTxRV?ejqo4sTDTpj8jcx@5ML3?*F3%P`GOiF6Ou zwVbcK{0$q~&tz7bOqkv^5g+(7`R|+L-JsgWpcqFV(}Ia`Xa^Yuj)JjbQ!$#^X^u9N ziTJw}?0+K#V^^lX79%NJi}8L~+V0w!czWw)5j;1 zzsf{WZPR!A$;df|dYY6=j6X_g0_QR(=ka3m6fP{`#l>w3U`Qde-feg$2O{>y2BQzpkmN;g#h}u%15M zrcXyM>FTf`T+o;KWbVwAy>@b-Sl&?(T+`U-n5Wg$)UayBQkM&0N5o99o4M>W!N?R$ z!;1+`xcEm31mXWpdow{%1iP8bUIYc92Wqbfipya^5PCFG1O-9(Luamo?f?J) literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/command-index.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/command-index.md index 1a06efeaf1fba5..d11e797ed66392 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/command-index.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/command-index.md @@ -1264,7 +1264,7 @@ title: Commandes par nom [`WA Evaluate JavaScript`](../commands-legacy/wa-evaluate-javascript.md)
    [`WA EXECUTE JAVASCRIPT FUNCTION`](../commands-legacy/wa-execute-javascript-function.md)
    [`WA Forward URL available`](../commands-legacy/wa-forward-url-available.md)
    -[`WA Get context`](../commands/wa-get-context.md) **nouveau 4D 20 R9**
    +[`WA Get context`](../commands/wa-get-context.md) **new 4D 20 R9**
    [`WA Get current URL`](../commands-legacy/wa-get-current-url.md)
    [`WA GET EXTERNAL LINKS FILTERS`](../commands-legacy/wa-get-external-links-filters.md)
    [`WA Get last filtered URL`](../commands-legacy/wa-get-last-filtered-url.md)
    @@ -1280,7 +1280,7 @@ title: Commandes par nom [`WA OPEN WEB INSPECTOR`](../commands-legacy/wa-open-web-inspector.md)
    [`WA REFRESH CURRENT URL`](../commands-legacy/wa-refresh-current-url.md)
    [`WA Run offscreen area`](../commands-legacy/wa-run-offscreen-area.md)
    -[`WA SET CONTEXT`](../commands/wa-set-context.md) **nouveau 4D 20 R9**
    +[`WA SET CONTEXT`](../commands/wa-set-context.md) **new 4D 20 R9**
    [`WA SET EXTERNAL LINKS FILTERS`](../commands-legacy/wa-set-external-links-filters.md)
    [`WA SET PAGE CONTENT`](../commands-legacy/wa-set-page-content.md)
    [`WA SET PREFERENCE`](../commands-legacy/wa-set-preference.md)
    @@ -1288,6 +1288,8 @@ title: Commandes par nom [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md index 411ace58073db0..d616c373a5bca1 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md @@ -7,6 +7,8 @@ slug: /commands/theme/Web-Server | | | --------------------------------------------------------------------------------------------------------------------------------------- | +| [](../../commands/web-event.md)
    | +| [](../../commands/web-form.md)
    | | [](../../commands-legacy/web-get-body-part.md)
    | | [](../../commands-legacy/web-get-body-part-count.md)
    | | [](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-event.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-event.md new file mode 100644 index 00000000000000..2c5ef697595328 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-event.md @@ -0,0 +1,97 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + + +| Paramètres | Type | | Description | +| ---------- | ------ | :-------------------------: | ---------------------------------- | +| Résultat | Object | ← | Information on the triggered event | + + + +## Description + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**Résultat** + +L'objet retourné contient les propriétés suivantes : + +| Propriété | | Type | Description | +| --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | | object | Additional information depending on the involved component | +| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| | row | number | Data Table component: row number | +| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | + +#### Exemple + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +- The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +- The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## Voir également + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propriétés + +| | | +| ------------------ | --------------------------- | +| Numéro de commande | 1734 | +| Thread safe | ✗ | + diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-form.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-form.md new file mode 100644 index 00000000000000..87fc3b065a1053 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + + +| Paramètres | Type | | Description | +| ---------- | -------------------------- | :-------------------------: | --------------------------- | +| Résultat | 4D.WebForm | ← | New `Web Form` proxy object | + + + +## Description + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + +## Voir également + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propriétés + +| | | +| ------------------ | --------------------------- | +| Numéro de commande | 1735 | +| Thread safe | ✗ | + + + + diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormClass.md index 5cab3d46d6789e..17d55be910983d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -`WebForm` クラスには、Qodly の Webフォームコンポーネント (Webフォームの構成要素) を処理するための関数とプロパティが含まれています。 このクラスについては、[Qodly ドキュメンテーション](https://developer.qodly.com/docs/language/WebFormClass) (英語) で詳しく説明されています。 +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    履歴 @@ -18,14 +18,12 @@ title: WebForm | | | ------------------------------------------------------------------------------------------------------------------------------- | -| [](#componentname)
    | +| [](#componentname)
    | | [](#disablestate)
    | | [](#enablestate)
    | | [](#seterror)
    | | [](#setmessage)
    | | [](#setwarning)
    | -| [](#web-form)
    | -| [](#web-event)
    | ### *.componentName* @@ -33,9 +31,28 @@ title: WebForm #### 説明 -Webフォームのコンポーネント (構成要素) とは、これらの Webフォームのプロパティとして直接利用可能なオブジェクトです。 +The components of web pages are objects that are available directly as properties of these web pages. -詳細については、[Qodly ドキュメンテーションの `.componentName` の説明](https://developer.qodly.com/docs/language/WebFormClass#componentname) を参照ください。 +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### 例題 + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page + +``` + +:::info + +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. + +::: ### .disableState() @@ -43,25 +60,24 @@ Webフォームのコンポーネント (構成要素) とは、これらの Web -| 引数 | 型 | | 説明 | -| ----- | ------ | :-: | ------------------------ | -| state | string | -> | Webフォーム上で無効化する state の名称 | +| 引数 | 型 | | 説明 | +| ----- | ------ | :-: | ------------------------------------------ | +| state | string | -> | Name of state to disable from the web page | #### 説明 -`.disableState()` 関数は、カレントWeb -フォーム上の *state* のレンダリングを無効化します。 +The `.disableState()` function disables the rendering of the *state* in the current web page. この関数は、以下の場合には何もしません: -- Webフォーム上で *state* が現在有効ではない。 -- Webフォーム上で *state* が存在しない。 +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. 同じユーザー関数内で複数の state を [有効化](#enablestate) または無効化した場合、すべての変更は関数の終了時に一括してクライアントに送信されます。 -Webフォームの state に関する詳細については、[developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states) を参照ください。 +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -69,25 +85,24 @@ Webフォームの state に関する詳細については、[developer.qodly.co -| 引数 | 型 | | 説明 | -| ----- | ------ | :-: | ------------------------ | -| state | string | -> | Webフォーム上で有効化する state の名称 | +| 引数 | 型 | | 説明 | +| ----- | ------ | :-: | ---------------------------------------- | +| state | string | -> | Name of state to enable on the web pages | #### 説明 -`.enableState()` 関数は、カレントWeb -フォーム上の *state* のレンダリングを有効化します。 +The `.enableState()` function enables the rendering of the *state* in the current web page. この関数は、以下の場合には何もしません: -- Webフォーム上で *state* がすでに有効である。 -- Webフォーム上で *state* が存在しない。 +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. 同じユーザー関数内で複数の state を有効化または [無効化](#disablestate)した場合、すべての変更は関数の終了時に一括してクライアントに送信されます。 -Webフォームの state に関する詳細については、[developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states) を参照ください。 +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### 例題 @@ -106,17 +121,34 @@ Function authenticationError() -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | -------------------- | -| msg | string | -> | Webフォームに表示するエラーメッセージ | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ---------------------------------------- | +| msg | string | -> | Error message to display in the web page | #### 説明 -`.setError()` 関数は、*msg* をエラーメッセージとして Webフォームに送信します。 +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". + +#### 例題 + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: -詳細については、[Qodly ドキュメンテーションの `.setError()` の説明](https://developer.qodly.com/docs/language/WebFormClass#seterror) を参照ください。 +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -124,68 +156,72 @@ Function authenticationError() -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ------------------- | -| msg | string | -> | Webフォームに表示する情報メッセージ | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ---------------------------------------------- | +| msg | string | -> | Information message to display in the web page | #### 説明 -`.setMessage()` 関数は、*msg* を情報メッセージとして Webフォームに送信します。 +The `.setMessage()` function sends *msg* as an information message to the web page. -詳細については、[Qodly ドキュメンテーションの `.setMessage()` の説明](https://developer.qodly.com/docs/language/WebFormClass#setmessage) を参照ください。 +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() - -**.setWarning**( *msg* : string) +#### 例題 - +```4d +shared singleton Class constructor() +exposed function myMessage() -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ------------------- | -| msg | string | -> | Webフォームに表示する警告メッセージ | +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setMessage("My information message") -#### 説明 +``` -`.setWarning()` 関数は、*msg* を警告メッセージとして Webフォームに送信します。 +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: -詳細については、[Qodly ドキュメンテーションの `.setWarning()` の説明](https://developer.qodly.com/docs/language/WebFormClass#setwarning) を参照ください。 +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + -| 引数 | 型 | | 説明 | -| --- | -------------------------- | :-------------------------: | ------------------------ | -| 戻り値 | 4D.WebForm | <- | 新しい `WebForm` プロキシオブジェクト | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ------------------------------------------ | +| msg | string | -> | Warning message to display in the web page | #### 説明 -`Web Form` コマンドは、Webフォームとの対話を可能にする `4D.WebForm` プロキシオブジェクトを返します。 +The `.setWarning()` function sends *msg* as a warning message to the web page. -詳細については、[Qodly ドキュメンテーションの `webForm` コマンドの説明](https://developer.qodly.com/docs/language/WebFormClass#webform) を参照ください。 +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". -## Web Event +#### 例題 -**Web Event** : Object +```4d +shared singleton Class constructor() +exposed function myWarning() - +var myForm : 4D.WebForm +myForm:=web Form -| 引数 | 型 | | 説明 | -| --- | ------ | :-------------------------: | ------ | -| 戻り値 | object | <- | object | +myForm.setWarning("My warning message") - +``` -#### 説明 +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: + +![](../assets/en/API/webformClass-pic3.png) -`Web Event` コマンドは、Webフォームコンポーネントにリンクして発生したイベントの情報を持つオブジェクトを返します。 +## 参照 -詳細については、[Qodly ドキュメンテーションの `webEvent` コマンドの説明](https://developer.qodly.com/docs/language/WebFormClass#webevent) を参照ください。 +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md index b8b7be9fcc552e..fe775d4b71c991 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md @@ -3,9 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -`4D.WebFormItem` オブジェクトは、[`Web Form`](WebFormClass.md#web-form) コマンドによって返される [`4D.WebForm`](WebFormItemClass.md) オブジェクトのプロパティです。 +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -`WebFormItem` クラスについては、[Qodly ドキュメンテーション](https://developer.qodly.com/docs/language/WebFormItemClass) (英語) で詳しく説明しています。 +`4D.WebFormItem` オブジェクトは、[`Web Form`](../commands/web-form.md) コマンドによって返される [`4D.WebForm`](WebFormClass.md) オブジェクトのプロパティです。 + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    履歴 @@ -24,29 +28,27 @@ title: WebFormItem | [](#removecssclass)
    | | [](#show)
    | -### .hide() +### .addCSSClass() -**.hide**() +**.addCSSClass**(*className* : string) - + -| 引数 | 型 | | 説明 | -| -- | - | :-: | ---------- | -| | | | 引数を必要としません | +| 引数 | 型 | | 説明 | +| --------- | ------ | :-: | ----------------------- | +| className | string | -> | コンポーネントに追加する CSSクラスの名前。 | #### 説明 -`.hide()` 関数は、コンポーネントを非表示にします。 - -詳細については、[Qodly ドキュメンテーションの `.hide()` の説明](https://developer.qodly.com/docs/language/WebFormItemClass#hide) を参照ください。 +`.addCSSClass` 関数は、*className* で指定されたクラスをコンポーネントに追加します。 -### .show() +### .hide() -**.show**() +**.hide**() - + | 引数 | 型 | | 説明 | | -- | - | :-: | ---------- | @@ -56,27 +58,27 @@ title: WebFormItem #### 説明 -`.show()` 関数は、コンポーネントを表示状態にします。 - -詳細については、[Qodly ドキュメンテーションの `.show()` の説明](https://developer.qodly.com/docs/language/WebFormItemClass#show) を参照ください。 - -### .addCSSClass() - -**.addCSSClass**(*className* : string) +`.hide()` 関数は、コンポーネントを非表示にします。 - +#### 例題 -| 引数 | 型 | | 説明 | -| --------- | ------ | :-: | ----------------------- | -| className | string | -> | コンポーネントに追加する CSSクラスの名前。 | +To call a function that hides an image when the user clicks a button: - +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -#### 説明 +```4d -`.addCSSClass` 関数は、*className* で指定されたクラスをコンポーネントに追加します。 +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` -詳細については、[Qodly ドキュメンテーションの `.addCSSClass()` の説明](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass) を参照ください。 +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. ### .removeCSSClass() @@ -94,7 +96,27 @@ title: WebFormItem `.removeCSSClass()` 関数は、*className* で指定されたクラスをコンポーネントから削除します。 -詳細については、[Qodly ドキュメンテーションの `.removeCSSClass()` の説明](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass) を参照ください。 +### .show() + +**.show**() + + + +| 引数 | 型 | | 説明 | +| -- | - | :-: | ---------- | +| | | | 引数を必要としません | + + + +#### 説明 + +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + +## 参照 + +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 zcmeFZ1yEd1+b0S!LI@t*g9nG;ngrJbf?IHRw*i6&3+@nt1!r(~24`@08+?F)!C{B| z-*>m_+x=>{w(8d1duvbCsX5(qPRrBXPe1nSu+NH8=&y)hAt525%SekWBOyI$LEI-V zUm$Y6w334nKgdqXQXi4ZMo4!NiDzaX6h0s!0i)4w4W1*?sP@vDPDn@?U5__%uiYPG zB&4os8SxKa-SrNZ+`RErJ3%M<^9tp;anD}*i|u@m(fj(tu&Z|6(9TLqw>`MH^PPr+ zs*V@3gFf@iAHONbJ4VCBc5-7fe=b9Bq+aoU63Eugf&#XymQ}V#GGtcQ7P-ul> zlH!P~`^TK~(V}Ly`eULbHB!=3;xTuAju`DRN4zBRV|ggz(hv^P!$w>{&sQyP5trfl z8_%@VMX1D&fE=tB+LzkS&qw=wu%|>riN?>nOx;5_~ZzvHT9(6UZoX;JWhO z@wDC|5{qf_s6J!Lm{^D?{DXGQlf;imD$wn$Gvx9H0X$^wjJ8{auC~Md| zowG@@z|-C|BYh1F%Uh_5;65Xr!sKBwk;>2Bix1-3Nu`YPX-oVBDx$MI+;@g7U7XgP z`10cO?hNv0!FtTH2*b5!&h1W@@OtavaPOB{ zXl&hMW55$E?L4_8);9zMRSp}HMyg8@5Zrdga5p)esW{oH5yFZ z671t_ns6}}<@+gb-zL4tm{wz;n`XV(h79S&aSB65kB44LgHm} zab?u3?MJI$bOc;L;IE3Vw^`Q93F6oZF4l$3l1NlzMyQH<^2)2KXK1x~zw6@{bF40X z+*AWhEr<8dh9)5=r*P8|NEUJNp7WrM+s}-Ip0)yEyON?$Sky;ZeZ$mjl%roio{sbk zd71IF(W^x!Z`-s}{l@KgvNg0E;>+~jR{PzxNa=$n`e3kL8D8|!Zoxr_f7ec2s@lKV z==SQyI={6Infxx4qHznyXir|eQ)G{vYBs3>p^H5UQ`Eg1 zrl(iu$A>Eg6+2_mm)T~l9IhE*@Sx_Wa#yP@IXY)MrQ#te3{ea1>JOQq-`z!bWOt&m z3z2zsY@3>sQ(ozRzo%OtpPv}6jSoe9g+LD$O>4Fdklle(S}~ zSb*!{JW(3Ari={g?(Xhuav{RFesNDv&lYV52M!({9+2+)0AAq`cn24Eu)eR}(2tfa zXHsGX>1kF&*vH+OE|P+gJM*NvG+`O9S;zNTw>kS7I!wpJv;3>85cCCKqm$SvQrDf4 zU&{bL77UEcKsV>Log!Lhz1lG6ERol{ySl3CE|Epaq@?y00fEW7xiO%!EP^_|L}hj|nuPJ_yHd?T~YrKP~aM%MSC z;|~g(12@aYO*0zgS?9dXGfLa@H~FV>GQLM1+y1F#20pBmFkjq;)3CV`MkrXAO)=l? zQ?G?tr*MU!fB(t}JiUiL>Vvp=E?zamS#U@Qm;3RmsSTNcGy73KVC0a*a5{(nzko7*0b65yjzQ&36u)&x6M+cbq2762CxQaE&1l2>f#B zG}p-8Gh1aqbke=8>c^k;$!nvdr={q3=p|W`G~;vGs?a4oO#f_mlEy4nNS6!oN;z%{ z$Ar6EKOj_hsELc`=NwRUqj+z_kbGn5dGTzbJK7i-S7-`HI4#iLzMt8&o3zx@h4ITF z*KFhF%jGXgIBKn#$xrDTb%n|*1uTSBmNnbwZF-C531D*(J)4-xeUr$l5(+WZK}2%! zPwSkfw+?Sq=Chjl%|vNz*Q&U07|?gS&s7!TW)!xDQ^D1-oA4!~u~~<0=z0>7ljSfk zJ~p-mI?JmT1+tFH$r6zuDUA!5AwHYlP^_w;^t&h8Bn;);wAq2)VF>1~ zW+M`xYpU{Xt~uc=O0iQa+3Jo$K`LwvH*5S&C7S>G8%`%1Aj`B71t76(JKF%8stLmKe?@@-&+Yf z|H-SPQ5}#KjdBw6YA&vFN{b5odZ)0Yq3hwmDacb|c6WVVBKkEj&4#hyTD_#aoQ*)w zoeHsnlZQ=tZ05yfWx1rJz`-T*QAtTL%`JQ0)_meIX)JjStCJo`WT&;2#cyMgGcqEC zwfhqMDsVR%mvuYs!TmJh-j1+ziw*5_5uRmtHGtAe(MZUCH9b{ayKP)pnJ3xZ=JRKC zM-aD9f|qfdLzJGPn!>c%qS3lv?=pI_Xv`9S;&DZK9W^F+9iihVppx)Vu&W$(N*!-%9!8DUt z$Kc7kV&D7$jA*fDHfl_W)oZa7Tc?{YnA9hT!yfuM$g~fFJ5bs7A{Uv8R);1f5j=hI zx_x>YziMu1x>Q?6zM2qVMHkl}h@g(ubV+t@?lXP;6;EC%sa_S5!uRwQjC7H!*{YC@ zQ;~Yor4D2#K7t@fmDTe+*blD91!Z0`+w15z;4zrNfT!%&e!>DD?ZwTY1;`P0}rJX_K_&R?}2^Mg|d&HKC%SVmAm> zX$B@Y!Y$m|tZ@fF`{&cj)KRbe`uch-9Gp&sTp6M2h%x4ZgD6z)-xBRe))dKKp;t@# zU-EF~e-wUs002N^jKW{ZI90*jz5ZV>a4XnhJ&MQ01*1%l;<1|2e^$c3D|_>gpuNX< zhM;h0=#5)sBEfHVMVK-vv>`;hRE^Q-g;Q5(vse$RhuHibC)nq|I)rGa`E+LM!(4FP2C? zSDlkU&8#2Csvu_jY`|hh%gOU;BcIb+;6O#agDo+m7h0r3s?AQo2lt@&Hbga_teob~ zjq-u@GM+lSpF;ePxXULn-T?16;R8uDq!#*uW-QuYCa&P}lg6NLKGy0VN@oxaaP+juRab0MA=`C1tuWe*$9h#Y z$exDGH9PBHRUj;9M)Nsd+xB3brq-3`vfAlA{>=KSwKi8{^KB%}>9}m90A5iol@0iUcsIdG?~5Y8U@Q3BVF+XVn|Kvvjgdx7mDv*? z$?&IaemUA3qW2@2u1N7osr^cJfYs;rnCuxZo5et5>oB@w#QfAii$svft%$lMF<68! zaL(HF{J_{qwd%ZnAOz#7;!u^1G-&PZG+?xnzuv%SX~)MWEprV^QQ?T^$5J<<@Jm|_nHsH|s`=K7SxUbbU$;#lO6)!ArO82NQG zy6xG6w2F zM;jsNN%(3NTl=q#9O6=jYg%(H&K@VGe#*!4TiS*z{>hRQD=Rm{)>2v&dTkx=cT&<- zxLV|%#gOMDHYr((CyYZfBMOWrbH!oI87a~LNzI&cgi?Gz@WykCt)G4NBV zEY&ZlGS+(H>zydOxGf|bu4Sg6o8=mHa7zV?&zD6kRp~*7vjGoULEvS)n(`kxHE#|< zeA7x}PazKdT%0!AtjhIi)W$>{w>S3h>A;W6_pO=V$MSS_SMRL;sGtGEcv*-<+w^67j)*u4}0W49RC?p7QD%> zYfetDc2=Gkml=M?GhMrwIkPb?3I@6i*$vPlX1p8{PE8Ae)KTHn&FxQYDq*l}f9*>@3mkEC6iLv7g# zxrElQE#B3H35sZSFSj&F3p9s!EfAcH{ruGI-eq5Qd-)TXgy?0cba;A#izlzBXgU+b zb#sMDWIGDWh~?m6^+j;YYjEjhs&94i_56L|C!y;(u4mpnDFp;Bo9BmYj;LZDtZ8kj zBP!5`j{9^&Awi6-v4X6vsErBKR+4SfOwBorUwkoHdOlGpZKO1;1%%*shBBWsiF}=9 z{N5ru2PcZvqKhsMpD}5;D0hM;(ah=oOdYP8le4O#K>lIwy4;1_(Z*Kc#_qoE(lMqU z=_%?75d@!94bOxGp} z$HATq%R@G5Q_U?ATT-#!_(Si9n=hOL10BoAaV)D|jugb^NsZfP0KWB3Kc;yn?_pbv zP5dv08-8AC_N+ws5+rdwfB`4|N(VF!hlV%t>fg*Dp>`SsFZ5?IF7~XxRhtPrxo+cf zv%hN66`V^^{oLSN{_Qu4u9(-wlPK$1>7kg7&BTEIsklCJ0-U9>JUE~-8mG#D4LH{m zZxr4?ml0~42pO`sWxmO`hTJ5a)L+zpmuq|yALsQ=(8`rIM%jJc={0l(!z|o(tJk&a z?KXo51fYc)nLcwM|%ibeQq5^jiQPS zvEYogfte=yzA@XQ0xfT+4~L@9 z63f@)8g>JPkHG>@*~AK(?)%Bey^^nX;RD~--z(!{oZjoIpRBryvNkmHA|uh9?kaRO zoL-6Allo9VTZJNhBmKd2I{g9R=qfa?)K0pO#}->=V+JXF6W#PPK{=mRo1`S2#wJzi zTbEg-sksdp!4XYy58G}g2c!1sme4|F2jW6h?G*ldPgBR|Y%N0J(R8~08>zldTRV`; z(qH*hjHqGVQ_UjTd|WY;leqdN1O;@ljXV6oA~i{^56K{@2am*)Y?LdgXc?rVyltby zVPb9tBC_mmgm1Tq)!7QB<8&T>=V%E{$gorR^-%rk?5?+}`R26hHb;*5!DsZ6U;E1Y z{fDiu-@V~1cNr@Ijjx5e zYjG9EXa72eHQg2*DjRFgc0cduz{~^HBW;J>*53mYWS&Z@cHDt-N8N( zpYC88dg!Rk_~3y`OZ)slrz&j86@d7Vrm=;t32~*dV%|`Ou%fv7_9kJg?m7bk&!Vk*E8v68g>|* zW8Cme9T0^iIF4y;(DCCkm6f(>h8xOD|)#3Nbb^ri(w&)y%u7R!*zwEv~i&_3zZG{d?JSxa7(%do|_%<=l zLdxLwwm#C#gdH)Z5N1r`wY4?V!NckWzNN+1I|f(;8R*A+qVV)Esql?xOa&+qC;H-r5=vLpB$1-5(PB@ml?~4TT!}aELo4k9qx5MY%xK@r;wNyJ~VNVa6 zQbJmNPwy>#B%QurwG1|;1PF*&-j_{tw5I(nBQU5&)NCLbNKV7wUbgd01q9Af@!xE zR7EZ6Gtw-B!I_oU^e`zHZ!#`RT8W_CQXFH&~#2LJ3W2&+FrqOIp=rbIo+L zWvjf(l#E(<+HV@Z0mnh9Zv?JS(#4c+p}d5AOT~!s=h0oqlj&{VV-xZ)JyY@-kI0E(y-Z zKU}$V6s5X);ZHjZvTMTM-n~SU2T%oS9gVZ5W7$!P);XT>QH5O^zC2olbiYp=2o992 zD?oov${%l|ImW=oOV6N4Wjah%iN*wWJ6;`IbUc&@RKCkZtgDg@fgsP14s=p+ma3E6 zc+y`>DO3r5e_zTL$~s{7GsehIGK8#*jAEpFJ;xPe>|JM(400$iQW}i8+J+M#q%@KV zlG}xKr6(sAh;{a3FdN=2Wb|2)<_HOkNDp#5ekAOr-7NcUMTFu07W&L>$99(do4>@M zY?M1;{@3YYcX|4OA5KvuOsSxr7I^alv4U`Z*;y!iBC;#lE;i~7CQUjBHui?q{RPRO z-#52K|IS580J|a@iaZDmS@)y@Upe)|&5zrst@RD0-$Kpn+v z-js~Cy&Dt>ffLkG#=!}aRDw5_+K zG=a|OZHG2NHF^8vtbRyMj_c8x&4K#xZFgk{N``vQRgVTfqy}R`Q>{02W=`unKlmyE zv~6X}O02HQ-k)|k+zB@t>s2x{hYX5Vs^W8V7w5C47BVIe_pbnRtm|oMRaU5UlM7Lu z)o&_=UqiTTFh!YlyS87ftbV--M<|M8DVQx{v$|RAkfQgddLpUX%Nn4vzybQop2OQH zdPz)3q6GW>okfJ8#h#eW{RX{L$O^e>l&@b36NakDl+6lfX8o-q0QQG08AX&YtOJ$8 z{%$D?NJo{l{#|E%+7}dw>D>;1S~d8Hm2Q{*VcM{Rz7kb{Bx2rEva)1M1`2y$_uVzS zXl15PC;A<#5MJ-7t3tSAboE7h|DX`4cwfEG|LQYR2eX~+E!{@<#25&wpAS(pVRbiVJnfC_^X9wlc&4x zY#1EgV69gfn{hJt1|L6$q%BR~S5(|GNbt*&cZ9B1h%Vo!M$a#ql^Gs#EF(PwCf;r3 zNP-X2tVLS7{gZiQ+3>uB@IoQbVu^LEYw22uaH9VrDqGXr_2?smo^2XOCo~3m{%#5> zr;ahy@}i4~qn(cioocQ6PN5M8Z)F`P`0BUa)ac)=5sqiWW6g(6rFumUkKZY7*Y%|F zCCAFi7$6e?(=GvWoI&soaTgvq(7EVN0-;FnlmzP8Lt=RW23@{ozud>(NTL^dztw(l zD6gFM6{5IgwvP1pqs_N2t0gBfF@SQ zt8mQL?Xh)m(a65Jq;Sof=##2hc$Qq@m0P!_AjQ!cxf62sbKq_BC1O9l512xgsJ8G$ z-U!a9pBsF`ojfSmq>}0Sdx;_lSv-W8u6JHyw603fb?$~~p;XvI{7vdunTYF}4k!G{ z?{udy%_~7z>s`tflaY+WOVhsO4riVbR9lIWmJml>Owof0B@r`UlBwP9Tg@cJ2x8Kx zHvYKegf=eU6XbRT`0tx_C&|Q&2IBWee4s*K{5w7+a07q#{QAK*|C-mR|Nn#@f{;2 zFNIFCt`_`rn93oWvIJ%U7SPtrB6p^Jfk!PM`9*WhkEZ2n$^jaY;J-!K0)HU2+hVcvh$l9v}xJV>nk zMb;t+`1!AudzhcVbHZq*(lx^&oR*9azF$0a%RM)nCo8mayN`X}@~71^M|ryS<|U?2 z#gxX_ukm!!SIn_4UA>d9`v;S+_Bf-62GiExToa2b4aO_~Ovv#SL)aqv`1jM%TKG?V zE1hPt4s=>V+3xEil64VDbs>JF=lq**2)(|dZJpkbZT8nj2;EA^jmzVwOSA}?$ZI6}geuEqy-Zh(azHQaegJD6|_(24XaLY1qMO2sc?HUPkrp9cVpC zYc*>tWFu?Ie(%8ogRmGJZVS`QznGxy>$z0hJkagGPRIKFohk*o|KqBU+ZS6IcvQ(Ca_^{YMDdKmU)o(gK@8M z;>cB|2?t7_qm5EQDw!rAfA~PrHTP4XXcQ0qwWL02nAfyg>lFvl!{}?ZTc{Txd~WET z)NZ~8R%UILT?XFJh2F$hUO>Q_so1j7KL?yVc4ja&^v5%s@z6A!7!o2T-Ql2x@dj-y z`Y41EQhf735F+VG5_dm%ee1=+aEj%ZnX_d>no+x6LlL*M8!_4`^)IS=4;-{r$3bRSLL%{N>Py|TA{D0FZ|<9}HjR)e@649N2p(!wuhPUJ@J72~znMlkZq`S$ip%JcjjB^4VG#myLi+j#MBUJow_#!@|EX z(lok1dZ9?(#2ovpT{`$-LnL^?ZX`0cM2RLSRjLo>o_pWbH zc`$O(D;OxB!`n2Z1-d_klXDCCSQt4-r0dGZOZ*fhkjEW96aZadU( zhGos9IO;Mu!1N5a%UuFL$z>;<&K5tc4O_T5ei>`jnxNAfm}o)|)E|j2$TF}zhaWiW z`Rrn(I^B>~cg%DJ>?|^5|9QkpN0-t|uO|8Y6k%{B8caQoDemEVHU7+vuM zyJ{1$f7q;bTX2PhkB{N) z{QLB#B6k>8`^3#GOCVk}j44vnk;Vrj3rjcFJyUb_(rwuLQxUuqZ`hSufYTwOcDssvfm+2nJ%Y)*$kB%N$`oi(NMg7b1;Tv*K z!&lM5C%&8do@mrcT6fGpcMR4@Q=LRFmM&O1K$g@=9~Lj{DKJ`Z#J2$SB7+xs>L-^r zOOY%jcz_L>GB=IRiD;pbT$yOtY>CEOsBc6};sjyQ6^3!{M4dcf(}CP;6F}#q-QE{= zf#Wl7ybvd<^a+aFw)%8Bc%}35B}(JNA^uw<$njK^@-IQ^;PxN87fvga0=8wikBe{6 zy0fcmIPp0O<~0ApnUJci1@I|`LV6mSm;+;86b2vRppt6wVO*>hb^rB>%VH`f4!>WB>>MZ{m&AN{2r@o zV*(ok2xIwQ@7y$K`h)*tsAIR-|Bw8$|MEfq4T6!H;UivEg`er>} zh)95B>TMitjJJPHY^n1*1Pz$(5g&DXfopokj8%%8EB<`%FQ+h?$O@_%_{-k|6P4^< z5`)MdJd?_|eFy7cZCeXh`X@(cAw&!PvlZO0H`a)tr+Wci5qKZ2F3bkaeqp;MYW*c5Qc(($dnUwU3oe zX|cCtQz-eIkv`P`@2lvWZgGSc{c@1^+Q9JKDu?tm>6_vrtws180LperqM}h{$K9%q z3Y0uHr~WUWlo5DRR7)J%i3kKY@ggx*N-bGY`5qQp)IoBtCs8IK$)IGjBWYXP`wxl7UItqKjVq4bgPtZ1pr>om z;Y#ecHzMS|r)p!Sp~MQtYkRh+F?X?N;q9XS3`K+-JQ;-FR5Z83t^s>1*i5m0`r*s7 zRN21pm5%iXuaqkedaW0)GukuMqjSy7xA^B;;PlJ=d;Lx=u;ho$g%aztMOBL(A>@sG z-ySkD%;Vk5LT0`b_%P4mniwnDsws2X*3F7z@|8mou)d#^lr)*ghWPI00un}_*^U4o zq;Q#??w7Z5`dm8?3=T#<%E01U?BibNQ)g#vw5};s$4^ML+b2)d9aI%o4|}_+^tW0& z?l+WS!ReosY3lVk?<0gwL^U5B4SC+s|)TqWAfv)j@Yo_!DI>rU6RU1`JPay+a*7 zh@Igs^1V$TZ-Hs1BHR`cLX^>y0U>PS8Yc|BcKtHE4feB2Pu6)uvMxv7k64FKkk|E?R zF~}Vr2byhBE@>*qM4lAoI@3X;uJ@Ot@lH}3kU~5%u$7QKe$rRM@YKBOYJ?OGNTroa zJigv9hn)_xarxeR>v^9@Jb%P|6sp5M*$GnU$j}}6f_?}ra`>-N(OPE-ri8IIk05l% zk#J0f%?UEvK#Y6s(yMBZG<`@1!SePU=JIw=h-t-X^3ydRI~u=3W_LUKl&#OP4RJFo z-WeAJ)*(%F?3^@l=Uh;O@ieED2MLq5Jk+wY##>a+n9fCBz~;|F0$ve!6wDO?tgLzp zkE@M08azoe8%&?<7SqaM*J)0gmJZD42u*F~tn++URkQP|X?){X23R9&V{C7XmZ5AAO4W;QLRajS)6j2VEU(PZ7P)tYYGSk0wj61I z-5NSZ4`VoLHk{trJF*5wyH>CV8oqs(7#z8Ct`v_>rZu`#uJ50)3(}JW21faE|0QiYQAprEDa0>ktg7YUL{?2{9%;2)SCw6@-8WkM%{wP1O zS-E{v?S|>WK^10(ES>%9|^3}d!1uV!2=Fore9 zXhMZLBF7T+e}+h{^x+~B6+dxYAC5)P{0{ZYXlmc5e*ug3)Mp}#@liv45<+fJezw^V z+3|XOV~rcfVduY@D1N77``}0xa?nY1zS$LV@C>WHqDgOSWItrAhdWc_*9x^8`{)Ih z=ty$+O|kNERBKE@k=>g?w&#n-t!Lc?x1xu9;)TAVM?TgxYhq$xRQaZS0(#T^5y%Xg zCZBlZ#!@e6jOpbQ&!~+sHxTyn;+Or3wdT`u)P$^p3F)J>6ZWUKu(?)e5k_k>+aW61 zfETBiXE*Oe^$TJadG8#quM&wbCV%Cp7fi!@I+@ASGc~Mku4gttrY!mYP(z31Wy{aX zZ|`vRwcC*k0P^mx_~H00hSOEJggddF0~d6hHJ%tyV1vA;4RX`rwL|Y2re?J{KBhjt zVt*Ez`(48}b5u=iP_ZE+D#c*+1;NSGnL`51WkpL~HZ4Zz_WCV8%k@wCvX}I1+bWqp zPPpQtLu6e~Wc2PCv&aJ!>{`LslSnTX&!62PiRkrTf91Uv<_wnzU*0mH+}e0J_D$nL zB|TxU!e?3UA^@#d*{GCyw96H=wJ#2PJi}-Suz<3yckQ~3mb*U}J+fHVnYvU(<0BM^ zLgX8c?PGHBjCW^K=$G@mF;cV*`2wPPCvB{^AYOL{lF!MF?^8{qhIw2w6`xAQp}Xlr zRIHqeHvI7liaZq`VRX_)S`~_RXwT0L#mrgvjf$orHVPTn97BR}38l4ABu@#HSkkH% zf0C6aJKPNMi#2KH%S|FfP2rNAmBsGIq6&g+YhzFCqxHdXy6A|RoGGx%l1_$==IIBN zgTr?Lwweto92ewtZO4;|Opn^OMIje~XWkF0Gp)jyr;GKLfheZm)=o(Q3-+f99*=T~ znQVAIZ|Hl|-D@Fo0ArYxo~-gJA`CgEN-_H)LXL`xH8U_#H0&=nFjZ#aZ*X+?9wJ!v zaZCNr<;7GNYHej@93mp3H*emgt4I6P0D&C{R38FrfJI7bU4lShU}H1Qu^2czJoPZNOO{)_?qXb$WU#t)P%sQSnnTLtt%l)7YBsvAt?VGX31FtQZI! zlDPOYa&mHr>gw}~nwlO27B4jPr92((%>|T~=dpZjrfG9e1zFinghbHSCv7z4!N|#p zV`gR+8yg#;`dFA@9x-|gqLG(3HzeU;tNZ(VV`F2&@V`2($=e$7# z=CgbK2Cfg)n-EhV;`)0fiJ26$R?$H0@X8N?g2Yye)Zns+dIWmG%7%Jp&%)ZB_{z(qIbG3qXJ*Z+r8+?+3&)(_8$Y0G$EM zaD4Wgeh26GwJGJSSYzz8wRK~ zp?6%k{$27y{rXHE1$9xhg_zrSUB&7$5jyCvqu2GuuZ`G92KzqX+uSyBQZAw$|L*cb zCO&zb&oIy~YKtq~Vur#qI9YFKyCJ7?R7@BqnUtdO^%<~cL0q&wfB@x7tZT&P#wsp< z{6f~v_ugwY9Nxs+v7nbUG3a7k|HUDVs_g#M6@rU2rsDk{M#8jD> zt((75t~rWIJEe)uKMH4-yM^7B25c_C21-uwfK$FBc-u&f{Dxp@K-f*VJxwk$QY*&jS#~R4E-kIt9(L@jMO1S;QiJE} z!^;D0Z)ag)@j7F6e}M(bHf zm-i+W!w-pbbih3FbFhYA#^@Sriad0t_ry%TO~3uFSk0nn2+f{1%99A$;J4jS5VJ2e zM02fozgmOn*LbL+lR?Pn7-z!#YE`r6Ilf0B|0K;q@~bPSucf8s(|EBRby&f|@{FFq z@R~5#l=i` zyD6JZ&nA`)1Mz&YpYi8~7sN6B zY|WBD+VZo)(kBkq2LAOGcMd9f_=Gs;w>{zP-f>)d5yz#srb~^%c`JUmDZ;QKY+d1N5d?pKnoyz@s zo76?Z`~-G=ejt!8sb$F%6zuajY#MP@lEE2$-L?wJ4N7>XWpf zWslCoQN#|pUjX_yh@x~BmGk)sWM}yk{ruN@91*@$`?`U_)m7a73IJ6yCq^Y3OuUMY zi{73go3st%>B|!l#m;+NE?YTFa+-dTe2Yp7z1NH7BmBpZCt*M4H^AEEL@*VdRRUM~c?g+AZyt+jVwQ~N+_M(?%ftW49 zR%M0DiY2W`KVyH2ht<&^rJRtytKBhGq};A6HTHCc#4<76L^ZSf#oiTbS|qD4{_4Iv z06SByj~CZ(r+x?|+5bC5Kky)w@4DutJsJ`o>t6`N5@=n;?JmvR?csTa4bP0oi7(b% z7Pbh{Z7ZM+Xp%tbdEsibP6XQJG(zGN*M_tQUw+cb0$LzNhy}qR*y7mqx`_pYu&y`d>tFCh;)p zsJ+R^Zb$p9H<@en2<`&nLlpl(R`Dy0=E7!sM#cH!aZ}`{iY*s-|-{;u1)e zW|R#cOEv48OPlaY)ZB+WejO8+(eenQK|FDZ{|ApjOWRrc-@mS`%-{b5IZB8AFWb`o zcVJ%-AUX*TVK`zsb${y$M*o-n?(W|(3T|@G1-E&k2@HP0V!i! z=w^hH^T#jSL~gkhpL=<%SOYFS>C}nl5sNFGjTp1#sqI>rOtiy|LY*V*@lL)6;TIef z-Q+t)-}B({mp-9L?X0FRaDdiR8mVSj-s#=f$4dTWHBkX>y6}u~KZF3qLgO6tt zl(IvMdN1>f%tyKOkAH%dL82T5mA{~0MZD=kYi2~+&7P8fn_r^d#b15Vdw~n{ok#}m z5Mqw#$wE8PN3%u!;U3-PH{S`&m?^Iiuy_M&digEdcw^hOt~NHx)h(3z5-F@rGFsE+ zucpibrXJ#Nl}!-DID@Xl`-Z+aSw+zwZ8{+Ix4lX6+<#xIIwiis8|NkIOh1awiD|vM zpk4sn@$72{^^b$`gtiq&k`dMsP?6Rvv{xxN zJ!S{tOI9V8U&HN;wVRAZX}@&U7wnyfIuKwH)@6b(Nx0}EsqG)67EzwShmz0d>ViKu8||(PW37|MaWeF3q>@oFX5u4pSbCM5mt`!^8LNu ze2TprufdZi&@9jf_0k-?kpx zi>hoY`pQ~wD6`u2%!A=2;b2dUE$N~V3h2Bb?hatcLx9UuNwORkK9@Qjw$rA1L}v?m zpVGtX&wW|`i^*US_nljH}h7DfYgT9)2&mD7`Z``=N2lB=Q-*<@1Y8HIBK5p_3t+@NZ279bS*UzB^cBm2UB_8=L0K$m`K8-f#gRf$!slP#p5D*>;|4z+V zlZtZ~tQQ1&fuv1Ba&U0KqE*`}2yIQ$2Wae)jZh#@gO|{Y!AMMCu zS2X)O+V6$jRNZ82?pS5Zrke|72E9`q)(b~bye|%chOpJtltGN zH?pf|q(gDUoh zzOMDD&8uW^;3)?S%650Ny;}gh$H>Y+yR?qn8c~GbMCClwYmTRAO_xba&aod`O1LvS z4=E+FwEcw}vrWQP!ext+$ms%lZ#t9=iXc+a0JKNiQa?zZdQkuwN(EJX%Wm&71%3st zEN6kVx}bSm>+j?;Gx}q{8_-{iKccd6c|lVqrGF=srf#EiPj7F?{nHogYr8Vi<~uUl z7nv>gh*LCNg}HfnHjOFFdTVXYZKa~gIpCH+kh&dKjFZ{~;s@a|*F;Rku%#vx(FY`W z&rwf*e+s#Az4qzP zW;MA^5ACurF#IZMjtIOA)Y7&b*wt;in3`D;u-Kn#iU!Uxe)+q%UZL$1j-k3?V*YM) z>FV#t_7e2^`0$MB zvpvPT(up{I=j?2|BtSduUu~H5zq^^egJf|(o;ZR5#}IefSF=Kc&W_EVM}$W%4c4s; zAr8e!QM1G1k4AW>5Ec)Gk&%%z%WtfQ!RPxC5-f1UsV}=z1xf*fu^yhDV`aKtlKPxO z8dJ<#|2Vz=3u*5G)KvSui>io-2#A1m_ynX#2kA`(1f)sty-9BpI#KCe1nEVjN$)j; z(0lJSw9tDEB_wC_`_B2FJLk-Q?%cV|Ftd}rv-9TNZ&~YE&w7?^d}3l;oLdvTguleN zuC}!W&l%+@AjyGl)mfmY+$IHXdxv)9xB$m@Rsihb|Dxgje~r!>#nCFO8W}0Sdw1W` z(lTi-%ORnN|1&jsNcMJ0DbxhHvKCkxrR&Bf<>MxNn+Axtmg z{%CpII@27`Tu45d;5*x!oS(U~Po)vnw&x@ITK;AZs`~SNi~16peQnS4ck!idySaDuwEn>BJKe@#unJhIkX~)b3`eG7ehwd49bG2QY`L<=NPxMVIjZvD z(jiiG+%Bjnv6~_WL4yTS5AE*YrJJ2uMJQ`pd!~3x6fsj(hnEqE>d+4AZuVka&olNy}~J2B7Wto?0N-kmc*C?JBof|q|3U8oJ^^zc`gT29jbR5T?2qCXi< zWLoFqUMA3`#jM*bNTiPV#H0Z=K602It16s7frgQg?XARhmu+;iw)+YDw4us*h~I~>a}2F_PZBc5}5dtlbx57-W|{`1lfyEysnSz1nkWQ z=adFAXMVNQEe&@Bb#uBhy|*r}MykH%bY?E^L>DOg#kuHiTTJJY@XDYqovJ%}xsU-sn>hQCm5QbL;JnX3DrKWSYHFXB*oos*#Z>?VE zxahgn8bU7g`5#~l>e?C41GW@*yXoU0$l=juCYZ7)HK#y%o-+2#uSoKn zAt0&3+^fK5Ie60xXh=A7JK$gpZ&l3W9*Of@*$h~n+R%0Kr(9lIJi@22Vs{)#nPl_Y zjnaFeNK6`x@p4L93wG{<8&q&GZK#wK=h%!vs0jaiQsdwu{*Vz1xx9s^1R0?a$@Qd&ar(;3*`rHywG@7g7|(A(L~zqN1XU z{`rfp3cg-iL6v{%($+|opEfQLI+?d?y`a$DG|yFjPWtAn=%XgU>ZuGhrIn7dxy}z; zO6g9x+MY3K&)>yN7TXZSU{2-l!95)woo;|*0;JY3zB=f6HMoy;LPh=Tg1FdYdR^7TehTiO#hVE}^TY+idZ&iix0LPxK|F2l6wz0z~YV z`RI{hpJscA)Q`KJ8S_WP9pU|J6Y<*MVD%Nk^AYuSXMP zjjxyk`pEdad?gPssAn{eDP6@ynC^}S9>hl1(bBuyq@(91t{tPD4-NW@F{rqV-b`LE z)TAQ%b!*Q(mnifAtUm>S;Vz(wc>;i;yNZ~D8k_N8jQ<(y!2zw9CC_lv{0Hl8fQ=LI353i@U=zuIQ}k^xdc8Dyv~{(L@Z0g93k4Q9MJ z>aCt+^tu@h@}VF}2JAbhDpmqBn0I8ay3zV>uoeNOWI{&XzVB_vrhT}A#rS5-@wqaN zcXUHRr39KVk8=UbB_jFy7WA>Hh*pM^{#SIO+9$29Zxk*llo~Y*WsFVaacKf!3W>is zcuKMLExSZKdVl`e7?Htu@nugYQNj7~Q;_5X#fzDgrY-Rf+6Vi%EPZCkN1`H6Jpxg_ zu55~z!EaR)j-yhC`g6Sm4K#6#?rGEA=(#Jc@8}DEoZmy1{=Ih^hJ+pG!A?=t6z7hr zs*83tlB9#Um0n&-ggx$ny)^85(Tj7hzP|CKjLbOCZXyhv7U&UaGN(|syt0kkQl{X) zI$yS%q2*Bs^z+39$IZ)UvFdJlV5GgheR)+8iXltH8PZrk)-_#sg1JQ;No!?)qvndgMuQZjrNgUqFHTl&4$TBo z0SL`v=MUl+v<~hWRc8%VEwV>!@rX(8FCo^~ zPgrkA?efHuxsh$iJA;tMQYmP@P0uXb*OBFxVM#%IkvaZ|-N*3Nilr z`H5e(j-DZEard<|?w7LS_D4$+&0n^66*iY$qaFUXWNjm3(-|TEOzLRlH$HGOvMQ+f zD}OS^cEf)TEz%v@#!kY(xV-##;?5l*9*2dKXbl8{TJXgr8&}Gs~bN{Ye4ik+{dq%DkYbXSKAC4QR$U8a`AmLu3Aq1N6gfZU;FUuj& z9J~=wk`%1ixPl91kPnq~do-Q+KRpoCJWmF5wfab!%-Ne9yavUeiMTN6*VIoZq2QqJ zhc#PO>kfJTpGQAP@3@QQzAmPGXt)%5s%KaW~^dve*_T#c|HjA8hiC8-hoR) zIZOwwk9|=J@(j|P#7-Rkt5XcUm@q*;4F%CASq_h;Mp?&@v;nF~vkK-gh7!r0v=bHpx zaMKrZiZdjIRPq`@8ydjrhWEBo8iLA^@*)wMVtEGOvk6Jsu&0Tjls7l6|!QztLyFJW$C zqN##LseoE_EMWCK$oz27E~lcfj`lg^evw%zL3U<77B_5WZQTvF#)K?^^=<9P*!3zE zrSzKFSM)s@kz zOrQc06<`V^&Nh&ooouXT{SxHh*K~_n3rRmzH+9^wg-sf-%+HjsR9URnzM;MtBP6Xn zh%=8zB&wU1E{7N%Ql-9`j}pAS&Ea?DsQc?EuIHf4rDX6ci?y{r_s+alqQU^3qXl~T z^5rlUo(ux@eJq5^(js0ejjdnht)Xtpy$SV+i`N8WMPe+{c zt@vlEJvlcseN|N=^^COldU`1pg+>iB$&56Ta%DeEIhx5>kB1E^pNE%MRJ9_^LZI0k zxk2kWbexPJuNR{Ja@oZrir7}om*$iqAT3`SHNEZoC880 z=aIK*X|J6`M2G>mMW+r#bJ%o407lPNQgzIEyRY`qB1cEdtd(@r$EnyICkp*}sWu8R zg=S~Q|+K4xNse|ze z2|wfFq`bUNGoRim#Jk(QIeSrk!mtHks#aCW0Q`7|9EMhZ`roMHSAQe`Ht4BjXK80Q z(OZZ7@0WKV1j6^flh}j;F7l$!86uaWjQ60C%C=8L7Gyf7z*mp%O0})IgKvq1iS@+K znuTsHKSa~Ej}J@8O6L#V6T97Wi)^rGSI_Vc2DDbGApe2;(zHrwz5DxAiaBiU^c#Ho zy9?&#=ciE~0f6J=vdJfQbEFixH9e&>FYT}`cw)q)0{(W>P55%Ga%cOh`09jWIn%cZ zgk9C8uSFS|IoQ@&CCmc?^tl1lGY)9ycm_B+7skGlyUkU}1>(BLh4G<;ab6_@%R+B$ ziGHM^GVkXT--KasTv%e@c)-*f1!+8amcDxMo(T)8IQ}9ZA5zY`Y472 zv9nN@>^!{5sQHV)+vX)7BA++8-ItF+5(gWwzHB-&z!QRB_JHe`^G(s99DTsn>Ha!3o@$JHa~5AcJy@I_7*CcfyXeWE4nYejIDEXHu;nm$*92I_Zqnw zolWyl@|Y=x;I(OQP7wtv2IDGp#*{bIcp*JLFR=l=X>`7<>L&4&p&XeiA|@p83HbZ_ z{u9N`dpM%9z{EUSE*Jc~JK3w__uLTXrtVgj9Xc_!lT`-*3QUq$Z?d@{X(4oek^W>K zs2~%oyE`WA5B{+M(>L&Y35U$A|HnX<^o_0wJGlIyQw!?0&{lLwv(#NXpdR@ZSu=bL z&y$|HmCO@6C$D<3S5REN+m?>>czLl;)qpvbHrFPq;4a*K7?kVwBOsk2yHOcfU8ScF z7p5k5SzJp`kVxz0mTv~&+w%pNZkoIQyW^+SLeIcpu=%Oh_`mH0wp(_+H}+0ioCgOl znFp6>CaM_n(!NNszNPPE-j_&Uc%b52CO{G*!)I2!5-gwq`ea~5^x31#s<*FjWOpmH zfIAi{OXAsi?Y=|ZYp$Ybiul`a+c)R&cr&(}iRZeqqGoO?Hx7f{MK3J-W_|8WZd96K z;|JGfN+IWev<+Oafxud8dpp+MI%sbXSUH`KYouoiRM`lVi0c@~j_d~6=b@RZO zal+9>vEWQKPuEOtg3=*7L+$OlVyaM19{XjmV6xa_0Y47oYf12O&2HAN6ytrIFRbl1gDw{+zx|H!; z1!2cWrnRQvr|MLJh)qp&4K9{Ttm)jT0O__C|U^fh^&#yQc^B~~K3vRy?yPAzF zJ-y2=@a&cg@u}b)7#g%dQJbogm;QK;Vpy^TO!#GGbXam@=&zokOmX=7VL?<0zK*Y3 zfGNd$n!Z&)_-7aerLz`Bn@-yHe^yRYv_FEhJ- zZDf5t@u?c13_ZWY&|K2&Erp~NZ@4grx7!*B%d|FcgqbIq{*X z9ee;F<-Q0nnyqoeQ2^gke2pebZ#XHmn}JCtWRhVR47yU7h0s zRGC)_zY9D;f+BG7i%@7VDr(xr1S27l$`=EGard03_v^~dZv>>chzj~=pFr~qOGgl+ zOQ{C|>CSH7E34@VP)RZdW|Ld`H&4dwX^u|+7T$LCeS0j(q|#y^w<4*hkuz4 zO+ByM5?kYSul{<@ZIq_jJ|*s*vTH$w@SB(HlkT@iE?NES2h|QvA%-@>6!UJg(44Pr zXa{nEnS>^G(WdYAFY}W+jCp6M^t)@swR+&MaxaZmqBAq`H&W~tThJV(WcP08x$Xa< z_GbtXqSN+gZGj;&!>*L(>NAal zkxNMeUyf~-`A|t8)tC_bimTItyrEQE3d86N1S(;utcp**(D_flQic##ZM1;r!3ZL9fxNhNKylxS1n69s+37 z7GD>Ey+b*&ynDs@#cp1{3*)r(O@GsIR`luW&U++e!6kffxo$SOBT;yC{n2nR(%21J zI5TH*Xc55i3>1XpZ+T^(meCdKOT5o@Y=0>-`4<*-3N$^8I}YVW2^$*B<(^0upcR<; zDW%s)(@fT&vELr|^;6HR-aBNf_;C@7$?hJb09xz28_;(b6~3^p^km>6gEVkvYyqLj zFZ@>#iANU+vAN?>z z-A;*ajh=RBt0)mowFfHs(&|r>s3++T#Fm}(fVhba#O2a;2ck=If9SSEbG(X&Xkpgs zzb}XjTUfmx3V%?EH;8cTr)MR0t+k4cbqKNZB)%}t=l$4ce|)f}>?}{qmZ@TO3VKXX zlYc39|B5#H;m!MNxSIWYgU7pvfe=I1ZJd^pLN${WqrS42WaL>VEJPlAuVa| zAgtCb5WzyQOeXT(J zf3H(dmRr^K0@88sr*V07aO5WiVsUz2Y5!=*eVYG?Y~gjdyrfltHlcQep#4H}Lo{I8 zLm)nbVBf=+^(Fs2aSCOpHOSD{4pZwRz_z|gQgX* z26~zXH5}|F;-14x)70PDV4wTKy)TS)md*nPoW?_S^}kDr5?+gubS%3l|MH`RDC5^u z1f4vIQ2C+zZqQht?WDKm+gAzDm(NZr@Mh}QgtIT4BK)pIw0?k_&})w2;~q3JL#5Yk zrMct3NO!Lp6r|CsK#bwV?o{z=0202^vm$lR_hiMVSidS9U_G@BrHe)yQpUR$Q;UN0 z`##|c5rWzlYa=6r^KJNbrEXOE{Dc}jmGHXf4KW*fe}Zlo@5s?EtFq4t$b#0 zExS_jKnjvzYl7+SV?8dJnbjIu*3M9}@Fb`wJDS>7)ErLDSC6Ajy7z@xrudcW*^a5NabmmCp_6 zz37F7>lYE?x@Knd0BMZBEOor@PS)G?r(cDS*XemOKbzn^ph88GpmAnz8}^dg=*(Ea zqaX#|nM4zn&5-XD=l0xE!Eb&uFksb;RH0Y%GS>i~-LA3*3|>_S@{ zmM0-E+wZ(hH1M~3ez}e@BA|e&QH#zRELtgm7>Qi){pn9U_pFX5CVTgkrH7q)qw33_ zF7H($9ppHNe%{x?h$nxycGRzCGf!K~%D*lelTlICe!{w0${5TN5*5)%ugch0ewxGl zDq(G*Ovy4c>jJUI_Ib|T_P0{oa6^u!koIlU!|`!gq*#Q{7%!MDPpIeqjd_r!Bn*4c zNbRv7$~JmY5cV~oU-`@?{NLWp$svyDeDUH%rNg|y6Fe345HlB7Oca&i7=T))@b)+7 z7Xp#(XR%XmwOUSF6T&~)N}KYgep>E}2D(l1PZL2r1YxMA8Nk#QIYcLpw*gk!pEc%; zKwU%7YX!sY>vXUDHIeW%HugkztQiSf6?f+q)2d%jf}e%kpg(8{HY1 zn5LR8E-p6yL~yP;fp4e)_mi2-*w>{5$kt$D5@?igasv{>YD!CcW?clpNVwn4V4S1H z%`)t;5_JAi;s$|raWLz!r>0=zWjA;pKQ$F^Hy$tG3fiXZz1ji@m<9Z+`kBDb0#dAD z&4MRVJOnsJMdc#`WT(84KO)y2=~mVsLIMOLxQ3>nX4o}zQd}KU z#y$*j8ZrnQm+03;(}7X3z}*0VB><=zV=oXF7uODl`dl4%)9L#K*6IECFtJcs{xiUF zF8%Ol=w0r5=iOn&C1a!iW^JC4Y^mFLaQ^|8>dc%JvAo4F2@4p9j{x4yhlxhoIFE3$iZ0z`7zf1)L=M1Fv zdH}+!kB^UmfkDcd^AiqT;F*HmOKSgfp|G$pfJ41L3Qw~FFsHFGHK4K|3m2E57Ld>< zhxc!)9|=fih`VZ5@!h*`6*_nL)8A2mG^S<6{ydiNEzAc1Zc6e;M~YO9VymS7>*arH zy|^~tDYC@EN+a@*TI(c_VTq-JQvhG=jvHz7%8Kqb*4v+=YknBsTV88}x<(6jeI%;j zy(ZR^9x^7wjyoE5cAeLKF{egkqSDZ*wPLHg^l{Ij;Bk4oz46tUm{?>zPGc-j%gm96 z%<|g#GxIq~Wx6`J&_ujshoL#xLT$6iwnoCxTiUlHfXuHWK%6e0gN(1(dUE&i8s!Lw zaA^^_;GV2e)9)2`fz-L^#jeEWEWkvJ^KGW>`$~Whm zD=pW~#(q<=e|`X_q^eB|n0HfbG80fS^d(I+;0{ieg|^|f=Z$whY6*CSY^IGMakKGX{J@8*SRxU6c!%NtEG** zf_|s^qw1IO(noHs@KDl9JX~BaxX$N-^70X#iQgFiOI#qDY1uPkifTp)0(4?ezbP=l zJmC%qdAc5hzbh{I$WTiH9}AnC=Sa4e(r3=DOiu58)VT2f$uA?m=yrAP;fXg!JnHlkV$!|` ziZ>XKj%WKW1fRy%rxJbQx9<%9_03%CJXTbddx99W&u|vN*rb)a+FX}b+21DL*hMkk zXt0+xWygufyiFpTDo7F+J7=_XGW@>oHrQMW zi6riC>{_ZE&6Z-@5AVG@?4dn#cem2~8P;sb;M_Yi&{w@ER4?8uE|rPcDV-i)%EehR zq}^;3kU;sf6JTn`y(~tgBEy?9{FziP@*MI;Hq3(0Q(7Hv9XEeQn?DxG=o$JhT@Fch zxiwziFskGJvqt{iHKs}s!yOVmh?S`y>a1wB+v=g?Rvq}Yy!qiTY7?6_?}#e4CI+c_o504XJ#b&^t~?uss*}a4-Bs!FGS;R z=^CJo!TVzR=Z_zE)J4m6=BXDoH6;ts^)-$CeLMW#2`=^&A`gl7D#E3XP=AN0ny7GU zfrNMbm=-61PHL`So!Qqc62GbRoRGdFA+uP9iWBQ& z{)tvP%6-ZL<&BJN;T4-^S~gmJH-~>e-b@9aPGoVJxLmPKo{=1F5w$M|(q@4b({wjN z-hZT&2zlMJJ<&2fomaSx@2?3S5S~*%u#g>m@0?IZv(M^rLchdEShk-mB;*qZf=XKQ zcdLDyzcBYiH2!dx5j}a|=PdFgg2u9bPa?RxwNfv8XyaWLBf-TVdSU!b@t}D3rwrSN z2T2vJdlo8Qp=7zZ1)g*qdBuk0tlASi&ljz@4HuSs;1nGs%vilSd15UQOHr%aN_3xW zXQwud4ygTkh?JA5XCP71W$?4l>in*@jp?b`+0H#W?M`5(HEJ*MI?z^>&&_y@-BQx`ZtG@nVU^YkQHRqdSopUS>aoi=Yq78-5w)R3WmN<)Z14E0hkt_ z^$_*Pj~_1qlR{2GVeRG+CMZy}8WMt+Lo;ar#7)Bgf1>*L1r^g;vjrbiTecN*d98<4 zR4XaH5wQEN&|tSCDa@mbRezkR2t8Eme@;}S_Iz7LMxL{@d*G8^q{0V^hmGnFlbRJ; zpdIOvtq$e$?j%4Z8EBsi=JuJ9Le-Hs=5dA$2;mOOMbI06j2Jt<5h9(=WqnvY_=r&Q z#QUp*5$lX-+%%l1o3tVj8v9-9EAy3vN%(LpZMkSl04_0hY$*xIIVh6x!Dh}{rO>zE zlCE}i^+97pE5F963Lk*hqStOMMK~4IKUbBJ8_=+ph`iVwls(c*iR!lY!M)`sNIZK& zO+ad@Ae<*YE3{ulomayQOC;NW8^=QK)6PtlVJW}2*wny4vB0o3+5&Sa zZQOZnHIx<>6@@Rj^WIE-SRwhB`_IXCTJtwRI_1A|UE|_#}J}cBb5HUbKH=ROI3>a1>@Y_vK?WrJqwGK>hYMH|48&qe8qJCBy zEUe;{W3jMx#cR(FNlf!9CzyIPUBlSQS#j*`*^rt>-;~@nl_@|opG+S>GGj(AHs7R) zH_1Ub!|QLLtR9tF5B?q%`X07{KuN1r&PqJ$riAet6R1{80By`q4*(@PGbId^C>P8li`^56lhl2@!Q zTY}r~KQvf4Vnc4`)_fzafmq9XMDM!4J{EaY9~(#B9lNI(A!zqUB%@^2gm9*Dg$}5; zgQ>KLX6%Z!wSW96P4=8yMs>28+SWhRmP*|Fi_$W-oQldOKv`uH6`h|sW6XeSQ$|R4 zd<4=JN)A8NZgUMHrsfZe`6shD%|A$+&Rx-rYwMA8`3+UqY)cc=lR0;cLh)$~%sfHw zB@a>(m4|VMxl3R&H?N}|B(3Jibxu%*n%~H-mC^^Z13v2TZreV>tVwp%Lc-72WOE_AEi3edv57z6_A?;nHB@ z6mff?(Uf4Zvb?ICMLctVJuxVDB`!k$y>Jj&ZSL=lA}85sW6HOxqQtMv1A1Jr^Ube* z-MBhPUC3GY%{RFEh6=8~nyq&zOCwIBc8J*B#CZ(QAaqz@5l)G5yC1JjvRc7NF)YM# z;g{sGgEV$+QXW`D# z5>zr;nLCdz;;RKIv_e=4M3f~fx!$PKZp(b2^XL(ab_=(Jd_WADTdLur#WNAD(RIWt zzI^7_ur~EX@!pdC2X-n>a-whl%tjrMHMPA(Mr@BBzixzROnND9W+ocRKu}&lGCVy& ze9Grt(Iieo_-fYHW8OOPzJ4mgPqt5T#OH<79$&1x6wmR*7^`JPl@StLT1COJfLu=bh|Hn>Dw`gc=SreWc7ze`^`zaP+0*FIQ%?wuwoiv3=m7soX+>NVCO z;2-JorE~J}#Q{gjKp00q+Ema+cX_^95`Q?HjL2^E|4vvjIf+x@yRPi_x*YA^@&JVF zS*{zWC}DqN|C@9I+d7=b2V_bImD9G^TRhOV-kD395G-%LJSiSK?Ss|{J9a^P&(s>( zHj1;D&&zsD(xMgSD>w;|B3S}aSYrfI;MLFSZMQsMC`}{2<@bu@9A z9`ojwU^DO#6Nc%9R%a*YQOQ6wib`=5$zT-`+u9($leDnppRA?+mgAH3grqfA~J#}KmIMq3FGqp$07`sdnNF0U%UqnuH_?fo>*>q>qVf(U?=+((a^C96aMFku1{{WfeOLvI2?VN zb2+SSkVY>Z#GP`FdJjl+96Qc5?+c=rgbmc2bJ{&hgv__wj$QmU;xl;ATj#v{*Mc<7 zMSrTnWYIC_xqk-gi}e$CGCTJ+24R_d%BFN4bLb_qg)@qyPNb)wc4x8=7H2(88~-c9 z!!=G{jLE%j*@Z5OU0nZ*i?E$vCrtD0-I>K3?eCB9soM|fQd+Pi1GtdT4{fnux=Yt1 zJjHk2{Ll8<&D--%10~Z$V9=~fLkTgX)_uSHDsI&Dmx4a#(=AbIiHnz+i8se@XLbi* zb$Gw9DRRi1R-?dHZhdz5RK(t-FCmY!S3N~oF%nys{$yKHNM--CeX+pcXrlx~3FEp# zJ%a@=4`EbRS+}4CxHg3=isrtuzm#PRZpTyHT!ne{Jq&`s65p^13I%+jzq*RT?mHyr z-Om$7H$rYd;rp*XPw+VC(r1|% zmH9x6DjB{W?eN`6W%DOV(#9%)1=VZw767$q3r^<2uiL%+f0~rAvtc?8@u}5qx+x z)Ys>V{^(?gGi#)WqSvp>siHS!6^2A%v^?UgT&Wt;X_|v8{h_oIqp9z?1KtfxxkGtNNp<6i>pdaq zQC6o1*+UpHtgzi(g0Cs_0o$KEBll~yh=>|^0qLa9zF%y*4X&@& zx}qTUEqF(DEK>*UZAIWW@|avD0(y@0ajCoZM$`6MZk$bALEhEooiikhI+-i%ji+F&#hs8P--$~iDjsOKds?=1A#kdy_9$fRF z%Njf1<>b0uUj#$Ev3afbgg}QwrMS(8SdBc6sD}Uy*Dl)YL>cmiZH3L_DAJ1%2lED2OgvHM!Bt0&$ab`I$ z!tAF9sK&!Wjm$(_rbwKg6TkR4K-JZFM=pB9tPEt6(O5wKGFRT|n}iA_k4xR@gN4eu z-Q~;xe;of)4!GL$-$c`~RRE?^Vv4I^q}To?aR)~Yjep*9m_qJ^SDRe#0e2As2vgJc z0(PD9h}V3{ia=>^^E>4cPSyW_jM!XUTn2`Qr2aCc+(6nepdDjmWJI9C3lz|f?Ki)h z+q^Gi5Z6C`{gSz3)$N(A_x%EN54&^#u`U}TK)I^}(Hj?KiKDBl8&&qN+J(X4zsbBg zo&PEl$G-TVMUVBw{>|&OIsQK{D3eE?>6K`GR8S}=F3u?|1mab$VSs8E0A>R4rQr4o zN#mU)q5n=ANTqDjHn+Y$2@nGV5>(lW3kv~q+>`K#hzh-uE-Qf0)F2%d3^_Pk9str2L-!034nMp)#BaoqEB=*fq))*Ee+@q`{F)nqK^`i zJ-4E*CC~_o-%so`Ntqn%p4mJH9#BnTIN@Kj&ydu}!T)tt zWNH>jt{=A-5HNh69|8xaK&A7jg4jhW5r0kT{l!rI`p^{yS>ZE) z^=7keP!pn!_?cei7o66*o#lc4PDXKI!op`goZFvnct7d?82t3~gNmNMA_ZY<$2Mp-1F1F4}fmsP`2H}+dB=TH&rgLkOw$?jfk@mDnTdCyEW3e)i)YJ`)Ik7 zZ1wV=TfYQO-GPi@34Vfxudf7>_j~(8y?*mG`^lc}ooJ{Lb2?7iNDt8GML#@xMQ_S* ztP-+vAR&-wa> zzYgtI2-(-0sA_kQYvWt`Y3zKABpA~S9Y{kzWd-{{@<2x|uq1wl1VI7E<%Nb1Ac3GV zv!S&Ed+^lz%b74~*gw$G_f?)y?yn1~n9t^cTS!|7$qH@*LeOVQG2ta|R-%LqC2XYtW{Byl$&A%>6; zKHh=0s`slGB>%=8Ut?5r2Aml1@=EY%5hz`j7-c-&~mJAY#4p=dD@QU)@RXn@8wC{ z@)^c<%HxMaYg?xn&&x5>A}Pc7ILHJK+?~M z1xbm>c_QjX4mLfIh6)BOIm4-+@tU5!u_jgLSkI9p9{MVYN;X(h9gz1-i-C(v%fIEW zs2!m=+m-O#+@~Kk?Xpci6{uP&5zNZ=OQyt#tz^uygLy;4aA!RwPQ;E?Zcav9=@%N$ znMq8>-aeRf|E>Rt{NAV^L_Ho!S>Lb*?@c_JMn~MwCaatmi!V6+6Y0e48f6g|XB-SJ zixB;KU1Tiz(RS|U%dSxsY^(4F)k8d>G(VKs_2`kaai$5UWp>&33*W``)vhM}tk(eIGM=G0|liTBf~-?ZSD*ph9xrVQk~d+!>r7EN}&uHxdK?f?*(0e&^|!CTI%J$W9>{WK3RIs{bbJbFrkBM3cQc4cmx#lm^G;$_$H;wx z1tTAO`_xk^+#{jo_?^SVMHUC~!xp~!0kPst#?J8caM>eVCMHqrt$jssU!>Z@T6qty z2iAzMXnRJwya4%tTQ#UZdXFxL<7 zXRhkTCPP=w&8Ex^j_DNC4~YDnvX24`owdoc0*Razh#IzQOI{d*+tMbaeq?r~!47j# zd3HC`6`{~NjQYcp#i;d1me$tCYcZB6%R#-yM?$4lB1hrY2e(C@W+OfWV1&5U7b=3U zyZCNiwln$z{AC#soKq9}<@AW)gs z&y#*nd?Tdf4=8agD!!RF@F(*kb?}6(%oQFMtKYyyWei=X0!j!c?Z%L+*;x4Nco^0t zIw*5GZLBP5I+L$Lyl`F%l;1}78!Hz$<3AxDkFErPywPcNTIlb<#X`56@c2cA^KfSa zkB^(@n>QWb(lUJbG~aec-cO@N@fCmbE4mrpG7*e57}kR{y10eZQe*7NyqM>l=f9eM zkw9|sE`d{NAh1@pqx+4uI0w}u`HOv#H%OKyY?E?G52R5kfldMi5{(M7jQ zCrkTQ;FXv(4pfqZ4V~)eX~q-vit19=)(6LnPc1@uz7m{?l7jNXXWR&zpBEQrjS=2>gPJ zs#zauy2B@Z%J<_{t@LFcu@tjok$q(Zfe*qk<=o#LZ!+4!@@w3{^Ohh1@4i&4vhAKI zr^KV5&d9gkR~wCk#cXidP4Qoz`!2lq7XwnaVyJYW7n%n`X54`FM)& z6K&)v{kd3be^n3m4Hba&(*#e5gy<_1t&10O$w?w3Qh8`@gSFlkX(Qd%5Krf1tVb@= z=+==LbZhU{V~kyZ_rzdFf9(Hh!5tW-@Z1+Q7Zh|}URvP30^5+Kzk?LJp=O4&8~wA% zN+eK$RN0cbQOH4!2c=wABL~?|F0)8ocMO?|(9o;t8g*k!waZ1MM%w9S!o||*`RJj| zz8CR<=9RDJ1ZAdjU0ZUM#=^3~=DeS<#~GddY-4IwSC};7!N2p>$L2V~e(~o}cwjDK zZ%BZ^<;VZ4joD{ij=q?%raU z0blr6FnA!i8cLFJ^vW52mFfPEi=Q8>Sp1`w#x!%!MH-p9Dj%K1%n!;L%!^E4La>}B z`0C_NpId~s2@ zzTNM3-#6YE@5kF?KvA_fwc}cIe)Ie0oThkMJ(q<1ETIfo8xv_4s)-Y%_6owvO|Ckh zDXu(AX*B7twVyP~9hVb{7{4Qx)v(bXIeFV2QXqOuLt-G9K5p-$al1tFN#e$-$=LuQ_&DBXc{II#dEguiQkmHBth}38$7QrSHth!ai& z>=W$~VSceLD-RHbKk=%@udrtor()kC`nvRMFnoOMkSKCOsi)*Yno}CR*o9_kl1zJe zSop};crhwEQQG0D>&}oYiRxB|>i3 z``oga+Y&|;oDet)ZcvAG_8`n#Fhj!DecSKx6O^GC7O521+(4f3|%nS@rpZKD9D5yxZ9l<>s%0teM@T6y9BYys$Cxu&3v#qTMC58!l3eYj2x_ zjmPYIC5$d}hYT{dO)HhWKlgdu>g)=#oRVkxv{QNEyBYBR%?&7V6jQ~`xdc}7^?bu9 z#UdsvODx~m4!^buqn7fm_B=o+I!JfY4(p*hXvK}DnqIfbqxQcB#gy7kPiZ>*0uHoU z!th@JyM>}Nd>7gru;9DU?9ZE(4;S8dThN$AuO@1;o}9`N(2KsZ%3mbyok*R&dzL0o z+X08vgtQ|kIzaKJXR{adP0q+Uq|iyNI0_#+BiT5dEhC2sS98%;0xX}|StZeyKI&dL z9r9nSoTK7TD`FqG*0x@f3WV9%JdcgvZ8nQ6gx&Z+=y$|3b0N}JxSh}oCeZ?Go|XMg zzv7CeB2KF1+W4Gub$r=Et=Qbo(wX7uhwslt=E>1N(*1|>v{lunaED{hK6Xpx0Ju`- z^$-df3nyHA(%z(~sXHlbb|-7Foo74AK3TnXtz-3yg!zd#XZDK}KL~xxZZBd!&9-&1 zmT)d4a1#02_R4Q&mklJ;E@oZd_R`X(Nh&GxoN7j^hfAq+Y}FJ^9CgbUM~>j?O;#LF zNq)1{z4m!1*1HnAvC+%1yV5a|d3V7P zuK!OaNaOP3NW|EY!d_JlITi_9n9=l9fKQ;?okvB2j(9BFNd3O-;-C`U&L7m#338c- z3XClUf2#va@He zlm@k7XJ==Z=Vga{{Pd~ivwX(6_5|Bn%sWKiu%X%b8G_V2BRl)H&Qn&O;9%=4B}yod z96-&+eUon(hu;9SeWww?!FGp=B?MmXB)Lp(tU&^?jU1)7S;&Svn z=Ax}Cz2eVTE2S^;ZjzI)Yw$8^M7J9^fK;m4dTwWoiX=MiJE%4x3+V(@^_%#3^8Eb# zBj=npQd8bUJ7;I>Up2cwTRMHxkV)dn1L(X>DWzZiS1YW1*WUvOze-L%3H@9C)PIdI z{Jz0(rl&`qI;QBPk7j!B;DJxw-stG7GnVm?_C*y1$xVt0y^GCib50 z6d&MwcYoSO-5~AZNR6hNrD@tu| zht|L%P%jfH;%lIr#%1k+pA2p)C+sA=mLXV*Sn}D}ORO%-J0LT8A z5(k@9f0oh)>1UX9vn&gpGtl7!RUr+RYS!OQn=7EPDDybvtJ-=VIQEu~&E+TW+|pBq zi4o)8W?H2ZDCQes=}(hOf=0fuGeXE8b@e^(BWayCT5-<9KRns(Iy_M}I?Vo6IPI%+ znfB4oQL!JIrk&}-hciDsj1p_g@MqNv6k8nf5a~|yH!3dguCu|{d_D$^m;1pJMXZ#x zng_I#MwUJ#Oq4ZJiijs8f~;fruNz%<4vYM%%Mme|&=}BU!VHO3YJwI1y}9xNa+#2G>}$0evSXKD1te77NDLT77yVLI}d z9d*T}Ol)s5^sIHYlF}aYn3Ek*_cddU*2YkrD=xe~Wn4-(! zVZnHW0gbjh2eb57%Y{1B_f0I&{9Ny~wN8z1{45~7fl|Jk8V(!m%{uEYkAJW7Y#8;! zz{`rW*~ZlM;^rQs**>wLF(|Z~tb(G~R_I!Z?mDeYA(H++zdB1$KEFA70pciF!t^Gg z{A-X8$uNn~hXm(&zk~$4t7j_qTm+XGhlqtb;wPHU4C_{;-r3N$4WP_XRriAN(@0f! zMsaa8Wr=&;h?m0~mJw;eFn=-9%+cuspQ{v4oD{16 z1hW)d?p59c>Dlf?{37Q;)hyIITj7Ec6P*Q}#PST?=r z<8_10uBap*6_f@I(-yVS<7In~m6Y0~TezEB|FA$M3+q$2zrTuWvTONTV$SeUu)!~C?LJc zo2hG}`_Q+9o*d${^0nB@$R+~ggV#N24at=1nsfB z8c}|Ow(tyS$%@&I*cK)7OKdmRv0FSpPx7S#J%LtG;KlO^FvZFf^`Rd{iIXIonr1Ct}sByNNX2wqq#6eXfGTm-DWPKk-9#RDKt z7S7Z7A32WEb7f>VYtS_7JKss5R)9?DfL24*5k!Tv^VPA)Vp`)){f84{Mo!R|p0x`q zPN+S6;xcM8CpuNo-pViDH&xudPt!uVpl&LRj--Bbax@bSx5o0=s|qb5QbH6!;PZJx zg7%veBJ+2z#Elrw(IG!Agf`xcbDyW5kssY8m1$+xEf=5q&?+}_AWr5|WU#{gEWBGm z;1wD599?790!77J6DP!0gp!FMBsi%l0KLt;8TMw7EJG-Hi~f<-uyj*_xxwy!)pHl* zlyq%tDjzIp;MH_ZbSpk|L?p|E90sg!5khA(23CB<)79c;q{?eJ@P?+Y_NO}6t zI(gLXCGpLk1G78+ktt7{jD^!bYABC*;)0;mkh^uji2xec91$x+p{2r? zte1P_OpnESjV>UdEo0W}!T4Uu{vwgHu#-r zlqTRlctRy&Ha3Mkn+gY|*NxVaePvoD0+3lb!L`=xlM@F!o8rf6;}?n3s?r#uIoI^u zT^w5{H`J^9#Ip`WBT(=Gz1EjTiDe<9(l3wu__p-afw0{`Fe+ z!LVr;OGzEc7I(zSdM#BZ12ov(nrG@|C&hY-g4YIjc{}aAqf(NU)BZmFR?pN^ZtToj z@stsfoUfzs{+I0b=~1Uva^X9*j16~q%H@Yb2mn!)ivs%ptjiS z*m&xY%Xg=PKD;qA5lldN>$kK&YEx~{NUFWbGHbmK!`HmHRhL)Zri={=qvo%!S5svM z6|a4aaUQP-ta5Pe2#run<40E|5SOq?y5y8#?NL1W(&!5l)hYaN>h!vLFXuiU+^N@vVAoj2|&!(VgO>Gn0YrS=I=;F&x;{~uy5LI z^|z&oKEu$R@)qY>pnlZwHIH%|CKrzmsHDAP=G4nD=*QSEk9G z%9~Le6qo}=99xQmbY224-_65=s*_+3^Q9GJRaI5x+bz`hpxvOL6@Vze0SP?t(Y?-2 zkN`JOL#Y?Pu@xtFo8}1z>zJ^{Tq_y1;=F^fNOn@`o1{tw#@6tid)zYQK#Ygen zx**fKZhRbEo2#HqY=^dObu;Ft?~^>BA;F4q;cx9Ar*@_9({(^HwtVg!S~QyHZN}+#@IH^dUp&fftB`mr0>&yXLd+vn8 zm!-}`MlRYqIXPAPl8n>Dd@ zwp$Xs0_ez!s6ZYG&wWstVgIg6`E!Zj7fDSG(^Tt&vXW)VSx3}4`@7|59C|NenyNgO zDqo$X86G+^U7$EjCRuJ4MD}G}6&!jblT<-%TSfHx$B!R48gAhr)!-^VzCavL$05=M z2eS|5>7u5m&@TV!2$Kz4w!5}!jQ5aYOowy^ty0fMw!aqXb(e-y5^5Ng`a}|x-fv-E zsy4BzkjbY@7=M0-m2a(M-;loW0=$(FFAtJR4SG^ycPf|;Xom5TfiLouM!ktblmMeW zne^$J-zqWVbv)o}vO4pv@e3SP=QMJ+XmJ=CQJ1krH(y@5qc7d}U4RQ>b209qPP&M> zM)<;XQoE1bMn`-Q?rX`oR@7T~t*QP9B+kT_V@ zjX}XmxrZf#Vw)QG1UQ@AF7v%?k!Q}AH|*Yd+k{?2E2*rvq!)21CAYSTg#+KRyY~stuf<@^=3gZynO=^PrcWFe=Wn?2SjSs`!2a&tq`jnNrOqANN1v z)l3dS?&CqcHq2)L{raMyoEqvZa3=)C+_HL1iCr8_pEvsQ^2U5l_j&}#b zicmuWHm~%@O6}k7S}((j4LaODSMRgbL`pQPA_sa_Js@16tSD8)kUTSesV5&8+!nlvhs9kt{-pvsO$m~e1`AiaGWglng)3)I$ z_2L#nQ!A&bDX4=Ieq2$fj4WI1%903!O?N4ywUl+0H(Tg9r8t(7WoEBhp+tYB8mEMk zTk|Y}nqP=M)?{j5bmrwq~#TB&yYO-UH75HYexTY>RJ|K{||} zs~2#S!ThEm%4OHQxk`JZGszw?wl&{w^})v71E0h#oK0VHy7S=%CyBvHOjBAo!?r7; zqvWl4(honsd%I60FB$1i$n^RdJvmOaw^B-dLFd;xuJmpcg0G^hsA|`6O09E;U!Ue}lEkPy6%aM{} zKXw}5o}MCWOI|kO7*(_@rb%`W>qD%$#O%h-&mNRI0|hideUSV@5Pbp*J2!WWMJW{& znj+DPYqxGVi>4HcJiaqAx+Z^MjCF<-Ohb>vJkHv0M2?)jv(g-yaLmOj%Rew`EMH$5 z6YQZgnGfYl6!B!`F-~1#EyJZ5eo0Hqjv`PrEp~I+PZ*Av9&HQeNrO0BV zdt)@gKs)@-47_^!r@#zO#AdO6nuL@KC3Pff7ieq!ANNGLPUORLQk!xMyN}((Bt1Qu z9*4z@jP9;kz;>=e^fV+)hbGP3Y#m=*a)i&8YDi`n)^UL^kN&n9IdP~!cQA_H8&yPa zqrH$1O#7$~3Im4)jfePb2n(!7!dvHa067@ee72&E?j@@f8Lq9%NjoMfWscK_7375m z@oO|UH=_}agrMr_b_Ztx1$2EMyeL0^?$j=_)0N1FF}R)axj*6fS&Av&7wFYxxKrAV z=RQMic;jewis1Obv2YoKS$ER9PCQUkBb5#$SVY#Ic~_4ka@9Ets&;TeS&T+w-oXKQ zt!+roDTN`3p;<~}yM64*mcsObp;tVALtI z%Gve3_tj!9ZZ-ejf(9Iz_Jfp+=Z?@A2IW{;blpmcYnuU1L`@BHM!gNy zn=6_Q`|=eyVzLtrkMQV4I?~TIPi=#M0u_VQhvIqOjZG|B?py3x>l`=xCqO?)M+IRYp%0Re&*lYS$tpU#C9>arJ6+D6+0hr)z17(Wzm&>&{#DLk}yZx+R zU8Rx$6Uz9dc$=uIz%X|W*t;U{JSkq2>j%yI?IE?k8{hMkJRT5UxCn46jE#qB$+rh} zK-*o?sVb*H5gA!zbV;^}3+&}QuD6i+D0dPTauti*Ra|1yUWfqGIV+m16DVx{wV1?_ z;DqN!O^8TjWyy)w^;sh}Vp>YYl@-#P2dNLy{WW#$#CE{h(0u1itdDz~rQyA)o6 zrJO*DkpqU|X?OdSO=&W2Xg`jQic@S@8T)Ocg+{O|*INFmrqU5myuf8Kai<6a8B7QHW7yjk_5Uczp?HW8bCoOCxPsFRCvW{SOz*0q-a1uaRWC2DF?cyw8| zi!nb!8#>VqgX2egBhp_tiqXEXNA5LEZnoO_%4k+!5)4iM;!fm-nv&I&=m;Yr%Cv+3nlwcS)~bJl#AXU09IbOsX&@bDNuNE|R(* zShohp|2dB{cj_)EGN{yRnPGTvW-Yqj=Mrscb>4kxJ>(a{pqlJ6SVnv$7MBpyD})T6 zbK`@NrH;?p>FR$a1 zh*ia@u~&xN4vu+{SNo{2T$4SqZPw0tn(=tH&nl)`>XT-Tuh6v6^J9E__pQJGbIQ$Ctqy9W4}HM>HvXHJ{0M&0lgfV zO=sL4u#dY|BX{#qAwf?9p6}qrl9H05^FloE z*jw?$4>XIgL(DvYS&csQ@u?{~ya=R+fXe7jEWtDfX;adQ*<2M!eA@CZ zNC*250i*`dL;hj`{!jFf{VNXy0bX&60*x~=?G;2Z3F6=qRR7yL$3HM0>tw%W=?jiK zcRm#tzst^+tqg5r;Z1z{&1RCSWOO1kP<160P+8F}0;{QdIfK7}E+^m;19nV96BrG! zfa%<*^hJ0#X7|AWp8>pwTgj-Q1=fN;0Zat=E<;w@*2Lt~UzMSQw+q@z(|c3F2D|)J z|1A~NFTJH(eNn4?g@x|8J1FS|V11kJ=rkdsKhhilHVy0rqf*)>uWBp2A`M&&Zr#ld z+&U1Hz2?mxW@gsKSm;XsXDrZ3~%BusAl`FVxs zh2v7(lzpWMkN*@{bRNY;KQDLM7_m<+dbPDNTGH~&4{*f(qgG3KLPF6MmTXuRfrRrf z4{q&mK@aWLuY^xYSp+Mvnr~j+v@vUTa)i(Y2N}v3P>S^+;kDTPiD)Sy)IQc`jx&;9$;x=-f&1Tb?NZAh&(XN zl+Hx5?5%3aND_xdYE!;V`&7v7b8YqT^)&n3l0qHv3_c6?hI~P)qs&85qAFRpF6f|Y z*HhMy%X&Cr-WSq{LW9zTqZCt>QChg2Y&;D8r*Ii=)#C$rI15I23pycDbb=?rkPQ=> z9H(9rYl9ig8m1=PSSL87o;c}aP~!*xS@Wskwl3QIVJ~K5uwTp9~1b@Z<#=jd2qxN zW#neuGSXlWA&i|j=l;dgl8Je<5=!pfRsDP#{lTZcg@K?-LMNOB3pbKX`B_YSX!~T% zn`EyxUB39Pi%M0M!UtCngxw5GKnng%Eewls3*Hmlwc3gsNvABDj+!}}x5Q#f|M#T{?P2o6nR2dmgWa@E2(kn{Y!gb#lv zhKyzSSuH(HZ2MlVcUeJ4cBkjLDIxCx=6s`<>i&b++`UVd7LrVHM3%nE-JCQ>dbub1 zDRo)MT}`WkJJ*lqV<16J2hZFZsL$kJ+KiazEmdxg`N`Rl_Jr5bNDGR1cHNqqws{UU z-T!i#nKeL56IsFI>u0TinU?x;L3C=KD+)WIe(6a=fl6L zXJRZiyzHMDEg@`HmC44Jbgej+CO?6^3cl?E<9U(Wr5<834mTwOHAu>E-Q2NP&902K zF!Rm9c1u1Lol)z{GC%JnU4;a7Ie{jA=NF`YwM=LNczXAYT8lhgT|k95svqI@^K6B# zy>wG@u*o;K7{mL{J>&STkclbf;Rk}4a#~=?X8~r%QLQwqgL^&rTyoE-IJd`EOe^Y! zC{6>j@8Ed|EV^@89P>`#8%89)u%jC-@vD(gcldd~sGz@#<^Q0vU#Ex5zlEEL_T?B{(Ta$WlkN_%onf zD?)3$x6+|z7q&LVEjHBFHFmX-S+^8xkGPM+taoDiVbk{;LDUK?+WnF}|`tNKUx;JPNL}A54oVO@;4jB@MnS7<(f>$i0o`{&O}t2T|sw`c12t@ocqjpk;#-u zqjmcD?conwujk$CZHTFxi)15uhr9x(?hO(p7-azoN%6MVg8N+B0rrF)04?f#edpAc zu0c~6hh~Q$ku_y&fNFJcP%2IsoBb5K7r|NLD|z7}^F_^6y_V;-N!Ms9%IDqX&BPrI zgA2oqq*ZJgPrn7-nqoGU7Gz-=MK=@6G&LBQ@}vYbC&_NC+{z#!oaMV6;cquiBU!!8 zF(HFq>uzzypg|(BU!dWy(r$zK8(02BZMAncFWBfmP?TKAPn0+HWt-BaIldGNS7Pdg zuowBxY|o8uK;zE?*KvZn&BUD)Xqrf=q1 zP_V6ZzeD$EfmG1htORpZb}SEV{{hy=lhw8j-C50jqWN3TrWLs8BAjK>+e*Vb;tm|R_x@-v#MQ?W|tW>{GXj2Zzl?YJUN-zAUQh%C4rc5d^ zp$9`w&!lR7sdr#Rwq@DZp~1oO>0WKcYk60+It$TJ57Av#x582Tp4;AxrQfaf=qIe@ zi&n3MAl$vwoV^Xr9QgWfK>+C%`O`We53<89>UD$@JZ^2PR#MFnIN&c!_oL_~+i{2I zZeSM(F-$x~cb>gQ>yNW@F= zF1pN9Z$5gPlMg?SAKxizXYQu0pM>Wo*lhMP5vhb-y3Oc!B@uN}Qw!MvrAy!``BnYqaI+|(@U0%KGg_Y18&}D3B zDH_4Za3{t8Ck9OlZW?%+5{#>=5B5mCqPn&O#QQN&8gbko3iLu#X;}>9zSv4 zyI>PsOR3*jxHDZs+62U&=m~#2TGoo!lhE+Ebf%4&Inn+gLi;~T?CNB=k*bkEc+&EC zuqpy?OF_lP7yh0{bv})4f)Bc=gmdp619k7?)G};Kp^2`|^1(2t*2#VnS8|GbM!0ds z3NqR)MYGRs88fmj%*!PU;iff0SjUJJtzL-4WyRkclr$LrQd`j5-+VRYO%Pl0$& z{MI+}hEu4RP3|qe-guvn4OWg%jh+LT^KIJS|AbJcvJ1-SuR$pl!%J!ZLrbichjX-fwsu+4oBU;wb7>d# zldPmcc(+yCX>?t5XCaEl(9_Eo-m5ID(z3T!5x~PR+)S;QHCU5|870C}dqd7q@RevC zjI|z)(QCHIGrP85^)E700JfgEtko}fg2u6F8<(w`%;vUYW#xXm!|+R$XGs}H|12mi z5kHft)`zD?DO0_yd)=?nT0`c@m(hz(Urje{Byl2)zwLMF-FljM2tiuSgE^OR?MX6q z-QK5c_0J&F1D_xayAuGupHA4jk|91#W?1*=OQy4b5KFBXx8fXv215?%Z`9N*_5Rp; zj=Ro%I*o&QgzhAr1Cis#|5?}>T#tdaKZ+fkV{;I(jRVhRui9Yh?aJKW)7pdk)7o5C zX6ieAfRg5U|9Rw@d-{9=1rR>@u_q=l$vsUv+JBBd`zAnfNbu$VM57J_-ZAaQT)}N> zAN~kxIv3>sImX#-TB4pTlg|sXr$?;>|G>SvIy#7*orb|dwONe?T#y-G{{8#h;^HEL zSsHlg72@F-d43WP(6wWNy`Y;3=60i*|K*YV$8!4Lk^j`$mG@SQ_sfe;L$Saj_efDD J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands/command-index.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands/command-index.md index 685285543d6bd3..096a41339563e1 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands/command-index.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands/command-index.md @@ -1288,6 +1288,8 @@ title: Commands by name [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md index 16b45310bdf94a..612c78eb702313 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md @@ -7,6 +7,8 @@ slug: /commands/theme/Web-Server | | | --------------------------------------------------------------------------------------------------------------------------------------- | +| [](../../commands/web-event.md)
    | +| [](../../commands/web-form.md)
    | | [](../../commands-legacy/web-get-body-part.md)
    | | [](../../commands-legacy/web-get-body-part-count.md)
    | | [](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands/web-event.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands/web-event.md new file mode 100644 index 00000000000000..c1d03563807c61 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands/web-event.md @@ -0,0 +1,97 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + + +| 引数 | 型 | | 説明 | +| --- | ------ | :-------------------------: | ---------------------------------- | +| 戻り値 | Object | ← | Information on the triggered event | + + + +## 説明 + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**戻り値** + +戻り値のオブジェクトには、以下のプロパティが格納されています: + +| プロパティ | | 型 | 説明 | +| --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | | object | Additional information depending on the involved component | +| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| | row | number | Data Table component: row number | +| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | + +#### 例題 + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +- The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +- The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## 参照 + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## プロパティ + +| | | +| ------- | --------------------------- | +| コマンド番号 | 1734 | +| スレッドセーフ | ✗ | + diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands/web-form.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands/web-form.md new file mode 100644 index 00000000000000..7a4ad65fe53b96 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + + +| 引数 | 型 | | 説明 | +| --- | -------------------------- | :-------------------------: | --------------------------- | +| 戻り値 | 4D.WebForm | ← | New `Web Form` proxy object | + + + +## 説明 + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + +## 参照 + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## プロパティ + +| | | +| ------- | --------------------------- | +| コマンド番号 | 1735 | +| スレッドセーフ | ✗ | + + + + diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md index 5cab3d46d6789e..17d55be910983d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -`WebForm` クラスには、Qodly の Webフォームコンポーネント (Webフォームの構成要素) を処理するための関数とプロパティが含まれています。 このクラスについては、[Qodly ドキュメンテーション](https://developer.qodly.com/docs/language/WebFormClass) (英語) で詳しく説明されています。 +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    履歴 @@ -18,14 +18,12 @@ title: WebForm | | | ------------------------------------------------------------------------------------------------------------------------------- | -| [](#componentname)
    | +| [](#componentname)
    | | [](#disablestate)
    | | [](#enablestate)
    | | [](#seterror)
    | | [](#setmessage)
    | | [](#setwarning)
    | -| [](#web-form)
    | -| [](#web-event)
    | ### *.componentName* @@ -33,9 +31,28 @@ title: WebForm #### 説明 -Webフォームのコンポーネント (構成要素) とは、これらの Webフォームのプロパティとして直接利用可能なオブジェクトです。 +The components of web pages are objects that are available directly as properties of these web pages. -詳細については、[Qodly ドキュメンテーションの `.componentName` の説明](https://developer.qodly.com/docs/language/WebFormClass#componentname) を参照ください。 +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### 例題 + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page + +``` + +:::info + +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. + +::: ### .disableState() @@ -43,25 +60,24 @@ Webフォームのコンポーネント (構成要素) とは、これらの Web -| 引数 | 型 | | 説明 | -| ----- | ------ | :-: | ------------------------ | -| state | string | -> | Webフォーム上で無効化する state の名称 | +| 引数 | 型 | | 説明 | +| ----- | ------ | :-: | ------------------------------------------ | +| state | string | -> | Name of state to disable from the web page | #### 説明 -`.disableState()` 関数は、カレントWeb -フォーム上の *state* のレンダリングを無効化します。 +The `.disableState()` function disables the rendering of the *state* in the current web page. この関数は、以下の場合には何もしません: -- Webフォーム上で *state* が現在有効ではない。 -- Webフォーム上で *state* が存在しない。 +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. 同じユーザー関数内で複数の state を [有効化](#enablestate) または無効化した場合、すべての変更は関数の終了時に一括してクライアントに送信されます。 -Webフォームの state に関する詳細については、[developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states) を参照ください。 +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -69,25 +85,24 @@ Webフォームの state に関する詳細については、[developer.qodly.co -| 引数 | 型 | | 説明 | -| ----- | ------ | :-: | ------------------------ | -| state | string | -> | Webフォーム上で有効化する state の名称 | +| 引数 | 型 | | 説明 | +| ----- | ------ | :-: | ---------------------------------------- | +| state | string | -> | Name of state to enable on the web pages | #### 説明 -`.enableState()` 関数は、カレントWeb -フォーム上の *state* のレンダリングを有効化します。 +The `.enableState()` function enables the rendering of the *state* in the current web page. この関数は、以下の場合には何もしません: -- Webフォーム上で *state* がすでに有効である。 -- Webフォーム上で *state* が存在しない。 +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. 同じユーザー関数内で複数の state を有効化または [無効化](#disablestate)した場合、すべての変更は関数の終了時に一括してクライアントに送信されます。 -Webフォームの state に関する詳細については、[developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states) を参照ください。 +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### 例題 @@ -106,17 +121,34 @@ Function authenticationError() -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | -------------------- | -| msg | string | -> | Webフォームに表示するエラーメッセージ | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ---------------------------------------- | +| msg | string | -> | Error message to display in the web page | #### 説明 -`.setError()` 関数は、*msg* をエラーメッセージとして Webフォームに送信します。 +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". + +#### 例題 + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: -詳細については、[Qodly ドキュメンテーションの `.setError()` の説明](https://developer.qodly.com/docs/language/WebFormClass#seterror) を参照ください。 +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -124,68 +156,72 @@ Function authenticationError() -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ------------------- | -| msg | string | -> | Webフォームに表示する情報メッセージ | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ---------------------------------------------- | +| msg | string | -> | Information message to display in the web page | #### 説明 -`.setMessage()` 関数は、*msg* を情報メッセージとして Webフォームに送信します。 +The `.setMessage()` function sends *msg* as an information message to the web page. -詳細については、[Qodly ドキュメンテーションの `.setMessage()` の説明](https://developer.qodly.com/docs/language/WebFormClass#setmessage) を参照ください。 +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() - -**.setWarning**( *msg* : string) +#### 例題 - +```4d +shared singleton Class constructor() +exposed function myMessage() -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ------------------- | -| msg | string | -> | Webフォームに表示する警告メッセージ | +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setMessage("My information message") -#### 説明 +``` -`.setWarning()` 関数は、*msg* を警告メッセージとして Webフォームに送信します。 +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: -詳細については、[Qodly ドキュメンテーションの `.setWarning()` の説明](https://developer.qodly.com/docs/language/WebFormClass#setwarning) を参照ください。 +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + -| 引数 | 型 | | 説明 | -| --- | -------------------------- | :-------------------------: | ------------------------ | -| 戻り値 | 4D.WebForm | <- | 新しい `WebForm` プロキシオブジェクト | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ------------------------------------------ | +| msg | string | -> | Warning message to display in the web page | #### 説明 -`Web Form` コマンドは、Webフォームとの対話を可能にする `4D.WebForm` プロキシオブジェクトを返します。 +The `.setWarning()` function sends *msg* as a warning message to the web page. -詳細については、[Qodly ドキュメンテーションの `webForm` コマンドの説明](https://developer.qodly.com/docs/language/WebFormClass#webform) を参照ください。 +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". -## Web Event +#### 例題 -**Web Event** : Object +```4d +shared singleton Class constructor() +exposed function myWarning() - +var myForm : 4D.WebForm +myForm:=web Form -| 引数 | 型 | | 説明 | -| --- | ------ | :-------------------------: | ------ | -| 戻り値 | object | <- | object | +myForm.setWarning("My warning message") - +``` -#### 説明 +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: + +![](../assets/en/API/webformClass-pic3.png) -`Web Event` コマンドは、Webフォームコンポーネントにリンクして発生したイベントの情報を持つオブジェクトを返します。 +## 参照 -詳細については、[Qodly ドキュメンテーションの `webEvent` コマンドの説明](https://developer.qodly.com/docs/language/WebFormClass#webevent) を参照ください。 +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md index b8b7be9fcc552e..fe775d4b71c991 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md @@ -3,9 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -`4D.WebFormItem` オブジェクトは、[`Web Form`](WebFormClass.md#web-form) コマンドによって返される [`4D.WebForm`](WebFormItemClass.md) オブジェクトのプロパティです。 +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -`WebFormItem` クラスについては、[Qodly ドキュメンテーション](https://developer.qodly.com/docs/language/WebFormItemClass) (英語) で詳しく説明しています。 +`4D.WebFormItem` オブジェクトは、[`Web Form`](../commands/web-form.md) コマンドによって返される [`4D.WebForm`](WebFormClass.md) オブジェクトのプロパティです。 + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    履歴 @@ -24,29 +28,27 @@ title: WebFormItem | [](#removecssclass)
    | | [](#show)
    | -### .hide() +### .addCSSClass() -**.hide**() +**.addCSSClass**(*className* : string) - + -| 引数 | 型 | | 説明 | -| -- | - | :-: | ---------- | -| | | | 引数を必要としません | +| 引数 | 型 | | 説明 | +| --------- | ------ | :-: | ----------------------- | +| className | string | -> | コンポーネントに追加する CSSクラスの名前。 | #### 説明 -`.hide()` 関数は、コンポーネントを非表示にします。 - -詳細については、[Qodly ドキュメンテーションの `.hide()` の説明](https://developer.qodly.com/docs/language/WebFormItemClass#hide) を参照ください。 +`.addCSSClass` 関数は、*className* で指定されたクラスをコンポーネントに追加します。 -### .show() +### .hide() -**.show**() +**.hide**() - + | 引数 | 型 | | 説明 | | -- | - | :-: | ---------- | @@ -56,27 +58,27 @@ title: WebFormItem #### 説明 -`.show()` 関数は、コンポーネントを表示状態にします。 - -詳細については、[Qodly ドキュメンテーションの `.show()` の説明](https://developer.qodly.com/docs/language/WebFormItemClass#show) を参照ください。 - -### .addCSSClass() - -**.addCSSClass**(*className* : string) +`.hide()` 関数は、コンポーネントを非表示にします。 - +#### 例題 -| 引数 | 型 | | 説明 | -| --------- | ------ | :-: | ----------------------- | -| className | string | -> | コンポーネントに追加する CSSクラスの名前。 | +To call a function that hides an image when the user clicks a button: - +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -#### 説明 +```4d -`.addCSSClass` 関数は、*className* で指定されたクラスをコンポーネントに追加します。 +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` -詳細については、[Qodly ドキュメンテーションの `.addCSSClass()` の説明](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass) を参照ください。 +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. ### .removeCSSClass() @@ -94,7 +96,27 @@ title: WebFormItem `.removeCSSClass()` 関数は、*className* で指定されたクラスをコンポーネントから削除します。 -詳細については、[Qodly ドキュメンテーションの `.removeCSSClass()` の説明](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass) を参照ください。 +### .show() + +**.show**() + + + +| 引数 | 型 | | 説明 | +| -- | - | :-: | ---------- | +| | | | 引数を必要としません | + + + +#### 説明 + +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + +## 参照 + +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png b/i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png b/i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 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 J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png b/i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png b/i18n/ja/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/command-index.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/command-index.md index 685285543d6bd3..096a41339563e1 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/command-index.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/command-index.md @@ -1288,6 +1288,8 @@ title: Commands by name [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md index 16b45310bdf94a..612c78eb702313 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md @@ -7,6 +7,8 @@ slug: /commands/theme/Web-Server | | | --------------------------------------------------------------------------------------------------------------------------------------- | +| [](../../commands/web-event.md)
    | +| [](../../commands/web-form.md)
    | | [](../../commands-legacy/web-get-body-part.md)
    | | [](../../commands-legacy/web-get-body-part-count.md)
    | | [](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/web-event.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/web-event.md new file mode 100644 index 00000000000000..c1d03563807c61 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/web-event.md @@ -0,0 +1,97 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + + +| 引数 | 型 | | 説明 | +| --- | ------ | :-------------------------: | ---------------------------------- | +| 戻り値 | Object | ← | Information on the triggered event | + + + +## 説明 + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**戻り値** + +戻り値のオブジェクトには、以下のプロパティが格納されています: + +| プロパティ | | 型 | 説明 | +| --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | | object | Additional information depending on the involved component | +| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| | row | number | Data Table component: row number | +| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | + +#### 例題 + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +- The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +- The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## 参照 + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## プロパティ + +| | | +| ------- | --------------------------- | +| コマンド番号 | 1734 | +| スレッドセーフ | ✗ | + diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/web-form.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/web-form.md new file mode 100644 index 00000000000000..7a4ad65fe53b96 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + + +| 引数 | 型 | | 説明 | +| --- | -------------------------- | :-------------------------: | --------------------------- | +| 戻り値 | 4D.WebForm | ← | New `Web Form` proxy object | + + + +## 説明 + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + +## 参照 + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## プロパティ + +| | | +| ------- | --------------------------- | +| コマンド番号 | 1735 | +| スレッドセーフ | ✗ | + + + + diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/API/WebFormClass.md b/i18n/pt/docusaurus-plugin-content-docs/current/API/WebFormClass.md index 72094b45cc78fb..064b559a834bca 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/API/WebFormClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -A classe `WebForm` contém funções e propriedades que permitem manipular seus componentes de webforms Qodly. Essa classe está detalhada na [documentação de Qodly](https://developer.qodly.com/docs/language/WebFormClass). +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    História @@ -18,14 +18,12 @@ A classe `WebForm` contém funções e propriedades que permitem manipular seus | | | ------------------------------------------------------------------------------------------------------------------------------- | -| [](#componentname)
    | +| [](#componentname)
    | | [](#disablestate)
    | | [](#enablestate)
    | | [](#seterror)
    | | [](#setmessage)
    | | [](#setwarning)
    | -| [](#web-form)
    | -| [](#web-event)
    | ### *.componentName* @@ -33,9 +31,28 @@ A classe `WebForm` contém funções e propriedades que permitem manipular seus #### Descrição -Os componentes dos webforms são objetos que estão disponíveis diretamente como propriedades desses webforms. +The components of web pages are objects that are available directly as properties of these web pages. -Para mais informações, consulte a descrição [`.componentName` na documentação de Qodly](https://developer.qodly.com/docs/language/WebFormClass#componentname). +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### Exemplo + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page + +``` + +:::info + +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. + +::: ### .disableState() @@ -43,24 +60,24 @@ Para mais informações, consulte a descrição [`.componentName` na documentaç -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ------------------------------------------------- | -| state | string | -> | Nome do estado a ser desativado no formulário Web | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ------------------------------------------ | +| state | string | -> | Name of state to disable from the web page | #### Descrição -A função `.disableState()` desabilita a renderização da *state* na forma atual da web. +The `.disableState()` function disables the rendering of the *state* in the current web page. Essa função não faz nada se: -- o *estado* não está habilitado no momento no formulário Web, -- o *estado* não existe para o formulário Web. +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. Se você [enable](#enablestate) ou desativar vários estados na mesma função de usuário, todas as modificações são enviadas em simultâneo, para o cliente quando a função termina. -Para obter mais informações sobre estados de formulários da Web, consulte [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -68,24 +85,24 @@ Para obter mais informações sobre estados de formulários da Web, consulte [de -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ---------------------------------------------- | -| state | string | -> | Nome do estado a ser ativado no formulário Web | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ---------------------------------------- | +| state | string | -> | Name of state to enable on the web pages | #### Descrição -A função `.enableState()` ativa a renderização do *state* no formulário da Web atual. +The `.enableState()` function enables the rendering of the *state* in the current web page. Essa função não faz nada se: -- o *estado* já foi ativado no formulário Web, -- o *estado* não existe para o formulário Web. +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. Se você ativar ou [desativar](#disablestate) vários estados dentro da mesma função de usuário, todas as modificações serão enviadas ao mesmo tempo, para o cliente quando a função terminar. -Para obter mais informações sobre estados de formulários da Web, consulte [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Exemplo @@ -104,17 +121,34 @@ Function authenticationError() -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ------------------------------------------------ | -| msg | string | -> | Mensagem de erro a ser exibida no formulário Web | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ---------------------------------------- | +| msg | string | -> | Error message to display in the web page | #### Descrição -A função `.setError()` envia *msg* como uma mensagem de erro para o formulário web. +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". + +#### Exemplo + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Para mais informações, consulte a descrição [`.setError()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormClass#seterror). +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -122,68 +156,72 @@ Para mais informações, consulte a descrição [`.setError()` na documentação -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ---------------------------------------------------- | -| msg | string | -> | Mensagem informativa a ser exibida no formulário Web | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ---------------------------------------------- | +| msg | string | -> | Information message to display in the web page | #### Descrição -A função `.setMessage()` envia *msg* como uma mensagem de informação para o formulário da Web. +The `.setMessage()` function sends *msg* as an information message to the web page. -Para mais informações, consulte a descrição [`.setMessage()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormClass#setmessage). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() - -**.setWarning**( *msg* : string) +#### Exemplo - +```4d +shared singleton Class constructor() +exposed function myMessage() -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ------------------------------------------------- | -| msg | string | -> | Mensagem de aviso a ser exibida no formulário Web | +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setMessage("My information message") -#### Descrição +``` -A função `.setWarning()` envia *msg* como uma mensagem de aviso para o formulário web. +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Para mais informações, consulte a descrição [`.setWarning()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormClass#setwarning). +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + -| Parâmetro | Tipo | | Descrição | -| ---------- | -------------------------- | :-------------------------: | --------------------------- | -| Resultados | 4D.WebForm | <- | Novo objeto proxy `WebForm` | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ------------------------------------------ | +| msg | string | -> | Warning message to display in the web page | #### Descrição -O comando `Web Form` retorna um `4D. Objeto proxy ebForm` que permite a você interagir com o formulário web . +The `.setWarning()` function sends *msg* as a warning message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". -Para obter mais informações, consulte a [descrição do comando `webForm` na documentação de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webform). +#### Exemplo -## Web Event +```4d +shared singleton Class constructor() +exposed function myWarning() -**Web Event** : Object +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setWarning("My warning message") -| Parâmetro | Tipo | | Descrição | -| ---------- | ------ | :-------------------------: | --------- | -| Resultados | object | <- | object | +``` - +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: -#### Descrição +![](../assets/en/API/webformClass-pic3.png) -O comando `Web Event` retorna um objeto com informações sobre um evento acionado vinculado a um componente de formulário da Web. +## Veja também -Para obter mais informações, consulte a [descrição do comando `webEvent` na documentação de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webevent). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md b/i18n/pt/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md index a1058250ccbe84..4100e1bf54762e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md @@ -3,9 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -Os objetos `4D.WebFormItem` são propriedades do objeto [`4D.WebForm`](WebFormItemClass.md) retornado pelo comando [`Web Form`](WebFormClass.md#web-form). +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -A classe `WebFormItem` é detalhada na [documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass). +Os objetos `4D.WebFormItem` são propriedades do objeto [`4D.WebForm`](WebFormClass.md) retornado pelo comando [`Web Form`](../commands/web-form.md). + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    História @@ -24,29 +28,27 @@ A classe `WebFormItem` é detalhada na [documentação Qodly](https://developer. | [](#removecssclass)
    | | [](#show)
    | -### .hide() +### .addCSSClass() -**.hide**() +**.addCSSClass**(*className* : string) - + -| Parâmetro | Tipo | | Descrição | -| --------- | ---- | :-: | -------------------------- | -| | | | Não exige nenhum parâmetro | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ------------------------------------------------- | +| className | string | -> | Nome da classe CSS a ser adicionada ao componente | #### Descrição -A função `.hide()` oculta o component. - -Para mais informações, consulte a descrição [`.hide()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#hide). +A função `.addCSSClass` adiciona a classe especificada no *className* ao component. -### .show() +### .hide() -**.show**() +**.hide**() - + | Parâmetro | Tipo | | Descrição | | --------- | ---- | :-: | -------------------------- | @@ -56,27 +58,27 @@ Para mais informações, consulte a descrição [`.hide()` na documentação Qod #### Descrição -A função `.show()` torna o componente visível. - -Para mais informações, consulte a descrição [`.show()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#show). - -### .addCSSClass() - -**.addCSSClass**(*className* : string) +A função `.hide()` oculta o component. - +#### Exemplo -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ------------------------------------------------- | -| className | string | -> | Nome da classe CSS a ser adicionada ao componente | +To call a function that hides an image when the user clicks a button: - +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -#### Descrição +```4d -A função `.addCSSClass` adiciona a classe especificada no *className* ao component. +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` -Para mais informações, consulte a descrição [`.addCSSClass` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass). +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. ### .removeCSSClass() @@ -94,7 +96,27 @@ Para mais informações, consulte a descrição [`.addCSSClass` na documentaçã A função `.removeCSSClass()` remove a classe especificada em *className* do componente. -Para mais informações, consulte a descrição [`.removeCSSClass()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass). +### .show() + +**.show**() + + + +| Parâmetro | Tipo | | Descrição | +| --------- | ---- | :-: | -------------------------- | +| | | | Não exige nenhum parâmetro | + + + +#### Descrição + +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + +## Veja também + +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 zcmeFZ1yEd1+b0S!LI@t*g9nG;ngrJbf?IHRw*i6&3+@nt1!r(~24`@08+?F)!C{B| z-*>m_+x=>{w(8d1duvbCsX5(qPRrBXPe1nSu+NH8=&y)hAt525%SekWBOyI$LEI-V zUm$Y6w334nKgdqXQXi4ZMo4!NiDzaX6h0s!0i)4w4W1*?sP@vDPDn@?U5__%uiYPG zB&4os8SxKa-SrNZ+`RErJ3%M<^9tp;anD}*i|u@m(fj(tu&Z|6(9TLqw>`MH^PPr+ zs*V@3gFf@iAHONbJ4VCBc5-7fe=b9Bq+aoU63Eugf&#XymQ}V#GGtcQ7P-ul> zlH!P~`^TK~(V}Ly`eULbHB!=3;xTuAju`DRN4zBRV|ggz(hv^P!$w>{&sQyP5trfl z8_%@VMX1D&fE=tB+LzkS&qw=wu%|>riN?>nOx;5_~ZzvHT9(6UZoX;JWhO z@wDC|5{qf_s6J!Lm{^D?{DXGQlf;imD$wn$Gvx9H0X$^wjJ8{auC~Md| zowG@@z|-C|BYh1F%Uh_5;65Xr!sKBwk;>2Bix1-3Nu`YPX-oVBDx$MI+;@g7U7XgP z`10cO?hNv0!FtTH2*b5!&h1W@@OtavaPOB{ zXl&hMW55$E?L4_8);9zMRSp}HMyg8@5Zrdga5p)esW{oH5yFZ z671t_ns6}}<@+gb-zL4tm{wz;n`XV(h79S&aSB65kB44LgHm} zab?u3?MJI$bOc;L;IE3Vw^`Q93F6oZF4l$3l1NlzMyQH<^2)2KXK1x~zw6@{bF40X z+*AWhEr<8dh9)5=r*P8|NEUJNp7WrM+s}-Ip0)yEyON?$Sky;ZeZ$mjl%roio{sbk zd71IF(W^x!Z`-s}{l@KgvNg0E;>+~jR{PzxNa=$n`e3kL8D8|!Zoxr_f7ec2s@lKV z==SQyI={6Infxx4qHznyXir|eQ)G{vYBs3>p^H5UQ`Eg1 zrl(iu$A>Eg6+2_mm)T~l9IhE*@Sx_Wa#yP@IXY)MrQ#te3{ea1>JOQq-`z!bWOt&m z3z2zsY@3>sQ(ozRzo%OtpPv}6jSoe9g+LD$O>4Fdklle(S}~ zSb*!{JW(3Ari={g?(Xhuav{RFesNDv&lYV52M!({9+2+)0AAq`cn24Eu)eR}(2tfa zXHsGX>1kF&*vH+OE|P+gJM*NvG+`O9S;zNTw>kS7I!wpJv;3>85cCCKqm$SvQrDf4 zU&{bL77UEcKsV>Log!Lhz1lG6ERol{ySl3CE|Epaq@?y00fEW7xiO%!EP^_|L}hj|nuPJ_yHd?T~YrKP~aM%MSC z;|~g(12@aYO*0zgS?9dXGfLa@H~FV>GQLM1+y1F#20pBmFkjq;)3CV`MkrXAO)=l? zQ?G?tr*MU!fB(t}JiUiL>Vvp=E?zamS#U@Qm;3RmsSTNcGy73KVC0a*a5{(nzko7*0b65yjzQ&36u)&x6M+cbq2762CxQaE&1l2>f#B zG}p-8Gh1aqbke=8>c^k;$!nvdr={q3=p|W`G~;vGs?a4oO#f_mlEy4nNS6!oN;z%{ z$Ar6EKOj_hsELc`=NwRUqj+z_kbGn5dGTzbJK7i-S7-`HI4#iLzMt8&o3zx@h4ITF z*KFhF%jGXgIBKn#$xrDTb%n|*1uTSBmNnbwZF-C531D*(J)4-xeUr$l5(+WZK}2%! zPwSkfw+?Sq=Chjl%|vNz*Q&U07|?gS&s7!TW)!xDQ^D1-oA4!~u~~<0=z0>7ljSfk zJ~p-mI?JmT1+tFH$r6zuDUA!5AwHYlP^_w;^t&h8Bn;);wAq2)VF>1~ zW+M`xYpU{Xt~uc=O0iQa+3Jo$K`LwvH*5S&C7S>G8%`%1Aj`B71t76(JKF%8stLmKe?@@-&+Yf z|H-SPQ5}#KjdBw6YA&vFN{b5odZ)0Yq3hwmDacb|c6WVVBKkEj&4#hyTD_#aoQ*)w zoeHsnlZQ=tZ05yfWx1rJz`-T*QAtTL%`JQ0)_meIX)JjStCJo`WT&;2#cyMgGcqEC zwfhqMDsVR%mvuYs!TmJh-j1+ziw*5_5uRmtHGtAe(MZUCH9b{ayKP)pnJ3xZ=JRKC zM-aD9f|qfdLzJGPn!>c%qS3lv?=pI_Xv`9S;&DZK9W^F+9iihVppx)Vu&W$(N*!-%9!8DUt z$Kc7kV&D7$jA*fDHfl_W)oZa7Tc?{YnA9hT!yfuM$g~fFJ5bs7A{Uv8R);1f5j=hI zx_x>YziMu1x>Q?6zM2qVMHkl}h@g(ubV+t@?lXP;6;EC%sa_S5!uRwQjC7H!*{YC@ zQ;~Yor4D2#K7t@fmDTe+*blD91!Z0`+w15z;4zrNfT!%&e!>DD?ZwTY1;`P0}rJX_K_&R?}2^Mg|d&HKC%SVmAm> zX$B@Y!Y$m|tZ@fF`{&cj)KRbe`uch-9Gp&sTp6M2h%x4ZgD6z)-xBRe))dKKp;t@# zU-EF~e-wUs002N^jKW{ZI90*jz5ZV>a4XnhJ&MQ01*1%l;<1|2e^$c3D|_>gpuNX< zhM;h0=#5)sBEfHVMVK-vv>`;hRE^Q-g;Q5(vse$RhuHibC)nq|I)rGa`E+LM!(4FP2C? zSDlkU&8#2Csvu_jY`|hh%gOU;BcIb+;6O#agDo+m7h0r3s?AQo2lt@&Hbga_teob~ zjq-u@GM+lSpF;ePxXULn-T?16;R8uDq!#*uW-QuYCa&P}lg6NLKGy0VN@oxaaP+juRab0MA=`C1tuWe*$9h#Y z$exDGH9PBHRUj;9M)Nsd+xB3brq-3`vfAlA{>=KSwKi8{^KB%}>9}m90A5iol@0iUcsIdG?~5Y8U@Q3BVF+XVn|Kvvjgdx7mDv*? z$?&IaemUA3qW2@2u1N7osr^cJfYs;rnCuxZo5et5>oB@w#QfAii$svft%$lMF<68! zaL(HF{J_{qwd%ZnAOz#7;!u^1G-&PZG+?xnzuv%SX~)MWEprV^QQ?T^$5J<<@Jm|_nHsH|s`=K7SxUbbU$;#lO6)!ArO82NQG zy6xG6w2F zM;jsNN%(3NTl=q#9O6=jYg%(H&K@VGe#*!4TiS*z{>hRQD=Rm{)>2v&dTkx=cT&<- zxLV|%#gOMDHYr((CyYZfBMOWrbH!oI87a~LNzI&cgi?Gz@WykCt)G4NBV zEY&ZlGS+(H>zydOxGf|bu4Sg6o8=mHa7zV?&zD6kRp~*7vjGoULEvS)n(`kxHE#|< zeA7x}PazKdT%0!AtjhIi)W$>{w>S3h>A;W6_pO=V$MSS_SMRL;sGtGEcv*-<+w^67j)*u4}0W49RC?p7QD%> zYfetDc2=Gkml=M?GhMrwIkPb?3I@6i*$vPlX1p8{PE8Ae)KTHn&FxQYDq*l}f9*>@3mkEC6iLv7g# zxrElQE#B3H35sZSFSj&F3p9s!EfAcH{ruGI-eq5Qd-)TXgy?0cba;A#izlzBXgU+b zb#sMDWIGDWh~?m6^+j;YYjEjhs&94i_56L|C!y;(u4mpnDFp;Bo9BmYj;LZDtZ8kj zBP!5`j{9^&Awi6-v4X6vsErBKR+4SfOwBorUwkoHdOlGpZKO1;1%%*shBBWsiF}=9 z{N5ru2PcZvqKhsMpD}5;D0hM;(ah=oOdYP8le4O#K>lIwy4;1_(Z*Kc#_qoE(lMqU z=_%?75d@!94bOxGp} z$HATq%R@G5Q_U?ATT-#!_(Si9n=hOL10BoAaV)D|jugb^NsZfP0KWB3Kc;yn?_pbv zP5dv08-8AC_N+ws5+rdwfB`4|N(VF!hlV%t>fg*Dp>`SsFZ5?IF7~XxRhtPrxo+cf zv%hN66`V^^{oLSN{_Qu4u9(-wlPK$1>7kg7&BTEIsklCJ0-U9>JUE~-8mG#D4LH{m zZxr4?ml0~42pO`sWxmO`hTJ5a)L+zpmuq|yALsQ=(8`rIM%jJc={0l(!z|o(tJk&a z?KXo51fYc)nLcwM|%ibeQq5^jiQPS zvEYogfte=yzA@XQ0xfT+4~L@9 z63f@)8g>JPkHG>@*~AK(?)%Bey^^nX;RD~--z(!{oZjoIpRBryvNkmHA|uh9?kaRO zoL-6Allo9VTZJNhBmKd2I{g9R=qfa?)K0pO#}->=V+JXF6W#PPK{=mRo1`S2#wJzi zTbEg-sksdp!4XYy58G}g2c!1sme4|F2jW6h?G*ldPgBR|Y%N0J(R8~08>zldTRV`; z(qH*hjHqGVQ_UjTd|WY;leqdN1O;@ljXV6oA~i{^56K{@2am*)Y?LdgXc?rVyltby zVPb9tBC_mmgm1Tq)!7QB<8&T>=V%E{$gorR^-%rk?5?+}`R26hHb;*5!DsZ6U;E1Y z{fDiu-@V~1cNr@Ijjx5e zYjG9EXa72eHQg2*DjRFgc0cduz{~^HBW;J>*53mYWS&Z@cHDt-N8N( zpYC88dg!Rk_~3y`OZ)slrz&j86@d7Vrm=;t32~*dV%|`Ou%fv7_9kJg?m7bk&!Vk*E8v68g>|* zW8Cme9T0^iIF4y;(DCCkm6f(>h8xOD|)#3Nbb^ri(w&)y%u7R!*zwEv~i&_3zZG{d?JSxa7(%do|_%<=l zLdxLwwm#C#gdH)Z5N1r`wY4?V!NckWzNN+1I|f(;8R*A+qVV)Esql?xOa&+qC;H-r5=vLpB$1-5(PB@ml?~4TT!}aELo4k9qx5MY%xK@r;wNyJ~VNVa6 zQbJmNPwy>#B%QurwG1|;1PF*&-j_{tw5I(nBQU5&)NCLbNKV7wUbgd01q9Af@!xE zR7EZ6Gtw-B!I_oU^e`zHZ!#`RT8W_CQXFH&~#2LJ3W2&+FrqOIp=rbIo+L zWvjf(l#E(<+HV@Z0mnh9Zv?JS(#4c+p}d5AOT~!s=h0oqlj&{VV-xZ)JyY@-kI0E(y-Z zKU}$V6s5X);ZHjZvTMTM-n~SU2T%oS9gVZ5W7$!P);XT>QH5O^zC2olbiYp=2o992 zD?oov${%l|ImW=oOV6N4Wjah%iN*wWJ6;`IbUc&@RKCkZtgDg@fgsP14s=p+ma3E6 zc+y`>DO3r5e_zTL$~s{7GsehIGK8#*jAEpFJ;xPe>|JM(400$iQW}i8+J+M#q%@KV zlG}xKr6(sAh;{a3FdN=2Wb|2)<_HOkNDp#5ekAOr-7NcUMTFu07W&L>$99(do4>@M zY?M1;{@3YYcX|4OA5KvuOsSxr7I^alv4U`Z*;y!iBC;#lE;i~7CQUjBHui?q{RPRO z-#52K|IS580J|a@iaZDmS@)y@Upe)|&5zrst@RD0-$Kpn+v z-js~Cy&Dt>ffLkG#=!}aRDw5_+K zG=a|OZHG2NHF^8vtbRyMj_c8x&4K#xZFgk{N``vQRgVTfqy}R`Q>{02W=`unKlmyE zv~6X}O02HQ-k)|k+zB@t>s2x{hYX5Vs^W8V7w5C47BVIe_pbnRtm|oMRaU5UlM7Lu z)o&_=UqiTTFh!YlyS87ftbV--M<|M8DVQx{v$|RAkfQgddLpUX%Nn4vzybQop2OQH zdPz)3q6GW>okfJ8#h#eW{RX{L$O^e>l&@b36NakDl+6lfX8o-q0QQG08AX&YtOJ$8 z{%$D?NJo{l{#|E%+7}dw>D>;1S~d8Hm2Q{*VcM{Rz7kb{Bx2rEva)1M1`2y$_uVzS zXl15PC;A<#5MJ-7t3tSAboE7h|DX`4cwfEG|LQYR2eX~+E!{@<#25&wpAS(pVRbiVJnfC_^X9wlc&4x zY#1EgV69gfn{hJt1|L6$q%BR~S5(|GNbt*&cZ9B1h%Vo!M$a#ql^Gs#EF(PwCf;r3 zNP-X2tVLS7{gZiQ+3>uB@IoQbVu^LEYw22uaH9VrDqGXr_2?smo^2XOCo~3m{%#5> zr;ahy@}i4~qn(cioocQ6PN5M8Z)F`P`0BUa)ac)=5sqiWW6g(6rFumUkKZY7*Y%|F zCCAFi7$6e?(=GvWoI&soaTgvq(7EVN0-;FnlmzP8Lt=RW23@{ozud>(NTL^dztw(l zD6gFM6{5IgwvP1pqs_N2t0gBfF@SQ zt8mQL?Xh)m(a65Jq;Sof=##2hc$Qq@m0P!_AjQ!cxf62sbKq_BC1O9l512xgsJ8G$ z-U!a9pBsF`ojfSmq>}0Sdx;_lSv-W8u6JHyw603fb?$~~p;XvI{7vdunTYF}4k!G{ z?{udy%_~7z>s`tflaY+WOVhsO4riVbR9lIWmJml>Owof0B@r`UlBwP9Tg@cJ2x8Kx zHvYKegf=eU6XbRT`0tx_C&|Q&2IBWee4s*K{5w7+a07q#{QAK*|C-mR|Nn#@f{;2 zFNIFCt`_`rn93oWvIJ%U7SPtrB6p^Jfk!PM`9*WhkEZ2n$^jaY;J-!K0)HU2+hVcvh$l9v}xJV>nk zMb;t+`1!AudzhcVbHZq*(lx^&oR*9azF$0a%RM)nCo8mayN`X}@~71^M|ryS<|U?2 z#gxX_ukm!!SIn_4UA>d9`v;S+_Bf-62GiExToa2b4aO_~Ovv#SL)aqv`1jM%TKG?V zE1hPt4s=>V+3xEil64VDbs>JF=lq**2)(|dZJpkbZT8nj2;EA^jmzVwOSA}?$ZI6}geuEqy-Zh(azHQaegJD6|_(24XaLY1qMO2sc?HUPkrp9cVpC zYc*>tWFu?Ie(%8ogRmGJZVS`QznGxy>$z0hJkagGPRIKFohk*o|KqBU+ZS6IcvQ(Ca_^{YMDdKmU)o(gK@8M z;>cB|2?t7_qm5EQDw!rAfA~PrHTP4XXcQ0qwWL02nAfyg>lFvl!{}?ZTc{Txd~WET z)NZ~8R%UILT?XFJh2F$hUO>Q_so1j7KL?yVc4ja&^v5%s@z6A!7!o2T-Ql2x@dj-y z`Y41EQhf735F+VG5_dm%ee1=+aEj%ZnX_d>no+x6LlL*M8!_4`^)IS=4;-{r$3bRSLL%{N>Py|TA{D0FZ|<9}HjR)e@649N2p(!wuhPUJ@J72~znMlkZq`S$ip%JcjjB^4VG#myLi+j#MBUJow_#!@|EX z(lok1dZ9?(#2ovpT{`$-LnL^?ZX`0cM2RLSRjLo>o_pWbH zc`$O(D;OxB!`n2Z1-d_klXDCCSQt4-r0dGZOZ*fhkjEW96aZadU( zhGos9IO;Mu!1N5a%UuFL$z>;<&K5tc4O_T5ei>`jnxNAfm}o)|)E|j2$TF}zhaWiW z`Rrn(I^B>~cg%DJ>?|^5|9QkpN0-t|uO|8Y6k%{B8caQoDemEVHU7+vuM zyJ{1$f7q;bTX2PhkB{N) z{QLB#B6k>8`^3#GOCVk}j44vnk;Vrj3rjcFJyUb_(rwuLQxUuqZ`hSufYTwOcDssvfm+2nJ%Y)*$kB%N$`oi(NMg7b1;Tv*K z!&lM5C%&8do@mrcT6fGpcMR4@Q=LRFmM&O1K$g@=9~Lj{DKJ`Z#J2$SB7+xs>L-^r zOOY%jcz_L>GB=IRiD;pbT$yOtY>CEOsBc6};sjyQ6^3!{M4dcf(}CP;6F}#q-QE{= zf#Wl7ybvd<^a+aFw)%8Bc%}35B}(JNA^uw<$njK^@-IQ^;PxN87fvga0=8wikBe{6 zy0fcmIPp0O<~0ApnUJci1@I|`LV6mSm;+;86b2vRppt6wVO*>hb^rB>%VH`f4!>WB>>MZ{m&AN{2r@o zV*(ok2xIwQ@7y$K`h)*tsAIR-|Bw8$|MEfq4T6!H;UivEg`er>} zh)95B>TMitjJJPHY^n1*1Pz$(5g&DXfopokj8%%8EB<`%FQ+h?$O@_%_{-k|6P4^< z5`)MdJd?_|eFy7cZCeXh`X@(cAw&!PvlZO0H`a)tr+Wci5qKZ2F3bkaeqp;MYW*c5Qc(($dnUwU3oe zX|cCtQz-eIkv`P`@2lvWZgGSc{c@1^+Q9JKDu?tm>6_vrtws180LperqM}h{$K9%q z3Y0uHr~WUWlo5DRR7)J%i3kKY@ggx*N-bGY`5qQp)IoBtCs8IK$)IGjBWYXP`wxl7UItqKjVq4bgPtZ1pr>om z;Y#ecHzMS|r)p!Sp~MQtYkRh+F?X?N;q9XS3`K+-JQ;-FR5Z83t^s>1*i5m0`r*s7 zRN21pm5%iXuaqkedaW0)GukuMqjSy7xA^B;;PlJ=d;Lx=u;ho$g%aztMOBL(A>@sG z-ySkD%;Vk5LT0`b_%P4mniwnDsws2X*3F7z@|8mou)d#^lr)*ghWPI00un}_*^U4o zq;Q#??w7Z5`dm8?3=T#<%E01U?BibNQ)g#vw5};s$4^ML+b2)d9aI%o4|}_+^tW0& z?l+WS!ReosY3lVk?<0gwL^U5B4SC+s|)TqWAfv)j@Yo_!DI>rU6RU1`JPay+a*7 zh@Igs^1V$TZ-Hs1BHR`cLX^>y0U>PS8Yc|BcKtHE4feB2Pu6)uvMxv7k64FKkk|E?R zF~}Vr2byhBE@>*qM4lAoI@3X;uJ@Ot@lH}3kU~5%u$7QKe$rRM@YKBOYJ?OGNTroa zJigv9hn)_xarxeR>v^9@Jb%P|6sp5M*$GnU$j}}6f_?}ra`>-N(OPE-ri8IIk05l% zk#J0f%?UEvK#Y6s(yMBZG<`@1!SePU=JIw=h-t-X^3ydRI~u=3W_LUKl&#OP4RJFo z-WeAJ)*(%F?3^@l=Uh;O@ieED2MLq5Jk+wY##>a+n9fCBz~;|F0$ve!6wDO?tgLzp zkE@M08azoe8%&?<7SqaM*J)0gmJZD42u*F~tn++URkQP|X?){X23R9&V{C7XmZ5AAO4W;QLRajS)6j2VEU(PZ7P)tYYGSk0wj61I z-5NSZ4`VoLHk{trJF*5wyH>CV8oqs(7#z8Ct`v_>rZu`#uJ50)3(}JW21faE|0QiYQAprEDa0>ktg7YUL{?2{9%;2)SCw6@-8WkM%{wP1O zS-E{v?S|>WK^10(ES>%9|^3}d!1uV!2=Fore9 zXhMZLBF7T+e}+h{^x+~B6+dxYAC5)P{0{ZYXlmc5e*ug3)Mp}#@liv45<+fJezw^V z+3|XOV~rcfVduY@D1N77``}0xa?nY1zS$LV@C>WHqDgOSWItrAhdWc_*9x^8`{)Ih z=ty$+O|kNERBKE@k=>g?w&#n-t!Lc?x1xu9;)TAVM?TgxYhq$xRQaZS0(#T^5y%Xg zCZBlZ#!@e6jOpbQ&!~+sHxTyn;+Or3wdT`u)P$^p3F)J>6ZWUKu(?)e5k_k>+aW61 zfETBiXE*Oe^$TJadG8#quM&wbCV%Cp7fi!@I+@ASGc~Mku4gttrY!mYP(z31Wy{aX zZ|`vRwcC*k0P^mx_~H00hSOEJggddF0~d6hHJ%tyV1vA;4RX`rwL|Y2re?J{KBhjt zVt*Ez`(48}b5u=iP_ZE+D#c*+1;NSGnL`51WkpL~HZ4Zz_WCV8%k@wCvX}I1+bWqp zPPpQtLu6e~Wc2PCv&aJ!>{`LslSnTX&!62PiRkrTf91Uv<_wnzU*0mH+}e0J_D$nL zB|TxU!e?3UA^@#d*{GCyw96H=wJ#2PJi}-Suz<3yckQ~3mb*U}J+fHVnYvU(<0BM^ zLgX8c?PGHBjCW^K=$G@mF;cV*`2wPPCvB{^AYOL{lF!MF?^8{qhIw2w6`xAQp}Xlr zRIHqeHvI7liaZq`VRX_)S`~_RXwT0L#mrgvjf$orHVPTn97BR}38l4ABu@#HSkkH% zf0C6aJKPNMi#2KH%S|FfP2rNAmBsGIq6&g+YhzFCqxHdXy6A|RoGGx%l1_$==IIBN zgTr?Lwweto92ewtZO4;|Opn^OMIje~XWkF0Gp)jyr;GKLfheZm)=o(Q3-+f99*=T~ znQVAIZ|Hl|-D@Fo0ArYxo~-gJA`CgEN-_H)LXL`xH8U_#H0&=nFjZ#aZ*X+?9wJ!v zaZCNr<;7GNYHej@93mp3H*emgt4I6P0D&C{R38FrfJI7bU4lShU}H1Qu^2czJoPZNOO{)_?qXb$WU#t)P%sQSnnTLtt%l)7YBsvAt?VGX31FtQZI! zlDPOYa&mHr>gw}~nwlO27B4jPr92((%>|T~=dpZjrfG9e1zFinghbHSCv7z4!N|#p zV`gR+8yg#;`dFA@9x-|gqLG(3HzeU;tNZ(VV`F2&@V`2($=e$7# z=CgbK2Cfg)n-EhV;`)0fiJ26$R?$H0@X8N?g2Yye)Zns+dIWmG%7%Jp&%)ZB_{z(qIbG3qXJ*Z+r8+?+3&)(_8$Y0G$EM zaD4Wgeh26GwJGJSSYzz8wRK~ zp?6%k{$27y{rXHE1$9xhg_zrSUB&7$5jyCvqu2GuuZ`G92KzqX+uSyBQZAw$|L*cb zCO&zb&oIy~YKtq~Vur#qI9YFKyCJ7?R7@BqnUtdO^%<~cL0q&wfB@x7tZT&P#wsp< z{6f~v_ugwY9Nxs+v7nbUG3a7k|HUDVs_g#M6@rU2rsDk{M#8jD> zt((75t~rWIJEe)uKMH4-yM^7B25c_C21-uwfK$FBc-u&f{Dxp@K-f*VJxwk$QY*&jS#~R4E-kIt9(L@jMO1S;QiJE} z!^;D0Z)ag)@j7F6e}M(bHf zm-i+W!w-pbbih3FbFhYA#^@Sriad0t_ry%TO~3uFSk0nn2+f{1%99A$;J4jS5VJ2e zM02fozgmOn*LbL+lR?Pn7-z!#YE`r6Ilf0B|0K;q@~bPSucf8s(|EBRby&f|@{FFq z@R~5#l=i` zyD6JZ&nA`)1Mz&YpYi8~7sN6B zY|WBD+VZo)(kBkq2LAOGcMd9f_=Gs;w>{zP-f>)d5yz#srb~^%c`JUmDZ;QKY+d1N5d?pKnoyz@s zo76?Z`~-G=ejt!8sb$F%6zuajY#MP@lEE2$-L?wJ4N7>XWpf zWslCoQN#|pUjX_yh@x~BmGk)sWM}yk{ruN@91*@$`?`U_)m7a73IJ6yCq^Y3OuUMY zi{73go3st%>B|!l#m;+NE?YTFa+-dTe2Yp7z1NH7BmBpZCt*M4H^AEEL@*VdRRUM~c?g+AZyt+jVwQ~N+_M(?%ftW49 zR%M0DiY2W`KVyH2ht<&^rJRtytKBhGq};A6HTHCc#4<76L^ZSf#oiTbS|qD4{_4Iv z06SByj~CZ(r+x?|+5bC5Kky)w@4DutJsJ`o>t6`N5@=n;?JmvR?csTa4bP0oi7(b% z7Pbh{Z7ZM+Xp%tbdEsibP6XQJG(zGN*M_tQUw+cb0$LzNhy}qR*y7mqx`_pYu&y`d>tFCh;)p zsJ+R^Zb$p9H<@en2<`&nLlpl(R`Dy0=E7!sM#cH!aZ}`{iY*s-|-{;u1)e zW|R#cOEv48OPlaY)ZB+WejO8+(eenQK|FDZ{|ApjOWRrc-@mS`%-{b5IZB8AFWb`o zcVJ%-AUX*TVK`zsb${y$M*o-n?(W|(3T|@G1-E&k2@HP0V!i! z=w^hH^T#jSL~gkhpL=<%SOYFS>C}nl5sNFGjTp1#sqI>rOtiy|LY*V*@lL)6;TIef z-Q+t)-}B({mp-9L?X0FRaDdiR8mVSj-s#=f$4dTWHBkX>y6}u~KZF3qLgO6tt zl(IvMdN1>f%tyKOkAH%dL82T5mA{~0MZD=kYi2~+&7P8fn_r^d#b15Vdw~n{ok#}m z5Mqw#$wE8PN3%u!;U3-PH{S`&m?^Iiuy_M&digEdcw^hOt~NHx)h(3z5-F@rGFsE+ zucpibrXJ#Nl}!-DID@Xl`-Z+aSw+zwZ8{+Ix4lX6+<#xIIwiis8|NkIOh1awiD|vM zpk4sn@$72{^^b$`gtiq&k`dMsP?6Rvv{xxN zJ!S{tOI9V8U&HN;wVRAZX}@&U7wnyfIuKwH)@6b(Nx0}EsqG)67EzwShmz0d>ViKu8||(PW37|MaWeF3q>@oFX5u4pSbCM5mt`!^8LNu ze2TprufdZi&@9jf_0k-?kpx zi>hoY`pQ~wD6`u2%!A=2;b2dUE$N~V3h2Bb?hatcLx9UuNwORkK9@Qjw$rA1L}v?m zpVGtX&wW|`i^*US_nljH}h7DfYgT9)2&mD7`Z``=N2lB=Q-*<@1Y8HIBK5p_3t+@NZ279bS*UzB^cBm2UB_8=L0K$m`K8-f#gRf$!slP#p5D*>;|4z+V zlZtZ~tQQ1&fuv1Ba&U0KqE*`}2yIQ$2Wae)jZh#@gO|{Y!AMMCu zS2X)O+V6$jRNZ82?pS5Zrke|72E9`q)(b~bye|%chOpJtltGN zH?pf|q(gDUoh zzOMDD&8uW^;3)?S%650Ny;}gh$H>Y+yR?qn8c~GbMCClwYmTRAO_xba&aod`O1LvS z4=E+FwEcw}vrWQP!ext+$ms%lZ#t9=iXc+a0JKNiQa?zZdQkuwN(EJX%Wm&71%3st zEN6kVx}bSm>+j?;Gx}q{8_-{iKccd6c|lVqrGF=srf#EiPj7F?{nHogYr8Vi<~uUl z7nv>gh*LCNg}HfnHjOFFdTVXYZKa~gIpCH+kh&dKjFZ{~;s@a|*F;Rku%#vx(FY`W z&rwf*e+s#Az4qzP zW;MA^5ACurF#IZMjtIOA)Y7&b*wt;in3`D;u-Kn#iU!Uxe)+q%UZL$1j-k3?V*YM) z>FV#t_7e2^`0$MB zvpvPT(up{I=j?2|BtSduUu~H5zq^^egJf|(o;ZR5#}IefSF=Kc&W_EVM}$W%4c4s; zAr8e!QM1G1k4AW>5Ec)Gk&%%z%WtfQ!RPxC5-f1UsV}=z1xf*fu^yhDV`aKtlKPxO z8dJ<#|2Vz=3u*5G)KvSui>io-2#A1m_ynX#2kA`(1f)sty-9BpI#KCe1nEVjN$)j; z(0lJSw9tDEB_wC_`_B2FJLk-Q?%cV|Ftd}rv-9TNZ&~YE&w7?^d}3l;oLdvTguleN zuC}!W&l%+@AjyGl)mfmY+$IHXdxv)9xB$m@Rsihb|Dxgje~r!>#nCFO8W}0Sdw1W` z(lTi-%ORnN|1&jsNcMJ0DbxhHvKCkxrR&Bf<>MxNn+Axtmg z{%CpII@27`Tu45d;5*x!oS(U~Po)vnw&x@ITK;AZs`~SNi~16peQnS4ck!idySaDuwEn>BJKe@#unJhIkX~)b3`eG7ehwd49bG2QY`L<=NPxMVIjZvD z(jiiG+%Bjnv6~_WL4yTS5AE*YrJJ2uMJQ`pd!~3x6fsj(hnEqE>d+4AZuVka&olNy}~J2B7Wto?0N-kmc*C?JBof|q|3U8oJ^^zc`gT29jbR5T?2qCXi< zWLoFqUMA3`#jM*bNTiPV#H0Z=K602It16s7frgQg?XARhmu+;iw)+YDw4us*h~I~>a}2F_PZBc5}5dtlbx57-W|{`1lfyEysnSz1nkWQ z=adFAXMVNQEe&@Bb#uBhy|*r}MykH%bY?E^L>DOg#kuHiTTJJY@XDYqovJ%}xsU-sn>hQCm5QbL;JnX3DrKWSYHFXB*oos*#Z>?VE zxahgn8bU7g`5#~l>e?C41GW@*yXoU0$l=juCYZ7)HK#y%o-+2#uSoKn zAt0&3+^fK5Ie60xXh=A7JK$gpZ&l3W9*Of@*$h~n+R%0Kr(9lIJi@22Vs{)#nPl_Y zjnaFeNK6`x@p4L93wG{<8&q&GZK#wK=h%!vs0jaiQsdwu{*Vz1xx9s^1R0?a$@Qd&ar(;3*`rHywG@7g7|(A(L~zqN1XU z{`rfp3cg-iL6v{%($+|opEfQLI+?d?y`a$DG|yFjPWtAn=%XgU>ZuGhrIn7dxy}z; zO6g9x+MY3K&)>yN7TXZSU{2-l!95)woo;|*0;JY3zB=f6HMoy;LPh=Tg1FdYdR^7TehTiO#hVE}^TY+idZ&iix0LPxK|F2l6wz0z~YV z`RI{hpJscA)Q`KJ8S_WP9pU|J6Y<*MVD%Nk^AYuSXMP zjjxyk`pEdad?gPssAn{eDP6@ynC^}S9>hl1(bBuyq@(91t{tPD4-NW@F{rqV-b`LE z)TAQ%b!*Q(mnifAtUm>S;Vz(wc>;i;yNZ~D8k_N8jQ<(y!2zw9CC_lv{0Hl8fQ=LI353i@U=zuIQ}k^xdc8Dyv~{(L@Z0g93k4Q9MJ z>aCt+^tu@h@}VF}2JAbhDpmqBn0I8ay3zV>uoeNOWI{&XzVB_vrhT}A#rS5-@wqaN zcXUHRr39KVk8=UbB_jFy7WA>Hh*pM^{#SIO+9$29Zxk*llo~Y*WsFVaacKf!3W>is zcuKMLExSZKdVl`e7?Htu@nugYQNj7~Q;_5X#fzDgrY-Rf+6Vi%EPZCkN1`H6Jpxg_ zu55~z!EaR)j-yhC`g6Sm4K#6#?rGEA=(#Jc@8}DEoZmy1{=Ih^hJ+pG!A?=t6z7hr zs*83tlB9#Um0n&-ggx$ny)^85(Tj7hzP|CKjLbOCZXyhv7U&UaGN(|syt0kkQl{X) zI$yS%q2*Bs^z+39$IZ)UvFdJlV5GgheR)+8iXltH8PZrk)-_#sg1JQ;No!?)qvndgMuQZjrNgUqFHTl&4$TBo z0SL`v=MUl+v<~hWRc8%VEwV>!@rX(8FCo^~ zPgrkA?efHuxsh$iJA;tMQYmP@P0uXb*OBFxVM#%IkvaZ|-N*3Nilr z`H5e(j-DZEard<|?w7LS_D4$+&0n^66*iY$qaFUXWNjm3(-|TEOzLRlH$HGOvMQ+f zD}OS^cEf)TEz%v@#!kY(xV-##;?5l*9*2dKXbl8{TJXgr8&}Gs~bN{Ye4ik+{dq%DkYbXSKAC4QR$U8a`AmLu3Aq1N6gfZU;FUuj& z9J~=wk`%1ixPl91kPnq~do-Q+KRpoCJWmF5wfab!%-Ne9yavUeiMTN6*VIoZq2QqJ zhc#PO>kfJTpGQAP@3@QQzAmPGXt)%5s%KaW~^dve*_T#c|HjA8hiC8-hoR) zIZOwwk9|=J@(j|P#7-Rkt5XcUm@q*;4F%CASq_h;Mp?&@v;nF~vkK-gh7!r0v=bHpx zaMKrZiZdjIRPq`@8ydjrhWEBo8iLA^@*)wMVtEGOvk6Jsu&0Tjls7l6|!QztLyFJW$C zqN##LseoE_EMWCK$oz27E~lcfj`lg^evw%zL3U<77B_5WZQTvF#)K?^^=<9P*!3zE zrSzKFSM)s@kz zOrQc06<`V^&Nh&ooouXT{SxHh*K~_n3rRmzH+9^wg-sf-%+HjsR9URnzM;MtBP6Xn zh%=8zB&wU1E{7N%Ql-9`j}pAS&Ea?DsQc?EuIHf4rDX6ci?y{r_s+alqQU^3qXl~T z^5rlUo(ux@eJq5^(js0ejjdnht)Xtpy$SV+i`N8WMPe+{c zt@vlEJvlcseN|N=^^COldU`1pg+>iB$&56Ta%DeEIhx5>kB1E^pNE%MRJ9_^LZI0k zxk2kWbexPJuNR{Ja@oZrir7}om*$iqAT3`SHNEZoC880 z=aIK*X|J6`M2G>mMW+r#bJ%o407lPNQgzIEyRY`qB1cEdtd(@r$EnyICkp*}sWu8R zg=S~Q|+K4xNse|ze z2|wfFq`bUNGoRim#Jk(QIeSrk!mtHks#aCW0Q`7|9EMhZ`roMHSAQe`Ht4BjXK80Q z(OZZ7@0WKV1j6^flh}j;F7l$!86uaWjQ60C%C=8L7Gyf7z*mp%O0})IgKvq1iS@+K znuTsHKSa~Ej}J@8O6L#V6T97Wi)^rGSI_Vc2DDbGApe2;(zHrwz5DxAiaBiU^c#Ho zy9?&#=ciE~0f6J=vdJfQbEFixH9e&>FYT}`cw)q)0{(W>P55%Ga%cOh`09jWIn%cZ zgk9C8uSFS|IoQ@&CCmc?^tl1lGY)9ycm_B+7skGlyUkU}1>(BLh4G<;ab6_@%R+B$ ziGHM^GVkXT--KasTv%e@c)-*f1!+8amcDxMo(T)8IQ}9ZA5zY`Y472 zv9nN@>^!{5sQHV)+vX)7BA++8-ItF+5(gWwzHB-&z!QRB_JHe`^G(s99DTsn>Ha!3o@$JHa~5AcJy@I_7*CcfyXeWE4nYejIDEXHu;nm$*92I_Zqnw zolWyl@|Y=x;I(OQP7wtv2IDGp#*{bIcp*JLFR=l=X>`7<>L&4&p&XeiA|@p83HbZ_ z{u9N`dpM%9z{EUSE*Jc~JK3w__uLTXrtVgj9Xc_!lT`-*3QUq$Z?d@{X(4oek^W>K zs2~%oyE`WA5B{+M(>L&Y35U$A|HnX<^o_0wJGlIyQw!?0&{lLwv(#NXpdR@ZSu=bL z&y$|HmCO@6C$D<3S5REN+m?>>czLl;)qpvbHrFPq;4a*K7?kVwBOsk2yHOcfU8ScF z7p5k5SzJp`kVxz0mTv~&+w%pNZkoIQyW^+SLeIcpu=%Oh_`mH0wp(_+H}+0ioCgOl znFp6>CaM_n(!NNszNPPE-j_&Uc%b52CO{G*!)I2!5-gwq`ea~5^x31#s<*FjWOpmH zfIAi{OXAsi?Y=|ZYp$Ybiul`a+c)R&cr&(}iRZeqqGoO?Hx7f{MK3J-W_|8WZd96K z;|JGfN+IWev<+Oafxud8dpp+MI%sbXSUH`KYouoiRM`lVi0c@~j_d~6=b@RZO zal+9>vEWQKPuEOtg3=*7L+$OlVyaM19{XjmV6xa_0Y47oYf12O&2HAN6ytrIFRbl1gDw{+zx|H!; z1!2cWrnRQvr|MLJh)qp&4K9{Ttm)jT0O__C|U^fh^&#yQc^B~~K3vRy?yPAzF zJ-y2=@a&cg@u}b)7#g%dQJbogm;QK;Vpy^TO!#GGbXam@=&zokOmX=7VL?<0zK*Y3 zfGNd$n!Z&)_-7aerLz`Bn@-yHe^yRYv_FEhJ- zZDf5t@u?c13_ZWY&|K2&Erp~NZ@4grx7!*B%d|FcgqbIq{*X z9ee;F<-Q0nnyqoeQ2^gke2pebZ#XHmn}JCtWRhVR47yU7h0s zRGC)_zY9D;f+BG7i%@7VDr(xr1S27l$`=EGard03_v^~dZv>>chzj~=pFr~qOGgl+ zOQ{C|>CSH7E34@VP)RZdW|Ld`H&4dwX^u|+7T$LCeS0j(q|#y^w<4*hkuz4 zO+ByM5?kYSul{<@ZIq_jJ|*s*vTH$w@SB(HlkT@iE?NES2h|QvA%-@>6!UJg(44Pr zXa{nEnS>^G(WdYAFY}W+jCp6M^t)@swR+&MaxaZmqBAq`H&W~tThJV(WcP08x$Xa< z_GbtXqSN+gZGj;&!>*L(>NAal zkxNMeUyf~-`A|t8)tC_bimTItyrEQE3d86N1S(;utcp**(D_flQic##ZM1;r!3ZL9fxNhNKylxS1n69s+37 z7GD>Ey+b*&ynDs@#cp1{3*)r(O@GsIR`luW&U++e!6kffxo$SOBT;yC{n2nR(%21J zI5TH*Xc55i3>1XpZ+T^(meCdKOT5o@Y=0>-`4<*-3N$^8I}YVW2^$*B<(^0upcR<; zDW%s)(@fT&vELr|^;6HR-aBNf_;C@7$?hJb09xz28_;(b6~3^p^km>6gEVkvYyqLj zFZ@>#iANU+vAN?>z z-A;*ajh=RBt0)mowFfHs(&|r>s3++T#Fm}(fVhba#O2a;2ck=If9SSEbG(X&Xkpgs zzb}XjTUfmx3V%?EH;8cTr)MR0t+k4cbqKNZB)%}t=l$4ce|)f}>?}{qmZ@TO3VKXX zlYc39|B5#H;m!MNxSIWYgU7pvfe=I1ZJd^pLN${WqrS42WaL>VEJPlAuVa| zAgtCb5WzyQOeXT(J zf3H(dmRr^K0@88sr*V07aO5WiVsUz2Y5!=*eVYG?Y~gjdyrfltHlcQep#4H}Lo{I8 zLm)nbVBf=+^(Fs2aSCOpHOSD{4pZwRz_z|gQgX* z26~zXH5}|F;-14x)70PDV4wTKy)TS)md*nPoW?_S^}kDr5?+gubS%3l|MH`RDC5^u z1f4vIQ2C+zZqQht?WDKm+gAzDm(NZr@Mh}QgtIT4BK)pIw0?k_&})w2;~q3JL#5Yk zrMct3NO!Lp6r|CsK#bwV?o{z=0202^vm$lR_hiMVSidS9U_G@BrHe)yQpUR$Q;UN0 z`##|c5rWzlYa=6r^KJNbrEXOE{Dc}jmGHXf4KW*fe}Zlo@5s?EtFq4t$b#0 zExS_jKnjvzYl7+SV?8dJnbjIu*3M9}@Fb`wJDS>7)ErLDSC6Ajy7z@xrudcW*^a5NabmmCp_6 zz37F7>lYE?x@Knd0BMZBEOor@PS)G?r(cDS*XemOKbzn^ph88GpmAnz8}^dg=*(Ea zqaX#|nM4zn&5-XD=l0xE!Eb&uFksb;RH0Y%GS>i~-LA3*3|>_S@{ zmM0-E+wZ(hH1M~3ez}e@BA|e&QH#zRELtgm7>Qi){pn9U_pFX5CVTgkrH7q)qw33_ zF7H($9ppHNe%{x?h$nxycGRzCGf!K~%D*lelTlICe!{w0${5TN5*5)%ugch0ewxGl zDq(G*Ovy4c>jJUI_Ib|T_P0{oa6^u!koIlU!|`!gq*#Q{7%!MDPpIeqjd_r!Bn*4c zNbRv7$~JmY5cV~oU-`@?{NLWp$svyDeDUH%rNg|y6Fe345HlB7Oca&i7=T))@b)+7 z7Xp#(XR%XmwOUSF6T&~)N}KYgep>E}2D(l1PZL2r1YxMA8Nk#QIYcLpw*gk!pEc%; zKwU%7YX!sY>vXUDHIeW%HugkztQiSf6?f+q)2d%jf}e%kpg(8{HY1 zn5LR8E-p6yL~yP;fp4e)_mi2-*w>{5$kt$D5@?igasv{>YD!CcW?clpNVwn4V4S1H z%`)t;5_JAi;s$|raWLz!r>0=zWjA;pKQ$F^Hy$tG3fiXZz1ji@m<9Z+`kBDb0#dAD z&4MRVJOnsJMdc#`WT(84KO)y2=~mVsLIMOLxQ3>nX4o}zQd}KU z#y$*j8ZrnQm+03;(}7X3z}*0VB><=zV=oXF7uODl`dl4%)9L#K*6IECFtJcs{xiUF zF8%Ol=w0r5=iOn&C1a!iW^JC4Y^mFLaQ^|8>dc%JvAo4F2@4p9j{x4yhlxhoIFE3$iZ0z`7zf1)L=M1Fv zdH}+!kB^UmfkDcd^AiqT;F*HmOKSgfp|G$pfJ41L3Qw~FFsHFGHK4K|3m2E57Ld>< zhxc!)9|=fih`VZ5@!h*`6*_nL)8A2mG^S<6{ydiNEzAc1Zc6e;M~YO9VymS7>*arH zy|^~tDYC@EN+a@*TI(c_VTq-JQvhG=jvHz7%8Kqb*4v+=YknBsTV88}x<(6jeI%;j zy(ZR^9x^7wjyoE5cAeLKF{egkqSDZ*wPLHg^l{Ij;Bk4oz46tUm{?>zPGc-j%gm96 z%<|g#GxIq~Wx6`J&_ujshoL#xLT$6iwnoCxTiUlHfXuHWK%6e0gN(1(dUE&i8s!Lw zaA^^_;GV2e)9)2`fz-L^#jeEWEWkvJ^KGW>`$~Whm zD=pW~#(q<=e|`X_q^eB|n0HfbG80fS^d(I+;0{ieg|^|f=Z$whY6*CSY^IGMakKGX{J@8*SRxU6c!%NtEG** zf_|s^qw1IO(noHs@KDl9JX~BaxX$N-^70X#iQgFiOI#qDY1uPkifTp)0(4?ezbP=l zJmC%qdAc5hzbh{I$WTiH9}AnC=Sa4e(r3=DOiu58)VT2f$uA?m=yrAP;fXg!JnHlkV$!|` ziZ>XKj%WKW1fRy%rxJbQx9<%9_03%CJXTbddx99W&u|vN*rb)a+FX}b+21DL*hMkk zXt0+xWygufyiFpTDo7F+J7=_XGW@>oHrQMW zi6riC>{_ZE&6Z-@5AVG@?4dn#cem2~8P;sb;M_Yi&{w@ER4?8uE|rPcDV-i)%EehR zq}^;3kU;sf6JTn`y(~tgBEy?9{FziP@*MI;Hq3(0Q(7Hv9XEeQn?DxG=o$JhT@Fch zxiwziFskGJvqt{iHKs}s!yOVmh?S`y>a1wB+v=g?Rvq}Yy!qiTY7?6_?}#e4CI+c_o504XJ#b&^t~?uss*}a4-Bs!FGS;R z=^CJo!TVzR=Z_zE)J4m6=BXDoH6;ts^)-$CeLMW#2`=^&A`gl7D#E3XP=AN0ny7GU zfrNMbm=-61PHL`So!Qqc62GbRoRGdFA+uP9iWBQ& z{)tvP%6-ZL<&BJN;T4-^S~gmJH-~>e-b@9aPGoVJxLmPKo{=1F5w$M|(q@4b({wjN z-hZT&2zlMJJ<&2fomaSx@2?3S5S~*%u#g>m@0?IZv(M^rLchdEShk-mB;*qZf=XKQ zcdLDyzcBYiH2!dx5j}a|=PdFgg2u9bPa?RxwNfv8XyaWLBf-TVdSU!b@t}D3rwrSN z2T2vJdlo8Qp=7zZ1)g*qdBuk0tlASi&ljz@4HuSs;1nGs%vilSd15UQOHr%aN_3xW zXQwud4ygTkh?JA5XCP71W$?4l>in*@jp?b`+0H#W?M`5(HEJ*MI?z^>&&_y@-BQx`ZtG@nVU^YkQHRqdSopUS>aoi=Yq78-5w)R3WmN<)Z14E0hkt_ z^$_*Pj~_1qlR{2GVeRG+CMZy}8WMt+Lo;ar#7)Bgf1>*L1r^g;vjrbiTecN*d98<4 zR4XaH5wQEN&|tSCDa@mbRezkR2t8Eme@;}S_Iz7LMxL{@d*G8^q{0V^hmGnFlbRJ; zpdIOvtq$e$?j%4Z8EBsi=JuJ9Le-Hs=5dA$2;mOOMbI06j2Jt<5h9(=WqnvY_=r&Q z#QUp*5$lX-+%%l1o3tVj8v9-9EAy3vN%(LpZMkSl04_0hY$*xIIVh6x!Dh}{rO>zE zlCE}i^+97pE5F963Lk*hqStOMMK~4IKUbBJ8_=+ph`iVwls(c*iR!lY!M)`sNIZK& zO+ad@Ae<*YE3{ulomayQOC;NW8^=QK)6PtlVJW}2*wny4vB0o3+5&Sa zZQOZnHIx<>6@@Rj^WIE-SRwhB`_IXCTJtwRI_1A|UE|_#}J}cBb5HUbKH=ROI3>a1>@Y_vK?WrJqwGK>hYMH|48&qe8qJCBy zEUe;{W3jMx#cR(FNlf!9CzyIPUBlSQS#j*`*^rt>-;~@nl_@|opG+S>GGj(AHs7R) zH_1Ub!|QLLtR9tF5B?q%`X07{KuN1r&PqJ$riAet6R1{80By`q4*(@PGbId^C>P8li`^56lhl2@!Q zTY}r~KQvf4Vnc4`)_fzafmq9XMDM!4J{EaY9~(#B9lNI(A!zqUB%@^2gm9*Dg$}5; zgQ>KLX6%Z!wSW96P4=8yMs>28+SWhRmP*|Fi_$W-oQldOKv`uH6`h|sW6XeSQ$|R4 zd<4=JN)A8NZgUMHrsfZe`6shD%|A$+&Rx-rYwMA8`3+UqY)cc=lR0;cLh)$~%sfHw zB@a>(m4|VMxl3R&H?N}|B(3Jibxu%*n%~H-mC^^Z13v2TZreV>tVwp%Lc-72WOE_AEi3edv57z6_A?;nHB@ z6mff?(Uf4Zvb?ICMLctVJuxVDB`!k$y>Jj&ZSL=lA}85sW6HOxqQtMv1A1Jr^Ube* z-MBhPUC3GY%{RFEh6=8~nyq&zOCwIBc8J*B#CZ(QAaqz@5l)G5yC1JjvRc7NF)YM# z;g{sGgEV$+QXW`D# z5>zr;nLCdz;;RKIv_e=4M3f~fx!$PKZp(b2^XL(ab_=(Jd_WADTdLur#WNAD(RIWt zzI^7_ur~EX@!pdC2X-n>a-whl%tjrMHMPA(Mr@BBzixzROnND9W+ocRKu}&lGCVy& ze9Grt(Iieo_-fYHW8OOPzJ4mgPqt5T#OH<79$&1x6wmR*7^`JPl@StLT1COJfLu=bh|Hn>Dw`gc=SreWc7ze`^`zaP+0*FIQ%?wuwoiv3=m7soX+>NVCO z;2-JorE~J}#Q{gjKp00q+Ema+cX_^95`Q?HjL2^E|4vvjIf+x@yRPi_x*YA^@&JVF zS*{zWC}DqN|C@9I+d7=b2V_bImD9G^TRhOV-kD395G-%LJSiSK?Ss|{J9a^P&(s>( zHj1;D&&zsD(xMgSD>w;|B3S}aSYrfI;MLFSZMQsMC`}{2<@bu@9A z9`ojwU^DO#6Nc%9R%a*YQOQ6wib`=5$zT-`+u9($leDnppRA?+mgAH3grqfA~J#}KmIMq3FGqp$07`sdnNF0U%UqnuH_?fo>*>q>qVf(U?=+((a^C96aMFku1{{WfeOLvI2?VN zb2+SSkVY>Z#GP`FdJjl+96Qc5?+c=rgbmc2bJ{&hgv__wj$QmU;xl;ATj#v{*Mc<7 zMSrTnWYIC_xqk-gi}e$CGCTJ+24R_d%BFN4bLb_qg)@qyPNb)wc4x8=7H2(88~-c9 z!!=G{jLE%j*@Z5OU0nZ*i?E$vCrtD0-I>K3?eCB9soM|fQd+Pi1GtdT4{fnux=Yt1 zJjHk2{Ll8<&D--%10~Z$V9=~fLkTgX)_uSHDsI&Dmx4a#(=AbIiHnz+i8se@XLbi* zb$Gw9DRRi1R-?dHZhdz5RK(t-FCmY!S3N~oF%nys{$yKHNM--CeX+pcXrlx~3FEp# zJ%a@=4`EbRS+}4CxHg3=isrtuzm#PRZpTyHT!ne{Jq&`s65p^13I%+jzq*RT?mHyr z-Om$7H$rYd;rp*XPw+VC(r1|% zmH9x6DjB{W?eN`6W%DOV(#9%)1=VZw767$q3r^<2uiL%+f0~rAvtc?8@u}5qx+x z)Ys>V{^(?gGi#)WqSvp>siHS!6^2A%v^?UgT&Wt;X_|v8{h_oIqp9z?1KtfxxkGtNNp<6i>pdaq zQC6o1*+UpHtgzi(g0Cs_0o$KEBll~yh=>|^0qLa9zF%y*4X&@& zx}qTUEqF(DEK>*UZAIWW@|avD0(y@0ajCoZM$`6MZk$bALEhEooiikhI+-i%ji+F&#hs8P--$~iDjsOKds?=1A#kdy_9$fRF z%Njf1<>b0uUj#$Ev3afbgg}QwrMS(8SdBc6sD}Uy*Dl)YL>cmiZH3L_DAJ1%2lED2OgvHM!Bt0&$ab`I$ z!tAF9sK&!Wjm$(_rbwKg6TkR4K-JZFM=pB9tPEt6(O5wKGFRT|n}iA_k4xR@gN4eu z-Q~;xe;of)4!GL$-$c`~RRE?^Vv4I^q}To?aR)~Yjep*9m_qJ^SDRe#0e2As2vgJc z0(PD9h}V3{ia=>^^E>4cPSyW_jM!XUTn2`Qr2aCc+(6nepdDjmWJI9C3lz|f?Ki)h z+q^Gi5Z6C`{gSz3)$N(A_x%EN54&^#u`U}TK)I^}(Hj?KiKDBl8&&qN+J(X4zsbBg zo&PEl$G-TVMUVBw{>|&OIsQK{D3eE?>6K`GR8S}=F3u?|1mab$VSs8E0A>R4rQr4o zN#mU)q5n=ANTqDjHn+Y$2@nGV5>(lW3kv~q+>`K#hzh-uE-Qf0)F2%d3^_Pk9str2L-!034nMp)#BaoqEB=*fq))*Ee+@q`{F)nqK^`i zJ-4E*CC~_o-%so`Ntqn%p4mJH9#BnTIN@Kj&ydu}!T)tt zWNH>jt{=A-5HNh69|8xaK&A7jg4jhW5r0kT{l!rI`p^{yS>ZE) z^=7keP!pn!_?cei7o66*o#lc4PDXKI!op`goZFvnct7d?82t3~gNmNMA_ZY<$2Mp-1F1F4}fmsP`2H}+dB=TH&rgLkOw$?jfk@mDnTdCyEW3e)i)YJ`)Ik7 zZ1wV=TfYQO-GPi@34Vfxudf7>_j~(8y?*mG`^lc}ooJ{Lb2?7iNDt8GML#@xMQ_S* ztP-+vAR&-wa> zzYgtI2-(-0sA_kQYvWt`Y3zKABpA~S9Y{kzWd-{{@<2x|uq1wl1VI7E<%Nb1Ac3GV zv!S&Ed+^lz%b74~*gw$G_f?)y?yn1~n9t^cTS!|7$qH@*LeOVQG2ta|R-%LqC2XYtW{Byl$&A%>6; zKHh=0s`slGB>%=8Ut?5r2Aml1@=EY%5hz`j7-c-&~mJAY#4p=dD@QU)@RXn@8wC{ z@)^c<%HxMaYg?xn&&x5>A}Pc7ILHJK+?~M z1xbm>c_QjX4mLfIh6)BOIm4-+@tU5!u_jgLSkI9p9{MVYN;X(h9gz1-i-C(v%fIEW zs2!m=+m-O#+@~Kk?Xpci6{uP&5zNZ=OQyt#tz^uygLy;4aA!RwPQ;E?Zcav9=@%N$ znMq8>-aeRf|E>Rt{NAV^L_Ho!S>Lb*?@c_JMn~MwCaatmi!V6+6Y0e48f6g|XB-SJ zixB;KU1Tiz(RS|U%dSxsY^(4F)k8d>G(VKs_2`kaai$5UWp>&33*W``)vhM}tk(eIGM=G0|liTBf~-?ZSD*ph9xrVQk~d+!>r7EN}&uHxdK?f?*(0e&^|!CTI%J$W9>{WK3RIs{bbJbFrkBM3cQc4cmx#lm^G;$_$H;wx z1tTAO`_xk^+#{jo_?^SVMHUC~!xp~!0kPst#?J8caM>eVCMHqrt$jssU!>Z@T6qty z2iAzMXnRJwya4%tTQ#UZdXFxL<7 zXRhkTCPP=w&8Ex^j_DNC4~YDnvX24`owdoc0*Razh#IzQOI{d*+tMbaeq?r~!47j# zd3HC`6`{~NjQYcp#i;d1me$tCYcZB6%R#-yM?$4lB1hrY2e(C@W+OfWV1&5U7b=3U zyZCNiwln$z{AC#soKq9}<@AW)gs z&y#*nd?Tdf4=8agD!!RF@F(*kb?}6(%oQFMtKYyyWei=X0!j!c?Z%L+*;x4Nco^0t zIw*5GZLBP5I+L$Lyl`F%l;1}78!Hz$<3AxDkFErPywPcNTIlb<#X`56@c2cA^KfSa zkB^(@n>QWb(lUJbG~aec-cO@N@fCmbE4mrpG7*e57}kR{y10eZQe*7NyqM>l=f9eM zkw9|sE`d{NAh1@pqx+4uI0w}u`HOv#H%OKyY?E?G52R5kfldMi5{(M7jQ zCrkTQ;FXv(4pfqZ4V~)eX~q-vit19=)(6LnPc1@uz7m{?l7jNXXWR&zpBEQrjS=2>gPJ zs#zauy2B@Z%J<_{t@LFcu@tjok$q(Zfe*qk<=o#LZ!+4!@@w3{^Ohh1@4i&4vhAKI zr^KV5&d9gkR~wCk#cXidP4Qoz`!2lq7XwnaVyJYW7n%n`X54`FM)& z6K&)v{kd3be^n3m4Hba&(*#e5gy<_1t&10O$w?w3Qh8`@gSFlkX(Qd%5Krf1tVb@= z=+==LbZhU{V~kyZ_rzdFf9(Hh!5tW-@Z1+Q7Zh|}URvP30^5+Kzk?LJp=O4&8~wA% zN+eK$RN0cbQOH4!2c=wABL~?|F0)8ocMO?|(9o;t8g*k!waZ1MM%w9S!o||*`RJj| zz8CR<=9RDJ1ZAdjU0ZUM#=^3~=DeS<#~GddY-4IwSC};7!N2p>$L2V~e(~o}cwjDK zZ%BZ^<;VZ4joD{ij=q?%raU z0blr6FnA!i8cLFJ^vW52mFfPEi=Q8>Sp1`w#x!%!MH-p9Dj%K1%n!;L%!^E4La>}B z`0C_NpId~s2@ zzTNM3-#6YE@5kF?KvA_fwc}cIe)Ie0oThkMJ(q<1ETIfo8xv_4s)-Y%_6owvO|Ckh zDXu(AX*B7twVyP~9hVb{7{4Qx)v(bXIeFV2QXqOuLt-G9K5p-$al1tFN#e$-$=LuQ_&DBXc{II#dEguiQkmHBth}38$7QrSHth!ai& z>=W$~VSceLD-RHbKk=%@udrtor()kC`nvRMFnoOMkSKCOsi)*Yno}CR*o9_kl1zJe zSop};crhwEQQG0D>&}oYiRxB|>i3 z``oga+Y&|;oDet)ZcvAG_8`n#Fhj!DecSKx6O^GC7O521+(4f3|%nS@rpZKD9D5yxZ9l<>s%0teM@T6y9BYys$Cxu&3v#qTMC58!l3eYj2x_ zjmPYIC5$d}hYT{dO)HhWKlgdu>g)=#oRVkxv{QNEyBYBR%?&7V6jQ~`xdc}7^?bu9 z#UdsvODx~m4!^buqn7fm_B=o+I!JfY4(p*hXvK}DnqIfbqxQcB#gy7kPiZ>*0uHoU z!th@JyM>}Nd>7gru;9DU?9ZE(4;S8dThN$AuO@1;o}9`N(2KsZ%3mbyok*R&dzL0o z+X08vgtQ|kIzaKJXR{adP0q+Uq|iyNI0_#+BiT5dEhC2sS98%;0xX}|StZeyKI&dL z9r9nSoTK7TD`FqG*0x@f3WV9%JdcgvZ8nQ6gx&Z+=y$|3b0N}JxSh}oCeZ?Go|XMg zzv7CeB2KF1+W4Gub$r=Et=Qbo(wX7uhwslt=E>1N(*1|>v{lunaED{hK6Xpx0Ju`- z^$-df3nyHA(%z(~sXHlbb|-7Foo74AK3TnXtz-3yg!zd#XZDK}KL~xxZZBd!&9-&1 zmT)d4a1#02_R4Q&mklJ;E@oZd_R`X(Nh&GxoN7j^hfAq+Y}FJ^9CgbUM~>j?O;#LF zNq)1{z4m!1*1HnAvC+%1yV5a|d3V7P zuK!OaNaOP3NW|EY!d_JlITi_9n9=l9fKQ;?okvB2j(9BFNd3O-;-C`U&L7m#338c- z3XClUf2#va@He zlm@k7XJ==Z=Vga{{Pd~ivwX(6_5|Bn%sWKiu%X%b8G_V2BRl)H&Qn&O;9%=4B}yod z96-&+eUon(hu;9SeWww?!FGp=B?MmXB)Lp(tU&^?jU1)7S;&Svn z=Ax}Cz2eVTE2S^;ZjzI)Yw$8^M7J9^fK;m4dTwWoiX=MiJE%4x3+V(@^_%#3^8Eb# zBj=npQd8bUJ7;I>Up2cwTRMHxkV)dn1L(X>DWzZiS1YW1*WUvOze-L%3H@9C)PIdI z{Jz0(rl&`qI;QBPk7j!B;DJxw-stG7GnVm?_C*y1$xVt0y^GCib50 z6d&MwcYoSO-5~AZNR6hNrD@tu| zht|L%P%jfH;%lIr#%1k+pA2p)C+sA=mLXV*Sn}D}ORO%-J0LT8A z5(k@9f0oh)>1UX9vn&gpGtl7!RUr+RYS!OQn=7EPDDybvtJ-=VIQEu~&E+TW+|pBq zi4o)8W?H2ZDCQes=}(hOf=0fuGeXE8b@e^(BWayCT5-<9KRns(Iy_M}I?Vo6IPI%+ znfB4oQL!JIrk&}-hciDsj1p_g@MqNv6k8nf5a~|yH!3dguCu|{d_D$^m;1pJMXZ#x zng_I#MwUJ#Oq4ZJiijs8f~;fruNz%<4vYM%%Mme|&=}BU!VHO3YJwI1y}9xNa+#2G>}$0evSXKD1te77NDLT77yVLI}d z9d*T}Ol)s5^sIHYlF}aYn3Ek*_cddU*2YkrD=xe~Wn4-(! zVZnHW0gbjh2eb57%Y{1B_f0I&{9Ny~wN8z1{45~7fl|Jk8V(!m%{uEYkAJW7Y#8;! zz{`rW*~ZlM;^rQs**>wLF(|Z~tb(G~R_I!Z?mDeYA(H++zdB1$KEFA70pciF!t^Gg z{A-X8$uNn~hXm(&zk~$4t7j_qTm+XGhlqtb;wPHU4C_{;-r3N$4WP_XRriAN(@0f! zMsaa8Wr=&;h?m0~mJw;eFn=-9%+cuspQ{v4oD{16 z1hW)d?p59c>Dlf?{37Q;)hyIITj7Ec6P*Q}#PST?=r z<8_10uBap*6_f@I(-yVS<7In~m6Y0~TezEB|FA$M3+q$2zrTuWvTONTV$SeUu)!~C?LJc zo2hG}`_Q+9o*d${^0nB@$R+~ggV#N24at=1nsfB z8c}|Ow(tyS$%@&I*cK)7OKdmRv0FSpPx7S#J%LtG;KlO^FvZFf^`Rd{iIXIonr1Ct}sByNNX2wqq#6eXfGTm-DWPKk-9#RDKt z7S7Z7A32WEb7f>VYtS_7JKss5R)9?DfL24*5k!Tv^VPA)Vp`)){f84{Mo!R|p0x`q zPN+S6;xcM8CpuNo-pViDH&xudPt!uVpl&LRj--Bbax@bSx5o0=s|qb5QbH6!;PZJx zg7%veBJ+2z#Elrw(IG!Agf`xcbDyW5kssY8m1$+xEf=5q&?+}_AWr5|WU#{gEWBGm z;1wD599?790!77J6DP!0gp!FMBsi%l0KLt;8TMw7EJG-Hi~f<-uyj*_xxwy!)pHl* zlyq%tDjzIp;MH_ZbSpk|L?p|E90sg!5khA(23CB<)79c;q{?eJ@P?+Y_NO}6t zI(gLXCGpLk1G78+ktt7{jD^!bYABC*;)0;mkh^uji2xec91$x+p{2r? zte1P_OpnESjV>UdEo0W}!T4Uu{vwgHu#-r zlqTRlctRy&Ha3Mkn+gY|*NxVaePvoD0+3lb!L`=xlM@F!o8rf6;}?n3s?r#uIoI^u zT^w5{H`J^9#Ip`WBT(=Gz1EjTiDe<9(l3wu__p-afw0{`Fe+ z!LVr;OGzEc7I(zSdM#BZ12ov(nrG@|C&hY-g4YIjc{}aAqf(NU)BZmFR?pN^ZtToj z@stsfoUfzs{+I0b=~1Uva^X9*j16~q%H@Yb2mn!)ivs%ptjiS z*m&xY%Xg=PKD;qA5lldN>$kK&YEx~{NUFWbGHbmK!`HmHRhL)Zri={=qvo%!S5svM z6|a4aaUQP-ta5Pe2#run<40E|5SOq?y5y8#?NL1W(&!5l)hYaN>h!vLFXuiU+^N@vVAoj2|&!(VgO>Gn0YrS=I=;F&x;{~uy5LI z^|z&oKEu$R@)qY>pnlZwHIH%|CKrzmsHDAP=G4nD=*QSEk9G z%9~Le6qo}=99xQmbY224-_65=s*_+3^Q9GJRaI5x+bz`hpxvOL6@Vze0SP?t(Y?-2 zkN`JOL#Y?Pu@xtFo8}1z>zJ^{Tq_y1;=F^fNOn@`o1{tw#@6tid)zYQK#Ygen zx**fKZhRbEo2#HqY=^dObu;Ft?~^>BA;F4q;cx9Ar*@_9({(^HwtVg!S~QyHZN}+#@IH^dUp&fftB`mr0>&yXLd+vn8 zm!-}`MlRYqIXPAPl8n>Dd@ zwp$Xs0_ez!s6ZYG&wWstVgIg6`E!Zj7fDSG(^Tt&vXW)VSx3}4`@7|59C|NenyNgO zDqo$X86G+^U7$EjCRuJ4MD}G}6&!jblT<-%TSfHx$B!R48gAhr)!-^VzCavL$05=M z2eS|5>7u5m&@TV!2$Kz4w!5}!jQ5aYOowy^ty0fMw!aqXb(e-y5^5Ng`a}|x-fv-E zsy4BzkjbY@7=M0-m2a(M-;loW0=$(FFAtJR4SG^ycPf|;Xom5TfiLouM!ktblmMeW zne^$J-zqWVbv)o}vO4pv@e3SP=QMJ+XmJ=CQJ1krH(y@5qc7d}U4RQ>b209qPP&M> zM)<;XQoE1bMn`-Q?rX`oR@7T~t*QP9B+kT_V@ zjX}XmxrZf#Vw)QG1UQ@AF7v%?k!Q}AH|*Yd+k{?2E2*rvq!)21CAYSTg#+KRyY~stuf<@^=3gZynO=^PrcWFe=Wn?2SjSs`!2a&tq`jnNrOqANN1v z)l3dS?&CqcHq2)L{raMyoEqvZa3=)C+_HL1iCr8_pEvsQ^2U5l_j&}#b zicmuWHm~%@O6}k7S}((j4LaODSMRgbL`pQPA_sa_Js@16tSD8)kUTSesV5&8+!nlvhs9kt{-pvsO$m~e1`AiaGWglng)3)I$ z_2L#nQ!A&bDX4=Ieq2$fj4WI1%903!O?N4ywUl+0H(Tg9r8t(7WoEBhp+tYB8mEMk zTk|Y}nqP=M)?{j5bmrwq~#TB&yYO-UH75HYexTY>RJ|K{||} zs~2#S!ThEm%4OHQxk`JZGszw?wl&{w^})v71E0h#oK0VHy7S=%CyBvHOjBAo!?r7; zqvWl4(honsd%I60FB$1i$n^RdJvmOaw^B-dLFd;xuJmpcg0G^hsA|`6O09E;U!Ue}lEkPy6%aM{} zKXw}5o}MCWOI|kO7*(_@rb%`W>qD%$#O%h-&mNRI0|hideUSV@5Pbp*J2!WWMJW{& znj+DPYqxGVi>4HcJiaqAx+Z^MjCF<-Ohb>vJkHv0M2?)jv(g-yaLmOj%Rew`EMH$5 z6YQZgnGfYl6!B!`F-~1#EyJZ5eo0Hqjv`PrEp~I+PZ*Av9&HQeNrO0BV zdt)@gKs)@-47_^!r@#zO#AdO6nuL@KC3Pff7ieq!ANNGLPUORLQk!xMyN}((Bt1Qu z9*4z@jP9;kz;>=e^fV+)hbGP3Y#m=*a)i&8YDi`n)^UL^kN&n9IdP~!cQA_H8&yPa zqrH$1O#7$~3Im4)jfePb2n(!7!dvHa067@ee72&E?j@@f8Lq9%NjoMfWscK_7375m z@oO|UH=_}agrMr_b_Ztx1$2EMyeL0^?$j=_)0N1FF}R)axj*6fS&Av&7wFYxxKrAV z=RQMic;jewis1Obv2YoKS$ER9PCQUkBb5#$SVY#Ic~_4ka@9Ets&;TeS&T+w-oXKQ zt!+roDTN`3p;<~}yM64*mcsObp;tVALtI z%Gve3_tj!9ZZ-ejf(9Iz_Jfp+=Z?@A2IW{;blpmcYnuU1L`@BHM!gNy zn=6_Q`|=eyVzLtrkMQV4I?~TIPi=#M0u_VQhvIqOjZG|B?py3x>l`=xCqO?)M+IRYp%0Re&*lYS$tpU#C9>arJ6+D6+0hr)z17(Wzm&>&{#DLk}yZx+R zU8Rx$6Uz9dc$=uIz%X|W*t;U{JSkq2>j%yI?IE?k8{hMkJRT5UxCn46jE#qB$+rh} zK-*o?sVb*H5gA!zbV;^}3+&}QuD6i+D0dPTauti*Ra|1yUWfqGIV+m16DVx{wV1?_ z;DqN!O^8TjWyy)w^;sh}Vp>YYl@-#P2dNLy{WW#$#CE{h(0u1itdDz~rQyA)o6 zrJO*DkpqU|X?OdSO=&W2Xg`jQic@S@8T)Ocg+{O|*INFmrqU5myuf8Kai<6a8B7QHW7yjk_5Uczp?HW8bCoOCxPsFRCvW{SOz*0q-a1uaRWC2DF?cyw8| zi!nb!8#>VqgX2egBhp_tiqXEXNA5LEZnoO_%4k+!5)4iM;!fm-nv&I&=m;Yr%Cv+3nlwcS)~bJl#AXU09IbOsX&@bDNuNE|R(* zShohp|2dB{cj_)EGN{yRnPGTvW-Yqj=Mrscb>4kxJ>(a{pqlJ6SVnv$7MBpyD})T6 zbK`@NrH;?p>FR$a1 zh*ia@u~&xN4vu+{SNo{2T$4SqZPw0tn(=tH&nl)`>XT-Tuh6v6^J9E__pQJGbIQ$Ctqy9W4}HM>HvXHJ{0M&0lgfV zO=sL4u#dY|BX{#qAwf?9p6}qrl9H05^FloE z*jw?$4>XIgL(DvYS&csQ@u?{~ya=R+fXe7jEWtDfX;adQ*<2M!eA@CZ zNC*250i*`dL;hj`{!jFf{VNXy0bX&60*x~=?G;2Z3F6=qRR7yL$3HM0>tw%W=?jiK zcRm#tzst^+tqg5r;Z1z{&1RCSWOO1kP<160P+8F}0;{QdIfK7}E+^m;19nV96BrG! zfa%<*^hJ0#X7|AWp8>pwTgj-Q1=fN;0Zat=E<;w@*2Lt~UzMSQw+q@z(|c3F2D|)J z|1A~NFTJH(eNn4?g@x|8J1FS|V11kJ=rkdsKhhilHVy0rqf*)>uWBp2A`M&&Zr#ld z+&U1Hz2?mxW@gsKSm;XsXDrZ3~%BusAl`FVxs zh2v7(lzpWMkN*@{bRNY;KQDLM7_m<+dbPDNTGH~&4{*f(qgG3KLPF6MmTXuRfrRrf z4{q&mK@aWLuY^xYSp+Mvnr~j+v@vUTa)i(Y2N}v3P>S^+;kDTPiD)Sy)IQc`jx&;9$;x=-f&1Tb?NZAh&(XN zl+Hx5?5%3aND_xdYE!;V`&7v7b8YqT^)&n3l0qHv3_c6?hI~P)qs&85qAFRpF6f|Y z*HhMy%X&Cr-WSq{LW9zTqZCt>QChg2Y&;D8r*Ii=)#C$rI15I23pycDbb=?rkPQ=> z9H(9rYl9ig8m1=PSSL87o;c}aP~!*xS@Wskwl3QIVJ~K5uwTp9~1b@Z<#=jd2qxN zW#neuGSXlWA&i|j=l;dgl8Je<5=!pfRsDP#{lTZcg@K?-LMNOB3pbKX`B_YSX!~T% zn`EyxUB39Pi%M0M!UtCngxw5GKnng%Eewls3*Hmlwc3gsNvABDj+!}}x5Q#f|M#T{?P2o6nR2dmgWa@E2(kn{Y!gb#lv zhKyzSSuH(HZ2MlVcUeJ4cBkjLDIxCx=6s`<>i&b++`UVd7LrVHM3%nE-JCQ>dbub1 zDRo)MT}`WkJJ*lqV<16J2hZFZsL$kJ+KiazEmdxg`N`Rl_Jr5bNDGR1cHNqqws{UU z-T!i#nKeL56IsFI>u0TinU?x;L3C=KD+)WIe(6a=fl6L zXJRZiyzHMDEg@`HmC44Jbgej+CO?6^3cl?E<9U(Wr5<834mTwOHAu>E-Q2NP&902K zF!Rm9c1u1Lol)z{GC%JnU4;a7Ie{jA=NF`YwM=LNczXAYT8lhgT|k95svqI@^K6B# zy>wG@u*o;K7{mL{J>&STkclbf;Rk}4a#~=?X8~r%QLQwqgL^&rTyoE-IJd`EOe^Y! zC{6>j@8Ed|EV^@89P>`#8%89)u%jC-@vD(gcldd~sGz@#<^Q0vU#Ex5zlEEL_T?B{(Ta$WlkN_%onf zD?)3$x6+|z7q&LVEjHBFHFmX-S+^8xkGPM+taoDiVbk{;LDUK?+WnF}|`tNKUx;JPNL}A54oVO@;4jB@MnS7<(f>$i0o`{&O}t2T|sw`c12t@ocqjpk;#-u zqjmcD?conwujk$CZHTFxi)15uhr9x(?hO(p7-azoN%6MVg8N+B0rrF)04?f#edpAc zu0c~6hh~Q$ku_y&fNFJcP%2IsoBb5K7r|NLD|z7}^F_^6y_V;-N!Ms9%IDqX&BPrI zgA2oqq*ZJgPrn7-nqoGU7Gz-=MK=@6G&LBQ@}vYbC&_NC+{z#!oaMV6;cquiBU!!8 zF(HFq>uzzypg|(BU!dWy(r$zK8(02BZMAncFWBfmP?TKAPn0+HWt-BaIldGNS7Pdg zuowBxY|o8uK;zE?*KvZn&BUD)Xqrf=q1 zP_V6ZzeD$EfmG1htORpZb}SEV{{hy=lhw8j-C50jqWN3TrWLs8BAjK>+e*Vb;tm|R_x@-v#MQ?W|tW>{GXj2Zzl?YJUN-zAUQh%C4rc5d^ zp$9`w&!lR7sdr#Rwq@DZp~1oO>0WKcYk60+It$TJ57Av#x582Tp4;AxrQfaf=qIe@ zi&n3MAl$vwoV^Xr9QgWfK>+C%`O`We53<89>UD$@JZ^2PR#MFnIN&c!_oL_~+i{2I zZeSM(F-$x~cb>gQ>yNW@F= zF1pN9Z$5gPlMg?SAKxizXYQu0pM>Wo*lhMP5vhb-y3Oc!B@uN}Qw!MvrAy!``BnYqaI+|(@U0%KGg_Y18&}D3B zDH_4Za3{t8Ck9OlZW?%+5{#>=5B5mCqPn&O#QQN&8gbko3iLu#X;}>9zSv4 zyI>PsOR3*jxHDZs+62U&=m~#2TGoo!lhE+Ebf%4&Inn+gLi;~T?CNB=k*bkEc+&EC zuqpy?OF_lP7yh0{bv})4f)Bc=gmdp619k7?)G};Kp^2`|^1(2t*2#VnS8|GbM!0ds z3NqR)MYGRs88fmj%*!PU;iff0SjUJJtzL-4WyRkclr$LrQd`j5-+VRYO%Pl0$& z{MI+}hEu4RP3|qe-guvn4OWg%jh+LT^KIJS|AbJcvJ1-SuR$pl!%J!ZLrbichjX-fwsu+4oBU;wb7>d# zldPmcc(+yCX>?t5XCaEl(9_Eo-m5ID(z3T!5x~PR+)S;QHCU5|870C}dqd7q@RevC zjI|z)(QCHIGrP85^)E700JfgEtko}fg2u6F8<(w`%;vUYW#xXm!|+R$XGs}H|12mi z5kHft)`zD?DO0_yd)=?nT0`c@m(hz(Urje{Byl2)zwLMF-FljM2tiuSgE^OR?MX6q z-QK5c_0J&F1D_xayAuGupHA4jk|91#W?1*=OQy4b5KFBXx8fXv215?%Z`9N*_5Rp; zj=Ro%I*o&QgzhAr1Cis#|5?}>T#tdaKZ+fkV{;I(jRVhRui9Yh?aJKW)7pdk)7o5C zX6ieAfRg5U|9Rw@d-{9=1rR>@u_q=l$vsUv+JBBd`zAnfNbu$VM57J_-ZAaQT)}N> zAN~kxIv3>sImX#-TB4pTlg|sXr$?;>|G>SvIy#7*orb|dwONe?T#y-G{{8#h;^HEL zSsHlg72@F-d43WP(6wWNy`Y;3=60i*|K*YV$8!4Lk^j`$mG@SQ_sfe;L$Saj_efDD J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/commands/command-index.md b/i18n/pt/docusaurus-plugin-content-docs/current/commands/command-index.md index 74a0d9e98d38e4..09fd01c7c3101f 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/commands/command-index.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/commands/command-index.md @@ -1288,6 +1288,8 @@ title: Commands by name [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md b/i18n/pt/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md index 9a392d36ecc364..3a6f378477ddc9 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/commands/theme/Web_Server.md @@ -7,6 +7,8 @@ slug: /commands/theme/Web-Server | | | --------------------------------------------------------------------------------------------------------------------------------------- | +| [](../../commands/web-event.md)
    | +| [](../../commands/web-form.md)
    | | [](../../commands-legacy/web-get-body-part.md)
    | | [](../../commands-legacy/web-get-body-part-count.md)
    | | [](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/commands/web-event.md b/i18n/pt/docusaurus-plugin-content-docs/current/commands/web-event.md new file mode 100644 index 00000000000000..6ae7c0b8030981 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/commands/web-event.md @@ -0,0 +1,97 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + + +| Parâmetro | Tipo | | Descrição | +| ---------- | ------ | :-------------------------: | ---------------------------------- | +| Resultados | Object | ← | Information on the triggered event | + + + +## Descrição + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**Resultado** + +O objeto retornado contém as propriedades abaixo: + +| Propriedade | | Tipo | Descrição | +| ----------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | | object | Additional information depending on the involved component | +| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| | row | number | Data Table component: row number | +| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | + +#### Exemplo + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +- The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +- The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## Veja também + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propriedades + +| | | +| ----------------- | --------------------------- | +| Número de comando | 1734 | +| Thread safe | ✗ | + diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/commands/web-form.md b/i18n/pt/docusaurus-plugin-content-docs/current/commands/web-form.md new file mode 100644 index 00000000000000..a23b722ea5ab4d --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + + +| Parâmetro | Tipo | | Descrição | +| ---------- | -------------------------- | :-------------------------: | --------------------------- | +| Resultados | 4D.WebForm | ← | New `Web Form` proxy object | + + + +## Descrição + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + +## Veja também + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propriedades + +| | | +| ----------------- | --------------------------- | +| Número de comando | 1735 | +| Thread safe | ✗ | + + + + diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md index 72094b45cc78fb..064b559a834bca 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -A classe `WebForm` contém funções e propriedades que permitem manipular seus componentes de webforms Qodly. Essa classe está detalhada na [documentação de Qodly](https://developer.qodly.com/docs/language/WebFormClass). +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command.
    História @@ -18,14 +18,12 @@ A classe `WebForm` contém funções e propriedades que permitem manipular seus | | | ------------------------------------------------------------------------------------------------------------------------------- | -| [](#componentname)
    | +| [](#componentname)
    | | [](#disablestate)
    | | [](#enablestate)
    | | [](#seterror)
    | | [](#setmessage)
    | | [](#setwarning)
    | -| [](#web-form)
    | -| [](#web-event)
    | ### *.componentName* @@ -33,9 +31,28 @@ A classe `WebForm` contém funções e propriedades que permitem manipular seus #### Descrição -Os componentes dos webforms são objetos que estão disponíveis diretamente como propriedades desses webforms. +The components of web pages are objects that are available directly as properties of these web pages. -Para mais informações, consulte a descrição [`.componentName` na documentação de Qodly](https://developer.qodly.com/docs/language/WebFormClass#componentname). +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. + +#### Exemplo + +```4d +shared singleton Class constructor() + + var myForm : 4D.WebForm + var component : 4D.WebFormItem + + myForm:=webForm //returns the web page as an object, each property is a component + component:=myForm.myImage //returns the myImage component of the web page + +``` + +:::info + +While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. + +::: ### .disableState() @@ -43,24 +60,24 @@ Para mais informações, consulte a descrição [`.componentName` na documentaç -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ------------------------------------------------- | -| state | string | -> | Nome do estado a ser desativado no formulário Web | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ------------------------------------------ | +| state | string | -> | Name of state to disable from the web page | #### Descrição -A função `.disableState()` desabilita a renderização da *state* na forma atual da web. +The `.disableState()` function disables the rendering of the *state* in the current web page. Essa função não faz nada se: -- o *estado* não está habilitado no momento no formulário Web, -- o *estado* não existe para o formulário Web. +- the *state* is currently not enabled in the web page, +- the *state* does not exist for the web page. Se você [enable](#enablestate) ou desativar vários estados na mesma função de usuário, todas as modificações são enviadas em simultâneo, para o cliente quando a função termina. -Para obter mais informações sobre estados de formulários da Web, consulte [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -68,24 +85,24 @@ Para obter mais informações sobre estados de formulários da Web, consulte [de -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ---------------------------------------------- | -| state | string | -> | Nome do estado a ser ativado no formulário Web | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ---------------------------------------- | +| state | string | -> | Name of state to enable on the web pages | #### Descrição -A função `.enableState()` ativa a renderização do *state* no formulário da Web atual. +The `.enableState()` function enables the rendering of the *state* in the current web page. Essa função não faz nada se: -- o *estado* já foi ativado no formulário Web, -- o *estado* não existe para o formulário Web. +- the *state* has already been enabled on the web page, +- the *state* does not exist for the web page. Se você ativar ou [desativar](#disablestate) vários estados dentro da mesma função de usuário, todas as modificações serão enviadas ao mesmo tempo, para o cliente quando a função terminar. -Para obter mais informações sobre estados de formulários da Web, consulte [developer.qodly.com](https://developer.qodly.com/docs/studio/pageLoaders/states). +For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Exemplo @@ -104,17 +121,34 @@ Function authenticationError() -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ------------------------------------------------ | -| msg | string | -> | Mensagem de erro a ser exibida no formulário Web | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ---------------------------------------- | +| msg | string | -> | Error message to display in the web page | #### Descrição -A função `.setError()` envia *msg* como uma mensagem de erro para o formulário web. +The `.setError()` function sends *msg* as an error message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". + +#### Exemplo + +```4d +shared singleton Class constructor() +exposed function myError() + +var myForm : 4D.WebForm +myForm:=web Form + +myForm.setError("My error message") + +``` + +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Para mais informações, consulte a descrição [`.setError()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormClass#seterror). +![](../assets/en/API/webformClass-pic1.png) ### .setMessage() @@ -122,68 +156,72 @@ Para mais informações, consulte a descrição [`.setError()` na documentação -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ---------------------------------------------------- | -| msg | string | -> | Mensagem informativa a ser exibida no formulário Web | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ---------------------------------------------- | +| msg | string | -> | Information message to display in the web page | #### Descrição -A função `.setMessage()` envia *msg* como uma mensagem de informação para o formulário da Web. +The `.setMessage()` function sends *msg* as an information message to the web page. -Para mais informações, consulte a descrição [`.setMessage()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormClass#setmessage). +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". -### .setWarning() - -**.setWarning**( *msg* : string) +#### Exemplo - +```4d +shared singleton Class constructor() +exposed function myMessage() -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ------------------------------------------------- | -| msg | string | -> | Mensagem de aviso a ser exibida no formulário Web | +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setMessage("My information message") -#### Descrição +``` -A função `.setWarning()` envia *msg* como uma mensagem de aviso para o formulário web. +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: -Para mais informações, consulte a descrição [`.setWarning()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormClass#setwarning). +![](../assets/en/API/webformClass-pic2.png) -## Web Form +### .setWarning() -**Web Form** : 4D.WebForm +**.setWarning**( *msg* : string) - + -| Parâmetro | Tipo | | Descrição | -| ---------- | -------------------------- | :-------------------------: | --------------------------- | -| Resultados | 4D.WebForm | <- | Novo objeto proxy `WebForm` | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ------------------------------------------ | +| msg | string | -> | Warning message to display in the web page | #### Descrição -O comando `Web Form` retorna um `4D. Objeto proxy ebForm` que permite a você interagir com o formulário web . +The `.setWarning()` function sends *msg* as a warning message to the web page. + +The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". -Para obter mais informações, consulte a [descrição do comando `webForm` na documentação de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webform). +#### Exemplo -## Web Event +```4d +shared singleton Class constructor() +exposed function myWarning() -**Web Event** : Object +var myForm : 4D.WebForm +myForm:=web Form - +myForm.setWarning("My warning message") -| Parâmetro | Tipo | | Descrição | -| ---------- | ------ | :-------------------------: | --------- | -| Resultados | object | <- | object | +``` - +If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: -#### Descrição +![](../assets/en/API/webformClass-pic3.png) -O comando `Web Event` retorna um objeto com informações sobre um evento acionado vinculado a um componente de formulário da Web. +## Veja também -Para obter mais informações, consulte a [descrição do comando `webEvent` na documentação de Qodly](https://developer.qodly.com/docs/language/WebFormClass#webevent). +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebFormItem class](../API/WebFormItemClass.md) \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md index a1058250ccbe84..4100e1bf54762e 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md @@ -3,9 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -Os objetos `4D.WebFormItem` são propriedades do objeto [`4D.WebForm`](WebFormItemClass.md) retornado pelo comando [`Web Form`](WebFormClass.md#web-form). +The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. -A classe `WebFormItem` é detalhada na [documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass). +Os objetos `4D.WebFormItem` são propriedades do objeto [`4D.WebForm`](WebFormClass.md) retornado pelo comando [`Web Form`](../commands/web-form.md). + +When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. + +For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference.
    História @@ -24,29 +28,27 @@ A classe `WebFormItem` é detalhada na [documentação Qodly](https://developer. | [](#removecssclass)
    | | [](#show)
    | -### .hide() +### .addCSSClass() -**.hide**() +**.addCSSClass**(*className* : string) - + -| Parâmetro | Tipo | | Descrição | -| --------- | ---- | :-: | -------------------------- | -| | | | Não exige nenhum parâmetro | +| Parâmetro | Tipo | | Descrição | +| --------- | ------ | :-: | ------------------------------------------------- | +| className | string | -> | Nome da classe CSS a ser adicionada ao componente | #### Descrição -A função `.hide()` oculta o component. - -Para mais informações, consulte a descrição [`.hide()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#hide). +A função `.addCSSClass` adiciona a classe especificada no *className* ao component. -### .show() +### .hide() -**.show**() +**.hide**() - + | Parâmetro | Tipo | | Descrição | | --------- | ---- | :-: | -------------------------- | @@ -56,27 +58,27 @@ Para mais informações, consulte a descrição [`.hide()` na documentação Qod #### Descrição -A função `.show()` torna o componente visível. - -Para mais informações, consulte a descrição [`.show()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#show). - -### .addCSSClass() - -**.addCSSClass**(*className* : string) +A função `.hide()` oculta o component. - +#### Exemplo -| Parâmetro | Tipo | | Descrição | -| --------- | ------ | :-: | ------------------------------------------------- | -| className | string | -> | Nome da classe CSS a ser adicionada ao componente | +To call a function that hides an image when the user clicks a button: - +1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: -#### Descrição +```4d -A função `.addCSSClass` adiciona a classe especificada no *className* ao component. +shared singleton Class constructor() +exposed Function isHidden() + var myComponent : 4D.WebFormItem + + myComponent:=Web Form.myImage + myComponent.hide() // Hide the component that has "myImage" as server reference +``` -Para mais informações, consulte a descrição [`.addCSSClass` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#addcssclass). +2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". +3. Select the Button component and add an `onclick` event to it. +4. Attach the `isHidden` function to the event. ### .removeCSSClass() @@ -94,7 +96,27 @@ Para mais informações, consulte a descrição [`.addCSSClass` na documentaçã A função `.removeCSSClass()` remove a classe especificada em *className* do componente. -Para mais informações, consulte a descrição [`.removeCSSClass()` na documentação Qodly](https://developer.qodly.com/docs/language/WebFormItemClass#removecssclass). +### .show() + +**.show**() + + + +| Parâmetro | Tipo | | Descrição | +| --------- | ---- | :-: | -------------------------- | +| | | | Não exige nenhum parâmetro | + + + +#### Descrição + +The `.show()` function makes the component visible.If the component was already visible, the function does nothing. + +## Veja também + +[Web Form](../commands/web-form.md)
    +[Web Event](../commands/web-event.md)
    +[WebForm class](WebFormClass.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png b/i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/API/webformClass-pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3de142c5af118f03c4cd7de87c95fb32c6bd55 GIT binary patch literal 4180 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 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png b/i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e2e7c50ca6976d6be0896cd3f191b16b2944f GIT binary patch literal 50241 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 J|DnN~{{`AEyBGif literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png b/i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7182a677d75a3257fe7ef1ebe2d4f74dbca3523 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png b/i18n/pt/docusaurus-plugin-content-docs/version-21/assets/en/commands/web-event4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dee994804d176bb032f8ae2e121f3e19dbf3f9d GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/command-index.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/command-index.md index 74a0d9e98d38e4..09fd01c7c3101f 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/command-index.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/command-index.md @@ -1288,6 +1288,8 @@ title: Commands by name [`WA STOP LOADING URL`](../commands-legacy/wa-stop-loading-url.md)
    [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md)
    [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md)
    +[`Web Event`](web-event.md)
    +[`Web Form`](web-form.md)
    [`WEB GET BODY PART`](../commands-legacy/web-get-body-part.md)
    [`WEB Get body part count`](../commands-legacy/web-get-body-part-count.md)
    [`WEB Get current session ID`](../commands-legacy/web-get-current-session-id.md)
    diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md index 9a392d36ecc364..3a6f378477ddc9 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/theme/Web_Server.md @@ -7,6 +7,8 @@ slug: /commands/theme/Web-Server | | | --------------------------------------------------------------------------------------------------------------------------------------- | +| [](../../commands/web-event.md)
    | +| [](../../commands/web-form.md)
    | | [](../../commands-legacy/web-get-body-part.md)
    | | [](../../commands-legacy/web-get-body-part-count.md)
    | | [](../../commands-legacy/web-get-current-session-id.md)
    | diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/web-event.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/web-event.md new file mode 100644 index 00000000000000..6ae7c0b8030981 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/web-event.md @@ -0,0 +1,97 @@ +--- +id: web-event +title: Web Event +displayed_sidebar: docs +--- + +**Web Event** : object + + + +| Parâmetro | Tipo | | Descrição | +| ---------- | ------ | :-------------------------: | ---------------------------------- | +| Resultados | Object | ← | Information on the triggered event | + + + +## Descrição + +`Web Event` returns an object with information on a triggered event linked to a web page component. + +The command must be called in the context of a web page handled by the 4D web server. + +**Resultado** + +O objeto retornado contém as propriedades abaixo: + +| Propriedade | | Tipo | Descrição | +| ----------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | +| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | +| data | | object | Additional information depending on the involved component | +| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | +| | row | number | Data Table component: row number | +| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | + +#### Exemplo + +The objective is to display/hide a help text when the user hovers over the component: + +![](../assets/en/commands/web-event1.png) + +This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). + +![](../assets/en/commands/web-event2.png) + +In this scenario: + +- The Text input component has `orderNumber` as Server side reference. + ![](../assets/en/commands/web-event3.png) +- The Text component has `helpOn_orderNumber` as Server side reference. + ![](../assets/en/commands/web-event4.png) +- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: + +```4d +shared singleton Class constructor() +exposed Function help() + + var event : Object + var myForm : 4D.WebForm + var componentRef : Text + + myForm:=web Form + event:=web Event + componentRef:=event.caller + + Case of + : (event.eventType="onmouseenter") // event is onmouseenter + myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing + // the text component with reference "helpOn_orderNumber" + : (event.eventType="onmouseleave") // event is onmouseleave + myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + + End case + +``` + +To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: + +```4d +exposed function hideOnLoad() + webForm.helpOn_orderNumber.hide() + +``` + +## Veja também + +[Web Form](web-form.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propriedades + +| | | +| ----------------- | --------------------------- | +| Número de comando | 1734 | +| Thread safe | ✗ | + diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/web-form.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/web-form.md new file mode 100644 index 00000000000000..a23b722ea5ab4d --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands/web-form.md @@ -0,0 +1,46 @@ +--- +id: web-form +title: Web Form +displayed_sidebar: docs +--- + +**Web Form** : 4D.WebForm + + + +| Parâmetro | Tipo | | Descrição | +| ---------- | -------------------------- | :-------------------------: | --------------------------- | +| Resultados | 4D.WebForm | ← | New `Web Form` proxy object | + + + +## Descrição + +The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. + +:::info + +Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. + +::: + +Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. + +The command returns `null` if it is called in a request that does not originate from Qodly Studio. + +## Veja também + +[Web Event](web-event.md)
    +[WebForm class](../API/WebFormClass.md)
    +[WebFormItem class](../API/WebFormItemClass.md) + +## Propriedades + +| | | +| ----------------- | --------------------------- | +| Número de comando | 1735 | +| Thread safe | ✗ | + + + + From 699219ccd077d3daee1426ec1ec44f60bf8d64bf Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 1 Dec 2025 11:00:51 +0100 Subject: [PATCH 62/75] fix target --- docs/Concepts/quick-tour.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Concepts/quick-tour.md b/docs/Concepts/quick-tour.md index 68fb952e598f44..5cc1d247e13bb2 100644 --- a/docs/Concepts/quick-tour.md +++ b/docs/Concepts/quick-tour.md @@ -318,7 +318,7 @@ You refer to an expression by the data type it returns. There are several expres |Col[5]|Collection element|A collection element is an expression that can be of any supported type| |$entitySel[0]|Entity|A element of an ORDA entity selection is an expression of the entity type. This kind of expression is **non-assignable**| -### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} {#assignable-vs-non-assignable-expressions} +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} An expression can simply be a literal constant, such as the number 4 or the string "Hello", or a variable like `$myButton`. It can also use operators. For example, 4 + 2 is an expression that uses the addition operator to add two numbers together and return the result 6. In any cases, these expressions are **non-assignable**, which means that you cannot assign a value to them. In 4D, expressions can be **assignable**. An expression is assignable when it can be used on the left side of an assignation. For example: From adac3471f7361217527372ff16bad7ad87f99936 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 1 Dec 2025 12:00:48 +0100 Subject: [PATCH 63/75] removed qodly cloud info --- docs/WebServer/from-qodlyscript-to-4d.md | 78 ---- docs/WebServer/qodly-studio.md | 400 ------------------ docs/commands/open-datastore.md | 48 +-- .../version-20-R10/ORDA/orda-events.md | 2 +- .../WebServer/from-qodlyscript-to-4d.md | 78 ---- .../version-20-R10/WebServer/qodly-studio.md | 400 ------------------ .../version-20-R10/commands/open-datastore.md | 48 +-- .../WebServer/from-qodlyscript-to-4d.md | 78 ---- .../version-21/WebServer/qodly-studio.md | 400 ------------------ .../version-21/commands/open-datastore.md | 48 +-- 10 files changed, 40 insertions(+), 1540 deletions(-) delete mode 100644 docs/WebServer/from-qodlyscript-to-4d.md delete mode 100644 docs/WebServer/qodly-studio.md delete mode 100644 versioned_docs/version-20-R10/WebServer/from-qodlyscript-to-4d.md delete mode 100644 versioned_docs/version-20-R10/WebServer/qodly-studio.md delete mode 100644 versioned_docs/version-21/WebServer/from-qodlyscript-to-4d.md delete mode 100644 versioned_docs/version-21/WebServer/qodly-studio.md diff --git a/docs/WebServer/from-qodlyscript-to-4d.md b/docs/WebServer/from-qodlyscript-to-4d.md deleted file mode 100644 index 471949cddac312..00000000000000 --- a/docs/WebServer/from-qodlyscript-to-4d.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -id: from-qodlyscript-to-4d -title: From QodlyScript to 4D Language ---- - -4D developers use the [Qodly Studio documentation](https://developer.qodly.com/docs/studio/overview) to learn how to design their Qodly forms in Qodly Studio. - -Code examples are provided in [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), but since QodlyScript inherits from the 4D Language, you won't be lost. Converting QodlyScript code to 4D language is easy, it only requires some adaptations. - -## Variable names - -QodlyScript only support local variables, so variables in QodlyScript examples are not prefixed with `$`. In the 4D code, make sure to **prefix variable names with `$`** so that they are identifed as local variables by 4D. - -## Symbols and keywords - -Some basic symbols, operators, and keywords differ in QodlyScript and must be adapted to the 4D Language. They are listed below: - -|QodlyScript|4D Language|Comment| -|---|---|---| -|, |;|argument separator| -|= |:=|assignment operator| -|== |=|comparison operator| -|declare|#Declare|| -|switch|Case of|| -|constructor|Class constructor|| -|extends|Class extends|| -|end|End for, End For each, End if, End case, End use, End while|| -|forEach|For each|| -|string|Text|var type| -|number|Real|var type| - -Some other items have a different case (ex: `this` vs `This`) but can be pasted directly in 4D code. - - -## Command and Constant names - -QodlyScript command and constant names are written in camel case without spaces. In addition, QodlyScript constant names start with a `k` letter. You might need to adapt these QodlyScript items to the 4D Language. - -- Usually, you will only have to simply convert names. For example, `newCollection` in QodlyScript is `New collection` in 4D Language. -- However, some commands have been renamed for a better compliance, for example `atan` and `sqrt` are QodlyScript names for `Arctan` and `Square root` commands in 4D Language. - - -### Example - -- QodlyScript code: - -```qs - declare(entitySelection : 4D.EntitySelection) - var dataClass : 4D.DataClass - var entity, duplicate : 4D.Entity - var status : object - dataClass=entitySelection.getDataClass() - forEach(entity,entitySelection) - duplicate=dataClass.new() - duplicate.fromObject(entity.toObject()) - duplicate[dataClass.getInfo().primaryKey]=null - status=duplicate.save() - end -``` - - - -- 4D Language equivalent code: - -```4d - #DECLARE ( $entitySelection : 4D.EntitySelection ) - var $dataClass : 4D.DataClass - var $entity; $duplicate : 4D.Entity - var $status : Object - $dataClass:=$entitySelection.getDataClass() - For each($entity;$entitySelection) - $duplicate:=$dataClass.new() - $duplicate.fromObject($entity.toObject()) - $duplicate[$dataClass.getInfo().primaryKey]:=Null - $status:=$duplicate.save() - End for each - -``` diff --git a/docs/WebServer/qodly-studio.md b/docs/WebServer/qodly-studio.md deleted file mode 100644 index 92713814a47185..00000000000000 --- a/docs/WebServer/qodly-studio.md +++ /dev/null @@ -1,400 +0,0 @@ ---- -id: qodly-studio -title: Qodly Studio for 4D ---- - -**Qodly Studio** is an interface builder for web applications. It provides developers with a graphical page editor to design applications running in web browsers or smartphones. It supports natively the [ORDA objects](../ORDA/overview.md). - -You can use Qodly Studio directly from your **4D environment** to build modern and sophisticated interfaces that you can easily integrate to your existing 4D projects and deploy **on premise**. - -Qodly Studio can also be used in the [**Qodly Cloud platform**](https://qodly.com), dedicated to the development of web business applications. - -Qodly Studio proposes a full-featured web UI, allowing you to: - -- create Qodly pages by placing components on a canvas -- map components to Qodly Sources -- trigger 4D code by configuring events -- and much more. - - -## Configuration - -### Requirements - -#### Browser - -Qodly Studio supports the following web browsers: - -- Chrome -- Edge -- FireFox - -The recommended resolution is 1920x1080. - -#### 4D application - -- Development: 4D v20 R2 or higher -- Deployment: 4D Server v20 R2 or higher -- Qodly Studio only works with 4D projects (binary databases are not supported). -- Web sessions (*aka* Scalable sessions) must [be enabled](sessions.md#enabling-web-sessions). -- The 4D code called by Qodly forms must be [thread-safe](preemptiveWeb.md). - - -### Enabling access to Qodly Studio - -By default, access to Qodly Studio is not granted. - -Qodly Studio is served by the [WebAdmin web server](../Admin/webAdmin.md) and displays data from 4D projects handled by the [4D web server](webServer.md). - -To enable access to Qodly Studio, you must explicitly allow it at two levels: - -* at 4D application level -* at project level - - -If one of the two levels (or both) are not enabled, access to Qodly Studio is denied (a 403 page is returned). - -#### At 4D level - -As a first security level, you need to [allow access to Qodly Studio on the WebAdmin web server](../Admin/webAdmin.md#enable-access-to-qodly-studio). This setting applies to the 4D application (4D or 4D Server) on the host machine. All projects opened with that 4D application take this setting into account. - -Keep this option unchecked if you want to make sure no access to Qodly Studio is allowed on the application. Check this option to make it possible to access Qodly Studio. However, you still need to enable it at every project level. - -Additionally, you can [configure the WebAdmin web server's HTTP/HTTPS port used](../Admin/webAdmin.md#accept-http-connections-on-localhost). - -:::note - -After any change to these settings, you must [restart the WebAdmin web server](../Admin/webAdmin.md#start-and-stop) for the new configuration to be effective. - -::: - -#### At project level - -After you have enabled access to Qodly Studio at the 4D level, you need to explicitly designate every project that can be accessed. The **Enable access to Qodly Studio** option must be enabled on the [Web Features page of the 4D application's Settings](../settings/web.md#enable-access-to-qodly-studio). - -Keep in mind that [user settings](../settings/overview.md) can be defined at several levels, and that priorities apply. - - -### Activating authentication - -Authentication on the WebAdmin web server is granted using an access key. For more details, see [Access key](../Admin/webAdmin.md#access-key). - - -### Development and deployment - -In accordance with the management of 4D projects, only the following usages are supported: - -- development with Qodly Studio must be done using **4D** (single-user). -- deployment of 4D applications powered with Qodly pages must be done using **4D Server**. - -:::warning - -You can open Qodly Studio, [debug](#using-qodly-debugger-on-4d-server) and edit Qodly pages directly on a 4D Server machine when a project is running in interpreted mode. This feature is only provided for testing and debugging purposes, for example to evaluate the application flow with actual data, or in multi-user environment. It must NOT be considered as a regular way to develop applications since it does not provide any control over concurrent accesses. - -::: - - - -## Opening Qodly Studio - -The Qodly Studio page is available when the [WebAdmin web server is running](../Admin/webAdmin.md#start-and-stop) and authentication is activated (see above). - -There are two ways to access Qodly Studio: - -* by selecting the **Qodly Studio...** menu command from the **Design** menu (4D single-user) or the **Window** menu (4D Server). -If the WebAdmin web server is already running, depending on its configuration, your default browser opens at `IPaddress:HTTPPort/studio` or `IPaddress:HTTPSPort/studio`. Otherwise, you will be prompted if you want to start the WebAdmin web server first. - -* on a browser, with the WebAdmin web server running (launched from 4D or 4D Server), enter the following address:
    - `IPaddress:HTTPPort/studio` - - or: - - `IPaddress:HTTPSPort/studio` - - For example, after launching a local web server on port 7080, type this address in your browser: - - `localhost:7080/studio` - - You will then be prompted to enter the [access key](../Admin/webAdmin.md#access-key) to access Qodly Studio. - - - -## Developing with Qodly Studio - -### Documentation - -The Qodly Studio documentation is available on the [Qodly documentation website](https://developer.qodly.com/docs/studio/overview). - -You can rely on this documentation and its associated resources for developing web applications powered by Qodly pages. However, depending on implementation stage, 4D developers will either use Qodly Studio or 4D IDE (see [Feature comparison](#feature-comparison)). - -Code examples are provided in [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), but since QodlyScript inherits from the 4D Language, you won't be lost. For more information, see the [From QodlyScript to 4D Language](from-qodlyscript-to-4d.md) page. - -:::info - -There is no direct compatibility between apps implemented with 4D and apps implemented with Qodly. - -::: - -### Feature comparison - -||Qodly Studio in 4D|Qodly Studio in Qodly Cloud platform| -|---|---|---| -|View and edit tables (dataclasses), attributes and relations|4D Structure Editor(1)|Qodly Studio Model Editor| -|Qodly pages|Qodly Studio Page Editor|Qodly Studio Page Editor| -|Desktop forms|4D IDE|*not supported*| -|Programming language|4D Language featuring ORDA|[QodlyScript](https://developer.qodly.com/docs/category/qodlyscript) featuring ORDA| -|Coding IDE|4D IDE code editor *or* VS Code with [4D-Analyzer extension](https://github.com/4d/4D-Analyzer-VSCode)
    *4D Server only*: Qodly Studio code editor (see (2))|Qodly Studio code editor| -|Debugger|4D IDE debugger
    *4D Server only*: Qodly Studio debugger (see [this paragraph](#using-qodly-debugger-on-4d-server))|Qodly Studio debugger| -|REST/Web roles and privileges|roles.json direct edit/Qodly Studio roles and privileges editor|Qodly Studio role and privileges editor| - -(1) The **Model** item is disabled in Qodly Studio.
    -(2) In 4D Server, opening 4D code with the Qodly Studio code editor is supported **for testing and debugging purposes** (see [this paragraph](#development-and-deployment)). Note that in 4D single-user, if you open some 4D code with the Qodly Studio code editor, syntax coloring is not available and a "Lsp not loaded" warning is displayed. - - -### Language - -The following commands and classes are dedicated to the server-side management of Qodly pages: - -- [`Web Form`](../API/WebFormClass.md#web-form) command: returns the Qodly page as an object. -- [`Web Event`](../API/WebFormClass.md#web-event) command: returns events triggered within Qodly page components. -- [`WebForm`](../API/WebFormClass.md) class: functions and properties to manage the rendered Qodly page. -- [`WebFormItem`](../API/WebFormItemClass.md) class: functions and properties to manage Qodly page components. - - -### Using project methods - -We recommend using class functions over project methods. Only class functions can be called from components. However, you can still use your project methods in Qodly Studio in two ways: - -- You can call your methods from class functions. -- You can directly [execute your methods](https://developer.qodly.com/docs/studio/coding#methods-and-classes) from the Qodly Explorer. - - -### Offline use - -You can develop with Qodly Studio while your computer is not connected to the internet. In this case however, the following features are not available: - -- [Templates](https://developer.qodly.com/docs/studio/pageLoaders/templates): the Template library is empty -- UI tips: they are not displayed when you click on ![alt-text](../assets/en/WebServer/tips.png) icons. - - - - -## Deployment - -### Enabling rendering - -Qodly Studio encapsulates Qodly pages, including layout, data connections, and event-driven logic, in a structured JSON file. This JSON file is processed on-the-fly by the **Qodly renderer** to serve a fully functional web page. - -:::info - -See [this page](https://developer.qodly.com/docs/studio/rendering) for detailed information on how to render Qodly pages in Qodly. - -::: - -To enable the rendering of Qodly pages, the following options must be set. - -* The 4D project's **Settings** > **Web** > **Web Features** > [**Expose as REST server**](../settings/web.md#expose-as-rest-server) option must be activated. -* The [4D web server](webServer.md) must be running. - -:::note - -[Renderer buttons](https://developer.qodly.com/docs/studio/rendering#how-to-render-a-webform) are not available if the configuration options are not activated. - -::: - -### Scope of Qodly forms - -When rendering Qodly forms in the Qodly Studio, the renderer will connect to the 4D web server through HTTP or HTTPS, depending on the settings, following the same HTTP/HTTPS connection pattern as for the [4D WebAdmin web server](../Admin/webAdmin.md#accept-http-connections-on-localhost). See also [this paragraph](#about-license-usage-for-rendering) about URL schemes and license usage. - - -Keep in mind that Qodly Studio runs through the 4D WebAdmin web server. When you use Qodly Studio as a developer, even when you preview a Qodly Page in the studio, you're using the 4D WebAdmin web server. This allows you to see dataclasses, functions and attributes that are not exposed as REST resources for example (they are greyed out). - -However, page rendering happens outside Qodly Studio, and is served by the standard 4D web server. In this situation, your web application cannot access assets that are not exposed as REST resources. See [Exposed vs non-exposed functions](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) and [Exposing tables](../REST/configuration.md#exposing-tables) for more information on how to expose assets. - - - - -### Accessing Qodly pages - -For deployment, the WebAdmin server is not necessary. End-user access to your web application made with Qodly Studio is based on the 4D REST protocol, and as such, it works as through a conventional 4D remote application. - -Your Qodly pages are available through the following url: - -``` -IP:port/$lib/renderer/?w=QodlyPageName -``` - -...where *IP:port* represents the address of the web server and *QodlyPageName* is the name of the Qodly page. - -For example: - -``` -https://www.myWebSite.com/$lib/renderer/?w=welcome -``` - -### Preview Qodly Application - -You can preview your Qodly application at any moment by selecting the **Preview Qodly Application...** command in the **Windows** menu (4D Server) or in the **Design** menu (4D single-user). - -This command launches the Qodly renderer on a local address in your default browser and displays the **start page** [defined in the Application settings](https://developer.qodly.com/docs/studio/settings#start-page) of Qodly Studio. - - - - -### Using Qodly debugger on 4D Server - -When using Qodly pages in a deployed 4D Server application (interpreted mode), you might encounter some cases where you need to debug your pages on the server, for example when a specific user configuration is required. In this case, you can attach the [Qodly Studio debugger](https://developer.qodly.com/docs/studio/debugging) to the 4D Server and then, benefit from its features when executing your Qodly pages. - -Note that in this case, the Qodly Studio debugger will display all the code executed on the server, in accordance with the [attached debugger rule on 4D Server](../Debugging/debugging-remote.md#attached-debugger). - -To attach the Qodly Studio debugger to your running 4D Server application: - -1. [Open Qodly Studio](#opening-qodly-studio) from 4D Server. - -:::note - -The project must be running in interpreted mode so that **Qodly Studio** menu item is available. - -::: - -2. In the Qodly Studio toolbar, click on the **Debug** button.
    -![qodly-debug](../assets/en/WebServer/qodly-debug.png) - -If the debug session starts successfully, a green bullet appears on the button label ![qodly-debug](../assets/en/WebServer/debug2.png) and you can use the Qodly Studio debugger. - -If the debugger is already attached to a another machine or another Qodly Studio page, an error is displayed. You have to detach it beforehand from the other location. - -To detach the Qodly Studio debugger from your running 4D Server application: - -1. Click the **Debug** button in the Qodly Studio toolbar while a debug session is active. -A warning dialog box will prompt you to confirm whether you want to detach the debugger. -2. Select **Keep in progress** to continue evaluating the code until the end of the current method or function before detaching the debugger, or **Stop** to detach the debugger immediately. - - - - -## Force login - -With Qodly Studio for 4D, the ["force login" mode](../REST/authUsers.md#force-login-mode) allows you to control the number of opened web sessions that require 4D Client licenses. You can also [logout](#logout) the user at any moment to decrement the number of retained licenses. - -### Configuration - -Make sure the ["force login" mode](../REST/authUsers.md#force-login-mode) is enabled for your 4D application in the [Roles and Privileges page](https://developer.qodly.com/docs/studio/roles/rolesPrivilegesOverview), using the **Force login** option: - -![alt-text](../assets/en/WebServer/forcelogin.png) - -You can also set this option directly in the [**roles.json** file](../ORDA/privileges.md#rolesjson-file). - -You just need then to implemented the [`authentify()`](../REST/authUsers.md#function-authentify) function in the datastore class and call it from the Qodly page. A licence will be consumed only when the user is actually logged. - - -:::note Compatibility - -When the legacy login mode ([deprecated as of 4D 20 R6](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth)) is enabled, any REST request, including the rendering of an authentication Qodly page, creates a web session on the server and gets a 4D Client license, whatever the actual result of the authentication. For more information, refer to [this blog post](https://blog.4d.com/improved-4d-client-licenses-usage-with-qodly-studio-for-4d) that tells the full story. - -::: - -#### Example - -In a simple Qodly page with login/password inputs, a "Submit" button calls the following `authentify()` function we have implemented in the DataStore class: - -```4d - -exposed Function authentify($credentials : Object) : Text - -var $salesPersons : cs.SalesPersonsSelection -var $sp : cs.SalesPersonsEntity - -$salesPersons:=ds.SalesPersons.query("identifier = :1"; $credentials.identifier) -$sp:=$salesPersons.first() - -If ($sp#Null) - If (Verify password hash($credentials.password; $sp.password)) - - Session.clearPrivileges() - Session.setPrivileges("") //guest session - - return "Authentication successful" - Else - return "Wrong password" - End if -Else - return "Wrong user" -End if -``` - -This call is accepted and as long as the authentication is not successful, `Session.setPrivileges()` is not called, thus no license is consumed. Once `Session.setPrivileges()` is called, a 4D client licence is used and any REST request is then accepted. - - - -### Logout - -When the ["force login" mode is enabled](#force-login), Qodly Studio for 4D allows you to implement a logout feature in your application. - -To logout the user, you just need to execute the **Logout** standard action from the Qodly page. In Qodly Studio, you can associate this standard action to a button for example: - -![alt-text](../assets/en/WebServer/logout.png) - -Triggering the logout action from a web user session has the following effects: - -- the current web user session loses its privileges, only [descriptive REST requests](../REST/authUsers.md#descriptive-rest-requests) are allowed, -- the associated 4D license is released, -- the `Session.storage` is kept until the web session inactivity timeout is reached (at least one hour). During this period after a logout, if the user logs in again, the same session is used and the `Session.storage` shared object is available with its current contents. - - - - -## About license usage for rendering - -In default mode when any page is rendered, or in "force login" mode when a page handling data or calling a function is rendered, you must have an available license, as rendering Qodly forms targets the project database's main web server. - -### URL Schemes - -Qodly Studio's URL scheme configuration (HTTP and HTTPS) determines how many licenses are retained when rendering Qodly forms. With the appropriate configuration, you can avoid unnecessary license retaining. - -As explained in the [configuration](#configuration) section, the WebAdmin web server provides a secured web access to Qodly Studio. On the other hand, the [renderer](#enabling-rendering) communicates with the 4D web server of the database using REST requests. As such, it behaves like a conventional 4D Client. - -If you run the renderer from the Qodly Studio and these two web servers are not reached through the same URL scheme (HTTP or HTTPS), it might lead to wrong licence counting. - -:::info - -Using different schemes might also lead to [session](sessions.md) issues, such as losing [privileges](../ORDA/privileges.md) after a page refresh. - -::: - -#### Example - -1. You run the Qodly Studio on an HTTPS URL scheme (e.g. `https://127.0.0.1:7443/studio/`) - -2. The web server of your database is started only on an HTTP port. - -![alt-text](../assets/en/WebServer/schemes.png) - -3. In Qodly Studio, you click on the **Preview** icon. You are warned that the two web servers are started on different schemes, but despite this you click on the **Confirm** button. - -![alt-text](../assets/en/WebServer/render-button.png) - -As a result, two licenses are retained. - -:::note - -You can enable/disable the display of the renderer pop over using a Qodly Studio user setting. - -::: - -### SameSite attribute - -The behavior previously described is due to the session cookie of the 4D web server. This session cookie has a `SameSite` attribute that determines if the session cookie is sent to the web server. - -If the `SameSite` attribute's value is `Strict` (default), the session cookie is not sent to the web server, so a new session is opened each time a page is rendered or refreshed. - -For more information on the `SameSite` attribute, check out [this blog post](https://blog.4d.com/get-ready-for-the-new-SameSite-and-secure-attributes-for-cookies/). - -### Recommendations - -To avoid using more licenses than necessary, we recommend doing one of the following: - -- Run the renderer on another browser tab (by entering the rendered URL of your Qodly page: `IP:port/$lib/renderer/?w=QodlyPageName`). -- Ensure the Qodly Studio and your database are reached on the same URL scheme. -- Use the `Lax` value for the [session cookie](webServerConfig.md#session-cookie-samesite) of your project database's web server. - diff --git a/docs/commands/open-datastore.md b/docs/commands/open-datastore.md index 3f568dd3d909b3..f26d204cc3be93 100644 --- a/docs/commands/open-datastore.md +++ b/docs/commands/open-datastore.md @@ -8,7 +8,8 @@ displayed_sidebar: docs |Release|Changes| |---|---| -|20 R6|Support access to Qodly instances| +|21|Qodly cloud discontinued| +|20 R6|Support access to Qodly cloud instances| |20 R4|New *passwordAlgorithm* property| |18|Added| @@ -30,12 +31,11 @@ displayed_sidebar: docs The `Open datastore` command connects the application to the remote datastore identified by the *connectionInfo* parameter and returns a matching `4D.DataStoreImplementation` object associated with the *localID* local alias. -The following remote datastores are supported by the command: +Exchanges with the remote datastore are automatically managed via REST requests. The *connectionInfo* 4D datastore must be available as a remote datastore, i.e.: -|datastore kind|Description| -|---|---| -|Remote 4D application|A 4D application available as a remote datastore, i.e.:
  • its web server is launched with http and/or https enabled,
  • its datastore is exposed to REST ([**Expose as REST server**](REST/configuration.md#starting-the-rest-server) option checked).
  • A license can be required (see note)| -|[Qodly application](https://developer.qodly.com/docs/cloud/getStarted)|A Qodly Server application that provided you with an **api endpoint** and a valid **api key** associated with a defined role. You must pass the api key in the `api-key` property of the *connectionInfo* object. You can then work with the returned datastore object, with all privileges granted to the associated role.| +- its Web Server must be launched with http and/or https enabled, +- its datastore is exposed to REST ([**Expose as REST server**](REST/configuration.md#starting-the-rest-server) option checked), +- a client license must be available if required (see note). :::note @@ -46,15 +46,14 @@ The following remote datastores are supported by the command: Pass in *connectionInfo* an object describing the remote datastore you want to connect to. It can contain the following properties (all properties are optional except *hostname*): -|Property| Type|Remote 4D application |Qodly application| -|---|---|---|---| +|Property| Type|Remote 4D application | +|---|---|---| |hostname|Text|Name or IP address of the remote database + ":" + port number (port number is mandatory)|API Endpoint of the Qodly cloud instance| -|user|Text|User name|- (ignored)| -|password|Text|User password|- (ignored)| -|idleTimeout|Integer|Inactivity session timeout (in minutes), after which the session is automatically closed by 4D. If omitted, default value is 60 (1h). The value cannot be < 60 (if a lower value is passed, the timeout is set to 60). For more information, see **Closing sessions**.|- (ignored)| -|tls|Boolean|True to use secured connection(1). If omitted, false by default. Using a secured connection is recommended whenever possible.|True to use secured connection. If omitted, false by default| -|type |Text |must be "4D Server"|- (ignored)| -|api-key|Text|- (ignored)|Api key of the Qodly cloud instance| +|user|Text|User name| +|password|Text|User password| +|idleTimeout|Integer|Inactivity session timeout (in minutes), after which the session is automatically closed by 4D. If omitted, default value is 60 (1h). The value cannot be < 60 (if a lower value is passed, the timeout is set to 60). For more information, see **Closing sessions**.| +|tls|Boolean|True to use secured connection(1). If omitted, false by default. Using a secured connection is recommended whenever possible.| +|type |Text |must be "4D Server"| (1) If `tls` is true, the HTTPS protocol is used if: @@ -119,27 +118,6 @@ Working with several remote datastores: ALERT("They are "+String($foreignStudents.Students.all().length)+" foreign students") ``` -## Example 4 - -Connection to a Qodly application: - -```4d -var $connectTo : Object:={hostname: "https://xxx-x54xxx-xx-xxxxx-8xx5-xxxxxx.xx-api.cloud.com"; tls: True} - -var $remoteDS : 4D.DataStoreImplementation -var $data : 4D.EntitySelection - -$connectTo["api-key"]:="fxxxx-xxxx-4xxx-txxx-xxxxxxxx0" //only for example purpose - //it is recommended to store the API key in a secured place (e.g. a file) - //and to load it in the code - -$remoteDS:=Open datastore($connectTo; "remoteId") -$data:=$remoteDS.item.all() - -ALERT(String($data.length)+" items have been read") - -``` - ## Error management diff --git a/versioned_docs/version-20-R10/ORDA/orda-events.md b/versioned_docs/version-20-R10/ORDA/orda-events.md index 69d761cdb242bf..0eb4602a824c67 100644 --- a/versioned_docs/version-20-R10/ORDA/orda-events.md +++ b/versioned_docs/version-20-R10/ORDA/orda-events.md @@ -106,7 +106,7 @@ This event is triggered as soon as the 4D Server / 4D engine can detect a modifi - the user sets a value on a 4D form, - the 4D code makes an assignment with the `:=` operator. The event is also triggered in case of self-assignment (`$entity.attribute:=$entity.attribute`). - in **client/server without the `local` keyword**: some 4D code that makes an assignment with the `:=` operator is [executed on the server](../commands-legacy/execute-on-server.md). -- in **client/server without the `local` keyword**, in **[Qodly application](https://developer.qodly.com/docs)** and **[remote datastore](../commands/open-datastore.md)**: the entity is received on 4D Server while calling an ORDA function (on the entity or with the entity as parameter). It means that you might have to implement a *refresh* or *preview* function on the remote application that sends an ORDA request to the server and triggers the event. +- in **client/server without the `local` keyword**, in **[Qodly application](https://developer.4d.com/qodly)** and **[remote datastore](../commands/open-datastore.md)**: the entity is received on 4D Server while calling an ORDA function (on the entity or with the entity as parameter). It means that you might have to implement a *refresh* or *preview* function on the remote application that sends an ORDA request to the server and triggers the event. - with the REST server: the value is received on the REST server with a [REST request](../REST/$method.md#methodupdate) (`$method=update`) diff --git a/versioned_docs/version-20-R10/WebServer/from-qodlyscript-to-4d.md b/versioned_docs/version-20-R10/WebServer/from-qodlyscript-to-4d.md deleted file mode 100644 index 471949cddac312..00000000000000 --- a/versioned_docs/version-20-R10/WebServer/from-qodlyscript-to-4d.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -id: from-qodlyscript-to-4d -title: From QodlyScript to 4D Language ---- - -4D developers use the [Qodly Studio documentation](https://developer.qodly.com/docs/studio/overview) to learn how to design their Qodly forms in Qodly Studio. - -Code examples are provided in [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), but since QodlyScript inherits from the 4D Language, you won't be lost. Converting QodlyScript code to 4D language is easy, it only requires some adaptations. - -## Variable names - -QodlyScript only support local variables, so variables in QodlyScript examples are not prefixed with `$`. In the 4D code, make sure to **prefix variable names with `$`** so that they are identifed as local variables by 4D. - -## Symbols and keywords - -Some basic symbols, operators, and keywords differ in QodlyScript and must be adapted to the 4D Language. They are listed below: - -|QodlyScript|4D Language|Comment| -|---|---|---| -|, |;|argument separator| -|= |:=|assignment operator| -|== |=|comparison operator| -|declare|#Declare|| -|switch|Case of|| -|constructor|Class constructor|| -|extends|Class extends|| -|end|End for, End For each, End if, End case, End use, End while|| -|forEach|For each|| -|string|Text|var type| -|number|Real|var type| - -Some other items have a different case (ex: `this` vs `This`) but can be pasted directly in 4D code. - - -## Command and Constant names - -QodlyScript command and constant names are written in camel case without spaces. In addition, QodlyScript constant names start with a `k` letter. You might need to adapt these QodlyScript items to the 4D Language. - -- Usually, you will only have to simply convert names. For example, `newCollection` in QodlyScript is `New collection` in 4D Language. -- However, some commands have been renamed for a better compliance, for example `atan` and `sqrt` are QodlyScript names for `Arctan` and `Square root` commands in 4D Language. - - -### Example - -- QodlyScript code: - -```qs - declare(entitySelection : 4D.EntitySelection) - var dataClass : 4D.DataClass - var entity, duplicate : 4D.Entity - var status : object - dataClass=entitySelection.getDataClass() - forEach(entity,entitySelection) - duplicate=dataClass.new() - duplicate.fromObject(entity.toObject()) - duplicate[dataClass.getInfo().primaryKey]=null - status=duplicate.save() - end -``` - - - -- 4D Language equivalent code: - -```4d - #DECLARE ( $entitySelection : 4D.EntitySelection ) - var $dataClass : 4D.DataClass - var $entity; $duplicate : 4D.Entity - var $status : Object - $dataClass:=$entitySelection.getDataClass() - For each($entity;$entitySelection) - $duplicate:=$dataClass.new() - $duplicate.fromObject($entity.toObject()) - $duplicate[$dataClass.getInfo().primaryKey]:=Null - $status:=$duplicate.save() - End for each - -``` diff --git a/versioned_docs/version-20-R10/WebServer/qodly-studio.md b/versioned_docs/version-20-R10/WebServer/qodly-studio.md deleted file mode 100644 index 92713814a47185..00000000000000 --- a/versioned_docs/version-20-R10/WebServer/qodly-studio.md +++ /dev/null @@ -1,400 +0,0 @@ ---- -id: qodly-studio -title: Qodly Studio for 4D ---- - -**Qodly Studio** is an interface builder for web applications. It provides developers with a graphical page editor to design applications running in web browsers or smartphones. It supports natively the [ORDA objects](../ORDA/overview.md). - -You can use Qodly Studio directly from your **4D environment** to build modern and sophisticated interfaces that you can easily integrate to your existing 4D projects and deploy **on premise**. - -Qodly Studio can also be used in the [**Qodly Cloud platform**](https://qodly.com), dedicated to the development of web business applications. - -Qodly Studio proposes a full-featured web UI, allowing you to: - -- create Qodly pages by placing components on a canvas -- map components to Qodly Sources -- trigger 4D code by configuring events -- and much more. - - -## Configuration - -### Requirements - -#### Browser - -Qodly Studio supports the following web browsers: - -- Chrome -- Edge -- FireFox - -The recommended resolution is 1920x1080. - -#### 4D application - -- Development: 4D v20 R2 or higher -- Deployment: 4D Server v20 R2 or higher -- Qodly Studio only works with 4D projects (binary databases are not supported). -- Web sessions (*aka* Scalable sessions) must [be enabled](sessions.md#enabling-web-sessions). -- The 4D code called by Qodly forms must be [thread-safe](preemptiveWeb.md). - - -### Enabling access to Qodly Studio - -By default, access to Qodly Studio is not granted. - -Qodly Studio is served by the [WebAdmin web server](../Admin/webAdmin.md) and displays data from 4D projects handled by the [4D web server](webServer.md). - -To enable access to Qodly Studio, you must explicitly allow it at two levels: - -* at 4D application level -* at project level - - -If one of the two levels (or both) are not enabled, access to Qodly Studio is denied (a 403 page is returned). - -#### At 4D level - -As a first security level, you need to [allow access to Qodly Studio on the WebAdmin web server](../Admin/webAdmin.md#enable-access-to-qodly-studio). This setting applies to the 4D application (4D or 4D Server) on the host machine. All projects opened with that 4D application take this setting into account. - -Keep this option unchecked if you want to make sure no access to Qodly Studio is allowed on the application. Check this option to make it possible to access Qodly Studio. However, you still need to enable it at every project level. - -Additionally, you can [configure the WebAdmin web server's HTTP/HTTPS port used](../Admin/webAdmin.md#accept-http-connections-on-localhost). - -:::note - -After any change to these settings, you must [restart the WebAdmin web server](../Admin/webAdmin.md#start-and-stop) for the new configuration to be effective. - -::: - -#### At project level - -After you have enabled access to Qodly Studio at the 4D level, you need to explicitly designate every project that can be accessed. The **Enable access to Qodly Studio** option must be enabled on the [Web Features page of the 4D application's Settings](../settings/web.md#enable-access-to-qodly-studio). - -Keep in mind that [user settings](../settings/overview.md) can be defined at several levels, and that priorities apply. - - -### Activating authentication - -Authentication on the WebAdmin web server is granted using an access key. For more details, see [Access key](../Admin/webAdmin.md#access-key). - - -### Development and deployment - -In accordance with the management of 4D projects, only the following usages are supported: - -- development with Qodly Studio must be done using **4D** (single-user). -- deployment of 4D applications powered with Qodly pages must be done using **4D Server**. - -:::warning - -You can open Qodly Studio, [debug](#using-qodly-debugger-on-4d-server) and edit Qodly pages directly on a 4D Server machine when a project is running in interpreted mode. This feature is only provided for testing and debugging purposes, for example to evaluate the application flow with actual data, or in multi-user environment. It must NOT be considered as a regular way to develop applications since it does not provide any control over concurrent accesses. - -::: - - - -## Opening Qodly Studio - -The Qodly Studio page is available when the [WebAdmin web server is running](../Admin/webAdmin.md#start-and-stop) and authentication is activated (see above). - -There are two ways to access Qodly Studio: - -* by selecting the **Qodly Studio...** menu command from the **Design** menu (4D single-user) or the **Window** menu (4D Server). -If the WebAdmin web server is already running, depending on its configuration, your default browser opens at `IPaddress:HTTPPort/studio` or `IPaddress:HTTPSPort/studio`. Otherwise, you will be prompted if you want to start the WebAdmin web server first. - -* on a browser, with the WebAdmin web server running (launched from 4D or 4D Server), enter the following address:
    - `IPaddress:HTTPPort/studio` - - or: - - `IPaddress:HTTPSPort/studio` - - For example, after launching a local web server on port 7080, type this address in your browser: - - `localhost:7080/studio` - - You will then be prompted to enter the [access key](../Admin/webAdmin.md#access-key) to access Qodly Studio. - - - -## Developing with Qodly Studio - -### Documentation - -The Qodly Studio documentation is available on the [Qodly documentation website](https://developer.qodly.com/docs/studio/overview). - -You can rely on this documentation and its associated resources for developing web applications powered by Qodly pages. However, depending on implementation stage, 4D developers will either use Qodly Studio or 4D IDE (see [Feature comparison](#feature-comparison)). - -Code examples are provided in [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), but since QodlyScript inherits from the 4D Language, you won't be lost. For more information, see the [From QodlyScript to 4D Language](from-qodlyscript-to-4d.md) page. - -:::info - -There is no direct compatibility between apps implemented with 4D and apps implemented with Qodly. - -::: - -### Feature comparison - -||Qodly Studio in 4D|Qodly Studio in Qodly Cloud platform| -|---|---|---| -|View and edit tables (dataclasses), attributes and relations|4D Structure Editor(1)|Qodly Studio Model Editor| -|Qodly pages|Qodly Studio Page Editor|Qodly Studio Page Editor| -|Desktop forms|4D IDE|*not supported*| -|Programming language|4D Language featuring ORDA|[QodlyScript](https://developer.qodly.com/docs/category/qodlyscript) featuring ORDA| -|Coding IDE|4D IDE code editor *or* VS Code with [4D-Analyzer extension](https://github.com/4d/4D-Analyzer-VSCode)
    *4D Server only*: Qodly Studio code editor (see (2))|Qodly Studio code editor| -|Debugger|4D IDE debugger
    *4D Server only*: Qodly Studio debugger (see [this paragraph](#using-qodly-debugger-on-4d-server))|Qodly Studio debugger| -|REST/Web roles and privileges|roles.json direct edit/Qodly Studio roles and privileges editor|Qodly Studio role and privileges editor| - -(1) The **Model** item is disabled in Qodly Studio.
    -(2) In 4D Server, opening 4D code with the Qodly Studio code editor is supported **for testing and debugging purposes** (see [this paragraph](#development-and-deployment)). Note that in 4D single-user, if you open some 4D code with the Qodly Studio code editor, syntax coloring is not available and a "Lsp not loaded" warning is displayed. - - -### Language - -The following commands and classes are dedicated to the server-side management of Qodly pages: - -- [`Web Form`](../API/WebFormClass.md#web-form) command: returns the Qodly page as an object. -- [`Web Event`](../API/WebFormClass.md#web-event) command: returns events triggered within Qodly page components. -- [`WebForm`](../API/WebFormClass.md) class: functions and properties to manage the rendered Qodly page. -- [`WebFormItem`](../API/WebFormItemClass.md) class: functions and properties to manage Qodly page components. - - -### Using project methods - -We recommend using class functions over project methods. Only class functions can be called from components. However, you can still use your project methods in Qodly Studio in two ways: - -- You can call your methods from class functions. -- You can directly [execute your methods](https://developer.qodly.com/docs/studio/coding#methods-and-classes) from the Qodly Explorer. - - -### Offline use - -You can develop with Qodly Studio while your computer is not connected to the internet. In this case however, the following features are not available: - -- [Templates](https://developer.qodly.com/docs/studio/pageLoaders/templates): the Template library is empty -- UI tips: they are not displayed when you click on ![alt-text](../assets/en/WebServer/tips.png) icons. - - - - -## Deployment - -### Enabling rendering - -Qodly Studio encapsulates Qodly pages, including layout, data connections, and event-driven logic, in a structured JSON file. This JSON file is processed on-the-fly by the **Qodly renderer** to serve a fully functional web page. - -:::info - -See [this page](https://developer.qodly.com/docs/studio/rendering) for detailed information on how to render Qodly pages in Qodly. - -::: - -To enable the rendering of Qodly pages, the following options must be set. - -* The 4D project's **Settings** > **Web** > **Web Features** > [**Expose as REST server**](../settings/web.md#expose-as-rest-server) option must be activated. -* The [4D web server](webServer.md) must be running. - -:::note - -[Renderer buttons](https://developer.qodly.com/docs/studio/rendering#how-to-render-a-webform) are not available if the configuration options are not activated. - -::: - -### Scope of Qodly forms - -When rendering Qodly forms in the Qodly Studio, the renderer will connect to the 4D web server through HTTP or HTTPS, depending on the settings, following the same HTTP/HTTPS connection pattern as for the [4D WebAdmin web server](../Admin/webAdmin.md#accept-http-connections-on-localhost). See also [this paragraph](#about-license-usage-for-rendering) about URL schemes and license usage. - - -Keep in mind that Qodly Studio runs through the 4D WebAdmin web server. When you use Qodly Studio as a developer, even when you preview a Qodly Page in the studio, you're using the 4D WebAdmin web server. This allows you to see dataclasses, functions and attributes that are not exposed as REST resources for example (they are greyed out). - -However, page rendering happens outside Qodly Studio, and is served by the standard 4D web server. In this situation, your web application cannot access assets that are not exposed as REST resources. See [Exposed vs non-exposed functions](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) and [Exposing tables](../REST/configuration.md#exposing-tables) for more information on how to expose assets. - - - - -### Accessing Qodly pages - -For deployment, the WebAdmin server is not necessary. End-user access to your web application made with Qodly Studio is based on the 4D REST protocol, and as such, it works as through a conventional 4D remote application. - -Your Qodly pages are available through the following url: - -``` -IP:port/$lib/renderer/?w=QodlyPageName -``` - -...where *IP:port* represents the address of the web server and *QodlyPageName* is the name of the Qodly page. - -For example: - -``` -https://www.myWebSite.com/$lib/renderer/?w=welcome -``` - -### Preview Qodly Application - -You can preview your Qodly application at any moment by selecting the **Preview Qodly Application...** command in the **Windows** menu (4D Server) or in the **Design** menu (4D single-user). - -This command launches the Qodly renderer on a local address in your default browser and displays the **start page** [defined in the Application settings](https://developer.qodly.com/docs/studio/settings#start-page) of Qodly Studio. - - - - -### Using Qodly debugger on 4D Server - -When using Qodly pages in a deployed 4D Server application (interpreted mode), you might encounter some cases where you need to debug your pages on the server, for example when a specific user configuration is required. In this case, you can attach the [Qodly Studio debugger](https://developer.qodly.com/docs/studio/debugging) to the 4D Server and then, benefit from its features when executing your Qodly pages. - -Note that in this case, the Qodly Studio debugger will display all the code executed on the server, in accordance with the [attached debugger rule on 4D Server](../Debugging/debugging-remote.md#attached-debugger). - -To attach the Qodly Studio debugger to your running 4D Server application: - -1. [Open Qodly Studio](#opening-qodly-studio) from 4D Server. - -:::note - -The project must be running in interpreted mode so that **Qodly Studio** menu item is available. - -::: - -2. In the Qodly Studio toolbar, click on the **Debug** button.
    -![qodly-debug](../assets/en/WebServer/qodly-debug.png) - -If the debug session starts successfully, a green bullet appears on the button label ![qodly-debug](../assets/en/WebServer/debug2.png) and you can use the Qodly Studio debugger. - -If the debugger is already attached to a another machine or another Qodly Studio page, an error is displayed. You have to detach it beforehand from the other location. - -To detach the Qodly Studio debugger from your running 4D Server application: - -1. Click the **Debug** button in the Qodly Studio toolbar while a debug session is active. -A warning dialog box will prompt you to confirm whether you want to detach the debugger. -2. Select **Keep in progress** to continue evaluating the code until the end of the current method or function before detaching the debugger, or **Stop** to detach the debugger immediately. - - - - -## Force login - -With Qodly Studio for 4D, the ["force login" mode](../REST/authUsers.md#force-login-mode) allows you to control the number of opened web sessions that require 4D Client licenses. You can also [logout](#logout) the user at any moment to decrement the number of retained licenses. - -### Configuration - -Make sure the ["force login" mode](../REST/authUsers.md#force-login-mode) is enabled for your 4D application in the [Roles and Privileges page](https://developer.qodly.com/docs/studio/roles/rolesPrivilegesOverview), using the **Force login** option: - -![alt-text](../assets/en/WebServer/forcelogin.png) - -You can also set this option directly in the [**roles.json** file](../ORDA/privileges.md#rolesjson-file). - -You just need then to implemented the [`authentify()`](../REST/authUsers.md#function-authentify) function in the datastore class and call it from the Qodly page. A licence will be consumed only when the user is actually logged. - - -:::note Compatibility - -When the legacy login mode ([deprecated as of 4D 20 R6](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth)) is enabled, any REST request, including the rendering of an authentication Qodly page, creates a web session on the server and gets a 4D Client license, whatever the actual result of the authentication. For more information, refer to [this blog post](https://blog.4d.com/improved-4d-client-licenses-usage-with-qodly-studio-for-4d) that tells the full story. - -::: - -#### Example - -In a simple Qodly page with login/password inputs, a "Submit" button calls the following `authentify()` function we have implemented in the DataStore class: - -```4d - -exposed Function authentify($credentials : Object) : Text - -var $salesPersons : cs.SalesPersonsSelection -var $sp : cs.SalesPersonsEntity - -$salesPersons:=ds.SalesPersons.query("identifier = :1"; $credentials.identifier) -$sp:=$salesPersons.first() - -If ($sp#Null) - If (Verify password hash($credentials.password; $sp.password)) - - Session.clearPrivileges() - Session.setPrivileges("") //guest session - - return "Authentication successful" - Else - return "Wrong password" - End if -Else - return "Wrong user" -End if -``` - -This call is accepted and as long as the authentication is not successful, `Session.setPrivileges()` is not called, thus no license is consumed. Once `Session.setPrivileges()` is called, a 4D client licence is used and any REST request is then accepted. - - - -### Logout - -When the ["force login" mode is enabled](#force-login), Qodly Studio for 4D allows you to implement a logout feature in your application. - -To logout the user, you just need to execute the **Logout** standard action from the Qodly page. In Qodly Studio, you can associate this standard action to a button for example: - -![alt-text](../assets/en/WebServer/logout.png) - -Triggering the logout action from a web user session has the following effects: - -- the current web user session loses its privileges, only [descriptive REST requests](../REST/authUsers.md#descriptive-rest-requests) are allowed, -- the associated 4D license is released, -- the `Session.storage` is kept until the web session inactivity timeout is reached (at least one hour). During this period after a logout, if the user logs in again, the same session is used and the `Session.storage` shared object is available with its current contents. - - - - -## About license usage for rendering - -In default mode when any page is rendered, or in "force login" mode when a page handling data or calling a function is rendered, you must have an available license, as rendering Qodly forms targets the project database's main web server. - -### URL Schemes - -Qodly Studio's URL scheme configuration (HTTP and HTTPS) determines how many licenses are retained when rendering Qodly forms. With the appropriate configuration, you can avoid unnecessary license retaining. - -As explained in the [configuration](#configuration) section, the WebAdmin web server provides a secured web access to Qodly Studio. On the other hand, the [renderer](#enabling-rendering) communicates with the 4D web server of the database using REST requests. As such, it behaves like a conventional 4D Client. - -If you run the renderer from the Qodly Studio and these two web servers are not reached through the same URL scheme (HTTP or HTTPS), it might lead to wrong licence counting. - -:::info - -Using different schemes might also lead to [session](sessions.md) issues, such as losing [privileges](../ORDA/privileges.md) after a page refresh. - -::: - -#### Example - -1. You run the Qodly Studio on an HTTPS URL scheme (e.g. `https://127.0.0.1:7443/studio/`) - -2. The web server of your database is started only on an HTTP port. - -![alt-text](../assets/en/WebServer/schemes.png) - -3. In Qodly Studio, you click on the **Preview** icon. You are warned that the two web servers are started on different schemes, but despite this you click on the **Confirm** button. - -![alt-text](../assets/en/WebServer/render-button.png) - -As a result, two licenses are retained. - -:::note - -You can enable/disable the display of the renderer pop over using a Qodly Studio user setting. - -::: - -### SameSite attribute - -The behavior previously described is due to the session cookie of the 4D web server. This session cookie has a `SameSite` attribute that determines if the session cookie is sent to the web server. - -If the `SameSite` attribute's value is `Strict` (default), the session cookie is not sent to the web server, so a new session is opened each time a page is rendered or refreshed. - -For more information on the `SameSite` attribute, check out [this blog post](https://blog.4d.com/get-ready-for-the-new-SameSite-and-secure-attributes-for-cookies/). - -### Recommendations - -To avoid using more licenses than necessary, we recommend doing one of the following: - -- Run the renderer on another browser tab (by entering the rendered URL of your Qodly page: `IP:port/$lib/renderer/?w=QodlyPageName`). -- Ensure the Qodly Studio and your database are reached on the same URL scheme. -- Use the `Lax` value for the [session cookie](webServerConfig.md#session-cookie-samesite) of your project database's web server. - diff --git a/versioned_docs/version-20-R10/commands/open-datastore.md b/versioned_docs/version-20-R10/commands/open-datastore.md index 3f568dd3d909b3..f26d204cc3be93 100644 --- a/versioned_docs/version-20-R10/commands/open-datastore.md +++ b/versioned_docs/version-20-R10/commands/open-datastore.md @@ -8,7 +8,8 @@ displayed_sidebar: docs |Release|Changes| |---|---| -|20 R6|Support access to Qodly instances| +|21|Qodly cloud discontinued| +|20 R6|Support access to Qodly cloud instances| |20 R4|New *passwordAlgorithm* property| |18|Added| @@ -30,12 +31,11 @@ displayed_sidebar: docs The `Open datastore` command connects the application to the remote datastore identified by the *connectionInfo* parameter and returns a matching `4D.DataStoreImplementation` object associated with the *localID* local alias. -The following remote datastores are supported by the command: +Exchanges with the remote datastore are automatically managed via REST requests. The *connectionInfo* 4D datastore must be available as a remote datastore, i.e.: -|datastore kind|Description| -|---|---| -|Remote 4D application|A 4D application available as a remote datastore, i.e.:
  • its web server is launched with http and/or https enabled,
  • its datastore is exposed to REST ([**Expose as REST server**](REST/configuration.md#starting-the-rest-server) option checked).
  • A license can be required (see note)| -|[Qodly application](https://developer.qodly.com/docs/cloud/getStarted)|A Qodly Server application that provided you with an **api endpoint** and a valid **api key** associated with a defined role. You must pass the api key in the `api-key` property of the *connectionInfo* object. You can then work with the returned datastore object, with all privileges granted to the associated role.| +- its Web Server must be launched with http and/or https enabled, +- its datastore is exposed to REST ([**Expose as REST server**](REST/configuration.md#starting-the-rest-server) option checked), +- a client license must be available if required (see note). :::note @@ -46,15 +46,14 @@ The following remote datastores are supported by the command: Pass in *connectionInfo* an object describing the remote datastore you want to connect to. It can contain the following properties (all properties are optional except *hostname*): -|Property| Type|Remote 4D application |Qodly application| -|---|---|---|---| +|Property| Type|Remote 4D application | +|---|---|---| |hostname|Text|Name or IP address of the remote database + ":" + port number (port number is mandatory)|API Endpoint of the Qodly cloud instance| -|user|Text|User name|- (ignored)| -|password|Text|User password|- (ignored)| -|idleTimeout|Integer|Inactivity session timeout (in minutes), after which the session is automatically closed by 4D. If omitted, default value is 60 (1h). The value cannot be < 60 (if a lower value is passed, the timeout is set to 60). For more information, see **Closing sessions**.|- (ignored)| -|tls|Boolean|True to use secured connection(1). If omitted, false by default. Using a secured connection is recommended whenever possible.|True to use secured connection. If omitted, false by default| -|type |Text |must be "4D Server"|- (ignored)| -|api-key|Text|- (ignored)|Api key of the Qodly cloud instance| +|user|Text|User name| +|password|Text|User password| +|idleTimeout|Integer|Inactivity session timeout (in minutes), after which the session is automatically closed by 4D. If omitted, default value is 60 (1h). The value cannot be < 60 (if a lower value is passed, the timeout is set to 60). For more information, see **Closing sessions**.| +|tls|Boolean|True to use secured connection(1). If omitted, false by default. Using a secured connection is recommended whenever possible.| +|type |Text |must be "4D Server"| (1) If `tls` is true, the HTTPS protocol is used if: @@ -119,27 +118,6 @@ Working with several remote datastores: ALERT("They are "+String($foreignStudents.Students.all().length)+" foreign students") ``` -## Example 4 - -Connection to a Qodly application: - -```4d -var $connectTo : Object:={hostname: "https://xxx-x54xxx-xx-xxxxx-8xx5-xxxxxx.xx-api.cloud.com"; tls: True} - -var $remoteDS : 4D.DataStoreImplementation -var $data : 4D.EntitySelection - -$connectTo["api-key"]:="fxxxx-xxxx-4xxx-txxx-xxxxxxxx0" //only for example purpose - //it is recommended to store the API key in a secured place (e.g. a file) - //and to load it in the code - -$remoteDS:=Open datastore($connectTo; "remoteId") -$data:=$remoteDS.item.all() - -ALERT(String($data.length)+" items have been read") - -``` - ## Error management diff --git a/versioned_docs/version-21/WebServer/from-qodlyscript-to-4d.md b/versioned_docs/version-21/WebServer/from-qodlyscript-to-4d.md deleted file mode 100644 index 471949cddac312..00000000000000 --- a/versioned_docs/version-21/WebServer/from-qodlyscript-to-4d.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -id: from-qodlyscript-to-4d -title: From QodlyScript to 4D Language ---- - -4D developers use the [Qodly Studio documentation](https://developer.qodly.com/docs/studio/overview) to learn how to design their Qodly forms in Qodly Studio. - -Code examples are provided in [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), but since QodlyScript inherits from the 4D Language, you won't be lost. Converting QodlyScript code to 4D language is easy, it only requires some adaptations. - -## Variable names - -QodlyScript only support local variables, so variables in QodlyScript examples are not prefixed with `$`. In the 4D code, make sure to **prefix variable names with `$`** so that they are identifed as local variables by 4D. - -## Symbols and keywords - -Some basic symbols, operators, and keywords differ in QodlyScript and must be adapted to the 4D Language. They are listed below: - -|QodlyScript|4D Language|Comment| -|---|---|---| -|, |;|argument separator| -|= |:=|assignment operator| -|== |=|comparison operator| -|declare|#Declare|| -|switch|Case of|| -|constructor|Class constructor|| -|extends|Class extends|| -|end|End for, End For each, End if, End case, End use, End while|| -|forEach|For each|| -|string|Text|var type| -|number|Real|var type| - -Some other items have a different case (ex: `this` vs `This`) but can be pasted directly in 4D code. - - -## Command and Constant names - -QodlyScript command and constant names are written in camel case without spaces. In addition, QodlyScript constant names start with a `k` letter. You might need to adapt these QodlyScript items to the 4D Language. - -- Usually, you will only have to simply convert names. For example, `newCollection` in QodlyScript is `New collection` in 4D Language. -- However, some commands have been renamed for a better compliance, for example `atan` and `sqrt` are QodlyScript names for `Arctan` and `Square root` commands in 4D Language. - - -### Example - -- QodlyScript code: - -```qs - declare(entitySelection : 4D.EntitySelection) - var dataClass : 4D.DataClass - var entity, duplicate : 4D.Entity - var status : object - dataClass=entitySelection.getDataClass() - forEach(entity,entitySelection) - duplicate=dataClass.new() - duplicate.fromObject(entity.toObject()) - duplicate[dataClass.getInfo().primaryKey]=null - status=duplicate.save() - end -``` - - - -- 4D Language equivalent code: - -```4d - #DECLARE ( $entitySelection : 4D.EntitySelection ) - var $dataClass : 4D.DataClass - var $entity; $duplicate : 4D.Entity - var $status : Object - $dataClass:=$entitySelection.getDataClass() - For each($entity;$entitySelection) - $duplicate:=$dataClass.new() - $duplicate.fromObject($entity.toObject()) - $duplicate[$dataClass.getInfo().primaryKey]:=Null - $status:=$duplicate.save() - End for each - -``` diff --git a/versioned_docs/version-21/WebServer/qodly-studio.md b/versioned_docs/version-21/WebServer/qodly-studio.md deleted file mode 100644 index 92713814a47185..00000000000000 --- a/versioned_docs/version-21/WebServer/qodly-studio.md +++ /dev/null @@ -1,400 +0,0 @@ ---- -id: qodly-studio -title: Qodly Studio for 4D ---- - -**Qodly Studio** is an interface builder for web applications. It provides developers with a graphical page editor to design applications running in web browsers or smartphones. It supports natively the [ORDA objects](../ORDA/overview.md). - -You can use Qodly Studio directly from your **4D environment** to build modern and sophisticated interfaces that you can easily integrate to your existing 4D projects and deploy **on premise**. - -Qodly Studio can also be used in the [**Qodly Cloud platform**](https://qodly.com), dedicated to the development of web business applications. - -Qodly Studio proposes a full-featured web UI, allowing you to: - -- create Qodly pages by placing components on a canvas -- map components to Qodly Sources -- trigger 4D code by configuring events -- and much more. - - -## Configuration - -### Requirements - -#### Browser - -Qodly Studio supports the following web browsers: - -- Chrome -- Edge -- FireFox - -The recommended resolution is 1920x1080. - -#### 4D application - -- Development: 4D v20 R2 or higher -- Deployment: 4D Server v20 R2 or higher -- Qodly Studio only works with 4D projects (binary databases are not supported). -- Web sessions (*aka* Scalable sessions) must [be enabled](sessions.md#enabling-web-sessions). -- The 4D code called by Qodly forms must be [thread-safe](preemptiveWeb.md). - - -### Enabling access to Qodly Studio - -By default, access to Qodly Studio is not granted. - -Qodly Studio is served by the [WebAdmin web server](../Admin/webAdmin.md) and displays data from 4D projects handled by the [4D web server](webServer.md). - -To enable access to Qodly Studio, you must explicitly allow it at two levels: - -* at 4D application level -* at project level - - -If one of the two levels (or both) are not enabled, access to Qodly Studio is denied (a 403 page is returned). - -#### At 4D level - -As a first security level, you need to [allow access to Qodly Studio on the WebAdmin web server](../Admin/webAdmin.md#enable-access-to-qodly-studio). This setting applies to the 4D application (4D or 4D Server) on the host machine. All projects opened with that 4D application take this setting into account. - -Keep this option unchecked if you want to make sure no access to Qodly Studio is allowed on the application. Check this option to make it possible to access Qodly Studio. However, you still need to enable it at every project level. - -Additionally, you can [configure the WebAdmin web server's HTTP/HTTPS port used](../Admin/webAdmin.md#accept-http-connections-on-localhost). - -:::note - -After any change to these settings, you must [restart the WebAdmin web server](../Admin/webAdmin.md#start-and-stop) for the new configuration to be effective. - -::: - -#### At project level - -After you have enabled access to Qodly Studio at the 4D level, you need to explicitly designate every project that can be accessed. The **Enable access to Qodly Studio** option must be enabled on the [Web Features page of the 4D application's Settings](../settings/web.md#enable-access-to-qodly-studio). - -Keep in mind that [user settings](../settings/overview.md) can be defined at several levels, and that priorities apply. - - -### Activating authentication - -Authentication on the WebAdmin web server is granted using an access key. For more details, see [Access key](../Admin/webAdmin.md#access-key). - - -### Development and deployment - -In accordance with the management of 4D projects, only the following usages are supported: - -- development with Qodly Studio must be done using **4D** (single-user). -- deployment of 4D applications powered with Qodly pages must be done using **4D Server**. - -:::warning - -You can open Qodly Studio, [debug](#using-qodly-debugger-on-4d-server) and edit Qodly pages directly on a 4D Server machine when a project is running in interpreted mode. This feature is only provided for testing and debugging purposes, for example to evaluate the application flow with actual data, or in multi-user environment. It must NOT be considered as a regular way to develop applications since it does not provide any control over concurrent accesses. - -::: - - - -## Opening Qodly Studio - -The Qodly Studio page is available when the [WebAdmin web server is running](../Admin/webAdmin.md#start-and-stop) and authentication is activated (see above). - -There are two ways to access Qodly Studio: - -* by selecting the **Qodly Studio...** menu command from the **Design** menu (4D single-user) or the **Window** menu (4D Server). -If the WebAdmin web server is already running, depending on its configuration, your default browser opens at `IPaddress:HTTPPort/studio` or `IPaddress:HTTPSPort/studio`. Otherwise, you will be prompted if you want to start the WebAdmin web server first. - -* on a browser, with the WebAdmin web server running (launched from 4D or 4D Server), enter the following address:
    - `IPaddress:HTTPPort/studio` - - or: - - `IPaddress:HTTPSPort/studio` - - For example, after launching a local web server on port 7080, type this address in your browser: - - `localhost:7080/studio` - - You will then be prompted to enter the [access key](../Admin/webAdmin.md#access-key) to access Qodly Studio. - - - -## Developing with Qodly Studio - -### Documentation - -The Qodly Studio documentation is available on the [Qodly documentation website](https://developer.qodly.com/docs/studio/overview). - -You can rely on this documentation and its associated resources for developing web applications powered by Qodly pages. However, depending on implementation stage, 4D developers will either use Qodly Studio or 4D IDE (see [Feature comparison](#feature-comparison)). - -Code examples are provided in [QodlyScript](https://developer.qodly.com/docs/category/qodlyscript), but since QodlyScript inherits from the 4D Language, you won't be lost. For more information, see the [From QodlyScript to 4D Language](from-qodlyscript-to-4d.md) page. - -:::info - -There is no direct compatibility between apps implemented with 4D and apps implemented with Qodly. - -::: - -### Feature comparison - -||Qodly Studio in 4D|Qodly Studio in Qodly Cloud platform| -|---|---|---| -|View and edit tables (dataclasses), attributes and relations|4D Structure Editor(1)|Qodly Studio Model Editor| -|Qodly pages|Qodly Studio Page Editor|Qodly Studio Page Editor| -|Desktop forms|4D IDE|*not supported*| -|Programming language|4D Language featuring ORDA|[QodlyScript](https://developer.qodly.com/docs/category/qodlyscript) featuring ORDA| -|Coding IDE|4D IDE code editor *or* VS Code with [4D-Analyzer extension](https://github.com/4d/4D-Analyzer-VSCode)
    *4D Server only*: Qodly Studio code editor (see (2))|Qodly Studio code editor| -|Debugger|4D IDE debugger
    *4D Server only*: Qodly Studio debugger (see [this paragraph](#using-qodly-debugger-on-4d-server))|Qodly Studio debugger| -|REST/Web roles and privileges|roles.json direct edit/Qodly Studio roles and privileges editor|Qodly Studio role and privileges editor| - -(1) The **Model** item is disabled in Qodly Studio.
    -(2) In 4D Server, opening 4D code with the Qodly Studio code editor is supported **for testing and debugging purposes** (see [this paragraph](#development-and-deployment)). Note that in 4D single-user, if you open some 4D code with the Qodly Studio code editor, syntax coloring is not available and a "Lsp not loaded" warning is displayed. - - -### Language - -The following commands and classes are dedicated to the server-side management of Qodly pages: - -- [`Web Form`](../API/WebFormClass.md#web-form) command: returns the Qodly page as an object. -- [`Web Event`](../API/WebFormClass.md#web-event) command: returns events triggered within Qodly page components. -- [`WebForm`](../API/WebFormClass.md) class: functions and properties to manage the rendered Qodly page. -- [`WebFormItem`](../API/WebFormItemClass.md) class: functions and properties to manage Qodly page components. - - -### Using project methods - -We recommend using class functions over project methods. Only class functions can be called from components. However, you can still use your project methods in Qodly Studio in two ways: - -- You can call your methods from class functions. -- You can directly [execute your methods](https://developer.qodly.com/docs/studio/coding#methods-and-classes) from the Qodly Explorer. - - -### Offline use - -You can develop with Qodly Studio while your computer is not connected to the internet. In this case however, the following features are not available: - -- [Templates](https://developer.qodly.com/docs/studio/pageLoaders/templates): the Template library is empty -- UI tips: they are not displayed when you click on ![alt-text](../assets/en/WebServer/tips.png) icons. - - - - -## Deployment - -### Enabling rendering - -Qodly Studio encapsulates Qodly pages, including layout, data connections, and event-driven logic, in a structured JSON file. This JSON file is processed on-the-fly by the **Qodly renderer** to serve a fully functional web page. - -:::info - -See [this page](https://developer.qodly.com/docs/studio/rendering) for detailed information on how to render Qodly pages in Qodly. - -::: - -To enable the rendering of Qodly pages, the following options must be set. - -* The 4D project's **Settings** > **Web** > **Web Features** > [**Expose as REST server**](../settings/web.md#expose-as-rest-server) option must be activated. -* The [4D web server](webServer.md) must be running. - -:::note - -[Renderer buttons](https://developer.qodly.com/docs/studio/rendering#how-to-render-a-webform) are not available if the configuration options are not activated. - -::: - -### Scope of Qodly forms - -When rendering Qodly forms in the Qodly Studio, the renderer will connect to the 4D web server through HTTP or HTTPS, depending on the settings, following the same HTTP/HTTPS connection pattern as for the [4D WebAdmin web server](../Admin/webAdmin.md#accept-http-connections-on-localhost). See also [this paragraph](#about-license-usage-for-rendering) about URL schemes and license usage. - - -Keep in mind that Qodly Studio runs through the 4D WebAdmin web server. When you use Qodly Studio as a developer, even when you preview a Qodly Page in the studio, you're using the 4D WebAdmin web server. This allows you to see dataclasses, functions and attributes that are not exposed as REST resources for example (they are greyed out). - -However, page rendering happens outside Qodly Studio, and is served by the standard 4D web server. In this situation, your web application cannot access assets that are not exposed as REST resources. See [Exposed vs non-exposed functions](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) and [Exposing tables](../REST/configuration.md#exposing-tables) for more information on how to expose assets. - - - - -### Accessing Qodly pages - -For deployment, the WebAdmin server is not necessary. End-user access to your web application made with Qodly Studio is based on the 4D REST protocol, and as such, it works as through a conventional 4D remote application. - -Your Qodly pages are available through the following url: - -``` -IP:port/$lib/renderer/?w=QodlyPageName -``` - -...where *IP:port* represents the address of the web server and *QodlyPageName* is the name of the Qodly page. - -For example: - -``` -https://www.myWebSite.com/$lib/renderer/?w=welcome -``` - -### Preview Qodly Application - -You can preview your Qodly application at any moment by selecting the **Preview Qodly Application...** command in the **Windows** menu (4D Server) or in the **Design** menu (4D single-user). - -This command launches the Qodly renderer on a local address in your default browser and displays the **start page** [defined in the Application settings](https://developer.qodly.com/docs/studio/settings#start-page) of Qodly Studio. - - - - -### Using Qodly debugger on 4D Server - -When using Qodly pages in a deployed 4D Server application (interpreted mode), you might encounter some cases where you need to debug your pages on the server, for example when a specific user configuration is required. In this case, you can attach the [Qodly Studio debugger](https://developer.qodly.com/docs/studio/debugging) to the 4D Server and then, benefit from its features when executing your Qodly pages. - -Note that in this case, the Qodly Studio debugger will display all the code executed on the server, in accordance with the [attached debugger rule on 4D Server](../Debugging/debugging-remote.md#attached-debugger). - -To attach the Qodly Studio debugger to your running 4D Server application: - -1. [Open Qodly Studio](#opening-qodly-studio) from 4D Server. - -:::note - -The project must be running in interpreted mode so that **Qodly Studio** menu item is available. - -::: - -2. In the Qodly Studio toolbar, click on the **Debug** button.
    -![qodly-debug](../assets/en/WebServer/qodly-debug.png) - -If the debug session starts successfully, a green bullet appears on the button label ![qodly-debug](../assets/en/WebServer/debug2.png) and you can use the Qodly Studio debugger. - -If the debugger is already attached to a another machine or another Qodly Studio page, an error is displayed. You have to detach it beforehand from the other location. - -To detach the Qodly Studio debugger from your running 4D Server application: - -1. Click the **Debug** button in the Qodly Studio toolbar while a debug session is active. -A warning dialog box will prompt you to confirm whether you want to detach the debugger. -2. Select **Keep in progress** to continue evaluating the code until the end of the current method or function before detaching the debugger, or **Stop** to detach the debugger immediately. - - - - -## Force login - -With Qodly Studio for 4D, the ["force login" mode](../REST/authUsers.md#force-login-mode) allows you to control the number of opened web sessions that require 4D Client licenses. You can also [logout](#logout) the user at any moment to decrement the number of retained licenses. - -### Configuration - -Make sure the ["force login" mode](../REST/authUsers.md#force-login-mode) is enabled for your 4D application in the [Roles and Privileges page](https://developer.qodly.com/docs/studio/roles/rolesPrivilegesOverview), using the **Force login** option: - -![alt-text](../assets/en/WebServer/forcelogin.png) - -You can also set this option directly in the [**roles.json** file](../ORDA/privileges.md#rolesjson-file). - -You just need then to implemented the [`authentify()`](../REST/authUsers.md#function-authentify) function in the datastore class and call it from the Qodly page. A licence will be consumed only when the user is actually logged. - - -:::note Compatibility - -When the legacy login mode ([deprecated as of 4D 20 R6](https://blog.4d.com/force-login-becomes-default-for-all-rest-auth)) is enabled, any REST request, including the rendering of an authentication Qodly page, creates a web session on the server and gets a 4D Client license, whatever the actual result of the authentication. For more information, refer to [this blog post](https://blog.4d.com/improved-4d-client-licenses-usage-with-qodly-studio-for-4d) that tells the full story. - -::: - -#### Example - -In a simple Qodly page with login/password inputs, a "Submit" button calls the following `authentify()` function we have implemented in the DataStore class: - -```4d - -exposed Function authentify($credentials : Object) : Text - -var $salesPersons : cs.SalesPersonsSelection -var $sp : cs.SalesPersonsEntity - -$salesPersons:=ds.SalesPersons.query("identifier = :1"; $credentials.identifier) -$sp:=$salesPersons.first() - -If ($sp#Null) - If (Verify password hash($credentials.password; $sp.password)) - - Session.clearPrivileges() - Session.setPrivileges("") //guest session - - return "Authentication successful" - Else - return "Wrong password" - End if -Else - return "Wrong user" -End if -``` - -This call is accepted and as long as the authentication is not successful, `Session.setPrivileges()` is not called, thus no license is consumed. Once `Session.setPrivileges()` is called, a 4D client licence is used and any REST request is then accepted. - - - -### Logout - -When the ["force login" mode is enabled](#force-login), Qodly Studio for 4D allows you to implement a logout feature in your application. - -To logout the user, you just need to execute the **Logout** standard action from the Qodly page. In Qodly Studio, you can associate this standard action to a button for example: - -![alt-text](../assets/en/WebServer/logout.png) - -Triggering the logout action from a web user session has the following effects: - -- the current web user session loses its privileges, only [descriptive REST requests](../REST/authUsers.md#descriptive-rest-requests) are allowed, -- the associated 4D license is released, -- the `Session.storage` is kept until the web session inactivity timeout is reached (at least one hour). During this period after a logout, if the user logs in again, the same session is used and the `Session.storage` shared object is available with its current contents. - - - - -## About license usage for rendering - -In default mode when any page is rendered, or in "force login" mode when a page handling data or calling a function is rendered, you must have an available license, as rendering Qodly forms targets the project database's main web server. - -### URL Schemes - -Qodly Studio's URL scheme configuration (HTTP and HTTPS) determines how many licenses are retained when rendering Qodly forms. With the appropriate configuration, you can avoid unnecessary license retaining. - -As explained in the [configuration](#configuration) section, the WebAdmin web server provides a secured web access to Qodly Studio. On the other hand, the [renderer](#enabling-rendering) communicates with the 4D web server of the database using REST requests. As such, it behaves like a conventional 4D Client. - -If you run the renderer from the Qodly Studio and these two web servers are not reached through the same URL scheme (HTTP or HTTPS), it might lead to wrong licence counting. - -:::info - -Using different schemes might also lead to [session](sessions.md) issues, such as losing [privileges](../ORDA/privileges.md) after a page refresh. - -::: - -#### Example - -1. You run the Qodly Studio on an HTTPS URL scheme (e.g. `https://127.0.0.1:7443/studio/`) - -2. The web server of your database is started only on an HTTP port. - -![alt-text](../assets/en/WebServer/schemes.png) - -3. In Qodly Studio, you click on the **Preview** icon. You are warned that the two web servers are started on different schemes, but despite this you click on the **Confirm** button. - -![alt-text](../assets/en/WebServer/render-button.png) - -As a result, two licenses are retained. - -:::note - -You can enable/disable the display of the renderer pop over using a Qodly Studio user setting. - -::: - -### SameSite attribute - -The behavior previously described is due to the session cookie of the 4D web server. This session cookie has a `SameSite` attribute that determines if the session cookie is sent to the web server. - -If the `SameSite` attribute's value is `Strict` (default), the session cookie is not sent to the web server, so a new session is opened each time a page is rendered or refreshed. - -For more information on the `SameSite` attribute, check out [this blog post](https://blog.4d.com/get-ready-for-the-new-SameSite-and-secure-attributes-for-cookies/). - -### Recommendations - -To avoid using more licenses than necessary, we recommend doing one of the following: - -- Run the renderer on another browser tab (by entering the rendered URL of your Qodly page: `IP:port/$lib/renderer/?w=QodlyPageName`). -- Ensure the Qodly Studio and your database are reached on the same URL scheme. -- Use the `Lax` value for the [session cookie](webServerConfig.md#session-cookie-samesite) of your project database's web server. - diff --git a/versioned_docs/version-21/commands/open-datastore.md b/versioned_docs/version-21/commands/open-datastore.md index 3f568dd3d909b3..f26d204cc3be93 100644 --- a/versioned_docs/version-21/commands/open-datastore.md +++ b/versioned_docs/version-21/commands/open-datastore.md @@ -8,7 +8,8 @@ displayed_sidebar: docs |Release|Changes| |---|---| -|20 R6|Support access to Qodly instances| +|21|Qodly cloud discontinued| +|20 R6|Support access to Qodly cloud instances| |20 R4|New *passwordAlgorithm* property| |18|Added| @@ -30,12 +31,11 @@ displayed_sidebar: docs The `Open datastore` command connects the application to the remote datastore identified by the *connectionInfo* parameter and returns a matching `4D.DataStoreImplementation` object associated with the *localID* local alias. -The following remote datastores are supported by the command: +Exchanges with the remote datastore are automatically managed via REST requests. The *connectionInfo* 4D datastore must be available as a remote datastore, i.e.: -|datastore kind|Description| -|---|---| -|Remote 4D application|A 4D application available as a remote datastore, i.e.:
  • its web server is launched with http and/or https enabled,
  • its datastore is exposed to REST ([**Expose as REST server**](REST/configuration.md#starting-the-rest-server) option checked).
  • A license can be required (see note)| -|[Qodly application](https://developer.qodly.com/docs/cloud/getStarted)|A Qodly Server application that provided you with an **api endpoint** and a valid **api key** associated with a defined role. You must pass the api key in the `api-key` property of the *connectionInfo* object. You can then work with the returned datastore object, with all privileges granted to the associated role.| +- its Web Server must be launched with http and/or https enabled, +- its datastore is exposed to REST ([**Expose as REST server**](REST/configuration.md#starting-the-rest-server) option checked), +- a client license must be available if required (see note). :::note @@ -46,15 +46,14 @@ The following remote datastores are supported by the command: Pass in *connectionInfo* an object describing the remote datastore you want to connect to. It can contain the following properties (all properties are optional except *hostname*): -|Property| Type|Remote 4D application |Qodly application| -|---|---|---|---| +|Property| Type|Remote 4D application | +|---|---|---| |hostname|Text|Name or IP address of the remote database + ":" + port number (port number is mandatory)|API Endpoint of the Qodly cloud instance| -|user|Text|User name|- (ignored)| -|password|Text|User password|- (ignored)| -|idleTimeout|Integer|Inactivity session timeout (in minutes), after which the session is automatically closed by 4D. If omitted, default value is 60 (1h). The value cannot be < 60 (if a lower value is passed, the timeout is set to 60). For more information, see **Closing sessions**.|- (ignored)| -|tls|Boolean|True to use secured connection(1). If omitted, false by default. Using a secured connection is recommended whenever possible.|True to use secured connection. If omitted, false by default| -|type |Text |must be "4D Server"|- (ignored)| -|api-key|Text|- (ignored)|Api key of the Qodly cloud instance| +|user|Text|User name| +|password|Text|User password| +|idleTimeout|Integer|Inactivity session timeout (in minutes), after which the session is automatically closed by 4D. If omitted, default value is 60 (1h). The value cannot be < 60 (if a lower value is passed, the timeout is set to 60). For more information, see **Closing sessions**.| +|tls|Boolean|True to use secured connection(1). If omitted, false by default. Using a secured connection is recommended whenever possible.| +|type |Text |must be "4D Server"| (1) If `tls` is true, the HTTPS protocol is used if: @@ -119,27 +118,6 @@ Working with several remote datastores: ALERT("They are "+String($foreignStudents.Students.all().length)+" foreign students") ``` -## Example 4 - -Connection to a Qodly application: - -```4d -var $connectTo : Object:={hostname: "https://xxx-x54xxx-xx-xxxxx-8xx5-xxxxxx.xx-api.cloud.com"; tls: True} - -var $remoteDS : 4D.DataStoreImplementation -var $data : 4D.EntitySelection - -$connectTo["api-key"]:="fxxxx-xxxx-4xxx-txxx-xxxxxxxx0" //only for example purpose - //it is recommended to store the API key in a secured place (e.g. a file) - //and to load it in the code - -$remoteDS:=Open datastore($connectTo; "remoteId") -$data:=$remoteDS.item.all() - -ALERT(String($data.length)+" items have been read") - -``` - ## Error management From 65cbb88d88bbb5612fe0c9ed10c3d22b32e9957b Mon Sep 17 00:00:00 2001 From: mouna-elmaazouzi <118451160+mouna-elmaazouzi@users.noreply.github.com> Date: Tue, 2 Dec 2025 11:45:47 +0100 Subject: [PATCH 64/75] FR - Fixes in commands-legacy (#3018) --- .../commands-legacy/query-by-attribute.md | 120 +++++++++--------- .../query-selection-by-attribute.md | 10 +- .../commands-legacy/verify-data-file.md | 82 ++++++------ .../commands-legacy/query-by-attribute.md | 120 +++++++++--------- .../query-selection-by-attribute.md | 10 +- .../commands-legacy/verify-data-file.md | 82 ++++++------ .../commands-legacy/query-by-attribute.md | 120 +++++++++--------- .../query-selection-by-attribute.md | 10 +- .../commands-legacy/verify-data-file.md | 82 ++++++------ 9 files changed, 315 insertions(+), 321 deletions(-) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/query-by-attribute.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/query-by-attribute.md index 409a9a671ef5d0..fd62c5cf520e20 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/query-by-attribute.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/query-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Paramètre | Type | | Description | | --- | --- | --- | --- | | laTable | Table | → | Table dans laquelle la sélection est créée ou Table par défaut si ce paramètre est omis | -| opConj | * | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | +| opConj | Operator | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | | champObjet | Field | → | Champ objet dont les attributs sont à utiliser pour la recherche | | cheminAttribut | Text | → | Nom ou chemin d'attribut | -| opRech | Text, * | → | Opérateur de recherche (comparateur) | +| opRech | Text, Operator | → | Opérateur de recherche (comparateur) | | valeur | Text, Number, Date, Time | → | Valeur à comparer | | * | Opérateur | → | Attente d'exécution de la recherche | @@ -65,7 +65,7 @@ La *valeur* représente ce qui va être comparé au contenu de *cheminAttribut*. Voici la structure type d'une recherche par attribut : ```4d - QUERY BY ATTRIBUTE([Table] ;[Table]ChampObjet ;"attribut1.attribut2";=;valeur) + QUERY BY ATTRIBUTE([Table] ;[Table]ChampObjet ;"attribut1.attribut2";=;valeur) ``` **Note :** La présence de l'attribut dans le champ objet est un critère implicite pour tous les opérateurs (hormis #). En revanche, pour l'opérateur #, il peut être indéfini (cf. ci-dessous). @@ -75,7 +75,7 @@ Voici la structure type d'une recherche par attribut : Lorsque vous effectuez une recherche par attribut à l'aide de l'opérateur #, vous devez prendre en considération les cas où un attribut n'est pas présent dans un enregistrement. Considérons par exemple ce qui suit : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]Animaux;"chien.nom";#;"Médor") + QUERY BY ATTRIBUTE([Personnes];[Personnes]Animaux;"chien.nom";#;"Médor") ``` Cette recherche retournera les enregistrements des personnes ayant un chien dont le nom n'est pas "Médor", mais ne retournera PAS les les enregistrements des personnes n'ayant pas de chien, ou ayant un chien sans nom, c'est-à-dire les enregistrements pour lesquels la valeur de la proprité "chien.nom" est **null**. Le concept est le suivant : le moteur de recherche ne peut pas comparer l'incomparable, à savoir les données manquantes ou inexistantes. Ainsi, les enregistrements qui ne peuvent pas être comparés aux critères de recherche sont exclus de la recherche. @@ -83,7 +83,7 @@ Cette recherche retournera les enregistrements des personnes ayant un chien dont Voici un exemple plus générique : ```4d - QUERY BY ATTRIBUTE([Table];[Table]ChampObjet;"attribut1.attribut2";#;valeur) + QUERY BY ATTRIBUTE([Table];[Table]ChampObjet;"attribut1.attribut2";#;valeur) ``` @@ -95,7 +95,7 @@ Cette recherche retournera tous les enregistrements pour lesquels *\[Table\]Cham Ce principe s'applique également aux attributs tableaux. Par exemple, la recherche retournera les enregistrements des personnes ayant une ou plusieurs adresses, mais n'ayant aucune adresse à Paris. ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";#;"paris") + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";#;"paris") ``` @@ -129,20 +129,20 @@ Les dates sont stockées dans les objets en fonction des paramètres de la base Ce paramétrage est également respecté durant les recherches, donc vous n'avez pas à vous en préoccuper si vous utilisez toujours votre base dans la même zone et si les paramètres sont identiques sur chaque machine qui accède aux données. Dans ce contexte, la recherche suivante retournera bien les enregistrements dont l'attribut Anniversaire est égal à !1973-05-22! (stocké "1973-05-21T23:00:00.00Z") : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;!1973-05-22!) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;!1973-05-22!) ``` Si vous ne souhaitez pas utiliser le paramétrage GMT, vous pouvez exécuter l'instruction suivante : ```4d - SET DATABASE PARAMETER(JSON use local time;0) + SET DATABASE PARAMETER(JSON use local time;0) ``` Attention, la portée de ce paramètre est limitée au process. Si vous exécutez cette instruction, le 1er Octobre 1965 sera stocké "1965-10-01T00:00:00.000Z" mais vous devrez fixer le même paramètre avant de lancer vos recherches : ```4d - SET DATABASE PARAMETER(JSON use local time;0) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;1976-11-27!) + SET DATABASE PARAMETER(JSON use local time;0) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;1976-11-27!) ``` ### Utilisation de la propriété virtuelle length @@ -177,8 +177,8 @@ Par exemple, avec les deux enregistrements suivants : Vous souhaitez trouver les personnes qui ont un type d'adresse "home" dans la ville "Paris". Si vous écrivez : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"Paris";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home") + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"Paris";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home") ``` ... la recherche retournera "Martin" et "Smith" car "Smith" a un élément "locations" dont le "kind" est "home" et un (autre) élément "locations" dont la "city" est "Paris". @@ -191,8 +191,8 @@ Vous souhaitez trouver les personnes qui ont un type d'adresse "home" dans la vi Avec les mêmes enregistrements que précédemment, si vous écrivez : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].city";=;"Paris";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].kind";=;"home") + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].city";=;"Paris";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].kind";=;"home") ``` ... la recherche retournera uniquement "Martin" car il a un élément "locations" dont le "kind" est "home" et dont la "city" est "Paris". La recherche ne retournera pas "Smith" car les valeurs "Paris" et "home" ne se trouvent pas dans le même élément de tableau. Reportez-vous ci-dessous pour plus d'exemples d'utilisations de cette fonctionnalité. @@ -204,10 +204,10 @@ Avec les mêmes enregistrements que précédemment, si vous écrivez : Dans cet exemple, l'attribut "age" est soit une chaîne soit un entier et nous souhaitons trouver les personnes dont l'âge est situé entre 20 et 29\. Les deux premières lignes interrogent l'attribut en tant qu'entier (>=20 et < 30) et les suivantes interrogent l'attribut en tant que chaîne (débute par "2" mais est différent de "2"). ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"age";>=;20;*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";<;30;*) - QUERY BY ATTRIBUTE([Personnes];|;[Personnes]OB_Info;"age";=;"2@";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";#;"2") //pas de * final pour lancer l'exécution + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"age";>=;20;*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";<;30;*) + QUERY BY ATTRIBUTE([Personnes];|;[Personnes]OB_Info;"age";=;"2@";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";#;"2") //pas de * final pour lancer l'exécution ``` ## Exemple 2 @@ -215,15 +215,15 @@ Dans cet exemple, l'attribut "age" est soit une chaîne soit un entier et nous s La commande **QUERY BY ATTRIBUTE** peut être utilisée pour rechercher des enregistrements dans lesquels certains attributs sont définis (ou non définis). Pour cela, vous devez utiliser un objet vide : ```4d -  //Trouver les enregistrements où l'email est défini dans le champ objet - var $undefined : Object - QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"email";#;$undefined) + //Trouver les enregistrements où l'email est défini dans le champ objet + var $undefined : Object + QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"email";#;$undefined) ``` ```4d -  //Trouver les enregistrements où le zip code n'est PAS défini dans le champ objet - var $undefined : Object - QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"zip code";=;$undefined) + //Trouver les enregistrements où le zip code n'est PAS défini dans le champ objet + var $undefined : Object + QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"zip code";=;$undefined) ``` **Note :** Cette syntaxe spécifique n'est pas prise en charge avec les attributs de type tableau. La recherche de valeurs NULL dans les attributs de tableau donne des résultats invalides. @@ -254,17 +254,17 @@ Vous voulez chercher un champ contenant des attributs tableaux. Avec les deux en ... **QUERY BY ATTRIBUTE** trouvera les personnes ayant une localisation à "paris" par cette recherche : ```4d -  //on indique l'attribut tableau avec la syntaxe "[]" - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"paris") -  //trouve "martin" et "smith" + //on indique l'attribut tableau avec la syntaxe "[]" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"paris") + //trouve "martin" et "smith" ``` **Note :** Si vous avez défini plusieurs critères sur le même attribut tableau, les critères correspondants ne s'appliqueront pas nécessairement au même élément de tableau. Dans l'exemple ci-dessous, la recherche retournera "smith" car l'attribut a un élément "locations" dont le "kind" est "home" et un élément "locations" dont le "city" est "paris", même s'il ne s'agit pas du même élément : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Field;"locations[].city";=;"paris") -  //trouve "smith" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Field;"locations[].city";=;"paris") + //trouve "smith" ``` ## Exemple 4 @@ -276,7 +276,7 @@ Cet exemple illustre l'utilisation de la propriété virtuelle "length". Votre b Vous souhaitez obtenir les enregistrements des clients qui ont deux enfants ou plus. Vous pouvez écrire : ```4d - QUERY BY ATTRIBUTE([Customer];[Customer]full_Data;"Children.length";>=;2) + QUERY BY ATTRIBUTE([Customer];[Customer]full_Data;"Children.length";>=;2) ``` ## Exemple 5 @@ -355,45 +355,45 @@ Ces exemples illustrent les différentes combinaisons de liaisons de critères d Recherche des personnes qui ont un enfant de 15 ans nommé "Betty" : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15") -  //retourne "Victor" -  - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15") -  //retourne "Sam", "Louis" et "Victor" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15") + //retourne "Victor" + + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15") + //retourne "Sam", "Louis" et "Victor" ``` Recherche des personnes qui ont un enfant de 15 ans nommé "Betty" et un enfant de 9 ans nommé "Harry" : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[b].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[b].Age";=;"9") -  //retourne "Victor" -  - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"9") -  //retourne "Sam" et "Victor" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[b].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[b].Age";=;"9") + //retourne "Victor" + + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"9") + //retourne "Sam" et "Victor" ``` Recherche des personnes qui ont un enfant de 15 ans nommé "Harry" qui a une voiture bleue en jouet (recherche dans un tableau de tableaux): ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Nom";=;"Voiture";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Coul";=;"Bleu") -  //retourne "Sam" -  - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Nom";=;"Voiture";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Coul";=;"Bleu") -  //retourne "Sam" et "Louis" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Nom";=;"Voiture";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Coul";=;"Bleu") + //retourne "Sam" + + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Nom";=;"Voiture";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Coul";=;"Bleu") + //retourne "Sam" et "Louis" ``` ## Variables et ensembles système diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/query-selection-by-attribute.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/query-selection-by-attribute.md index 89f8c3ea0a0ecd..923d4aa9384664 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/query-selection-by-attribute.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/query-selection-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Paramètre | Type | | Description | | --- | --- | --- | --- | | laTable | Table | → | Table dans laquelle la sélection est créée ou Table par défaut si ce paramètre est omis | -| opConj | * | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | +| opConj | Operator | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | | champObjet | Field | → | Champ objet dont les attributs sont à utiliser pour la recherche | | cheminAttribut | Text | → | Nom ou chemin d'attribut | -| opRecherche | *, Text | → | Opérateur de recherche (comparateur) | +| opRecherche | Text, Operator | → | Opérateur de recherche (comparateur) | | valeur | Text, Number, Date, Time | → | Valeur à comparer | | * | Opérateur | → | Attente d'exécution de la recherche | @@ -37,9 +37,9 @@ La commande **QUERY SELECTION BY ATTRIBUTE** est utile lorsqu'une recherche ne p Vous souhaitez trouver les personnes âgées entre 20 et 30 ans parmi les enregistrements sélectionnés par l'utilisateur : ```4d - USE SET("UserSet") // crée une nouvelle sélection courante - QUERY SELECTION BY ATTRIBUTE([People];[People]OB_Info;"age";>;20;*) - QUERY SELECTION BY ATTRIBUTE([People];&;[People]OB_Info;"age";<;30) //déclenche la recherche + USE SET("UserSet") // crée une nouvelle sélection courante + QUERY SELECTION BY ATTRIBUTE([People];[People]OB_Info;"age";>;20;*) + QUERY SELECTION BY ATTRIBUTE([People];&;[People]OB_Info;"age";<;30) //déclenche la recherche ``` ## Voir aussi diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/verify-data-file.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/verify-data-file.md index 3f32968a214cb7..ca87c17b217edd 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/verify-data-file.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/verify-data-file.md @@ -52,45 +52,43 @@ Pour créer l’historique, passez 0 dans *options*. Le paramètre *méthode* permet de définir une méthode de rétro-appel qui sera régulièrement appelée durant la vérification. Si vous passez une chaîne vide ou un nom de méthode non valide, ce paramètre est ignoré (aucune méthode n’est appelée). Lorsqu’elle est appelée, la méthode reçoit jusqu’à 5 paramètres en fonction des objets vérifiés et du type d’événement à l’origine de l’appel (cf. tableau des appels). Vous devez impérativement déclarer ces paramètres dans la méthode : -| $1 | Entier long | Type de message (cf. tableau) | -| -- | ----------- | ----------------------------- | -| $2 | Entier long | Type d’objet | -| $3 | Texte | Message | -| $4 | Entier long | Numéro de table | -| $5 | Entier long | Réservé | +| Paramètre | Type | Description | +| ------------ | ----------- | ----------------------------- | +| $messageType | Entier long | Type de message (cf. tableau) | +| $objectType | Entier long | Type d’objet | +| $messageText | Texte | Message | +| $table | Entier long | Numéro de table | +| $reserved | Entier long | Réservé | Le tableau suivant décrit le contenu des paramètres en fonction du type d’événement : -| **Evénement** | **$1 (Entier long)** | **$2 (** **Entier** **long)** | **$3 (Texte)** | **$4 (** **Entier** **long)** | **$5 (** **Entier** **long)** | -| ------------------------- | -------------------- | ------------------------------- | -------------- | ------------------------------- | ------------------------------- | -| Message | 1 | 0 | Progression | Pourcentage | Réservé | -| message | réalisé (0-100) | | | | | -| Vérification terminée(\*) | 2 | Type d’objet(\*\*) | Message OK | Table ou index | Réservé | -| test | numéro | | | | | -| Erreur | 3 | Type d’objet(\*\*) | Texte d’erreur | Table ou index | Réservé | -| message | numéro | | | | | -| Fin d’exécution | 4 | 0 | DONE | 0 | Réservé | -| Warning | 5 | Type d'objet(\*\*) | Texte d'erreur | Table ou index | Réservé | -| message | numéro | | | | | +| **Evénement** | **$messageType** | **$objectType** | **$messageText** | **$table** | **$reserved** | +| ------------------------- | ---------------- | ----------------- | --------------------- | ------------------------------- | ------------------------------- | +| Message | 1 | 0 | Progression message | Pourcentage réalisé (0-100) | Réservé | +| Vérification terminée(\*) | 2 | Type d’objet(\*\*)| Message OK test | Table ou index numéro | Réservé | +| Erreur | 3 | Type d’objet(\*\*)| Texte d’erreur message| Table ou index numéro | Réservé | +| Fin d’exécution | 4 | 0 | DONE | 0 | Réservé | +| Warning | 5 | Type d'objet(\*\*)| Texte d'erreur | Table ou index | Réservé | +| | | | | message | numéro | -(\*) L'événement *Vérification terminée* ($1=2) n'est jamais renvoyé lorsque le mode de vérification est Verify all. Il n'est utilisé qu'en mode Verify records ou Verify indexes. +(\*) L'événement *Vérification terminée* ($messageType=2) n'est jamais renvoyé lorsque le mode de vérification est Verify all. Il n'est utilisé qu'en mode Verify records ou Verify indexes. -(\*\*) *Type d’objet* : Lorsqu’un objet est vérifié, un message "terminé" ($1=2), erreur ($1=3) ou warning ($1=5) peut être envoyé. Le type d’objet retourné dans $2 peut être l’un des suivants : +(\*\*) *Type d’objet* : Lorsqu’un objet est vérifié, un message "terminé" ($messageType=2), erreur ($messageType=3) ou warning ($messageType=5) peut être envoyé. Le type d’objet retourné dans $objectType peut être l’un des suivants : * 0 = indéterminé * 4 = enregistrement * 8 = index * 16 = objet structure (contrôle préliminaire du fichier de données). -*Cas particulier* : lorsque $4 = 0 pour $1 = 2, 3 ou 5, le message ne concerne pas une table mais le fichier de données dans son ensemble. +*Cas particulier* : lorsque $table = 0 pour $messageType = 2, 3 ou 5, le message ne concerne pas une table mais le fichier de données dans son ensemble. -La méthode de rétro-appel doit également retourner une valeur dans $0 (Entier long), permettant de contrôler l’exécution de l’opération : +La méthode de rétro-appel doit également retourner une valeur entière *$result*, permettant de contrôler l’exécution de l’opération : -* si $0 = 0, l’opération continue normalement -* si $0 = -128, l’opération est stoppée sans erreur générée -* si $0 = autre valeur, l’opération est stoppée et la valeur passée dans $0 est retournée en tant que numéro d’erreur. Cette erreur peut être interceptée par une méthode d’appel sur erreur. +* si $result = 0, l’opération continue normalement +* si $result = -128, l’opération est stoppée sans erreur générée +* si $result = autre valeur, l’opération est stoppée et la valeur passée dans $result est retournée en tant que numéro d’erreur. Cette erreur peut être interceptée par une méthode d’appel sur erreur. -**Note :** Il n'est pas possible d'interrompre l'exécution via $0 après que l'événement *Fin d'exécution* ($4=1) a été généré. +**Note :** Il n'est pas possible d'interrompre l'exécution via $result après que l'événement *Fin d'exécution* ($1=4) a été généré. Deux tableaux facultatifs peuvent également être utilisés par la commande : @@ -109,7 +107,7 @@ Quelle que soit l'option sélectionnée, dès lors qu'un fichier d'historique es Vérification simple des données et des index : ```4d - VERIFY DATA FILE($NomStruct;$NomData;Verify indexes+Verify records;Ne pas créer d’historique;"") + VERIFY DATA FILE($NomStruct;$NomData;Verify indexes+Verify records;Ne pas créer d’historique;"") ``` ## Exemple 2 @@ -117,7 +115,7 @@ Vérification simple des données et des index : Vérification complète avec historique : ```4d - VERIFY DATA FILE($NomStruct;$NomData;Verify all;0;"") + VERIFY DATA FILE($NomStruct;$NomData;Verify all;0;"") ``` ## Exemple 3 @@ -125,7 +123,7 @@ Vérification complète avec historique : Vérification des enregistrements uniquement : ```4d - VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"") + VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"") ``` ## Exemple 4 @@ -133,10 +131,10 @@ Vérification des enregistrements uniquement : Vérification des enregistrements des tables 3 et 7 uniquement : ```4d - ARRAY LONGINT($tnumTables;2) - $tnumTables{1}:=3 - $tnumTables{2}:=7 - VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"FollowScan";$tnumTables) + ARRAY LONGINT($tnumTables;2) + $tnumTables{1}:=3 + $tnumTables{2}:=7 + VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"FollowScan";$tnumTables) ``` ## Exemple 5 @@ -144,14 +142,14 @@ Vérification des enregistrements des tables 3 et 7 uniquement : Vérification d’index spécifiques (index du champ 1 de la table 4 et index des champs 2 et 3 de la table 5) : ```4d - ARRAY LONGINT($tnumTables;0) //non utilisé mais obligatoire - ARRAY LONGINT($tindex;2;0) //2 lignes (colonnes ajoutées ensuite) - $tindex{1}{0}:=4 // numéro de table dans l’élément 0 - APPEND TO ARRAY($tindex{1};1) // numéro du 1er champ à vérifier - $tindex{2}{0}:=5 // numéro de table dans l’élément 0 - APPEND TO ARRAY($tindex{2};2) // numéro du 1er champ à vérifier - APPEND TO ARRAY($tindex{2};3) // numéro du 2e champ à vérifier - VERIFY DATA FILE($NomStruct;$NomData;Verify indexes;0;"FollowScan";$tnumTables;$tindex) + ARRAY LONGINT($tnumTables;0) //non utilisé mais obligatoire + ARRAY LONGINT($tindex;2;0) //2 lignes (colonnes ajoutées ensuite) + $tindex{1}{0}:=4 // numéro de table dans l’élément 0 + APPEND TO ARRAY($tindex{1};1) // numéro du 1er champ à vérifier + $tindex{2}{0}:=5 // numéro de table dans l’élément 0 + APPEND TO ARRAY($tindex{2};2) // numéro du 1er champ à vérifier + APPEND TO ARRAY($tindex{2};3) // numéro du 2e champ à vérifier + VERIFY DATA FILE($NomStruct;$NomData;Verify indexes;0;"FollowScan";$tnumTables;$tindex) ``` ## Exemple 6 @@ -159,8 +157,8 @@ Vérification d’index spécifiques (index du champ 1 de la table 4 et index de Vérification du fichier de données, création et affichage du fichier d'historique : ```4d - VERIFY DATA FILE(Structure file;Data file;Tout vérifier;0;"") - SHOW ON DISK(File(Fichier log vérification).platformPath) + VERIFY DATA FILE(Structure file;Data file;Tout vérifier;0;"") + SHOW ON DISK(File(Fichier log vérification).platformPath) ``` ## Variables et ensembles système diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-by-attribute.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-by-attribute.md index 409a9a671ef5d0..fd62c5cf520e20 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-by-attribute.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Paramètre | Type | | Description | | --- | --- | --- | --- | | laTable | Table | → | Table dans laquelle la sélection est créée ou Table par défaut si ce paramètre est omis | -| opConj | * | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | +| opConj | Operator | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | | champObjet | Field | → | Champ objet dont les attributs sont à utiliser pour la recherche | | cheminAttribut | Text | → | Nom ou chemin d'attribut | -| opRech | Text, * | → | Opérateur de recherche (comparateur) | +| opRech | Text, Operator | → | Opérateur de recherche (comparateur) | | valeur | Text, Number, Date, Time | → | Valeur à comparer | | * | Opérateur | → | Attente d'exécution de la recherche | @@ -65,7 +65,7 @@ La *valeur* représente ce qui va être comparé au contenu de *cheminAttribut*. Voici la structure type d'une recherche par attribut : ```4d - QUERY BY ATTRIBUTE([Table] ;[Table]ChampObjet ;"attribut1.attribut2";=;valeur) + QUERY BY ATTRIBUTE([Table] ;[Table]ChampObjet ;"attribut1.attribut2";=;valeur) ``` **Note :** La présence de l'attribut dans le champ objet est un critère implicite pour tous les opérateurs (hormis #). En revanche, pour l'opérateur #, il peut être indéfini (cf. ci-dessous). @@ -75,7 +75,7 @@ Voici la structure type d'une recherche par attribut : Lorsque vous effectuez une recherche par attribut à l'aide de l'opérateur #, vous devez prendre en considération les cas où un attribut n'est pas présent dans un enregistrement. Considérons par exemple ce qui suit : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]Animaux;"chien.nom";#;"Médor") + QUERY BY ATTRIBUTE([Personnes];[Personnes]Animaux;"chien.nom";#;"Médor") ``` Cette recherche retournera les enregistrements des personnes ayant un chien dont le nom n'est pas "Médor", mais ne retournera PAS les les enregistrements des personnes n'ayant pas de chien, ou ayant un chien sans nom, c'est-à-dire les enregistrements pour lesquels la valeur de la proprité "chien.nom" est **null**. Le concept est le suivant : le moteur de recherche ne peut pas comparer l'incomparable, à savoir les données manquantes ou inexistantes. Ainsi, les enregistrements qui ne peuvent pas être comparés aux critères de recherche sont exclus de la recherche. @@ -83,7 +83,7 @@ Cette recherche retournera les enregistrements des personnes ayant un chien dont Voici un exemple plus générique : ```4d - QUERY BY ATTRIBUTE([Table];[Table]ChampObjet;"attribut1.attribut2";#;valeur) + QUERY BY ATTRIBUTE([Table];[Table]ChampObjet;"attribut1.attribut2";#;valeur) ``` @@ -95,7 +95,7 @@ Cette recherche retournera tous les enregistrements pour lesquels *\[Table\]Cham Ce principe s'applique également aux attributs tableaux. Par exemple, la recherche retournera les enregistrements des personnes ayant une ou plusieurs adresses, mais n'ayant aucune adresse à Paris. ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";#;"paris") + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";#;"paris") ``` @@ -129,20 +129,20 @@ Les dates sont stockées dans les objets en fonction des paramètres de la base Ce paramétrage est également respecté durant les recherches, donc vous n'avez pas à vous en préoccuper si vous utilisez toujours votre base dans la même zone et si les paramètres sont identiques sur chaque machine qui accède aux données. Dans ce contexte, la recherche suivante retournera bien les enregistrements dont l'attribut Anniversaire est égal à !1973-05-22! (stocké "1973-05-21T23:00:00.00Z") : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;!1973-05-22!) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;!1973-05-22!) ``` Si vous ne souhaitez pas utiliser le paramétrage GMT, vous pouvez exécuter l'instruction suivante : ```4d - SET DATABASE PARAMETER(JSON use local time;0) + SET DATABASE PARAMETER(JSON use local time;0) ``` Attention, la portée de ce paramètre est limitée au process. Si vous exécutez cette instruction, le 1er Octobre 1965 sera stocké "1965-10-01T00:00:00.000Z" mais vous devrez fixer le même paramètre avant de lancer vos recherches : ```4d - SET DATABASE PARAMETER(JSON use local time;0) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;1976-11-27!) + SET DATABASE PARAMETER(JSON use local time;0) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;1976-11-27!) ``` ### Utilisation de la propriété virtuelle length @@ -177,8 +177,8 @@ Par exemple, avec les deux enregistrements suivants : Vous souhaitez trouver les personnes qui ont un type d'adresse "home" dans la ville "Paris". Si vous écrivez : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"Paris";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home") + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"Paris";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home") ``` ... la recherche retournera "Martin" et "Smith" car "Smith" a un élément "locations" dont le "kind" est "home" et un (autre) élément "locations" dont la "city" est "Paris". @@ -191,8 +191,8 @@ Vous souhaitez trouver les personnes qui ont un type d'adresse "home" dans la vi Avec les mêmes enregistrements que précédemment, si vous écrivez : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].city";=;"Paris";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].kind";=;"home") + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].city";=;"Paris";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].kind";=;"home") ``` ... la recherche retournera uniquement "Martin" car il a un élément "locations" dont le "kind" est "home" et dont la "city" est "Paris". La recherche ne retournera pas "Smith" car les valeurs "Paris" et "home" ne se trouvent pas dans le même élément de tableau. Reportez-vous ci-dessous pour plus d'exemples d'utilisations de cette fonctionnalité. @@ -204,10 +204,10 @@ Avec les mêmes enregistrements que précédemment, si vous écrivez : Dans cet exemple, l'attribut "age" est soit une chaîne soit un entier et nous souhaitons trouver les personnes dont l'âge est situé entre 20 et 29\. Les deux premières lignes interrogent l'attribut en tant qu'entier (>=20 et < 30) et les suivantes interrogent l'attribut en tant que chaîne (débute par "2" mais est différent de "2"). ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"age";>=;20;*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";<;30;*) - QUERY BY ATTRIBUTE([Personnes];|;[Personnes]OB_Info;"age";=;"2@";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";#;"2") //pas de * final pour lancer l'exécution + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"age";>=;20;*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";<;30;*) + QUERY BY ATTRIBUTE([Personnes];|;[Personnes]OB_Info;"age";=;"2@";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";#;"2") //pas de * final pour lancer l'exécution ``` ## Exemple 2 @@ -215,15 +215,15 @@ Dans cet exemple, l'attribut "age" est soit une chaîne soit un entier et nous s La commande **QUERY BY ATTRIBUTE** peut être utilisée pour rechercher des enregistrements dans lesquels certains attributs sont définis (ou non définis). Pour cela, vous devez utiliser un objet vide : ```4d -  //Trouver les enregistrements où l'email est défini dans le champ objet - var $undefined : Object - QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"email";#;$undefined) + //Trouver les enregistrements où l'email est défini dans le champ objet + var $undefined : Object + QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"email";#;$undefined) ``` ```4d -  //Trouver les enregistrements où le zip code n'est PAS défini dans le champ objet - var $undefined : Object - QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"zip code";=;$undefined) + //Trouver les enregistrements où le zip code n'est PAS défini dans le champ objet + var $undefined : Object + QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"zip code";=;$undefined) ``` **Note :** Cette syntaxe spécifique n'est pas prise en charge avec les attributs de type tableau. La recherche de valeurs NULL dans les attributs de tableau donne des résultats invalides. @@ -254,17 +254,17 @@ Vous voulez chercher un champ contenant des attributs tableaux. Avec les deux en ... **QUERY BY ATTRIBUTE** trouvera les personnes ayant une localisation à "paris" par cette recherche : ```4d -  //on indique l'attribut tableau avec la syntaxe "[]" - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"paris") -  //trouve "martin" et "smith" + //on indique l'attribut tableau avec la syntaxe "[]" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"paris") + //trouve "martin" et "smith" ``` **Note :** Si vous avez défini plusieurs critères sur le même attribut tableau, les critères correspondants ne s'appliqueront pas nécessairement au même élément de tableau. Dans l'exemple ci-dessous, la recherche retournera "smith" car l'attribut a un élément "locations" dont le "kind" est "home" et un élément "locations" dont le "city" est "paris", même s'il ne s'agit pas du même élément : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Field;"locations[].city";=;"paris") -  //trouve "smith" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Field;"locations[].city";=;"paris") + //trouve "smith" ``` ## Exemple 4 @@ -276,7 +276,7 @@ Cet exemple illustre l'utilisation de la propriété virtuelle "length". Votre b Vous souhaitez obtenir les enregistrements des clients qui ont deux enfants ou plus. Vous pouvez écrire : ```4d - QUERY BY ATTRIBUTE([Customer];[Customer]full_Data;"Children.length";>=;2) + QUERY BY ATTRIBUTE([Customer];[Customer]full_Data;"Children.length";>=;2) ``` ## Exemple 5 @@ -355,45 +355,45 @@ Ces exemples illustrent les différentes combinaisons de liaisons de critères d Recherche des personnes qui ont un enfant de 15 ans nommé "Betty" : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15") -  //retourne "Victor" -  - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15") -  //retourne "Sam", "Louis" et "Victor" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15") + //retourne "Victor" + + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15") + //retourne "Sam", "Louis" et "Victor" ``` Recherche des personnes qui ont un enfant de 15 ans nommé "Betty" et un enfant de 9 ans nommé "Harry" : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[b].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[b].Age";=;"9") -  //retourne "Victor" -  - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"9") -  //retourne "Sam" et "Victor" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[b].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[b].Age";=;"9") + //retourne "Victor" + + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"9") + //retourne "Sam" et "Victor" ``` Recherche des personnes qui ont un enfant de 15 ans nommé "Harry" qui a une voiture bleue en jouet (recherche dans un tableau de tableaux): ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Nom";=;"Voiture";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Coul";=;"Bleu") -  //retourne "Sam" -  - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Nom";=;"Voiture";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Coul";=;"Bleu") -  //retourne "Sam" et "Louis" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Nom";=;"Voiture";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Coul";=;"Bleu") + //retourne "Sam" + + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Nom";=;"Voiture";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Coul";=;"Bleu") + //retourne "Sam" et "Louis" ``` ## Variables et ensembles système diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-selection-by-attribute.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-selection-by-attribute.md index 89f8c3ea0a0ecd..923d4aa9384664 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-selection-by-attribute.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/query-selection-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Paramètre | Type | | Description | | --- | --- | --- | --- | | laTable | Table | → | Table dans laquelle la sélection est créée ou Table par défaut si ce paramètre est omis | -| opConj | * | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | +| opConj | Operator | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | | champObjet | Field | → | Champ objet dont les attributs sont à utiliser pour la recherche | | cheminAttribut | Text | → | Nom ou chemin d'attribut | -| opRecherche | *, Text | → | Opérateur de recherche (comparateur) | +| opRecherche | Text, Operator | → | Opérateur de recherche (comparateur) | | valeur | Text, Number, Date, Time | → | Valeur à comparer | | * | Opérateur | → | Attente d'exécution de la recherche | @@ -37,9 +37,9 @@ La commande **QUERY SELECTION BY ATTRIBUTE** est utile lorsqu'une recherche ne p Vous souhaitez trouver les personnes âgées entre 20 et 30 ans parmi les enregistrements sélectionnés par l'utilisateur : ```4d - USE SET("UserSet") // crée une nouvelle sélection courante - QUERY SELECTION BY ATTRIBUTE([People];[People]OB_Info;"age";>;20;*) - QUERY SELECTION BY ATTRIBUTE([People];&;[People]OB_Info;"age";<;30) //déclenche la recherche + USE SET("UserSet") // crée une nouvelle sélection courante + QUERY SELECTION BY ATTRIBUTE([People];[People]OB_Info;"age";>;20;*) + QUERY SELECTION BY ATTRIBUTE([People];&;[People]OB_Info;"age";<;30) //déclenche la recherche ``` ## Voir aussi diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/verify-data-file.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/verify-data-file.md index 3f32968a214cb7..ca87c17b217edd 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/verify-data-file.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands-legacy/verify-data-file.md @@ -52,45 +52,43 @@ Pour créer l’historique, passez 0 dans *options*. Le paramètre *méthode* permet de définir une méthode de rétro-appel qui sera régulièrement appelée durant la vérification. Si vous passez une chaîne vide ou un nom de méthode non valide, ce paramètre est ignoré (aucune méthode n’est appelée). Lorsqu’elle est appelée, la méthode reçoit jusqu’à 5 paramètres en fonction des objets vérifiés et du type d’événement à l’origine de l’appel (cf. tableau des appels). Vous devez impérativement déclarer ces paramètres dans la méthode : -| $1 | Entier long | Type de message (cf. tableau) | -| -- | ----------- | ----------------------------- | -| $2 | Entier long | Type d’objet | -| $3 | Texte | Message | -| $4 | Entier long | Numéro de table | -| $5 | Entier long | Réservé | +| Paramètre | Type | Description | +| ------------ | ----------- | ----------------------------- | +| $messageType | Entier long | Type de message (cf. tableau) | +| $objectType | Entier long | Type d’objet | +| $messageText | Texte | Message | +| $table | Entier long | Numéro de table | +| $reserved | Entier long | Réservé | Le tableau suivant décrit le contenu des paramètres en fonction du type d’événement : -| **Evénement** | **$1 (Entier long)** | **$2 (** **Entier** **long)** | **$3 (Texte)** | **$4 (** **Entier** **long)** | **$5 (** **Entier** **long)** | -| ------------------------- | -------------------- | ------------------------------- | -------------- | ------------------------------- | ------------------------------- | -| Message | 1 | 0 | Progression | Pourcentage | Réservé | -| message | réalisé (0-100) | | | | | -| Vérification terminée(\*) | 2 | Type d’objet(\*\*) | Message OK | Table ou index | Réservé | -| test | numéro | | | | | -| Erreur | 3 | Type d’objet(\*\*) | Texte d’erreur | Table ou index | Réservé | -| message | numéro | | | | | -| Fin d’exécution | 4 | 0 | DONE | 0 | Réservé | -| Warning | 5 | Type d'objet(\*\*) | Texte d'erreur | Table ou index | Réservé | -| message | numéro | | | | | +| **Evénement** | **$messageType** | **$objectType** | **$messageText** | **$table** | **$reserved** | +| ------------------------- | ---------------- | ----------------- | --------------------- | ------------------------------- | ------------------------------- | +| Message | 1 | 0 | Progression message | Pourcentage réalisé (0-100) | Réservé | +| Vérification terminée(\*) | 2 | Type d’objet(\*\*)| Message OK test | Table ou index numéro | Réservé | +| Erreur | 3 | Type d’objet(\*\*)| Texte d’erreur message| Table ou index numéro | Réservé | +| Fin d’exécution | 4 | 0 | DONE | 0 | Réservé | +| Warning | 5 | Type d'objet(\*\*)| Texte d'erreur | Table ou index | Réservé | +| | | | | message | numéro | -(\*) L'événement *Vérification terminée* ($1=2) n'est jamais renvoyé lorsque le mode de vérification est Verify all. Il n'est utilisé qu'en mode Verify records ou Verify indexes. +(\*) L'événement *Vérification terminée* ($messageType=2) n'est jamais renvoyé lorsque le mode de vérification est Verify all. Il n'est utilisé qu'en mode Verify records ou Verify indexes. -(\*\*) *Type d’objet* : Lorsqu’un objet est vérifié, un message "terminé" ($1=2), erreur ($1=3) ou warning ($1=5) peut être envoyé. Le type d’objet retourné dans $2 peut être l’un des suivants : +(\*\*) *Type d’objet* : Lorsqu’un objet est vérifié, un message "terminé" ($messageType=2), erreur ($messageType=3) ou warning ($messageType=5) peut être envoyé. Le type d’objet retourné dans $objectType peut être l’un des suivants : * 0 = indéterminé * 4 = enregistrement * 8 = index * 16 = objet structure (contrôle préliminaire du fichier de données). -*Cas particulier* : lorsque $4 = 0 pour $1 = 2, 3 ou 5, le message ne concerne pas une table mais le fichier de données dans son ensemble. +*Cas particulier* : lorsque $table = 0 pour $messageType = 2, 3 ou 5, le message ne concerne pas une table mais le fichier de données dans son ensemble. -La méthode de rétro-appel doit également retourner une valeur dans $0 (Entier long), permettant de contrôler l’exécution de l’opération : +La méthode de rétro-appel doit également retourner une valeur entière *$result*, permettant de contrôler l’exécution de l’opération : -* si $0 = 0, l’opération continue normalement -* si $0 = -128, l’opération est stoppée sans erreur générée -* si $0 = autre valeur, l’opération est stoppée et la valeur passée dans $0 est retournée en tant que numéro d’erreur. Cette erreur peut être interceptée par une méthode d’appel sur erreur. +* si $result = 0, l’opération continue normalement +* si $result = -128, l’opération est stoppée sans erreur générée +* si $result = autre valeur, l’opération est stoppée et la valeur passée dans $result est retournée en tant que numéro d’erreur. Cette erreur peut être interceptée par une méthode d’appel sur erreur. -**Note :** Il n'est pas possible d'interrompre l'exécution via $0 après que l'événement *Fin d'exécution* ($4=1) a été généré. +**Note :** Il n'est pas possible d'interrompre l'exécution via $result après que l'événement *Fin d'exécution* ($1=4) a été généré. Deux tableaux facultatifs peuvent également être utilisés par la commande : @@ -109,7 +107,7 @@ Quelle que soit l'option sélectionnée, dès lors qu'un fichier d'historique es Vérification simple des données et des index : ```4d - VERIFY DATA FILE($NomStruct;$NomData;Verify indexes+Verify records;Ne pas créer d’historique;"") + VERIFY DATA FILE($NomStruct;$NomData;Verify indexes+Verify records;Ne pas créer d’historique;"") ``` ## Exemple 2 @@ -117,7 +115,7 @@ Vérification simple des données et des index : Vérification complète avec historique : ```4d - VERIFY DATA FILE($NomStruct;$NomData;Verify all;0;"") + VERIFY DATA FILE($NomStruct;$NomData;Verify all;0;"") ``` ## Exemple 3 @@ -125,7 +123,7 @@ Vérification complète avec historique : Vérification des enregistrements uniquement : ```4d - VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"") + VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"") ``` ## Exemple 4 @@ -133,10 +131,10 @@ Vérification des enregistrements uniquement : Vérification des enregistrements des tables 3 et 7 uniquement : ```4d - ARRAY LONGINT($tnumTables;2) - $tnumTables{1}:=3 - $tnumTables{2}:=7 - VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"FollowScan";$tnumTables) + ARRAY LONGINT($tnumTables;2) + $tnumTables{1}:=3 + $tnumTables{2}:=7 + VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"FollowScan";$tnumTables) ``` ## Exemple 5 @@ -144,14 +142,14 @@ Vérification des enregistrements des tables 3 et 7 uniquement : Vérification d’index spécifiques (index du champ 1 de la table 4 et index des champs 2 et 3 de la table 5) : ```4d - ARRAY LONGINT($tnumTables;0) //non utilisé mais obligatoire - ARRAY LONGINT($tindex;2;0) //2 lignes (colonnes ajoutées ensuite) - $tindex{1}{0}:=4 // numéro de table dans l’élément 0 - APPEND TO ARRAY($tindex{1};1) // numéro du 1er champ à vérifier - $tindex{2}{0}:=5 // numéro de table dans l’élément 0 - APPEND TO ARRAY($tindex{2};2) // numéro du 1er champ à vérifier - APPEND TO ARRAY($tindex{2};3) // numéro du 2e champ à vérifier - VERIFY DATA FILE($NomStruct;$NomData;Verify indexes;0;"FollowScan";$tnumTables;$tindex) + ARRAY LONGINT($tnumTables;0) //non utilisé mais obligatoire + ARRAY LONGINT($tindex;2;0) //2 lignes (colonnes ajoutées ensuite) + $tindex{1}{0}:=4 // numéro de table dans l’élément 0 + APPEND TO ARRAY($tindex{1};1) // numéro du 1er champ à vérifier + $tindex{2}{0}:=5 // numéro de table dans l’élément 0 + APPEND TO ARRAY($tindex{2};2) // numéro du 1er champ à vérifier + APPEND TO ARRAY($tindex{2};3) // numéro du 2e champ à vérifier + VERIFY DATA FILE($NomStruct;$NomData;Verify indexes;0;"FollowScan";$tnumTables;$tindex) ``` ## Exemple 6 @@ -159,8 +157,8 @@ Vérification d’index spécifiques (index du champ 1 de la table 4 et index de Vérification du fichier de données, création et affichage du fichier d'historique : ```4d - VERIFY DATA FILE(Structure file;Data file;Tout vérifier;0;"") - SHOW ON DISK(File(Fichier log vérification).platformPath) + VERIFY DATA FILE(Structure file;Data file;Tout vérifier;0;"") + SHOW ON DISK(File(Fichier log vérification).platformPath) ``` ## Variables et ensembles système diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/query-by-attribute.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/query-by-attribute.md index 409a9a671ef5d0..fd62c5cf520e20 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/query-by-attribute.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/query-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Paramètre | Type | | Description | | --- | --- | --- | --- | | laTable | Table | → | Table dans laquelle la sélection est créée ou Table par défaut si ce paramètre est omis | -| opConj | * | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | +| opConj | Operator | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | | champObjet | Field | → | Champ objet dont les attributs sont à utiliser pour la recherche | | cheminAttribut | Text | → | Nom ou chemin d'attribut | -| opRech | Text, * | → | Opérateur de recherche (comparateur) | +| opRech | Text, Operator | → | Opérateur de recherche (comparateur) | | valeur | Text, Number, Date, Time | → | Valeur à comparer | | * | Opérateur | → | Attente d'exécution de la recherche | @@ -65,7 +65,7 @@ La *valeur* représente ce qui va être comparé au contenu de *cheminAttribut*. Voici la structure type d'une recherche par attribut : ```4d - QUERY BY ATTRIBUTE([Table] ;[Table]ChampObjet ;"attribut1.attribut2";=;valeur) + QUERY BY ATTRIBUTE([Table] ;[Table]ChampObjet ;"attribut1.attribut2";=;valeur) ``` **Note :** La présence de l'attribut dans le champ objet est un critère implicite pour tous les opérateurs (hormis #). En revanche, pour l'opérateur #, il peut être indéfini (cf. ci-dessous). @@ -75,7 +75,7 @@ Voici la structure type d'une recherche par attribut : Lorsque vous effectuez une recherche par attribut à l'aide de l'opérateur #, vous devez prendre en considération les cas où un attribut n'est pas présent dans un enregistrement. Considérons par exemple ce qui suit : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]Animaux;"chien.nom";#;"Médor") + QUERY BY ATTRIBUTE([Personnes];[Personnes]Animaux;"chien.nom";#;"Médor") ``` Cette recherche retournera les enregistrements des personnes ayant un chien dont le nom n'est pas "Médor", mais ne retournera PAS les les enregistrements des personnes n'ayant pas de chien, ou ayant un chien sans nom, c'est-à-dire les enregistrements pour lesquels la valeur de la proprité "chien.nom" est **null**. Le concept est le suivant : le moteur de recherche ne peut pas comparer l'incomparable, à savoir les données manquantes ou inexistantes. Ainsi, les enregistrements qui ne peuvent pas être comparés aux critères de recherche sont exclus de la recherche. @@ -83,7 +83,7 @@ Cette recherche retournera les enregistrements des personnes ayant un chien dont Voici un exemple plus générique : ```4d - QUERY BY ATTRIBUTE([Table];[Table]ChampObjet;"attribut1.attribut2";#;valeur) + QUERY BY ATTRIBUTE([Table];[Table]ChampObjet;"attribut1.attribut2";#;valeur) ``` @@ -95,7 +95,7 @@ Cette recherche retournera tous les enregistrements pour lesquels *\[Table\]Cham Ce principe s'applique également aux attributs tableaux. Par exemple, la recherche retournera les enregistrements des personnes ayant une ou plusieurs adresses, mais n'ayant aucune adresse à Paris. ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";#;"paris") + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";#;"paris") ``` @@ -129,20 +129,20 @@ Les dates sont stockées dans les objets en fonction des paramètres de la base Ce paramétrage est également respecté durant les recherches, donc vous n'avez pas à vous en préoccuper si vous utilisez toujours votre base dans la même zone et si les paramètres sont identiques sur chaque machine qui accède aux données. Dans ce contexte, la recherche suivante retournera bien les enregistrements dont l'attribut Anniversaire est égal à !1973-05-22! (stocké "1973-05-21T23:00:00.00Z") : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;!1973-05-22!) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;!1973-05-22!) ``` Si vous ne souhaitez pas utiliser le paramétrage GMT, vous pouvez exécuter l'instruction suivante : ```4d - SET DATABASE PARAMETER(JSON use local time;0) + SET DATABASE PARAMETER(JSON use local time;0) ``` Attention, la portée de ce paramètre est limitée au process. Si vous exécutez cette instruction, le 1er Octobre 1965 sera stocké "1965-10-01T00:00:00.000Z" mais vous devrez fixer le même paramètre avant de lancer vos recherches : ```4d - SET DATABASE PARAMETER(JSON use local time;0) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;1976-11-27!) + SET DATABASE PARAMETER(JSON use local time;0) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"Anniversaire";=;1976-11-27!) ``` ### Utilisation de la propriété virtuelle length @@ -177,8 +177,8 @@ Par exemple, avec les deux enregistrements suivants : Vous souhaitez trouver les personnes qui ont un type d'adresse "home" dans la ville "Paris". Si vous écrivez : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"Paris";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home") + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"Paris";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home") ``` ... la recherche retournera "Martin" et "Smith" car "Smith" a un élément "locations" dont le "kind" est "home" et un (autre) élément "locations" dont la "city" est "Paris". @@ -191,8 +191,8 @@ Vous souhaitez trouver les personnes qui ont un type d'adresse "home" dans la vi Avec les mêmes enregistrements que précédemment, si vous écrivez : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].city";=;"Paris";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].kind";=;"home") + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].city";=;"Paris";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[a].kind";=;"home") ``` ... la recherche retournera uniquement "Martin" car il a un élément "locations" dont le "kind" est "home" et dont la "city" est "Paris". La recherche ne retournera pas "Smith" car les valeurs "Paris" et "home" ne se trouvent pas dans le même élément de tableau. Reportez-vous ci-dessous pour plus d'exemples d'utilisations de cette fonctionnalité. @@ -204,10 +204,10 @@ Avec les mêmes enregistrements que précédemment, si vous écrivez : Dans cet exemple, l'attribut "age" est soit une chaîne soit un entier et nous souhaitons trouver les personnes dont l'âge est situé entre 20 et 29\. Les deux premières lignes interrogent l'attribut en tant qu'entier (>=20 et < 30) et les suivantes interrogent l'attribut en tant que chaîne (débute par "2" mais est différent de "2"). ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"age";>=;20;*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";<;30;*) - QUERY BY ATTRIBUTE([Personnes];|;[Personnes]OB_Info;"age";=;"2@";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";#;"2") //pas de * final pour lancer l'exécution + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Info;"age";>=;20;*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";<;30;*) + QUERY BY ATTRIBUTE([Personnes];|;[Personnes]OB_Info;"age";=;"2@";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Info;"age";#;"2") //pas de * final pour lancer l'exécution ``` ## Exemple 2 @@ -215,15 +215,15 @@ Dans cet exemple, l'attribut "age" est soit une chaîne soit un entier et nous s La commande **QUERY BY ATTRIBUTE** peut être utilisée pour rechercher des enregistrements dans lesquels certains attributs sont définis (ou non définis). Pour cela, vous devez utiliser un objet vide : ```4d -  //Trouver les enregistrements où l'email est défini dans le champ objet - var $undefined : Object - QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"email";#;$undefined) + //Trouver les enregistrements où l'email est défini dans le champ objet + var $undefined : Object + QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"email";#;$undefined) ``` ```4d -  //Trouver les enregistrements où le zip code n'est PAS défini dans le champ objet - var $undefined : Object - QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"zip code";=;$undefined) + //Trouver les enregistrements où le zip code n'est PAS défini dans le champ objet + var $undefined : Object + QUERY BY ATTRIBUTE([Personnes];[Personnes]Info;"zip code";=;$undefined) ``` **Note :** Cette syntaxe spécifique n'est pas prise en charge avec les attributs de type tableau. La recherche de valeurs NULL dans les attributs de tableau donne des résultats invalides. @@ -254,17 +254,17 @@ Vous voulez chercher un champ contenant des attributs tableaux. Avec les deux en ... **QUERY BY ATTRIBUTE** trouvera les personnes ayant une localisation à "paris" par cette recherche : ```4d -  //on indique l'attribut tableau avec la syntaxe "[]" - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"paris") -  //trouve "martin" et "smith" + //on indique l'attribut tableau avec la syntaxe "[]" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].city";=;"paris") + //trouve "martin" et "smith" ``` **Note :** Si vous avez défini plusieurs critères sur le même attribut tableau, les critères correspondants ne s'appliqueront pas nécessairement au même élément de tableau. Dans l'exemple ci-dessous, la recherche retournera "smith" car l'attribut a un élément "locations" dont le "kind" est "home" et un élément "locations" dont le "city" est "paris", même s'il ne s'agit pas du même élément : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Field;"locations[].city";=;"paris") -  //trouve "smith" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OB_Field;"locations[].kind";=;"home";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OB_Field;"locations[].city";=;"paris") + //trouve "smith" ``` ## Exemple 4 @@ -276,7 +276,7 @@ Cet exemple illustre l'utilisation de la propriété virtuelle "length". Votre b Vous souhaitez obtenir les enregistrements des clients qui ont deux enfants ou plus. Vous pouvez écrire : ```4d - QUERY BY ATTRIBUTE([Customer];[Customer]full_Data;"Children.length";>=;2) + QUERY BY ATTRIBUTE([Customer];[Customer]full_Data;"Children.length";>=;2) ``` ## Exemple 5 @@ -355,45 +355,45 @@ Ces exemples illustrent les différentes combinaisons de liaisons de critères d Recherche des personnes qui ont un enfant de 15 ans nommé "Betty" : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15") -  //retourne "Victor" -  - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15") -  //retourne "Sam", "Louis" et "Victor" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15") + //retourne "Victor" + + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15") + //retourne "Sam", "Louis" et "Victor" ``` Recherche des personnes qui ont un enfant de 15 ans nommé "Betty" et un enfant de 9 ans nommé "Harry" : ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[b].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[b].Age";=;"9") -  //retourne "Victor" -  - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"9") -  //retourne "Sam" et "Victor" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[b].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[b].Age";=;"9") + //retourne "Victor" + + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Betty";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"9") + //retourne "Sam" et "Victor" ``` Recherche des personnes qui ont un enfant de 15 ans nommé "Harry" qui a une voiture bleue en jouet (recherche dans un tableau de tableaux): ```4d - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Nom";=;"Voiture";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Coul";=;"Bleu") -  //retourne "Sam" -  - QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Nom";=;"Voiture";*) - QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Coul";=;"Bleu") -  //retourne "Sam" et "Louis" + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[a].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Nom";=;"Voiture";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[a].Jouets[b].Coul";=;"Bleu") + //retourne "Sam" + + QUERY BY ATTRIBUTE([Personnes];[Personnes]OBField;"Enfants[].Nom";=;"Harry";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Age";=;"15";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Nom";=;"Voiture";*) + QUERY BY ATTRIBUTE([Personnes];&;[Personnes]OBField;"Enfants[].Jouets[].Coul";=;"Bleu") + //retourne "Sam" et "Louis" ``` ## Variables et ensembles système diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/query-selection-by-attribute.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/query-selection-by-attribute.md index 89f8c3ea0a0ecd..923d4aa9384664 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/query-selection-by-attribute.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/query-selection-by-attribute.md @@ -10,10 +10,10 @@ displayed_sidebar: docs | Paramètre | Type | | Description | | --- | --- | --- | --- | | laTable | Table | → | Table dans laquelle la sélection est créée ou Table par défaut si ce paramètre est omis | -| opConj | * | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | +| opConj | Operator | → | Opérateur à utiliser pour combiner plusieurs requêtes (le cas échéant) | | champObjet | Field | → | Champ objet dont les attributs sont à utiliser pour la recherche | | cheminAttribut | Text | → | Nom ou chemin d'attribut | -| opRecherche | *, Text | → | Opérateur de recherche (comparateur) | +| opRecherche | Text, Operator | → | Opérateur de recherche (comparateur) | | valeur | Text, Number, Date, Time | → | Valeur à comparer | | * | Opérateur | → | Attente d'exécution de la recherche | @@ -37,9 +37,9 @@ La commande **QUERY SELECTION BY ATTRIBUTE** est utile lorsqu'une recherche ne p Vous souhaitez trouver les personnes âgées entre 20 et 30 ans parmi les enregistrements sélectionnés par l'utilisateur : ```4d - USE SET("UserSet") // crée une nouvelle sélection courante - QUERY SELECTION BY ATTRIBUTE([People];[People]OB_Info;"age";>;20;*) - QUERY SELECTION BY ATTRIBUTE([People];&;[People]OB_Info;"age";<;30) //déclenche la recherche + USE SET("UserSet") // crée une nouvelle sélection courante + QUERY SELECTION BY ATTRIBUTE([People];[People]OB_Info;"age";>;20;*) + QUERY SELECTION BY ATTRIBUTE([People];&;[People]OB_Info;"age";<;30) //déclenche la recherche ``` ## Voir aussi diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/verify-data-file.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/verify-data-file.md index 3f32968a214cb7..ca87c17b217edd 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/verify-data-file.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/verify-data-file.md @@ -52,45 +52,43 @@ Pour créer l’historique, passez 0 dans *options*. Le paramètre *méthode* permet de définir une méthode de rétro-appel qui sera régulièrement appelée durant la vérification. Si vous passez une chaîne vide ou un nom de méthode non valide, ce paramètre est ignoré (aucune méthode n’est appelée). Lorsqu’elle est appelée, la méthode reçoit jusqu’à 5 paramètres en fonction des objets vérifiés et du type d’événement à l’origine de l’appel (cf. tableau des appels). Vous devez impérativement déclarer ces paramètres dans la méthode : -| $1 | Entier long | Type de message (cf. tableau) | -| -- | ----------- | ----------------------------- | -| $2 | Entier long | Type d’objet | -| $3 | Texte | Message | -| $4 | Entier long | Numéro de table | -| $5 | Entier long | Réservé | +| Paramètre | Type | Description | +| ------------ | ----------- | ----------------------------- | +| $messageType | Entier long | Type de message (cf. tableau) | +| $objectType | Entier long | Type d’objet | +| $messageText | Texte | Message | +| $table | Entier long | Numéro de table | +| $reserved | Entier long | Réservé | Le tableau suivant décrit le contenu des paramètres en fonction du type d’événement : -| **Evénement** | **$1 (Entier long)** | **$2 (** **Entier** **long)** | **$3 (Texte)** | **$4 (** **Entier** **long)** | **$5 (** **Entier** **long)** | -| ------------------------- | -------------------- | ------------------------------- | -------------- | ------------------------------- | ------------------------------- | -| Message | 1 | 0 | Progression | Pourcentage | Réservé | -| message | réalisé (0-100) | | | | | -| Vérification terminée(\*) | 2 | Type d’objet(\*\*) | Message OK | Table ou index | Réservé | -| test | numéro | | | | | -| Erreur | 3 | Type d’objet(\*\*) | Texte d’erreur | Table ou index | Réservé | -| message | numéro | | | | | -| Fin d’exécution | 4 | 0 | DONE | 0 | Réservé | -| Warning | 5 | Type d'objet(\*\*) | Texte d'erreur | Table ou index | Réservé | -| message | numéro | | | | | +| **Evénement** | **$messageType** | **$objectType** | **$messageText** | **$table** | **$reserved** | +| ------------------------- | ---------------- | ----------------- | --------------------- | ------------------------------- | ------------------------------- | +| Message | 1 | 0 | Progression message | Pourcentage réalisé (0-100) | Réservé | +| Vérification terminée(\*) | 2 | Type d’objet(\*\*)| Message OK test | Table ou index numéro | Réservé | +| Erreur | 3 | Type d’objet(\*\*)| Texte d’erreur message| Table ou index numéro | Réservé | +| Fin d’exécution | 4 | 0 | DONE | 0 | Réservé | +| Warning | 5 | Type d'objet(\*\*)| Texte d'erreur | Table ou index | Réservé | +| | | | | message | numéro | -(\*) L'événement *Vérification terminée* ($1=2) n'est jamais renvoyé lorsque le mode de vérification est Verify all. Il n'est utilisé qu'en mode Verify records ou Verify indexes. +(\*) L'événement *Vérification terminée* ($messageType=2) n'est jamais renvoyé lorsque le mode de vérification est Verify all. Il n'est utilisé qu'en mode Verify records ou Verify indexes. -(\*\*) *Type d’objet* : Lorsqu’un objet est vérifié, un message "terminé" ($1=2), erreur ($1=3) ou warning ($1=5) peut être envoyé. Le type d’objet retourné dans $2 peut être l’un des suivants : +(\*\*) *Type d’objet* : Lorsqu’un objet est vérifié, un message "terminé" ($messageType=2), erreur ($messageType=3) ou warning ($messageType=5) peut être envoyé. Le type d’objet retourné dans $objectType peut être l’un des suivants : * 0 = indéterminé * 4 = enregistrement * 8 = index * 16 = objet structure (contrôle préliminaire du fichier de données). -*Cas particulier* : lorsque $4 = 0 pour $1 = 2, 3 ou 5, le message ne concerne pas une table mais le fichier de données dans son ensemble. +*Cas particulier* : lorsque $table = 0 pour $messageType = 2, 3 ou 5, le message ne concerne pas une table mais le fichier de données dans son ensemble. -La méthode de rétro-appel doit également retourner une valeur dans $0 (Entier long), permettant de contrôler l’exécution de l’opération : +La méthode de rétro-appel doit également retourner une valeur entière *$result*, permettant de contrôler l’exécution de l’opération : -* si $0 = 0, l’opération continue normalement -* si $0 = -128, l’opération est stoppée sans erreur générée -* si $0 = autre valeur, l’opération est stoppée et la valeur passée dans $0 est retournée en tant que numéro d’erreur. Cette erreur peut être interceptée par une méthode d’appel sur erreur. +* si $result = 0, l’opération continue normalement +* si $result = -128, l’opération est stoppée sans erreur générée +* si $result = autre valeur, l’opération est stoppée et la valeur passée dans $result est retournée en tant que numéro d’erreur. Cette erreur peut être interceptée par une méthode d’appel sur erreur. -**Note :** Il n'est pas possible d'interrompre l'exécution via $0 après que l'événement *Fin d'exécution* ($4=1) a été généré. +**Note :** Il n'est pas possible d'interrompre l'exécution via $result après que l'événement *Fin d'exécution* ($1=4) a été généré. Deux tableaux facultatifs peuvent également être utilisés par la commande : @@ -109,7 +107,7 @@ Quelle que soit l'option sélectionnée, dès lors qu'un fichier d'historique es Vérification simple des données et des index : ```4d - VERIFY DATA FILE($NomStruct;$NomData;Verify indexes+Verify records;Ne pas créer d’historique;"") + VERIFY DATA FILE($NomStruct;$NomData;Verify indexes+Verify records;Ne pas créer d’historique;"") ``` ## Exemple 2 @@ -117,7 +115,7 @@ Vérification simple des données et des index : Vérification complète avec historique : ```4d - VERIFY DATA FILE($NomStruct;$NomData;Verify all;0;"") + VERIFY DATA FILE($NomStruct;$NomData;Verify all;0;"") ``` ## Exemple 3 @@ -125,7 +123,7 @@ Vérification complète avec historique : Vérification des enregistrements uniquement : ```4d - VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"") + VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"") ``` ## Exemple 4 @@ -133,10 +131,10 @@ Vérification des enregistrements uniquement : Vérification des enregistrements des tables 3 et 7 uniquement : ```4d - ARRAY LONGINT($tnumTables;2) - $tnumTables{1}:=3 - $tnumTables{2}:=7 - VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"FollowScan";$tnumTables) + ARRAY LONGINT($tnumTables;2) + $tnumTables{1}:=3 + $tnumTables{2}:=7 + VERIFY DATA FILE($NomStruct;$NomData;Verify records;0;"FollowScan";$tnumTables) ``` ## Exemple 5 @@ -144,14 +142,14 @@ Vérification des enregistrements des tables 3 et 7 uniquement : Vérification d’index spécifiques (index du champ 1 de la table 4 et index des champs 2 et 3 de la table 5) : ```4d - ARRAY LONGINT($tnumTables;0) //non utilisé mais obligatoire - ARRAY LONGINT($tindex;2;0) //2 lignes (colonnes ajoutées ensuite) - $tindex{1}{0}:=4 // numéro de table dans l’élément 0 - APPEND TO ARRAY($tindex{1};1) // numéro du 1er champ à vérifier - $tindex{2}{0}:=5 // numéro de table dans l’élément 0 - APPEND TO ARRAY($tindex{2};2) // numéro du 1er champ à vérifier - APPEND TO ARRAY($tindex{2};3) // numéro du 2e champ à vérifier - VERIFY DATA FILE($NomStruct;$NomData;Verify indexes;0;"FollowScan";$tnumTables;$tindex) + ARRAY LONGINT($tnumTables;0) //non utilisé mais obligatoire + ARRAY LONGINT($tindex;2;0) //2 lignes (colonnes ajoutées ensuite) + $tindex{1}{0}:=4 // numéro de table dans l’élément 0 + APPEND TO ARRAY($tindex{1};1) // numéro du 1er champ à vérifier + $tindex{2}{0}:=5 // numéro de table dans l’élément 0 + APPEND TO ARRAY($tindex{2};2) // numéro du 1er champ à vérifier + APPEND TO ARRAY($tindex{2};3) // numéro du 2e champ à vérifier + VERIFY DATA FILE($NomStruct;$NomData;Verify indexes;0;"FollowScan";$tnumTables;$tindex) ``` ## Exemple 6 @@ -159,8 +157,8 @@ Vérification d’index spécifiques (index du champ 1 de la table 4 et index de Vérification du fichier de données, création et affichage du fichier d'historique : ```4d - VERIFY DATA FILE(Structure file;Data file;Tout vérifier;0;"") - SHOW ON DISK(File(Fichier log vérification).platformPath) + VERIFY DATA FILE(Structure file;Data file;Tout vérifier;0;"") + SHOW ON DISK(File(Fichier log vérification).platformPath) ``` ## Variables et ensembles système From 791b9ec3143e13599fccc36a4b3c777115efc8a4 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 3 Dec 2025 09:59:22 +0100 Subject: [PATCH 65/75] New Crowdin updates (#3017) * New translations quick-tour.md (French) * New translations quick-tour.md (French) * New translations classes.md (French) * New translations quick-tour.md (French) * New translations ordaclasses.md (French) * New translations classes.md (French) * New translations quick-tour.md (French) * New translations ordaclasses.md (French) * New translations classes.md (French) * New translations quick-tour.md (French) * New translations ordaclasses.md (French) * New translations quick-tour.md (Spanish) * New translations quick-tour.md (Spanish) * New translations quick-tour.md (Spanish) * New translations quick-tour.md (Spanish) * New translations quick-tour.md (Spanish) * New translations quick-tour.md (Japanese) * New translations quick-tour.md (Japanese) * New translations quick-tour.md (Japanese) * New translations quick-tour.md (Japanese) * New translations quick-tour.md (Japanese) * New translations openaifilesapi.md (Japanese) * New translations quick-tour.md (Portuguese, Brazilian) * New translations quick-tour.md (Portuguese, Brazilian) * New translations quick-tour.md (Portuguese, Brazilian) * New translations quick-tour.md (Portuguese, Brazilian) * New translations quick-tour.md (Portuguese, Brazilian) * New translations openai.md (French) * New translations overview.md (French) * New translations openaifile.md (French) * New translations openaifiledeletedresult.md (French) * New translations openaifilelistparameters.md (French) * New translations openaifilelistresult.md (French) * New translations openaifileparameters.md (French) * New translations entityselectionclass.md (Spanish) * New translations webformclass.md (Spanish) * New translations webformitemclass.md (Spanish) * New translations forms.md (Spanish) * New translations privileges.md (Spanish) * New translations openai.md (Spanish) * New translations openaierror.md (Spanish) * New translations openaimessage.md (Spanish) * New translations openairesult.md (Spanish) * New translations call-chain.md (Spanish) * New translations datastoreclass.md (Spanish) * New translations openai.md (Spanish) * New translations openaierror.md (Spanish) * New translations openairesult.md (Spanish) * New translations call-chain.md (Spanish) * New translations datastoreclass.md (Spanish) * New translations webformclass.md (Spanish) * New translations webformitemclass.md (Spanish) * New translations forms.md (Spanish) * New translations call-chain.md (Spanish) * New translations privileges.md (Spanish) * New translations openai.md (Spanish) * New translations openaierror.md (Spanish) * New translations openairesult.md (Spanish) * New translations openaifile.md (Spanish) * New translations openaifiledeletedresult.md (Spanish) * New translations openaifilelistparameters.md (Spanish) * New translations openaifilelistresult.md (Spanish) * New translations openaifileparameters.md (Spanish) * New translations openaifilesapi.md (Spanish) * New translations web-event.md (Spanish) * New translations web-event.md (Spanish) * New translations openaifilesapi.md (Japanese) * New translations properties_animation.md (Spanish) * New translations properties_reference.md (Spanish) * New translations properties_animation.md (Spanish) * New translations properties_reference.md (Spanish) * New translations classes.md (Spanish) * New translations webformclass.md (Spanish) * New translations webformitemclass.md (Spanish) * New translations classes.md (Spanish) * New translations parameters.md (Spanish) * New translations properties_animation.md (Spanish) * New translations properties_reference.md (Spanish) * New translations glossary.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations overview.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations select-log-file.md (Spanish) * New translations orda-events.md (Spanish) * New translations collectionclass.md (Spanish) * New translations cryptokeyclass.md (Spanish) * New translations classes.md (Spanish) * New translations quick-tour.md (Spanish) * New translations properties_animation.md (Spanish) * New translations properties_reference.md (Spanish) * New translations glossary.md (Spanish) * New translations orda-events.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations overview.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations license-info.md (Spanish) * New translations select-log-file.md (Spanish) * New translations http-rules.md (Spanish) * New translations collectionclass.md (Spanish) * New translations cryptokeyclass.md (Spanish) * New translations webformclass.md (Spanish) * New translations webformitemclass.md (Spanish) * New translations classes.md (Spanish) * New translations quick-tour.md (Spanish) * New translations properties_animation.md (Spanish) * New translations properties_reference.md (Spanish) * New translations license-info.md (Spanish) * New translations select-log-file.md (Spanish) * New translations glossary.md (Spanish) * New translations orda-events.md (Spanish) * New translations ordaclasses.md (Spanish) * New translations privileges.md (Spanish) * New translations overview.md (Spanish) * New translations vp-set-workbook-options.md (Spanish) * New translations http-rules.md (Spanish) * New translations wp-import-document.md (Spanish) * New translations openaifiledeletedresult.md (Spanish) * New translations openaifilelistparameters.md (Spanish) * New translations openaifilelistresult.md (Spanish) * New translations openaifileresult.md (Spanish) * New translations openaifilesapi.md (Spanish) * New translations web-event.md (Spanish) * New translations web-form.md (Spanish) * New translations web-event.md (Spanish) * New translations web-form.md (Spanish) --- .../current/API/EntitySelectionClass.md | 14 ++-- .../current/API/WebFormClass.md | 26 ++++---- .../current/API/WebFormItemClass.md | 6 +- .../current/Concepts/classes.md | 6 +- .../current/Concepts/parameters.md | 2 +- .../current/Concepts/quick-tour.md | 2 +- .../current/FormEditor/forms.md | 2 +- .../FormObjects/properties_Animation.md | 2 +- .../FormObjects/properties_Reference.md | 2 +- .../current/ORDA/glossary.md | 2 +- .../current/ORDA/orda-events.md | 2 +- .../current/ORDA/ordaClasses.md | 2 +- .../current/ORDA/privileges.md | 10 +-- .../current/Users/overview.md | 2 +- .../current/WebServer/http-rules.md | 2 +- .../WritePro/commands/wp-import-document.md | 20 +++--- .../current/aikit/Classes/OpenAI.md | 8 +-- .../current/aikit/Classes/OpenAIError.md | 2 +- .../current/aikit/Classes/OpenAIFile.md | 24 +++---- .../aikit/Classes/OpenAIFileDeletedResult.md | 8 +-- .../aikit/Classes/OpenAIFileListParameters.md | 20 +++--- .../aikit/Classes/OpenAIFileListResult.md | 16 ++--- .../aikit/Classes/OpenAIFileParameters.md | 20 +++--- .../current/aikit/Classes/OpenAIFileResult.md | 6 +- .../current/aikit/Classes/OpenAIFilesAPI.md | 22 +++---- .../current/aikit/Classes/OpenAIMessage.md | 2 +- .../current/aikit/Classes/OpenAIResult.md | 2 +- .../current/commands/call-chain.md | 6 +- .../current/commands/select-log-file.md | 8 +-- .../current/commands/web-event.md | 14 ++-- .../current/commands/web-form.md | 6 +- .../version-19/Concepts/quick-tour.md | 2 +- .../FormObjects/properties_Animation.md | 2 +- .../FormObjects/properties_Reference.md | 2 +- .../version-20-R10/API/CollectionClass.md | 2 +- .../version-20-R10/API/CryptoKeyClass.md | 2 +- .../version-20-R10/API/DataStoreClass.md | 2 +- .../version-20-R10/Concepts/classes.md | 4 +- .../version-20-R10/Concepts/quick-tour.md | 2 +- .../FormObjects/properties_Animation.md | 2 +- .../FormObjects/properties_Reference.md | 2 +- .../version-20-R10/ORDA/glossary.md | 2 +- .../version-20-R10/ORDA/orda-events.md | 2 +- .../version-20-R10/ORDA/ordaClasses.md | 2 +- .../version-20-R10/Users/overview.md | 2 +- .../commands/vp-set-workbook-options.md | 2 +- .../WritePro/commands/wp-import-document.md | 20 +++--- .../version-20-R10/aikit/Classes/OpenAI.md | 6 +- .../aikit/Classes/OpenAIError.md | 2 +- .../aikit/Classes/OpenAIResult.md | 2 +- .../version-20-R10/commands/call-chain.md | 6 +- .../version-20-R10/commands/license-info.md | 2 +- .../commands/select-log-file.md | 8 +-- .../version-20/Concepts/quick-tour.md | 2 +- .../FormObjects/properties_Animation.md | 2 +- .../FormObjects/properties_Reference.md | 2 +- .../version-20/ViewPro/classes.md | 2 +- .../version-21/API/CollectionClass.md | 2 +- .../version-21/API/CryptoKeyClass.md | 2 +- .../version-21/API/DataStoreClass.md | 2 +- .../version-21/API/WebFormClass.md | 32 +++++----- .../version-21/API/WebFormItemClass.md | 6 +- .../version-21/Concepts/classes.md | 4 +- .../version-21/Concepts/quick-tour.md | 2 +- .../version-21/FormEditor/forms.md | 2 +- .../FormObjects/properties_Animation.md | 2 +- .../FormObjects/properties_Reference.md | 2 +- .../version-21/ORDA/glossary.md | 2 +- .../version-21/ORDA/orda-events.md | 2 +- .../version-21/ORDA/ordaClasses.md | 2 +- .../version-21/ORDA/privileges.md | 10 +-- .../version-21/Users/overview.md | 2 +- .../commands/vp-set-workbook-options.md | 2 +- .../version-21/WebServer/http-rules.md | 2 +- .../WritePro/commands/wp-import-document.md | 20 +++--- .../version-21/aikit/Classes/OpenAI.md | 6 +- .../version-21/aikit/Classes/OpenAIError.md | 2 +- .../version-21/aikit/Classes/OpenAIResult.md | 2 +- .../version-21/commands/call-chain.md | 6 +- .../version-21/commands/license-info.md | 2 +- .../version-21/commands/select-log-file.md | 8 +-- .../version-21/commands/web-event.md | 14 ++-- .../version-21/commands/web-form.md | 6 +- .../current/Concepts/classes.md | 6 +- .../current/Concepts/quick-tour.md | 2 +- .../current/ORDA/ordaClasses.md | 16 ++--- .../current/aikit/Classes/OpenAI.md | 2 +- .../current/aikit/Classes/OpenAIFile.md | 24 +++---- .../aikit/Classes/OpenAIFileDeletedResult.md | 12 ++-- .../aikit/Classes/OpenAIFileListParameters.md | 16 ++--- .../aikit/Classes/OpenAIFileListResult.md | 24 +++---- .../aikit/Classes/OpenAIFileParameters.md | 24 +++---- .../current/aikit/overview.md | 12 ++-- .../version-19/Concepts/quick-tour.md | 2 +- .../version-20-R10/Concepts/classes.md | 6 +- .../version-20-R10/Concepts/quick-tour.md | 2 +- .../version-20-R10/ORDA/ordaClasses.md | 16 ++--- .../version-20/Concepts/quick-tour.md | 2 +- .../version-21/Concepts/classes.md | 6 +- .../version-21/Concepts/quick-tour.md | 2 +- .../version-21/ORDA/ordaClasses.md | 16 ++--- .../current/Concepts/quick-tour.md | 2 +- .../current/aikit/Classes/OpenAIFilesAPI.md | 64 +++++++++---------- .../version-19/Concepts/quick-tour.md | 2 +- .../version-20-R10/Concepts/quick-tour.md | 2 +- .../version-20/Concepts/quick-tour.md | 2 +- .../version-21/Concepts/quick-tour.md | 2 +- .../current/Concepts/quick-tour.md | 2 +- .../version-19/Concepts/quick-tour.md | 2 +- .../version-20-R10/Concepts/quick-tour.md | 2 +- .../version-20/Concepts/quick-tour.md | 2 +- .../version-21/Concepts/quick-tour.md | 2 +- 112 files changed, 385 insertions(+), 385 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md index b6688c3d03f960..b0f2073f3caaf8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md @@ -1741,13 +1741,13 @@ En este ejemplo, el campo objeto "marks" de la dataClass **Students** contiene l
    Historia -| Lanzamiento | Modificaciones | -| ----------- | ----------------------------------------------------------- | -| 21 R2 | Support of order by with 4D.Vector searches | -| 21 | Soporte de los objetos 4D.Vector | -| 17 R6 | Soporte de los parámetros Formula | -| 17 R5 | Soporte de los marcadores para los valores | -| 17 | Añadidos | +| Lanzamiento | Modificaciones | +| ----------- | -------------------------------------------------------------------- | +| 21 R2 | Gestión de ordenación en las búsquedas con 4D.Vector | +| 21 | Soporte de los objetos 4D.Vector | +| 17 R6 | Soporte de los parámetros Formula | +| 17 R5 | Soporte de los marcadores para los valores | +| 17 | Añadidos |
    diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormClass.md index 0f9f75307d510d..7ae2fbca64e6cf 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command. +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. Los objetos `4D.WebForm` se instancian con el comando [`webForm`](../commands/web-form.md).
    Historia @@ -33,7 +33,7 @@ The `WebForm` class contains functions and properties allowing to handle your Qo The components of web pages are objects that are available directly as properties of these web pages. -The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. Estos objetos tienen funciones que puede utilizar para gestionar sus componentes de forma dinámica. #### Ejemplo @@ -60,9 +60,9 @@ While `myForm` may not display typical object properties when examined in the de -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ------------------------------------------ | -| state | string | -> | Name of state to disable from the web page | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ----------------------------------------------- | +| state | string | -> | Nombre del estado a desactivar de la página web | @@ -73,7 +73,7 @@ The `.disableState()` function Esta función no hace nada si: - the *state* is currently not enabled in the web page, -- the *state* does not exist for the web page. +- el *estado* no existe para la página web. Si [activa](#enablestate) o desactiva varios estados en la misma función usuario, todas las modificaciones se envían al mismo tiempo al cliente una vez finalizada la función. @@ -98,7 +98,7 @@ The `.enableState()` function en Esta función no hace nada si: - the *state* has already been enabled on the web page, -- the *state* does not exist for the web page. +- el *estado* no existe para la página web. Si activa o [desactiva](#disablestate) varios estados dentro de la misma función usuario, todas las modificaciones se envían al mismo tiempo al cliente una vez que la función termina. @@ -156,9 +156,9 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ---------------------------------------------- | -| msg | string | -> | Information message to display in the web page | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ------------------------------------------------- | +| msg | string | -> | Mensaje de información a mostrar en la página web | @@ -191,9 +191,9 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ------------------------------------------ | -| msg | string | -> | Warning message to display in the web page | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ---------------------------------------------------- | +| msg | string | -> | Mensaje de advertencia para mostrar en la página web | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md index 25a53ce63f5336..c0ebfd153ea5a1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md @@ -3,7 +3,7 @@ id: WebFormItemClass title: WebFormItem --- -The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. +La clase `4D.WebFormItem` le permite manejar el comportamiento de sus componentes webform Qodly. Los objetos `4D.WebFormItem` son propiedades del objeto [`4D.WebForm`](WebFormClass.md) devuelto por el comando [`Web Form`](../commands/web-form.md). @@ -62,7 +62,7 @@ La función `.hide()` oculta el com #### Ejemplo -To call a function that hides an image when the user clicks a button: +Para llamar a una función que oculta una imagen cuando el usuario hace clic en un botón: 1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: @@ -78,7 +78,7 @@ exposed Function isHidden() 2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". 3. Select the Button component and add an `onclick` event to it. -4. Attach the `isHidden` function to the event. +4. Adjunta la función `isHidden` al evento. ### .removeCSSClass() diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md index be0e39a6ed051b..030a88f14fd3b7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/classes.md @@ -46,7 +46,7 @@ Una clase usuario en 4D está definida por un archivo [método ](methods.md) esp Al nombrar las clases, debe tener en cuenta las siguientes reglas: - Un [nombre de clase](identifiers.md#classes) debe cumplir con [reglas de denominación de las propiedades](identifiers.md#object-properties). -- . +- Los nombres de clases son sensibles a las mayúsculas y minúsculas. - No se recomienda dar el mismo nombre a una clase y a una tabla de la base, para evitar conflictos. Por ejemplo, si quiere definir una clase llamada "Polygon", tiene que crear el siguiente archivo: @@ -782,9 +782,9 @@ La propiedad [`isSingleton`](../API/ClassClass.md#issingleton) de los objetos Cl La propiedad [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) de los objetos Class permite saber si la clase es un singleton de sesión. -### Exposed singleton functions +### Funciones singleton expuestas -Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). +Las funciones singleton compartidas y de sesión soportan la [palabra clave `exposed`](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). Una función singleton expuesta puede ser llamada directamente por peticiones REST. Esta función es útil para diseñar [páginas Qodly que llamen a las funciones 4D](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). ### Ejemplos diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md index 8a26fc1b0e3a1e..89954080ab5f07 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/parameters.md @@ -106,7 +106,7 @@ $entitySelection:=ds.User.query("login=:1"; $user) :::note -No confunda las **declaraciones de parámetros** con las [**declaraciones de variables**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. +No confunda las **declaraciones de parámetros** con las [**declaraciones de variables**](variables.md#declaring-variables). Usar la palabra clave 'var' con parámetros generará errores. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md index cbb2891ff73f2a..add912285699cb 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md @@ -312,7 +312,7 @@ Se hace referencia a una expresión por el tipo de datos que devuelve. Hay vario | Col[5] | Elementos de colección | Un elemento de colección es una expresión que puede ser de todo tipo soportado | | $entitySel[0] | Entity | Un elemento de una selección de entidades ORDA es una expresión de tipo entidad. Este tipo de expresión es **no asignable** | -### Expresiones asignables y no asignables +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} {#assignable-vs-non-assignable-expressions} Una expresión puede ser simplemente una constante literal, como el número 4 o la cadena "Hello", o una variable como `$myButton`. También puede utilizar los operadores. Por ejemplo, 4 + 2 es una expresión que utiliza el operador de adición para sumar dos números y devolver el resultado 6. En todos los casos, estas expresiones son **no asignables**, lo que significa que no se les puede asignar un valor. En 4D, las expresiones pueden ser **asignables**. Una expresión es asignable cuando puede utilizarse a la izquierda del operador de asignación. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md index e55a538ddc4a02..a1f7b072584a41 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md @@ -114,7 +114,7 @@ La compatibilidad con Fluent UI se encuentra actualmente en fase Developer Previ :::info Disponibilidad -This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. +This feature can be used **in 4D projects on Windows**. No está disponible en macOS ni en bases de datos binarias 4D en Windows. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Animation.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Animation.md index 1a695df8846669..9641fb62524331 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Animation.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Animation.md @@ -65,7 +65,7 @@ Permite al usuario mantener pulsado el botón del ratón para mostrar las imáge ## Cambiar cada x segundos -Enables cycling through the contents of the picture button at the specified speed (in seconds). En este modo, se ignoran todas las demás opciones. +Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). En este modo, se ignoran todas las demás opciones. #### Gramática JSON diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Reference.md b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Reference.md index bf427697889987..95d2dd6ab60c67 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Reference.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/FormObjects/properties_Reference.md @@ -85,7 +85,7 @@ En esta página encontrará una lista completa de todas las propiedades de los o | [`fontTheme`](properties_Text.md#font-theme) | Establece el estilo automático | "normal", "main", "additional" | | [`fontWeight`](properties_Text.md#bold) | Ajusta el texto seleccionado para que aparezca más oscuro y pesado. | "normal", "bold" | | [`footerHeight`](properties_Footers.md#height) | Sirve para fijar la altura de la línea | decimal positivo + px | em | -| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Enables cycling through the contents of the picture button at the specified speed (in seconds). | mínimo: 0 | +| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). | mínimo: 0 | | **g** | | | | [`graduationStep`](properties_Scale.md#graduation-step) | Medición de la visualización de la escala. | mínimo: 0 | | **h** | | | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/glossary.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/glossary.md index 94b602ba7d082b..8ed96688162c55 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/glossary.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/glossary.md @@ -9,7 +9,7 @@ title: Glosario ## Acción -Todas las acciones que pueden realizarse en un [recurso](#resource). Available actions are: create, read, update, drop, execute, and promote. +Todas las acciones que pueden realizarse en un [recurso](#resource). Las acciones disponibles son: create, read, update, drop, execute y promote. ## Atributo diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md index 901a2dcd83d0a9..38125cee06eca6 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md @@ -24,7 +24,7 @@ No se puede activar directamente la ejecución de la función de evento. Los eve :::info Nota de compatibilidad -Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). +Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Varios eventos pueden ejecutarse en paralelo siempre que afecten a entidades distintas (es decir, registros). ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index cc698dfa3ce19b..96207ad628a079 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -964,7 +964,7 @@ exposed Function :::note -The `exposed` keyword can only be used with the objects decribed above. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. +La palabra clave `exposed` solo puede utilizarse con los objetos descritos anteriormente. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md index 2a9100a293d13c..1981b5f2286c8d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/privileges.md @@ -30,14 +30,14 @@ Puede asignar acciones de permiso específicas a los siguientes recursos en su p - el [datastore](../ORDA/dsMapping.md#datastore) - las [clases de datos](../ORDA/dsMapping.md#dataclass) - [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) -- functions of the [data model classes](../ORDA/ordaClasses.md) +- funciones de las [clases del modelo de datos](../ORDA/ordaClasses.md) - funciones [singleton](../REST/$singleton.md) Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma en que se acceda), 4D verifica que la sesión tenga los permisos apropiados y rechaza el acceso si no está autorizado. ## Permisos -A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Los permisos se definen para el proyecto en el archivo [`roles.json`](#rolesjson-file). Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). +Un permiso es la capacidad de realizar una acción sobre un recurso. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Los permisos se definen para el proyecto en el archivo [`roles.json`](#rolesjson-file). Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). @@ -194,7 +194,7 @@ El archivo `roles.json` describe todos los parámetros de seguridad web del proy ::: -### Default File Location and Content +### Ubicación y contenido del archivo por defecto Cuando se crea un nuevo proyecto, se genera un archivo `roles.json` por defecto en: @@ -244,7 +244,7 @@ In Qodly Studio for 4D, the login mode can be set using the [**Force login** opt ::: -## Restriction Modes +## Modos de restricción The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): @@ -260,7 +260,7 @@ The `restrictedByDefault` property configures how every [resource](#resources) a ### Configuración recomendada -Depending on your environment, the recommended settings are: +Dependiendo de su entorno, los parámetros recomendados son: - **Producción**: defina tanto `restrictedByDefault` como [`forceLogin`](../REST/authUsers.md#force-login-mode) como **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. - **Desarrollo**: defina `restrictedByDefault` y [`forceLogin`](../REST/authUsers.md#force-login-mode) como **false**. Esto permite un acceso más fácil durante el desarrollo y la depuración, con la posibilidad de aplicar gradualmente restricciones. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Users/overview.md b/i18n/es/docusaurus-plugin-content-docs/current/Users/overview.md index d67ac6744415b1..e9b602dd5dfe24 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Users/overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Users/overview.md @@ -8,7 +8,7 @@ Si diferentes personas utilizan una aplicación, lo que suele ocurrir en la arqu La estrategia de control de acceso 4D depende de la configuración de su despliegue: - in multi-user Web and REST applications, access control is based upon [ORDA's Roles and privileges](../ORDA/privileges.md) features. -- in multi-user desktop applications, you can rely on 4D users and groups, +- en aplicaciones de escritorio multiusuario, puede confiar en los usuarios y grupos de 4D, - en aplicaciones monousuario, el acceso de los usuarios se controla a través de la sesión del sistema, utilizando comandos como [`Current system user`](../commands-legacy/current-system-user.md). :::tip Entradas de blog relacionadas diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md index bb951c00c48b3f..212afdc4624c71 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md @@ -56,7 +56,7 @@ Se soportan las siguientes palabras clave de acción: | Palabras clave | Tipo de valor | Descripción | | --------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `removeHeaders` | Texto o colección de textos | Encabezado(s) para eliminar de las respuestas HTTP. Si un encabezado a eliminar no existe en el encabezado de respuesta, se ignora. | -| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. | +| `addHeaders` | Object | Nombre (texto) y valor (texto) del el(los) encabezado(s) para agregar a las respuestas HTTP. | | `setHeaders` | Object | Nombre (texto) y valor (texto) de los encabezados a modificar en las respuestas HTTP. Si un encabezado a modificar no existe en el encabezado de respuesta, se añade. | | `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. Cuando el acceso a un recurso es denegado, el servidor web devuelve un estado 403 por defecto | | `redirect` | Text | Redirigir URL. Cuando se activa una redirección, el servidor web devuelve un estado 302 por defecto | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md index 637b01623e1567..592a131b1b226d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/WritePro/commands/wp-import-document.md @@ -51,16 +51,16 @@ Por defecto, las expresiones HTML insertadas en documentos heredados de 4D Write Puede pasar un objeto para definir cómo se gestionan los siguientes atributos durante la operación de importación: -| **Atributo** | **Tipo** | **Description** | -| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | -| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | -| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | -| fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | -| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. Si se vuelve a aplicar una hoja de estilo con un ajuste de colapso automático de bordes después de la operación de importación, se ignorará el ajuste. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | -| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | -| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | -| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | +| **Atributo** | **Tipo** | **Description** | +| ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | +| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | +| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | +| fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** - Las referencias de campo .docx se importan como etiquetas entre llaves dobles ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | +| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. Si se vuelve a aplicar una hoja de estilo con un ajuste de colapso automático de bordes después de la operación de importación, se ignorará el ajuste. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | +| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | +| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | +| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | **Notas de compatibilidad** diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md index f185aa3849bf86..6478740c260b03 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md @@ -36,9 +36,9 @@ Crear una instancia de la clase cliente OpenAI. #### Llave API ```4d -// as text +// como texto var $client:=cs.AIKit.OpenAI.new("your api key") -// as object +// como objeto var $client:=cs.AIKit.OpenAI.new({apiKey: "your api key"}) ``` @@ -58,7 +58,7 @@ $client.baseURL:="https://server.ai" ## Recursos API -La API ofrece acceso a múltiples recursos que permiten una interacción perfecta con los servicios de OpenAI. Each resource is encapsulated within a dedicated API class, offering a structured and intuitive way to interact with different functionalities. +La API ofrece acceso a múltiples recursos que permiten una interacción perfecta con los servicios de OpenAI. Cada recurso está encapsulado en una clase API específica, que ofrece una forma estructurada e intuitiva de interactuar con las distintas funcionalidades. | Nombre de la propiedad | Tipo | Descripción | | ---------------------- | ----------------------------------------------- | ------------------------------------------------ | @@ -67,7 +67,7 @@ La API ofrece acceso a múltiples recursos que permiten una interacción perfect | `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | Acceso a la API Images. | | `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | Acceso a la API de moderaciones. | | `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | Acceso a la API Embeddings. | -| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Access to the Files API. | +| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Acceso a la API Files. | ### Ejemplo de Uso diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md index b237a978ab1103..0cbbae13977180 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIError.md @@ -45,4 +45,4 @@ La clase `OpenAIError` está diseñada para manejar errores devueltos por la API | `isNotFoundError` | Boolean | Indica si el error es un error 404 Not Found. | | `isUnprocessableEntityError` | Boolean | Indica si el error es un error de entidad no procesable (422). | | `isRateLimitError` | Boolean | Indica si el error es un error de límite de velocidad 429. | -| `isInternalServerError` | Boolean | Indicates if the error is a 500 or higher Internal Server error. | \ No newline at end of file +| `isInternalServerError` | Boolean | Indica si el error es un error de servidor interno de tipo 500 o superior. | \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md index 3c326b32024644..179d008cdc931a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md @@ -5,21 +5,21 @@ title: OpenAIFile # OpenAIFile -The `OpenAIFile` class represents a file object in the OpenAI API. Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. +La clase `OpenAIFile` representa un objeto archivo en la API OpenAI. Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. ## Propiedades -| Nombre de la propiedad | Tipo | Descripción | -| ---------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | Text | The file identifier, which can be referenced in the API endpoints. | -| `bytes` | Integer | El tamaño del archivo, en bytes. | -| `created_at` | Integer | The Unix timestamp (in seconds) for when the file was created. | -| `expires_at` | Integer | The Unix timestamp (in seconds) for when the file will expire. | -| `filename` | Text | El nombre del archivo. | -| `object` | Text | The object type, which is always "file". | -| `purpose` | Text | The intended purpose of the file. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | -| `status` | Text | **Obsoleto.** el estado actual del archivo, que puede ser `uploaded`, `processed`, o `error`. | -| `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | +| Nombre de la propiedad | Tipo | Descripción | +| ---------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | El identificador del archivo, al que se puede hacer referencia en los puntos de terminación de la API. | +| `bytes` | Integer | El tamaño del archivo, en bytes. | +| `created_at` | Integer | La marca de tiempo Unix (en segundos) de cuando se creó el archivo. | +| `expires_at` | Integer | La marca de tiempo Unix (en segundos) para cuando el archivo expirará. | +| `filename` | Text | El nombre del archivo. | +| `object` | Text | El tipo de objeto, que siempre es "file". | +| `purpose` | Text | El propósito previsto del archivo. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | +| `status` | Text | **Obsoleto.** el estado actual del archivo, que puede ser `uploaded`, `processed`, o `error`. | +| `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | ## Ver también diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md index 44d6daba23f279..eccc0617e86ff1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md @@ -5,7 +5,7 @@ title: OpenAIFileDeletedResult # OpenAIFileDeletedResult -The `OpenAIFileDeletedResult` class contains the result of a file deletion operation. +La clase `OpenAIFileDeletedResult` contiene el resultado de una operación de borrado de archivos. ## Hereda @@ -13,9 +13,9 @@ The `OpenAIFileDeletedResult` class contains the result of a file deletion opera ## Propiedades calculadas -| Propiedad | Tipo | Descripción | -| --------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Returns the file deletion result from the API response. Returns `Null` if the response doesn't contain a valid result. | +| Propiedad | Tipo | Descripción | +| --------- | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Returns the file deletion result from the API response. Devuelve `Null` si la respuesta no contiene un resultado válido. | ## Ejemplo de Uso diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md index 986a8c0ebf1b56..7bb18d3fe24611 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md @@ -5,7 +5,7 @@ title: OpenAIFileListParameters # OpenAIFileListParameters -The `OpenAIFileListParameters` class contains parameters for listing files in the OpenAI API. +La clase `OpenAIFileListParameters` contiene los parámetros para listar los archivos en la API OpenAI. ## Hereda @@ -13,19 +13,19 @@ The `OpenAIFileListParameters` class contains parameters for listing files in th ## Propiedades -| Nombre de la propiedad | Tipo | Requerido | Por defecto | Descripción | -| ---------------------- | ------- | --------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `after` | Text | Opcional | - | Un cursor para utilizar en la paginación. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `after=obj_foo` in order to fetch the next page of the list. | -| `limit` | Integer | Opcional | 10000 | Un límite en el número de objetos a devolver. Limit can range between 1 and 10,000, and the default is 10,000. | -| `order` | Text | Opcional | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | -| `purpose` | Text | Opcional | - | Devuelve sólo los archivos con la finalidad indicada. | +| Nombre de la propiedad | Tipo | Requerido | Por defecto | Descripción | +| ---------------------- | ------- | --------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `after` | Text | Opcional | - | Un cursor para utilizar en la paginación. `after` es un ID de objeto que define su lugar en la lista. Por ejemplo, si realiza una solicitud de lista y recibe 100 objetos, que terminan en "obj_foo", su llamada posterior puede incluir "after=obj_foo" para recuperar la página siguiente de la lista. | +| `limit` | Integer | Opcional | 10000 | Un límite en el número de objetos a devolver. El límite puede oscilar entre 1 y 10.000, y el valor predeterminado es 10.000. | +| `order` | Text | Opcional | desc | Ordenar por la marca de tiempo 'created_at' de los objetos. `asc` para el orden ascendente y `desc` para el descendente. | +| `purpose` | Text | Opcional | - | Devuelve sólo los archivos con la finalidad indicada. | -## Ejemplo de Uso +## Ejemplo de uso ```4d -// Get first 100 files with purpose "fine-tune" +// Obtener los primeros 100 archivos con el objeto "fine-tune" var $params:=cs.AIKit.OpenAIFileListParameters.new() -$params.limit:=100 +$params. imit:=100 $params.purpose:="fine-tune" $params.order:="desc" diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md index 7b8830b98403ab..2d6687bc7a690b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md @@ -5,7 +5,7 @@ title: OpenAIFileListResult # OpenAIFileListResult -The `OpenAIFileListResult` class contains the result of listing files from the OpenAI API. +La clase `OpenAIFileListResult` contiene el resultado de la lista de los archivos de la API OpenAI. ## Hereda @@ -13,12 +13,12 @@ The `OpenAIFileListResult` class contains the result of listing files from the O ## Propiedades calculadas -| Propiedad | Tipo | Descripción | -| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | -| `first_id` | Text | Devuelve el ID del primer archivo de la lista, o una cadena vacía si no está disponible. | -| `last_id` | Text | Devuelve el ID del último archivo de la lista, o una cadena vacía si no está disponible. | -| `has_more` | Boolean | Indica si hay más archivos más allá de esta página. `True` if there are more files to fetch, `False` otherwise. | +| Propiedad | Tipo | Descripción | +| ---------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | +| `first_id` | Text | Devuelve el ID del primer archivo de la lista, o una cadena vacía si no está disponible. | +| `last_id` | Text | Devuelve el ID del último archivo de la lista, o una cadena vacía si no está disponible. | +| `has_more` | Boolean | Indica si hay más archivos más allá de esta página. `True` si hay más archivos que recuperar, `False` en caso contrario. | ## Ejemplo de Uso @@ -40,7 +40,7 @@ For each ($file; $files) End for each ``` -### Pagination Example +### Ejemplo de paginación ```4d var $params:=cs.AIKit.OpenAIFileListParameters.new() diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md index 1e2ac49eaf2bd0..74d85bbb0169d9 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -13,28 +13,28 @@ La clase `OpenAIFileParameters` gestiona los parámetros de las operaciones de c ## Propiedades -| Nombre de la propiedad | Tipo | Requerido | Descripción | -| ---------------------- | ------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `expires_after` | Object | Opcional | The expiration policy for a file. Por defecto, los archivos con `purpose=batch` caducan a los 30 días y el resto de archivos se conservan hasta que se borran manualmente. | +| Nombre de la propiedad | Tipo | Requerido | Descripción | +| ---------------------- | ------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `expires_after` | Object | Opcional | La política de caducidad de un archivo. Por defecto, los archivos con `purpose=batch` caducan a los 30 días y el resto de archivos se conservan hasta que se borran manualmente. | -### `expires_after` Object Structure +### Estructura del objeto \`expires_after El objeto `expires_after` contiene las siguientes propiedades: -| Nombre de la propiedad | Tipo | Descripción | -| ---------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `anchor` | Text | Anchor timestamp after which the expiration policy applies. Supported anchors: `created_at`. | -| `seconds` | Integer | The number of seconds after the anchor time that the file will expire. Must be between 3600 (1 hour) and 2592000 (30 days). | +| Nombre de la propiedad | Tipo | Descripción | +| ---------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `anchor` | Text | Marca de tiempo de referencia a partir de la cual se aplica la política de caducidad. Referencias soportadas: `created_at`. | +| `seconds` | Integer | Tiempo en segundos después de la marca de tiempo de referencia antes de que el archivo expire. Debe estar entre 3600 (1 hora) y 2592000 (30 días). | ## Ejemplo de Uso ```4d var $params:=cs.AIKit.OpenAIFileParameters.new() -// Set expiration after 7 days +// Define la caducidad después de 7 días $params.expires_after:={} $params.expires_after.anchor:="created_at" -$params.expires_after.seconds:=604800 // 7 days +$params.expires_after.seconds:=604800 // 7 días ``` ## Ver también diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md index f781ced1546e67..57a96a3071a051 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md @@ -13,9 +13,9 @@ La clase `OpenAIFileResult` contiene el resultado de una única operación de ar ## Propiedades calculadas -| Propiedad | Tipo | Descripción | -| --------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| `file` | [OpenAIFile](OpenAIFile.md) | Devuelve el objeto de archivo de la respuesta de la API. Returns `Null` if the response doesn't contain a valid file. | +| Propiedad | Tipo | Descripción | +| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `file` | [OpenAIFile](OpenAIFile.md) | Devuelve el objeto de archivo de la respuesta de la API. Devuelve `Null` si la respuesta no contiene un archivo válido. | ## Ejemplo de Uso diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index be2d29e7aa101f..d3a1ba201dac89 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -9,9 +9,9 @@ The `OpenAIFilesAPI` class provides functionalities to manage files using OpenAI > **Nota:** esta API sólo es compatible con OpenAI. Other providers listed in the [compatible providers](../compatible-openai.md) documentation do not support file management operations. -API Reference: +Referencia API: -## File Size Limits +## Límites de tamaño de los archivos - **Archivos individuales:** hasta 512 MB por archivo - **Organization total:** up to 1 TB (cumulative size of all files uploaded by your [organization](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization)) @@ -29,20 +29,20 @@ Upload a file that can be used across various endpoints. | Parámetros | Tipo | Descripción | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | | `file` | [4D.File](https://developer.4d.com/docs/API/FileClass) or [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | The File or Blob object (not file name) to be uploaded. | -| `purpose` | Text | **Required.** The intended purpose of the uploaded file. | +| `purpose` | Text | **Requerido.** el propósito previsto del archivo subido. | | `parámetros` | [OpenAIFileParameters](OpenAIFileParameters.md) | Parámetros opcionales, incluida la política de expiración. | -| Resultado | [OpenAIFileResult](OpenAIFileResult.md) | The file result | +| Resultado | [OpenAIFileResult](OpenAIFileResult.md) | El resultado del archivo | **Throws:** An error if `file` is not a 4D.File or 4D.Blob, or if `purpose` is empty. -#### Supported Purposes +#### Propósitos soportados - `assistants`: Used in the Assistants API (⚠️ [deprecated by OpenAI](https://platform.openai.com/docs/assistants/whats-new)) - `batch`: Used in the [Batch API](https://platform.openai.com/docs/api-reference/batch) (expires after 30 days by default) -- `fine-tune`: Used for [fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning) +- `fine-tune`: utilizado para [ajuste fino](https://platform.openai.com/docs/api-reference/fine-tuning) - `vision`: imágenes utilizadas para afinar la visión - `user_data`: tipo de archivo flexible para cualquier propósito -- `evals`: Used for eval data sets +- `evals`: se utiliza para evaluar conjuntos de datos #### File Format Requirements @@ -51,7 +51,7 @@ Upload a file that can be used across various endpoints. - **API de Asistentes:** soporta tipos de archivo específicos (ver Guía de herramientas de asistentes) - **API de finalización de chat:** sólo se admiten archivos PDF -#### Sychronous example +#### Ejemplo sincrónico ```4d var $file:=File("/RESOURCES/training-data.jsonl") @@ -73,7 +73,7 @@ End if #### Ejemplo asincrónico -Since file uploads can be long operations (especially for large files up to 512 MB), it's recommended to use asynchronous calls to avoid blocking your application. See [Asynchronous Call](../asynchronous-call.md) for more details. +Since file uploads can be long operations (especially for large files up to 512 MB), it's recommended to use asynchronous calls to avoid blocking your application. Ver [llamada asincrónica](../asynchronous-call.md) para más detalles. ```4d var $file:=File("/RESOURCES/large-training-data.jsonl") @@ -114,7 +114,7 @@ Devuelve información sobre un archivo específico. | ------------ | --------------------------------------- | ----------------------------------------------------------------------------- | | `fileId` | Text | **Requerido.** El ID del archivo a recuperar. | | `parámetros` | [OpenAIParameters](OpenAIParameters.md) | Parámetros opcionales para la solicitud. | -| Resultado | [OpenAIFileResult](OpenAIFileResult.md) | The file result | +| Resultado | [OpenAIFileResult](OpenAIFileResult.md) | El resultado del archivo | **Throws:** An error if `fileId` is empty. @@ -135,7 +135,7 @@ End if **list**(*parameters* : cs.OpenAIFileListParameters) : cs.OpenAIFileListResult -Returns a list of files that belong to the user's organization. +Devuelve una lista de archivos que pertenecen a la organización del usuario. **Endpoint:** `GET https://api.openai.com/v1/files` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index bed69eb13e2c1d..bddedd731b20d8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -48,7 +48,7 @@ Añade una referencia de archivo al contenido del mensaje. Si el contenido es ac ## Ejemplo de Uso -### Basic Text Message +### Mensaje de texto básico ```4d // Create an instance of OpenAIMessage diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIResult.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIResult.md index ef3e9ad3508ea9..42afb6d5188d50 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIResult.md @@ -46,7 +46,7 @@ La estructura del objeto `rateLimit` es la siguiente: ### `throw()` -Lanza el primer error de la colección `errors`. This function is useful for propagating errors up the call stack. +Lanza el primer error de la colección `errors`. Esta función es útil para propagar los errores por la pila de llamadas. ## Clases heredadas diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md index d4288b04753c41..e24fcfe496ce30 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/call-chain.md @@ -9,9 +9,9 @@ displayed_sidebar: docs -| Parámetros | Tipo | | Descripción | -| ---------- | ---------- | --------------------------- | ---------------------------------------------------------------- | -| Resultado | Collection | ← | Collection of objects describing the call chain within a process | +| Parámetros | Tipo | | Descripción | +| ---------- | ---------- | --------------------------- | ----------------------------------------------------------------------------- | +| Resultado | Collection | ← | Colección de objetos que describen la cadena de llamadas dentro de un proceso | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/select-log-file.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/select-log-file.md index 05b28a5eb1d550..4a6b78734f3cf7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/select-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/select-log-file.md @@ -19,13 +19,13 @@ displayed_sidebar: docs El comando **SELECT LOG FILE** crea o cierra el archivo de historial de acuerdo al valor que pase en el parámetro. -En *logFile*, pase el nombre o la ruta completa del archivo de registro a ser creado. If you only pass a name, the file will be created in the "Logs" folder of the database located next to the database structure file. +En *logFile*, pase el nombre o la ruta completa del archivo de registro a ser creado. Si solo pasa un nombre, el archivo se creará en la carpeta "Logs" de la base de datos situada junto al archivo de estructura de la base de datos. -If you pass an empty string in *logFile*, **SELECT LOG FILE** presents an Save File dialog box, allowing the user to choose the name and location of the log file to be created. Si el archivo se crea correctamente, la variable OK toma el valor 1. De lo contrario, si el usuario hace clic en Cancelar o si el archivo de registro no pudo ser creado, OK toma el valor 0. +Si se pasa una cadena vacía en *logFile*, **SELECT LOG FILE** presenta un cuadro de diálogo Save File, que permite al usuario elegir el nombre y la ubicación del archivo de registro que se va a crear. Si el archivo se crea correctamente, la variable OK toma el valor 1. De lo contrario, si el usuario hace clic en Cancelar o si el archivo de registro no pudo ser creado, OK toma el valor 0. -**Note:** The new log file is not generated immediately after execution of the command, but after the next backup (the parameter is kept in the data file and will be taken into account even if the database is closed in the meantime) or a call to the [New log file](new-log-file.md) command. Puede llamar al comando [BACKUP](../commands-legacy/backup.md) para activar la creación del archivo de registro. +**Nota:** el nuevo archivo de registro no se genera inmediatamente después de la ejecución del comando, sino después de la siguiente copia de seguridad (el parámetro se mantiene en el archivo de datos y se tendrá en cuenta aunque la base de datos se cierre mientras tanto) o de una llamada al comando [New log file](new-log-file.md). Puede llamar al comando [BACKUP](../commands-legacy/backup.md) para activar la creación del archivo de registro. -If you pass *\** in *logFile*, **SELECT LOG FILE** closes the current log file for the database. La variable OK toma el valor 1 cuando se cierra el archivo de registro. +Si pasa *\** en *logFile*, **SELECT LOG FILE** cierra el archivo de registro actual para la base de datos. La variable OK toma el valor 1 cuando se cierra el archivo de registro. ## Variables y conjuntos sistema diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/web-event.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/web-event.md index 8fa85cd29233d3..d152985e83fc99 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/web-event.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/web-event.md @@ -8,9 +8,9 @@ displayed_sidebar: docs -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-------------------------: | ---------------------------------- | -| Resultado | Object | ← | Information on the triggered event | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-------------------------: | ------------------------------------ | +| Resultado | Object | ← | Información sobre el evento activado | @@ -28,9 +28,9 @@ El objeto devuelto contiene las siguientes propiedades: | --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | | eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | -| data | | object | Additional information depending on the involved component | +| data | | object | Información adicional en función del componente implicado | | | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | -| | row | number | Data Table component: row number | +| | row | number | Componente de la tabla de datos: número de línea | | | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | #### Ejemplo @@ -43,11 +43,11 @@ This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text i ![](../assets/en/commands/web-event2.png) -In this scenario: +En este escenario: - The Text input component has `orderNumber` as Server side reference. ![](../assets/en/commands/web-event3.png) -- The Text component has `helpOn_orderNumber` as Server side reference. +- El componente Texto tiene `helpOn_orderNumber` como referencia del lado Servidor. ![](../assets/en/commands/web-event4.png) - The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands/web-form.md b/i18n/es/docusaurus-plugin-content-docs/current/commands/web-form.md index d44a8703f67035..11a368e5bc0f4d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands/web-form.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands/web-form.md @@ -8,9 +8,9 @@ displayed_sidebar: docs -| Parámetros | Tipo | | Descripción | -| ---------- | -------------------------- | :-------------------------: | --------------------------- | -| Resultado | 4D.WebForm | ← | New `Web Form` proxy object | +| Parámetros | Tipo | | Descripción | +| ---------- | -------------------------- | :-------------------------: | ----------------------------- | +| Resultado | 4D.WebForm | ← | Nuevo objeto proxy `Web Form` | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md index 5f2cb4d2b54d79..b442b76cdbd744 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md @@ -315,7 +315,7 @@ Se hace referencia a una expresión por el tipo de datos que devuelve. Hay vario | Col[5] | Elementos de colección | Un elemento de colección es una expresión que puede ser de todo tipo soportado | | $entitySel[0] | Entity | Un elemento de una selección de entidades ORDA es una expresión de tipo entidad. Este tipo de expresión es **no asignable** | -### Expresiones asignables y no asignables +### Expresiones asignables y no asignables {#assignable-vs-non-assignable-expressions} Una expresión puede ser simplemente una constante literal, como el número 4 o la cadena "Hello", o una variable como `$myButton`. También puede utilizar los operadores. Por ejemplo, 4 + 2 es una expresión que utiliza el operador de adición para sumar dos números y devolver el resultado 6. En todos los casos, estas expresiones son **no asignables**, lo que significa que no se les puede asignar un valor. En 4D, las expresiones pueden ser **asignables**. Una expresión es asignable cuando puede utilizarse a la izquierda del operador de asignación. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/FormObjects/properties_Animation.md b/i18n/es/docusaurus-plugin-content-docs/version-19/FormObjects/properties_Animation.md index 84d3fb3dfa5031..d18384dc9d0775 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/FormObjects/properties_Animation.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/FormObjects/properties_Animation.md @@ -53,7 +53,7 @@ Permite al usuario mantener pulsado el botón del ratón para mostrar las imáge ## Cambiar cada x segundos -Enables cycling through the contents of the picture button at the specified speed (in seconds). En este modo, se ignoran todas las demás opciones. +Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). En este modo, se ignoran todas las demás opciones. #### Gramática JSON diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/FormObjects/properties_Reference.md b/i18n/es/docusaurus-plugin-content-docs/version-19/FormObjects/properties_Reference.md index f010447f6e3f74..5c006d1bcf8d77 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/FormObjects/properties_Reference.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/FormObjects/properties_Reference.md @@ -66,7 +66,7 @@ En esta página encontrará una lista completa de todas las propiedades de los o | [`fontTheme`](properties_Text.md#font-theme) | Establece el estilo automático | "normal", "main", "additional" | | [`fontWeight`](properties_Text.md#bold) | Ajusta el texto seleccionado para que aparezca más oscuro y pesado. | "normal", "bold" | | [`footerHeight`](properties_Footers.md#height) | Sirve para fijar la altura de la línea | decimal positivo + px | em | -| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Enables cycling through the contents of the picture button at the specified speed (in seconds). | mínimo: 0 | +| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). | mínimo: 0 | | **g** | | | | [`graduationStep`](properties_Scale.md#graduation-step) | Medición de la visualización de la escala. | mínimo: 0 | | **h** | | | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md index 804f8eff06d2f6..77db9b6be3a012 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CollectionClass.md @@ -264,7 +264,7 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]
    -**.concat**( *value* : any { ; *...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Colección diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CryptoKeyClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CryptoKeyClass.md index 0dcbda2559aa1c..73a64cd7179651 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CryptoKeyClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/CryptoKeyClass.md @@ -63,7 +63,7 @@ La función `4D.CryptoKey.new()` crea un #### *CryptoKey* -El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. It is a shared object and can therefore be used by multiple 4D processes simultaneously. +El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. Es un objeto compartido y, por tanto, puede ser utilizado por varios procesos 4D simultáneamente. #### Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md index 3f8c3edab31bc9..bad48161b88792 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/API/DataStoreClass.md @@ -1018,7 +1018,7 @@ Para crear un registro de peticiones ORDA del lado del cliente, llame a esta fun > Debe añadirse manualmente un carácter \N al final del archivo para realizar una validación JSON -- Si se pasa un entero *reqNum*, se vacía el registro en memoria (si lo hay) y se inicializa un nuevo registro. It will keep *reqNum* requests in memory until the number is reached, in which case the oldest entries are emptied (FIFO stack).
    Si `.startRequestLog()` es llamado con un *reqNum* mientras un registro fue iniciado previamente en un archivo, el registro de archivos es detenido. +- Si se pasa un entero *reqNum*, se vacía el registro en memoria (si lo hay) y se inicializa un nuevo registro. Conserva las peticiones *reqNum* en memoria hasta que se alcance el número, en cuyo caso se vacían las entradas más antiguas (pila FIFO).
    Si `.startRequestLog()` es llamado con un *reqNum* mientras un registro fue iniciado previamente en un archivo, el registro de archivos es detenido. - Si no ha pasado ningún parámetro, el registro se inicia en la memoria. Si `.startRequestLog()` fue llamado previamente con un *reqNum* (antes de una `.stopRequestLog()`), los datos del registro se apilan en memoria hasta la próxima vez que se vacíe el registro o se llame a `.stopRequestLog()`. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md index f4454ac48a73ad..2f436782c4cb98 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md @@ -782,9 +782,9 @@ La propiedad [`isSingleton`](../API/ClassClass.md#issingleton) de los objetos Cl La propiedad [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) de los objetos Class permite saber si la clase es un singleton de sesión. -### Exposed singleton functions +### Funciones singleton expuestas -Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). +Las funciones singleton compartidas y de sesión soportan la [palabra clave `exposed`](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). Una función singleton expuesta puede ser llamada directamente por peticiones REST. Esta función es útil para diseñar [páginas Qodly que llamen a las funciones 4D](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). ### Ejemplos diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md index d0ca9c46cc3021..c9d42a5e13ca96 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md @@ -312,7 +312,7 @@ Se hace referencia a una expresión por el tipo de datos que devuelve. Hay vario | Col[5] | Elementos de colección | Un elemento de colección es una expresión que puede ser de todo tipo soportado | | $entitySel[0] | Entity | Un elemento de una selección de entidades ORDA es una expresión de tipo entidad. Este tipo de expresión es **no asignable** | -### Expresiones asignables y no asignables +### Expresiones asignables vs no asignables {#assignable-vs-non-assignable-expressions} Una expresión puede ser simplemente una constante literal, como el número 4 o la cadena "Hello", o una variable como `$myButton`. También puede utilizar los operadores. Por ejemplo, 4 + 2 es una expresión que utiliza el operador de adición para sumar dos números y devolver el resultado 6. En todos los casos, estas expresiones son **no asignables**, lo que significa que no se les puede asignar un valor. En 4D, las expresiones pueden ser **asignables**. Una expresión es asignable cuando puede utilizarse a la izquierda del operador de asignación. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Animation.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Animation.md index 1a695df8846669..9641fb62524331 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Animation.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Animation.md @@ -65,7 +65,7 @@ Permite al usuario mantener pulsado el botón del ratón para mostrar las imáge ## Cambiar cada x segundos -Enables cycling through the contents of the picture button at the specified speed (in seconds). En este modo, se ignoran todas las demás opciones. +Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). En este modo, se ignoran todas las demás opciones. #### Gramática JSON diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Reference.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Reference.md index bf427697889987..95d2dd6ab60c67 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Reference.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Reference.md @@ -85,7 +85,7 @@ En esta página encontrará una lista completa de todas las propiedades de los o | [`fontTheme`](properties_Text.md#font-theme) | Establece el estilo automático | "normal", "main", "additional" | | [`fontWeight`](properties_Text.md#bold) | Ajusta el texto seleccionado para que aparezca más oscuro y pesado. | "normal", "bold" | | [`footerHeight`](properties_Footers.md#height) | Sirve para fijar la altura de la línea | decimal positivo + px | em | -| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Enables cycling through the contents of the picture button at the specified speed (in seconds). | mínimo: 0 | +| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). | mínimo: 0 | | **g** | | | | [`graduationStep`](properties_Scale.md#graduation-step) | Medición de la visualización de la escala. | mínimo: 0 | | **h** | | | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md index 94b602ba7d082b..8ed96688162c55 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/glossary.md @@ -9,7 +9,7 @@ title: Glosario ## Acción -Todas las acciones que pueden realizarse en un [recurso](#resource). Available actions are: create, read, update, drop, execute, and promote. +Todas las acciones que pueden realizarse en un [recurso](#resource). Las acciones disponibles son: create, read, update, drop, execute y promote. ## Atributo diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md index aa87dab2cb54fa..65034f4f61c6fa 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/orda-events.md @@ -17,7 +17,7 @@ No se puede activar directamente la ejecución de la función de evento. Los eve :::info Nota de compatibilidad -Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). +Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Varios eventos pueden ejecutarse en paralelo siempre que afecten a entidades distintas (es decir, registros). ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index cc698dfa3ce19b..96207ad628a079 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -964,7 +964,7 @@ exposed Function :::note -The `exposed` keyword can only be used with the objects decribed above. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. +La palabra clave `exposed` solo puede utilizarse con los objetos descritos anteriormente. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Users/overview.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Users/overview.md index d67ac6744415b1..e9b602dd5dfe24 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Users/overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Users/overview.md @@ -8,7 +8,7 @@ Si diferentes personas utilizan una aplicación, lo que suele ocurrir en la arqu La estrategia de control de acceso 4D depende de la configuración de su despliegue: - in multi-user Web and REST applications, access control is based upon [ORDA's Roles and privileges](../ORDA/privileges.md) features. -- in multi-user desktop applications, you can rely on 4D users and groups, +- en aplicaciones de escritorio multiusuario, puede confiar en los usuarios y grupos de 4D, - en aplicaciones monousuario, el acceso de los usuarios se controla a través de la sesión del sistema, utilizando comandos como [`Current system user`](../commands-legacy/current-system-user.md). :::tip Entradas de blog relacionadas diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md index ecda94659901ce..a0b38874ca72db 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/ViewPro/commands/vp-set-workbook-options.md @@ -55,7 +55,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | customList | collection | La lista para que los usuarios personalicen el relleno de arrastre, dar prioridad a que coincida con esta lista en cada relleno. Cada elemento de colección es una colección de cadenas. Vet en [SpreadJS docs](https://developer.mescius.com/spreadjs/docs/features/cells/AutoFillData/AutoFillLists). | | cutCopyIndicatorBorderColor | string | Color del borde del indicador que aparece cuando el usuario corta o copia la selección. | | cutCopyIndicatorVisible | boolean | Muestra un indicador al copiar o cortar el elemento seleccionado. | -| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Llena las celdas con series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | +| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Borra los valores de las celdas.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Llena las celdas con series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | | enableAccessibility | boolean | El soporte de accesibilidad está activado en la hoja de cálculo. | | enableFormulaTextbox | boolean | Se activa la caja de texto de la fórmula. | | grayAreaBackColor | string | Una cadena color utilizada para representar el color de fondo del área gris, como "red", "#FFFF00", "rgb(255,0,0)", "Accent 5", etc. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md index 637b01623e1567..592a131b1b226d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/WritePro/commands/wp-import-document.md @@ -51,16 +51,16 @@ Por defecto, las expresiones HTML insertadas en documentos heredados de 4D Write Puede pasar un objeto para definir cómo se gestionan los siguientes atributos durante la operación de importación: -| **Atributo** | **Tipo** | **Description** | -| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | -| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | -| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | -| fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | -| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. Si se vuelve a aplicar una hoja de estilo con un ajuste de colapso automático de bordes después de la operación de importación, se ignorará el ajuste. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | -| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | -| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | -| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | +| **Atributo** | **Tipo** | **Description** | +| ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | +| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | +| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | +| fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** - Las referencias de campo .docx se importan como etiquetas entre llaves dobles ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | +| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. Si se vuelve a aplicar una hoja de estilo con un ajuste de colapso automático de bordes después de la operación de importación, se ignorará el ajuste. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | +| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | +| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | +| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | **Notas de compatibilidad** diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md index c521ca59af78e2..cd5f8bdcaad443 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAI.md @@ -36,9 +36,9 @@ Crear una instancia de la clase cliente OpenAI. #### Llave API ```4d -// as text +// como texto var $client:=cs.AIKit.OpenAI.new("your api key") -// as object +// como objeto var $client:=cs.AIKit.OpenAI.new({apiKey: "your api key"}) ``` @@ -58,7 +58,7 @@ $client.baseURL:="https://server.ai" ## Recursos API -La API ofrece acceso a múltiples recursos que permiten una interacción perfecta con los servicios de OpenAI. Each resource is encapsulated within a dedicated API class, offering a structured and intuitive way to interact with different functionalities. +La API ofrece acceso a múltiples recursos que permiten una interacción perfecta con los servicios de OpenAI. Cada recurso está encapsulado en una clase API específica, que ofrece una forma estructurada e intuitiva de interactuar con las distintas funcionalidades. | Nombre de la propiedad | Tipo | Descripción | | ---------------------- | ----------------------------------------------- | ------------------------------------------------ | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md index b237a978ab1103..0cbbae13977180 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIError.md @@ -45,4 +45,4 @@ La clase `OpenAIError` está diseñada para manejar errores devueltos por la API | `isNotFoundError` | Boolean | Indica si el error es un error 404 Not Found. | | `isUnprocessableEntityError` | Boolean | Indica si el error es un error de entidad no procesable (422). | | `isRateLimitError` | Boolean | Indica si el error es un error de límite de velocidad 429. | -| `isInternalServerError` | Boolean | Indicates if the error is a 500 or higher Internal Server error. | \ No newline at end of file +| `isInternalServerError` | Boolean | Indica si el error es un error de servidor interno de tipo 500 o superior. | \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIResult.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIResult.md index ef3e9ad3508ea9..42afb6d5188d50 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/aikit/Classes/OpenAIResult.md @@ -46,7 +46,7 @@ La estructura del objeto `rateLimit` es la siguiente: ### `throw()` -Lanza el primer error de la colección `errors`. This function is useful for propagating errors up the call stack. +Lanza el primer error de la colección `errors`. Esta función es útil para propagar los errores por la pila de llamadas. ## Clases heredadas diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md index d4288b04753c41..e24fcfe496ce30 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/call-chain.md @@ -9,9 +9,9 @@ displayed_sidebar: docs -| Parámetros | Tipo | | Descripción | -| ---------- | ---------- | --------------------------- | ---------------------------------------------------------------- | -| Resultado | Collection | ← | Collection of objects describing the call chain within a process | +| Parámetros | Tipo | | Descripción | +| ---------- | ---------- | --------------------------- | ----------------------------------------------------------------------------- | +| Resultado | Collection | ← | Colección de objetos que describen la cadena de llamadas dentro de un proceso | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md index 8a4db22e4f7d89..c0840cd6de402c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md @@ -25,7 +25,7 @@ Si el comando se ejecuta en una aplicación 4D que no utiliza localmente una lic Este comando recarga los archivos de licencia desde el disco y actualiza los derechos asociados si han sido modificados. ::: -The returned object contains the following properties: +El objeto devuelto contiene las siguientes propiedades: ```json { diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/select-log-file.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/select-log-file.md index 05b28a5eb1d550..4a6b78734f3cf7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/select-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/commands/select-log-file.md @@ -19,13 +19,13 @@ displayed_sidebar: docs El comando **SELECT LOG FILE** crea o cierra el archivo de historial de acuerdo al valor que pase en el parámetro. -En *logFile*, pase el nombre o la ruta completa del archivo de registro a ser creado. If you only pass a name, the file will be created in the "Logs" folder of the database located next to the database structure file. +En *logFile*, pase el nombre o la ruta completa del archivo de registro a ser creado. Si solo pasa un nombre, el archivo se creará en la carpeta "Logs" de la base de datos situada junto al archivo de estructura de la base de datos. -If you pass an empty string in *logFile*, **SELECT LOG FILE** presents an Save File dialog box, allowing the user to choose the name and location of the log file to be created. Si el archivo se crea correctamente, la variable OK toma el valor 1. De lo contrario, si el usuario hace clic en Cancelar o si el archivo de registro no pudo ser creado, OK toma el valor 0. +Si se pasa una cadena vacía en *logFile*, **SELECT LOG FILE** presenta un cuadro de diálogo Save File, que permite al usuario elegir el nombre y la ubicación del archivo de registro que se va a crear. Si el archivo se crea correctamente, la variable OK toma el valor 1. De lo contrario, si el usuario hace clic en Cancelar o si el archivo de registro no pudo ser creado, OK toma el valor 0. -**Note:** The new log file is not generated immediately after execution of the command, but after the next backup (the parameter is kept in the data file and will be taken into account even if the database is closed in the meantime) or a call to the [New log file](new-log-file.md) command. Puede llamar al comando [BACKUP](../commands-legacy/backup.md) para activar la creación del archivo de registro. +**Nota:** el nuevo archivo de registro no se genera inmediatamente después de la ejecución del comando, sino después de la siguiente copia de seguridad (el parámetro se mantiene en el archivo de datos y se tendrá en cuenta aunque la base de datos se cierre mientras tanto) o de una llamada al comando [New log file](new-log-file.md). Puede llamar al comando [BACKUP](../commands-legacy/backup.md) para activar la creación del archivo de registro. -If you pass *\** in *logFile*, **SELECT LOG FILE** closes the current log file for the database. La variable OK toma el valor 1 cuando se cierra el archivo de registro. +Si pasa *\** en *logFile*, **SELECT LOG FILE** cierra el archivo de registro actual para la base de datos. La variable OK toma el valor 1 cuando se cierra el archivo de registro. ## Variables y conjuntos sistema diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md index 82d3b3a53faccb..e0bc4c12bf5d91 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md @@ -318,7 +318,7 @@ Se hace referencia a una expresión por el tipo de datos que devuelve. Hay vario | Col[5] | Elementos de colección | Un elemento de colección es una expresión que puede ser de todo tipo soportado | | $entitySel[0] | Entity | Un elemento de una selección de entidades ORDA es una expresión de tipo entidad. Este tipo de expresión es **no asignable** | -### Expresiones asignables y no asignables +### Expresiones asignables y no asignables {#assignable-vs-non-assignable-expressions} Una expresión puede ser simplemente una constante literal, como el número 4 o la cadena "Hello", o una variable como `$myButton`. También puede utilizar los operadores. Por ejemplo, 4 + 2 es una expresión que utiliza el operador de adición para sumar dos números y devolver el resultado 6. En todos los casos, estas expresiones son **no asignables**, lo que significa que no se les puede asignar un valor. En 4D, las expresiones pueden ser **asignables**. Una expresión es asignable cuando puede utilizarse a la izquierda del operador de asignación. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/properties_Animation.md b/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/properties_Animation.md index 84d3fb3dfa5031..d18384dc9d0775 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/properties_Animation.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/properties_Animation.md @@ -53,7 +53,7 @@ Permite al usuario mantener pulsado el botón del ratón para mostrar las imáge ## Cambiar cada x segundos -Enables cycling through the contents of the picture button at the specified speed (in seconds). En este modo, se ignoran todas las demás opciones. +Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). En este modo, se ignoran todas las demás opciones. #### Gramática JSON diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/properties_Reference.md b/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/properties_Reference.md index 95534fb3af71cb..b7912a0898a40a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/properties_Reference.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/FormObjects/properties_Reference.md @@ -66,7 +66,7 @@ En esta página encontrará una lista completa de todas las propiedades de los o | [`fontTheme`](properties_Text.md#font-theme) | Establece el estilo automático | "normal", "main", "additional" | | [`fontWeight`](properties_Text.md#bold) | Ajusta el texto seleccionado para que aparezca más oscuro y pesado. | "normal", "bold" | | [`footerHeight`](properties_Footers.md#height) | Sirve para fijar la altura de la línea | decimal positivo + px | em | -| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Enables cycling through the contents of the picture button at the specified speed (in seconds). | mínimo: 0 | +| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). | mínimo: 0 | | **g** | | | | [`graduationStep`](properties_Scale.md#graduation-step) | Medición de la visualización de la escala. | mínimo: 0 | | **h** | | | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md index daec7235ed587d..3d6a5e115053c8 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/ViewPro/classes.md @@ -206,7 +206,7 @@ La propiedad `.borderBottom` es el **.borderTop** : [cs.ViewPro.LineBorder](#lineborder) -La propiedad `.borderRight` es la top border line of the table . +La propiedad `.borderRight` es la línea del borde superior de la tabla . ### .borderHorizontal diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md index 804f8eff06d2f6..77db9b6be3a012 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CollectionClass.md @@ -264,7 +264,7 @@ $c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]
    -**.concat**( *value* : any { ; *...valueN* } ) : Collection +**.concat**( *value* : any { ; *...valueN* } ) : Colección diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CryptoKeyClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CryptoKeyClass.md index 0dcbda2559aa1c..73a64cd7179651 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/CryptoKeyClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/CryptoKeyClass.md @@ -63,7 +63,7 @@ La función `4D.CryptoKey.new()` crea un #### *CryptoKey* -El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. It is a shared object and can therefore be used by multiple 4D processes simultaneously. +El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. Es un objeto compartido y, por tanto, puede ser utilizado por varios procesos 4D simultáneamente. #### Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md index 3f3ccc24ccd194..ff7da6d377949d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/DataStoreClass.md @@ -1018,7 +1018,7 @@ Para crear un registro de peticiones ORDA del lado del cliente, llame a esta fun > Debe añadirse manualmente un carácter \N al final del archivo para realizar una validación JSON -- Si se pasa un entero *reqNum*, se vacía el registro en memoria (si lo hay) y se inicializa un nuevo registro. It will keep *reqNum* requests in memory until the number is reached, in which case the oldest entries are emptied (FIFO stack).
    Si `.startRequestLog()` es llamado con un *reqNum* mientras un registro fue iniciado previamente en un archivo, el registro de archivos es detenido. +- Si se pasa un entero *reqNum*, se vacía el registro en memoria (si lo hay) y se inicializa un nuevo registro. Conserva las peticiones *reqNum* en memoria hasta que se alcance el número, en cuyo caso se vacían las entradas más antiguas (pila FIFO).
    Si `.startRequestLog()` es llamado con un *reqNum* mientras un registro fue iniciado previamente en un archivo, el registro de archivos es detenido. - Si no ha pasado ningún parámetro, el registro se inicia en la memoria. Si `.startRequestLog()` fue llamado previamente con un *reqNum* (antes de una `.stopRequestLog()`), los datos del registro se apilan en memoria hasta la próxima vez que se vacíe el registro o se llame a `.stopRequestLog()`. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md index 0f9f75307d510d..e0a2a1330a8f39 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command. +The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. Los objetos `4D.WebForm` se instancian con el comando [`webForm`](../commands/web-form.md).
    Historia @@ -33,7 +33,7 @@ The `WebForm` class contains functions and properties allowing to handle your Qo The components of web pages are objects that are available directly as properties of these web pages. -The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. +The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. Estos objetos tienen funciones que puede utilizar para gestionar sus componentes de forma dinámica. #### Ejemplo @@ -60,9 +60,9 @@ While `myForm` may not display typical object properties when examined in the de -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ------------------------------------------ | -| state | string | -> | Name of state to disable from the web page | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ----------------------------------------------- | +| state | string | -> | Nombre del estado a desactivar de la página web | @@ -73,7 +73,7 @@ The `.disableState()` function Esta función no hace nada si: - the *state* is currently not enabled in the web page, -- the *state* does not exist for the web page. +- el *estado* no existe para la página web. Si [activa](#enablestate) o desactiva varios estados en la misma función usuario, todas las modificaciones se envían al mismo tiempo al cliente una vez finalizada la función. @@ -85,9 +85,9 @@ For more information on web pages states, please refer to the [States section in -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ---------------------------------------- | -| state | string | -> | Name of state to enable on the web pages | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ---------------------------------------------- | +| state | string | -> | Nombre del estado a activar en las páginas web | @@ -98,7 +98,7 @@ The `.enableState()` function en Esta función no hace nada si: - the *state* has already been enabled on the web page, -- the *state* does not exist for the web page. +- el *estado* no existe para la página web. Si activa o [desactiva](#disablestate) varios estados dentro de la misma función usuario, todas las modificaciones se envían al mismo tiempo al cliente una vez que la función termina. @@ -156,9 +156,9 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ---------------------------------------------- | -| msg | string | -> | Information message to display in the web page | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ------------------------------------------------- | +| msg | string | -> | Mensaje de información a mostrar en la página web | @@ -191,9 +191,9 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-: | ------------------------------------------ | -| msg | string | -> | Warning message to display in the web page | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-: | ---------------------------------------------------- | +| msg | string | -> | Mensaje de advertencia para mostrar en la página web | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md index 25a53ce63f5336..c0ebfd153ea5a1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md @@ -3,7 +3,7 @@ id: WebFormItemClass title: WebFormItem --- -The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. +La clase `4D.WebFormItem` le permite manejar el comportamiento de sus componentes webform Qodly. Los objetos `4D.WebFormItem` son propiedades del objeto [`4D.WebForm`](WebFormClass.md) devuelto por el comando [`Web Form`](../commands/web-form.md). @@ -62,7 +62,7 @@ La función `.hide()` oculta el com #### Ejemplo -To call a function that hides an image when the user clicks a button: +Para llamar a una función que oculta una imagen cuando el usuario hace clic en un botón: 1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: @@ -78,7 +78,7 @@ exposed Function isHidden() 2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". 3. Select the Button component and add an `onclick` event to it. -4. Attach the `isHidden` function to the event. +4. Adjunta la función `isHidden` al evento. ### .removeCSSClass() diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md index f4454ac48a73ad..2f436782c4cb98 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/classes.md @@ -782,9 +782,9 @@ La propiedad [`isSingleton`](../API/ClassClass.md#issingleton) de los objetos Cl La propiedad [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) de los objetos Class permite saber si la clase es un singleton de sesión. -### Exposed singleton functions +### Funciones singleton expuestas -Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). +Las funciones singleton compartidas y de sesión soportan la [palabra clave `exposed`](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). Una función singleton expuesta puede ser llamada directamente por peticiones REST. Esta función es útil para diseñar [páginas Qodly que llamen a las funciones 4D](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). ### Ejemplos diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md index cbb2891ff73f2a..96b7c9e88d6eea 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md @@ -312,7 +312,7 @@ Se hace referencia a una expresión por el tipo de datos que devuelve. Hay vario | Col[5] | Elementos de colección | Un elemento de colección es una expresión que puede ser de todo tipo soportado | | $entitySel[0] | Entity | Un elemento de una selección de entidades ORDA es una expresión de tipo entidad. Este tipo de expresión es **no asignable** | -### Expresiones asignables y no asignables +### Expresiones asignables vs no asignables {#assignable-vs-non-assignable-expressions} Una expresión puede ser simplemente una constante literal, como el número 4 o la cadena "Hello", o una variable como `$myButton`. También puede utilizar los operadores. Por ejemplo, 4 + 2 es una expresión que utiliza el operador de adición para sumar dos números y devolver el resultado 6. En todos los casos, estas expresiones son **no asignables**, lo que significa que no se les puede asignar un valor. En 4D, las expresiones pueden ser **asignables**. Una expresión es asignable cuando puede utilizarse a la izquierda del operador de asignación. Por ejemplo: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md index e55a538ddc4a02..a1f7b072584a41 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormEditor/forms.md @@ -114,7 +114,7 @@ La compatibilidad con Fluent UI se encuentra actualmente en fase Developer Previ :::info Disponibilidad -This feature can be used **in 4D projects on Windows**. It is not available on macOS or in binary 4D databases on Windows. +This feature can be used **in 4D projects on Windows**. No está disponible en macOS ni en bases de datos binarias 4D en Windows. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Animation.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Animation.md index 1a695df8846669..9641fb62524331 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Animation.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Animation.md @@ -65,7 +65,7 @@ Permite al usuario mantener pulsado el botón del ratón para mostrar las imáge ## Cambiar cada x segundos -Enables cycling through the contents of the picture button at the specified speed (in seconds). En este modo, se ignoran todas las demás opciones. +Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). En este modo, se ignoran todas las demás opciones. #### Gramática JSON diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Reference.md b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Reference.md index bf427697889987..95d2dd6ab60c67 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Reference.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/FormObjects/properties_Reference.md @@ -85,7 +85,7 @@ En esta página encontrará una lista completa de todas las propiedades de los o | [`fontTheme`](properties_Text.md#font-theme) | Establece el estilo automático | "normal", "main", "additional" | | [`fontWeight`](properties_Text.md#bold) | Ajusta el texto seleccionado para que aparezca más oscuro y pesado. | "normal", "bold" | | [`footerHeight`](properties_Footers.md#height) | Sirve para fijar la altura de la línea | decimal positivo + px | em | -| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Enables cycling through the contents of the picture button at the specified speed (in seconds). | mínimo: 0 | +| [`frameDelay`](properties_Animation.md#switch-every-x-ticks) | Permite recorrer el contenido del botón de imagen a la velocidad especificada (en segundos). | mínimo: 0 | | **g** | | | | [`graduationStep`](properties_Scale.md#graduation-step) | Medición de la visualización de la escala. | mínimo: 0 | | **h** | | | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md index 94b602ba7d082b..8ed96688162c55 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/glossary.md @@ -9,7 +9,7 @@ title: Glosario ## Acción -Todas las acciones que pueden realizarse en un [recurso](#resource). Available actions are: create, read, update, drop, execute, and promote. +Todas las acciones que pueden realizarse en un [recurso](#resource). Las acciones disponibles son: create, read, update, drop, execute y promote. ## Atributo diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md index e6a16ca3205296..d81c186249f125 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/orda-events.md @@ -24,7 +24,7 @@ No se puede activar directamente la ejecución de la función de evento. Los eve :::info Nota de compatibilidad -Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Several events can run in parallel as long as they involve distinct entities (i.e. records). +Los eventos de entidad ORDA en el almacen de datos equivalen a triggers en la base de datos 4D. Sin embargo, las acciones desencadenadas a nivel de la base de datos 4D utilizando los comandos del lenguaje clásico 4D o las acciones estándar no desencadenan eventos ORDA. Note also that, unlike triggers, ORDA entity events do not lock the entire underlying table of a dataclass while saving or dropping entities. Varios eventos pueden ejecutarse en paralelo siempre que afecten a entidades distintas (es decir, registros). ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index cc698dfa3ce19b..96207ad628a079 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -964,7 +964,7 @@ exposed Function :::note -The `exposed` keyword can only be used with the objects decribed above. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. +La palabra clave `exposed` solo puede utilizarse con los objetos descritos anteriormente. Si se utiliza con una función de [ clase usuario estándar](Concepts/classes.md), se ignora y el compilador devuelve un error. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md index 2a9100a293d13c..1981b5f2286c8d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ORDA/privileges.md @@ -30,14 +30,14 @@ Puede asignar acciones de permiso específicas a los siguientes recursos en su p - el [datastore](../ORDA/dsMapping.md#datastore) - las [clases de datos](../ORDA/dsMapping.md#dataclass) - [attributes](../ORDA/dsMapping.md#attribute) (including [computed](./ordaClasses.md#computed-attributes-1) and [alias](./ordaClasses.md#alias-attributes-1)) -- functions of the [data model classes](../ORDA/ordaClasses.md) +- funciones de las [clases del modelo de datos](../ORDA/ordaClasses.md) - funciones [singleton](../REST/$singleton.md) Cada vez que se accede a un recurso dentro de una sesión (sin importar la forma en que se acceda), 4D verifica que la sesión tenga los permisos apropiados y rechaza el acceso si no está autorizado. ## Permisos -A permission is the ability to do an action on a resource. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Los permisos se definen para el proyecto en el archivo [`roles.json`](#rolesjson-file). Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). +Un permiso es la capacidad de realizar una acción sobre un recurso. For example, *execute the ds.myTable.myFunction()* represents a **permission**. Los permisos se definen para el proyecto en el archivo [`roles.json`](#rolesjson-file). Cada permiso se puede dar a uno o más [privilegios](#privileges-and-roles). When **no specific permission** has been defined for a resource, access to the resource may be automatically **unrestricted** or **restricted** depending on the [default mode defined for the project](#restriction-modes). @@ -194,7 +194,7 @@ El archivo `roles.json` describe todos los parámetros de seguridad web del proy ::: -### Default File Location and Content +### Ubicación y contenido del archivo por defecto Cuando se crea un nuevo proyecto, se genera un archivo `roles.json` por defecto en: @@ -244,7 +244,7 @@ In Qodly Studio for 4D, the login mode can be set using the [**Force login** opt ::: -## Restriction Modes +## Modos de restricción The `restrictedByDefault` property configures how every [resource](#resources) are accessed when [no specific permission is defined for it](#permission): @@ -260,7 +260,7 @@ The `restrictedByDefault` property configures how every [resource](#resources) a ### Configuración recomendada -Depending on your environment, the recommended settings are: +Dependiendo de su entorno, los parámetros recomendados son: - **Producción**: defina tanto `restrictedByDefault` como [`forceLogin`](../REST/authUsers.md#force-login-mode) como **true**. Esto garantiza la máxima seguridad al requerir autenticación de usuario y permisos explícitamente definidos para el acceso a recursos. - **Desarrollo**: defina `restrictedByDefault` y [`forceLogin`](../REST/authUsers.md#force-login-mode) como **false**. Esto permite un acceso más fácil durante el desarrollo y la depuración, con la posibilidad de aplicar gradualmente restricciones. diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Users/overview.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Users/overview.md index d67ac6744415b1..e9b602dd5dfe24 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Users/overview.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Users/overview.md @@ -8,7 +8,7 @@ Si diferentes personas utilizan una aplicación, lo que suele ocurrir en la arqu La estrategia de control de acceso 4D depende de la configuración de su despliegue: - in multi-user Web and REST applications, access control is based upon [ORDA's Roles and privileges](../ORDA/privileges.md) features. -- in multi-user desktop applications, you can rely on 4D users and groups, +- en aplicaciones de escritorio multiusuario, puede confiar en los usuarios y grupos de 4D, - en aplicaciones monousuario, el acceso de los usuarios se controla a través de la sesión del sistema, utilizando comandos como [`Current system user`](../commands-legacy/current-system-user.md). :::tip Entradas de blog relacionadas diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md index ecda94659901ce..a0b38874ca72db 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/ViewPro/commands/vp-set-workbook-options.md @@ -55,7 +55,7 @@ En la siguiente tabla se listan las opciones de libros de trabajo disponibles: | customList | collection | La lista para que los usuarios personalicen el relleno de arrastre, dar prioridad a que coincida con esta lista en cada relleno. Cada elemento de colección es una colección de cadenas. Vet en [SpreadJS docs](https://developer.mescius.com/spreadjs/docs/features/cells/AutoFillData/AutoFillLists). | | cutCopyIndicatorBorderColor | string | Color del borde del indicador que aparece cuando el usuario corta o copia la selección. | | cutCopyIndicatorVisible | boolean | Muestra un indicador al copiar o cortar el elemento seleccionado. | -| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Clears cell values.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Llena las celdas con series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | +| defaultDragFillType | number | El tipo de relleno de arrastre por defecto. Valores disponibles :
    ConstanteValorDescripción
    vk auto fill type auto 5 Rellena automáticamente las celdas.
    vk auto fill type clear values 4 Borra los valores de las celdas.
    vk auto fill type copycells 0 Fills cells with all data objects, including values, formatting, and formulas.
    vk auto fill type fill formatting only 2 Llena las celdas solo con formato.
    vk auto fill type fill series 1 Llena las celdas con series.
    vk auto fill type fill without formatting 3 Rellena las celdas con valores y no con formato.
    | | enableAccessibility | boolean | El soporte de accesibilidad está activado en la hoja de cálculo. | | enableFormulaTextbox | boolean | Se activa la caja de texto de la fórmula. | | grayAreaBackColor | string | Una cadena color utilizada para representar el color de fondo del área gris, como "red", "#FFFF00", "rgb(255,0,0)", "Accent 5", etc. | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md index bb951c00c48b3f..212afdc4624c71 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WebServer/http-rules.md @@ -56,7 +56,7 @@ Se soportan las siguientes palabras clave de acción: | Palabras clave | Tipo de valor | Descripción | | --------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `removeHeaders` | Texto o colección de textos | Encabezado(s) para eliminar de las respuestas HTTP. Si un encabezado a eliminar no existe en el encabezado de respuesta, se ignora. | -| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. | +| `addHeaders` | Object | Nombre (texto) y valor (texto) del el(los) encabezado(s) para agregar a las respuestas HTTP. | | `setHeaders` | Object | Nombre (texto) y valor (texto) de los encabezados a modificar en las respuestas HTTP. Si un encabezado a modificar no existe en el encabezado de respuesta, se añade. | | `denyAccess` | Boolean | true para negar el acceso al recurso, false para permitir el acceso. Cuando el acceso a un recurso es denegado, el servidor web devuelve un estado 403 por defecto | | `redirect` | Text | Redirigir URL. Cuando se activa una redirección, el servidor web devuelve un estado 302 por defecto | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md index 637b01623e1567..592a131b1b226d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/WritePro/commands/wp-import-document.md @@ -51,16 +51,16 @@ Por defecto, las expresiones HTML insertadas en documentos heredados de 4D Write Puede pasar un objeto para definir cómo se gestionan los siguientes atributos durante la operación de importación: -| **Atributo** | **Tipo** | **Description** | -| ----------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | -| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | -| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | -| fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** \- .docx field references are imported as labels within double curly braces ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | -| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. Si se vuelve a aplicar una hoja de estilo con un ajuste de colapso automático de bordes después de la operación de importación, se ignorará el ajuste. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | -| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | -| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | -| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | +| **Atributo** | **Tipo** | **Description** | +| ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| anchoredTextAreas | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las áreas de texto ancladas en Word. Valores disponibles:

    **anchored** (por defecto) - Las áreas de texto ancladas se tratan como cuadros de texto. **inline** - Las áreas de texto ancladas se tratan como texto en línea en la posición del ancla. **ignore** \- Las áreas de texto ancladas son ignoradas. **Nota**: el diseño y el número de páginas en el documento pueden cambiar. Ver también *Cómo importar formato .docx* | +| anchoredImages | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan las imágenes ancladas. Available values:

    **all** (default) - All anchored images are imported as anchored images with their text wrapping properties (exception: the .docx wrapping option "tight" is imported as wrap square). **ignoreWrap** \- Las imágenes ancladas son importadas, pero todo texto que se envuelve alrededor de la imagen es ignorado. **ignore** \- Las imágenes ancladas no son importadas. | +| secciones | Text | Sólo para documentos MS Word (.docx). Especifica cómo se maneja la sección. Valores disponibles:

    **all** (por defecto) - Se importan todas las secciones. Secciones continuas, incluso impares se convierten en secciones estándar. **ignore** \- Sections are converted to default 4D Write Pro sections (A4 portrait layout without header or footer). **Nota**: las rupturas de secciones de cualquier tipo pero continuas se convierten en rupturas de sección con rupturas de página. Continuous section breaks are imported as continuous section breaks. | +| fields | Text | Sólo para documentos MS Word (.docx). Especifica cómo se manejan los campos .docx que no pueden ser convertidos a fórmulas 4D Write Pro. Valores disponibles:

    **ignore** \- Los campos .docx son ignorados. **label** - Las referencias de campo .docx se importan como etiquetas entre llaves dobles ("{{ }}"). Ej: el campo "ClientName" se importará como {{ClientName}}. **value** (default) - El último valor calculado para el campo .docx (si está disponible) es importado. **Note**: If a .docx field corresponds to a 4D Write Pro variable, the field is imported as a formula and this option is ignored. | +| borderRules | Text | Sólo para documentos MS Word (.docx). Especifica cómo se gestionan los bordes de los párrafos. Valores disponibles:

    **collapse** \- El formato del párrafo se modifica para imitar los bordes colapsados automáticamente. Tenga en cuenta que la propiedad contraída sólo se aplica durante la operación de importación. Si se vuelve a aplicar una hoja de estilo con un ajuste de colapso automático de bordes después de la operación de importación, se ignorará el ajuste. **noCollapse** (por defecto) - No se modifica el formato de los párrafos. | +| preferredFontScriptType | Text | Sólo para documentos MS Word (.docx). Especifica el tipo de letra preferido que se utilizará cuando se definan distintos tipos de letra para una única propiedad de fuente en OOXML. Valores disponibles:

    **latin** (por defecto) - script latino **bidi** \- script bidreccional. Adecuado si el documento es principalmente bidireccional de izquierda a derecha (LTR) o de derecha a izquierda (RTL) texto (por ejemplo, árabe o hebreo). **eastAsia** \- East Asian script. Adecuado si el documento es principalmente texto asiático. | +| htmlExpressions | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se manejan las expresiones HTML. Available values:

    **rawText** \- HTML expressions are imported as raw text within ##htmlBegin## and ##htmlEnd## tags **ignore** (default) - HTML expressions are ignored. | +| importDisplayMode | Text | Sólo para documentos 4D Write (.4w7). Especifica cómo se gestiona la visualización de imágenes. Available values:

    **legacy -** 4W7 image display mode is converted using a background image if different than scaled to fit. **noLegacy** (default) - 4W7 image display mode is converted to the *imageDisplayMode* attribute if different than scaled to fit. | **Notas de compatibilidad** diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md index c521ca59af78e2..cd5f8bdcaad443 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAI.md @@ -36,9 +36,9 @@ Crear una instancia de la clase cliente OpenAI. #### Llave API ```4d -// as text +// como texto var $client:=cs.AIKit.OpenAI.new("your api key") -// as object +// como objeto var $client:=cs.AIKit.OpenAI.new({apiKey: "your api key"}) ``` @@ -58,7 +58,7 @@ $client.baseURL:="https://server.ai" ## Recursos API -La API ofrece acceso a múltiples recursos que permiten una interacción perfecta con los servicios de OpenAI. Each resource is encapsulated within a dedicated API class, offering a structured and intuitive way to interact with different functionalities. +La API ofrece acceso a múltiples recursos que permiten una interacción perfecta con los servicios de OpenAI. Cada recurso está encapsulado en una clase API específica, que ofrece una forma estructurada e intuitiva de interactuar con las distintas funcionalidades. | Nombre de la propiedad | Tipo | Descripción | | ---------------------- | ----------------------------------------------- | ------------------------------------------------ | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md index b237a978ab1103..0cbbae13977180 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIError.md @@ -45,4 +45,4 @@ La clase `OpenAIError` está diseñada para manejar errores devueltos por la API | `isNotFoundError` | Boolean | Indica si el error es un error 404 Not Found. | | `isUnprocessableEntityError` | Boolean | Indica si el error es un error de entidad no procesable (422). | | `isRateLimitError` | Boolean | Indica si el error es un error de límite de velocidad 429. | -| `isInternalServerError` | Boolean | Indicates if the error is a 500 or higher Internal Server error. | \ No newline at end of file +| `isInternalServerError` | Boolean | Indica si el error es un error de servidor interno de tipo 500 o superior. | \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIResult.md b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIResult.md index ef3e9ad3508ea9..42afb6d5188d50 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIResult.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/aikit/Classes/OpenAIResult.md @@ -46,7 +46,7 @@ La estructura del objeto `rateLimit` es la siguiente: ### `throw()` -Lanza el primer error de la colección `errors`. This function is useful for propagating errors up the call stack. +Lanza el primer error de la colección `errors`. Esta función es útil para propagar los errores por la pila de llamadas. ## Clases heredadas diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md index d4288b04753c41..e24fcfe496ce30 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/call-chain.md @@ -9,9 +9,9 @@ displayed_sidebar: docs -| Parámetros | Tipo | | Descripción | -| ---------- | ---------- | --------------------------- | ---------------------------------------------------------------- | -| Resultado | Collection | ← | Collection of objects describing the call chain within a process | +| Parámetros | Tipo | | Descripción | +| ---------- | ---------- | --------------------------- | ----------------------------------------------------------------------------- | +| Resultado | Collection | ← | Colección de objetos que describen la cadena de llamadas dentro de un proceso | diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/license-info.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/license-info.md index 8a4db22e4f7d89..c0840cd6de402c 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/license-info.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/license-info.md @@ -25,7 +25,7 @@ Si el comando se ejecuta en una aplicación 4D que no utiliza localmente una lic Este comando recarga los archivos de licencia desde el disco y actualiza los derechos asociados si han sido modificados. ::: -The returned object contains the following properties: +El objeto devuelto contiene las siguientes propiedades: ```json { diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/select-log-file.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/select-log-file.md index 05b28a5eb1d550..4a6b78734f3cf7 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/select-log-file.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/select-log-file.md @@ -19,13 +19,13 @@ displayed_sidebar: docs El comando **SELECT LOG FILE** crea o cierra el archivo de historial de acuerdo al valor que pase en el parámetro. -En *logFile*, pase el nombre o la ruta completa del archivo de registro a ser creado. If you only pass a name, the file will be created in the "Logs" folder of the database located next to the database structure file. +En *logFile*, pase el nombre o la ruta completa del archivo de registro a ser creado. Si solo pasa un nombre, el archivo se creará en la carpeta "Logs" de la base de datos situada junto al archivo de estructura de la base de datos. -If you pass an empty string in *logFile*, **SELECT LOG FILE** presents an Save File dialog box, allowing the user to choose the name and location of the log file to be created. Si el archivo se crea correctamente, la variable OK toma el valor 1. De lo contrario, si el usuario hace clic en Cancelar o si el archivo de registro no pudo ser creado, OK toma el valor 0. +Si se pasa una cadena vacía en *logFile*, **SELECT LOG FILE** presenta un cuadro de diálogo Save File, que permite al usuario elegir el nombre y la ubicación del archivo de registro que se va a crear. Si el archivo se crea correctamente, la variable OK toma el valor 1. De lo contrario, si el usuario hace clic en Cancelar o si el archivo de registro no pudo ser creado, OK toma el valor 0. -**Note:** The new log file is not generated immediately after execution of the command, but after the next backup (the parameter is kept in the data file and will be taken into account even if the database is closed in the meantime) or a call to the [New log file](new-log-file.md) command. Puede llamar al comando [BACKUP](../commands-legacy/backup.md) para activar la creación del archivo de registro. +**Nota:** el nuevo archivo de registro no se genera inmediatamente después de la ejecución del comando, sino después de la siguiente copia de seguridad (el parámetro se mantiene en el archivo de datos y se tendrá en cuenta aunque la base de datos se cierre mientras tanto) o de una llamada al comando [New log file](new-log-file.md). Puede llamar al comando [BACKUP](../commands-legacy/backup.md) para activar la creación del archivo de registro. -If you pass *\** in *logFile*, **SELECT LOG FILE** closes the current log file for the database. La variable OK toma el valor 1 cuando se cierra el archivo de registro. +Si pasa *\** en *logFile*, **SELECT LOG FILE** cierra el archivo de registro actual para la base de datos. La variable OK toma el valor 1 cuando se cierra el archivo de registro. ## Variables y conjuntos sistema diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-event.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-event.md index 8fa85cd29233d3..d152985e83fc99 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-event.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-event.md @@ -8,9 +8,9 @@ displayed_sidebar: docs -| Parámetros | Tipo | | Descripción | -| ---------- | ------ | :-------------------------: | ---------------------------------- | -| Resultado | Object | ← | Information on the triggered event | +| Parámetros | Tipo | | Descripción | +| ---------- | ------ | :-------------------------: | ------------------------------------ | +| Resultado | Object | ← | Información sobre el evento activado | @@ -28,9 +28,9 @@ El objeto devuelto contiene las siguientes propiedades: | --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | | eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | -| data | | object | Additional information depending on the involved component | +| data | | object | Información adicional en función del componente implicado | | | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | -| | row | number | Data Table component: row number | +| | row | number | Componente de la tabla de datos: número de línea | | | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | #### Ejemplo @@ -43,11 +43,11 @@ This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text i ![](../assets/en/commands/web-event2.png) -In this scenario: +En este escenario: - The Text input component has `orderNumber` as Server side reference. ![](../assets/en/commands/web-event3.png) -- The Text component has `helpOn_orderNumber` as Server side reference. +- El componente Texto tiene `helpOn_orderNumber` como referencia del lado Servidor. ![](../assets/en/commands/web-event4.png) - The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-form.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-form.md index d44a8703f67035..11a368e5bc0f4d 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-form.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands/web-form.md @@ -8,9 +8,9 @@ displayed_sidebar: docs -| Parámetros | Tipo | | Descripción | -| ---------- | -------------------------- | :-------------------------: | --------------------------- | -| Resultado | 4D.WebForm | ← | New `Web Form` proxy object | +| Parámetros | Tipo | | Descripción | +| ---------- | -------------------------- | :-------------------------: | ----------------------------- | +| Resultado | 4D.WebForm | ← | Nuevo objeto proxy `Web Form` | diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md index 798a8fe4178877..d49d519a782652 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/classes.md @@ -741,7 +741,7 @@ Les singletons sont utiles pour définir des valeurs qui doivent être disponibl - un **singleton process** a une instance unique pour le process dans lequel il est instancié, - un **singleton partagé** a une instance unique pour tous les process sur la machine. -- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). +- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. Les singletons de session sont particulièrement appropriés pour les [applications Qodly](https://developer.4d.com/qodly/). :::info @@ -782,9 +782,9 @@ La propriété [`.isSingleton`](../API/ClassClass.md#issingleton) des objets de La propriété [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) des objets de classe permet de savoir si la classe est un singleton de session. -### Exposed singleton functions +### Fonctions singleton exposées -Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). +Les fonctions singleton partagées et de session prennent en charge le mot-clé [`exposed`](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). Une fonction singleton exposée peut être directement appelée par des requêtes REST. Cette fonction est utile pour la conception de [pages Qodly appelant des fonctions 4D](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). ### Exemples diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md index b26831bdde0d2e..9016addcd074f7 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md @@ -310,7 +310,7 @@ Vous vous référez à une expression via le type de données qu’elle retourne | Col[5] | Élément de collection | Un élément de collection est une expression qui peut être de tout type | | $entitySel[0] | Entity | Un élément d'une sélection d'entité ORDA est une expression de type entité. Ce type d'expression n'est **pas affectable** | -### Expressions assignables et non-assignables +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} {#assignable-vs-non-assignable-expressions} Une expression peut simplement être une constante littérale, telle que le chiffre 4 ou la chaîne "Hello", ou une variable telle que `$myButton`. Elle peut également utiliser des opérateurs. Par exemple, 4 + 2 est une expression qui utilise l'opérateur d'addition pour additionner deux nombres et renvoyer le résultat 6. Dans tous les cas, ces expressions sont **non-assignables**, ce qui signifie que vous ne pouvez pas leur affecter de valeur. Dans 4D, les expressions peuvent être **assignables**. Une expression est assignable quand elle peut être utilisée à gauche de l'opérateur d'assignation. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md index 7418c2de73301d..61d3207ff17bd4 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/ordaClasses.md @@ -928,18 +928,18 @@ $arch.save() //courseName et name sont "Archaeology II" ## Fonctions exposées et non exposées -For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. +Pour des raisons de sécurité, toutes vos fonctions de classe du modèle de données, y compris les [attributs calculés](#computed-attributes-1), les [attributs alias](#alias-attributes-1) et les [fonctions singleton partagées](../Concepts/classes.md#shared-singleton) ne sont **pas exposées** par défaut aux **requêtes distantes** (elles sont donc privées). -Remote requests are: +Les requêtes distantes incluent : - Les requêtes envoyées par des applications 4D distantes connectées via `Open datastore` -- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) +- Les requêtes REST, y compris les requêtes provenant de [pages Qodly](https://developer.4d.com/qodly/) > Les requêtes client/serveur 4D standard ne sont pas impactées. Les fonctions de classe de modèle de données sont toujours disponibles dans cette architecture. Une fonction qui n'est pas exposée n'est pas disponible sur les applications distantes et ne peut être appelée sur aucune instance d'objet à partir d'une requête REST. Si une application distante tente d'accéder à une fonction non exposée, l'erreur «-10729 - Méthode membre inconnue» est retournée. -To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. La syntaxe formelle est la suivante : +Pour permettre à une fonction de classe du modèle de données d'être appelée par une requête distante, vous devez la déclarer explicitement à l'aide du mot-clé `exposed`. La syntaxe formelle est la suivante : ```4d // déclarer une fonction exposée @@ -947,24 +947,24 @@ exposed Function ``` ```4d -// declare an exposed alias +// déclarer un alias exposé exposed Alias ``` ```4d -// declare an exposed computed attribute +// déclarer un attribut calculé exposé exposed Function get ``` ```4d -// declare a shared singleton function +// déclarer une fonction singleton partagée exposée shared singleton Class constructor() exposed Function ``` :::note -The `exposed` keyword can only be used with the objects decribed above. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. +Le mot-clé `exposed` ne peut être utilisé qu'avec les objets décrits ci-dessus. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md index 2264c1e78e076c..4e67f7e2e7bc9c 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAI.md @@ -67,7 +67,7 @@ L'API donne accès à de multiples ressources qui permettent une interaction tra | `images` | [OpenAIImagesAPI](OpenAIImagesAPI.md) | Accès à l'API Images. | | `moderations` | [OpenAIModerationsAPI](OpenAIModerationsAPI.md) | Accès à l'API des modérations. | | `embeddings` | [OpenAIEmbeddingsAPI](OpenAIEmbeddingsAPI.md) | Accès à l'API Embeddings (vectorisation). | -| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Access to the Files API. | +| `files` | [OpenAIFilesAPI](OpenAIFilesAPI.md) | Accès à l'API Files. | ### Exemple d'utilisation diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md index ac57874faa9d3e..b481930f8e4fe2 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFile.md @@ -5,21 +5,21 @@ title: OpenAIFile # OpenAIFile -The `OpenAIFile` class represents a file object in the OpenAI API. Files can be uploaded and used across various endpoints including Assistants, Fine-tuning, Batch, and Vision APIs. +La classe `OpenAIFile` représente un objet fichier dans l'API OpenAI. Les fichiers peuvent être téléversés et utilisés à partir de différents points de terminaison, notamment les APIs Assistants, Fine-tuning, Batch et Vision. ## Propriétés -| Nom de propriété | Type | Description | -| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | Text | The file identifier, which can be referenced in the API endpoints. | -| `bytes` | Integer | The size of the file, in bytes. | -| `created_at` | Integer | The Unix timestamp (in seconds) for when the file was created. | -| `expires_at` | Integer | The Unix timestamp (in seconds) for when the file will expire. | -| `filename` | Text | The name of the file. | -| `object` | Text | The object type, which is always "file". | -| `purpose` | Text | The intended purpose of the file. Supported values: `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, and `user_data`. | -| `status` | Text | **Deprecated.** The current status of the file, which can be either `uploaded`, `processed`, or `error`. | -| `status_details` | Text | **Deprecated.** For details on why a fine-tuning training file failed validation, see the error field on `fine_tuning.job`. | +| Nom de propriété | Type | Description | +| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | L'identifiant du fichier, qui peut être référencé dans les points de terminaison de l'API. | +| `bytes` | Integer | La taille du fichier en octets. | +| `created_at` | Integer | L'horodatage Unix (en secondes) de la création du fichier. | +| `expires_at` | Integer | L'horodatage Unix (en secondes) de la date d'expiration du fichier. | +| `filename` | Text | Le nom du fichier. | +| `object` | Text | Le type d'objet, qui est toujours "file". | +| `purpose` | Text | L'objectif visé par le fichier. Valeurs prises en charge : `assistants`, `assistants_output`, `batch`, `batch_output`, `fine-tune`, `fine-tune-results`, `vision`, et `user_data`. | +| `status` | Text | **Obsolète.** Le statut actuel du fichier, qui peut être `uploaded`, `processed`, ou `error`. | +| `status_details` | Text | **Obsolète.** Pour des détails sur la raison de l'échec de la validation d'un fichier d'entraînement fine-tuning, voir le champ d'erreur sur `fine_tuning.job`. | ## Voir également diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md index e294aa58d34b39..d29dd1f4d6cc77 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeletedResult.md @@ -5,7 +5,7 @@ title: OpenAIFileDeletedResult # OpenAIFileDeletedResult -The `OpenAIFileDeletedResult` class contains the result of a file deletion operation. +La classe `OpenAIFileDeletedResult` contient le résultat d'une opération de suppression de fichier. ## Hérite de @@ -13,15 +13,15 @@ The `OpenAIFileDeletedResult` class contains the result of a file deletion opera ## Propriétés calculées -| Propriété | Type | Description | -| --------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Returns the file deletion result from the API response. Returns `Null` if the response doesn't contain a valid result. | +| Propriété | Type | Description | +| --------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `deleted` | [OpenAIFileDeleted](OpenAIFileDeleted.md) | Renvoie le résultat de la suppression du fichier à partir de la réponse de l'API. Renvoie `Null` si la réponse ne contient pas de résultat valide. | ## Exemple d'utilisation ```4d -// Delete a file -var $fileId:="file-abc123" +// Supprimer un fichier +var $fileId:= "file-abc123" var $result:=$client.files.delete($fileId; Null) var $deletionStatus:=$result.deleted diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md index 30204dbca2be36..001ddaf03859a5 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListParameters.md @@ -5,7 +5,7 @@ title: OpenAIFileListParameters # OpenAIFileListParameters -The `OpenAIFileListParameters` class contains parameters for listing files in the OpenAI API. +La classe `OpenAIFileListParameters` contient des paramètres pour lister les fichiers dans l'API OpenAI. ## Hérite de @@ -13,17 +13,17 @@ The `OpenAIFileListParameters` class contains parameters for listing files in th ## Propriétés -| Nom de propriété | Type | Required | Par défaut | Description | -| ---------------- | ------- | --------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `after` | Text | Optionnel | - | A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can include `after=obj_foo` in order to fetch the next page of the list. | -| `limit` | Integer | Optionnel | 10000 | A limit on the number of objects to be returned. Limit can range between 1 and 10,000, and the default is 10,000. | -| `order` | Text | Optionnel | desc | Sort order by the `created_at` timestamp of the objects. `asc` for ascending order and `desc` for descending order. | -| `purpose` | Text | Optionnel | - | Only return files with the given purpose. | +| Nom de propriété | Type | Obligatoire | Par défaut | Description | +| ---------------- | ------- | ----------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `after` | Text | Optionnel | - | Un curseur à utiliser pour la pagination. `after` est un ID d'objet qui définit votre place dans la liste. Par exemple, si vous faites une requête de liste et que vous recevez 100 objets se terminant par `obj_foo`, votre appel suivant peut inclure `after=obj_foo` afin de récupérer la page suivante de la liste. | +| `limit` | Integer | Optionnel | 10000 | Limite du nombre d'objets à renvoyer. La limite peut être comprise entre 1 et 10 000, la valeur par défaut étant 10 000. | +| `order` | Text | Optionnel | desc | Ordre de tri par l'horodatage `created_at` des objets. Utilisez `asc` pour l'ordre croissant et `desc` pour l'ordre décroissant. | +| `purpose` | Text | Optionnel | - | Ne renvoie que les fichiers ayant l'objet indiqué. | ## Exemple d'utilisation ```4d -// Get first 100 files with purpose "fine-tune" +// Récupère les 100 premiers fichiers avec l'objet "fine-tune" var $params:=cs.AIKit.OpenAIFileListParameters.new() $params.limit:=100 $params.purpose:="fine-tune" diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md index 90fddc970db380..755034a146a30e 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileListResult.md @@ -5,7 +5,7 @@ title: OpenAIFileListResult # OpenAIFileListResult -The `OpenAIFileListResult` class contains the result of listing files from the OpenAI API. +La classe `OpenAIFileListResult` contient le résultat de la liste des fichiers de l'API OpenAI. ## Hérite de @@ -13,16 +13,16 @@ The `OpenAIFileListResult` class contains the result of listing files from the O ## Propriétés calculées -| Propriété | Type | Description | -| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| `files` | Collection | Returns a collection of [OpenAIFile](OpenAIFile.md) objects from the API response, or an empty collection if no files are found. | -| `first_id` | Text | Returns the ID of the first file in the list, or an empty string if not available. | -| `last_id` | Text | Returns the ID of the last file in the list, or an empty string if not available. | -| `has_more` | Boolean | Indicates if there are more files beyond this page. `True` if there are more files to fetch, `False` otherwise. | +| Propriété | Type | Description | +| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `files` | Collection | Renvoie une collection d'objets [OpenAIFile](OpenAIFile.md) depuis la réponse de l'API, ou une collection vide si aucun fichier n'est trouvé. | +| `first_id` | Text | Renvoie l'ID du premier fichier de la liste, ou une chaîne vide s'il n'est pas disponible. | +| `last_id` | Text | Renvoie l'ID du dernier fichier de la liste, ou une chaîne vide s'il n'est pas disponible. | +| `has_more` | Boolean | Indique s'il y a d'autres fichiers au-delà de cette page. `True` s'il y a plus de fichiers à récupérer, `False` sinon. | ## Exemple d'utilisation -### Basic Usage +### Utilisation de base ```4d var $params:=cs.AIKit.OpenAIFileListParameters.new() @@ -33,14 +33,14 @@ var $result:=$client.files.list($params) var $files:=$result.files For each ($file; $files) - // Process each OpenAIFile object + // Traiter chaque objet OpenAIFile // $file.filename -> "salesOverview.pdf" // $file.bytes -> 175 // $file.purpose -> "assistants" End for each ``` -### Pagination Example +### Exemple de pagination ```4d var $params:=cs.AIKit.OpenAIFileListParameters.new() @@ -49,14 +49,14 @@ $params.limit:=100 var $result:=$client.files.list($params) var $allFiles:=$allFiles.combine($result.files) -// Continue fetching if there are more files +// Continuer de récupérer des fichiers tant qu'il y en a While ($result.has_more) $params.after:=$result.last_id $result:=$client.files.list($params) $allFiles:=$allFiles.combine($result.files) End while -// $allFiles now contains all files from the organization +// $allFiles contient maintenant tous les fichiers de l'organisation ``` ## Voir également diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md index a75c7c3f486302..50bf1895c0f8a6 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileParameters.md @@ -5,7 +5,7 @@ title: OpenAIFileParameters # OpenAIFileParameters -The `OpenAIFileParameters` class handles parameters for file upload operations. +La classe `OpenAIFileParameters` gère les paramètres des opérations de téléversement de fichiers. ## Hérite de @@ -13,28 +13,28 @@ The `OpenAIFileParameters` class handles parameters for file upload operations. ## Propriétés -| Nom de propriété | Type | Required | Description | -| ---------------- | ------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `expires_after` | Object | Optionnel | The expiration policy for a file. By default, files with `purpose=batch` expire after 30 days and all other files are persisted until they are manually deleted. | +| Nom de propriété | Type | Obligatoire | Description | +| ---------------- | ------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `expires_after` | Object | Optionnel | La politique d'expiration d'un fichier. Par défaut, les fichiers avec `purpose=batch` expirent après 30 jours et tous les autres fichiers sont conservés jusqu'à ce qu'ils soient supprimés manuellement. | -### `expires_after` Object Structure +### Structure de l'objet `expires_after` -The `expires_after` object contains the following properties: +L'objet `expires_after` contient les propriétés suivantes : -| Nom de propriété | Type | Description | -| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `anchor` | Text | Anchor timestamp after which the expiration policy applies. Supported anchors: `created_at`. | -| `seconds` | Integer | The number of seconds after the anchor time that the file will expire. Must be between 3600 (1 hour) and 2592000 (30 days). | +| Nom de propriété | Type | Description | +| ---------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `anchor` | Text | Horodatage de référence à partir duquel la politique d’expiration s’applique. Références prises en charge : `created_at`. | +| `seconds` | Integer | Délai en secondes après l'horodatage de référence avant que le fichier n’expire. Doit être compris entre 3600 (1 heure) et 2592000 (30 jours). | ## Exemple d'utilisation ```4d var $params:=cs.AIKit.OpenAIFileParameters.new() -// Set expiration after 7 days +// Fixe l'expiration après 7 jours $params.expires_after:={} $params.expires_after.anchor:="created_at" -$params.expires_after.seconds:=604800 // 7 days +$params.expires_after.seconds:=604800 // 7 jours ``` ## Voir également diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/overview.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/overview.md index 3f9bcc014f4969..12961ff2dc0d11 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/overview.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/overview.md @@ -103,11 +103,11 @@ Obtenir une information de modèle par id var $model:=$client.models.retrieve("a model id").model ``` -#### Files +#### Fichiers https://platform.openai.com/docs/api-reference/files -Upload a file for use with other endpoints +Téléverser un fichier pour l'utiliser avec d'autres points de terminaison (*endpoints*) ```4d var $file:=File("/path/to/your/file.jsonl") @@ -115,19 +115,19 @@ var $result:=$client.files.create($file; "fine-tune") var $fileId:=$result.file.id ``` -List all files +Lister tous les fichiers ```4d var $files:=$client.files.list().files ``` -Retrieve file information +Récupérer les informations du fichier ```4d var $fileInfo:=$client.files.retrieve($fileId).file ``` -Delete a file +Supprimer un fichier ```4d var $deleteResult:=$client.files.delete($fileId) @@ -135,7 +135,7 @@ var $deleteResult:=$client.files.delete($fileId) :::tip Article(s) de blog sur le sujet -[Transform Static Documents into Actionable Knowledge with 4D AIKit](https://blog.4d.com/transform-static-documents-into-actionable-knowledge-with-4d-aikit). +[Transformer des documents statiques en connaissances exploitables avec 4D AIKit](https://blog.4d.com/transform-static-documents-into-actionable-knowledge-with-4d-aikit). ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md b/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md index 3c01d2531565b4..3e15b4938baf5a 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md @@ -314,7 +314,7 @@ Vous vous référez à une expression via le type de données qu’elle retourne | Col[5] | Élément de collection | Un élément de collection est une expression qui peut être de tout type | | $entitySel[0] | Entity | Un élément d'une sélection d'entité ORDA est une expression de type entité. Ce type d'expression n'est **pas affectable** | -### Expressions assignables et non-assignables +### Expressions assignables et non-assignables {#assignable-vs-non-assignable-expressions} Une expression peut simplement être une constante littérale, telle que le chiffre 4 ou la chaîne "Hello", ou une variable telle que `$myButton`. Elle peut également utiliser des opérateurs. Par exemple, 4 + 2 est une expression qui utilise l'opérateur d'addition pour additionner deux nombres et renvoyer le résultat 6. Dans tous les cas, ces expressions sont **non-assignables**, ce qui signifie que vous ne pouvez pas leur affecter de valeur. Dans 4D, les expressions peuvent être **assignables**. Une expression est assignable quand elle peut être utilisée à gauche de l'opérateur d'assignation. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md index 7c9c753141b23c..7b302992762342 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/classes.md @@ -741,7 +741,7 @@ Les singletons sont utiles pour définir des valeurs qui doivent être disponibl - un **singleton process** a une instance unique pour le process dans lequel il est instancié, - un **singleton partagé** a une instance unique pour tous les process sur la machine. -- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). +- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. Les singletons de session sont particulièrement appropriés pour les [applications Qodly](https://developer.4d.com/qodly/). :::info @@ -782,9 +782,9 @@ La propriété [`.isSingleton`](../API/ClassClass.md#issingleton) des objets de La propriété [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) des objets de classe permet de savoir si la classe est un singleton de session. -### Exposed singleton functions +### Fonctions singleton exposées -Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). +Les fonctions singleton partagées et de session prennent en charge le mot-clé [`exposed`](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). Une fonction singleton exposée peut être directement appelée par des requêtes REST. Cette fonction est utile pour la conception de [pages Qodly appelant des fonctions 4D](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). ### Exemples diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md index 2251a72ff5479f..4a592b9f1cb1f0 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md @@ -310,7 +310,7 @@ Vous vous référez à une expression via le type de données qu’elle retourne | Col[5] | Élément de collection | Un élément de collection est une expression qui peut être de tout type | | $entitySel[0] | Entity | Un élément d'une sélection d'entité ORDA est une expression de type entité. Ce type d'expression n'est **pas affectable** | -### Expressions assignables et non-assignables +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} Une expression peut simplement être une constante littérale, telle que le chiffre 4 ou la chaîne "Hello", ou une variable telle que `$myButton`. Elle peut également utiliser des opérateurs. Par exemple, 4 + 2 est une expression qui utilise l'opérateur d'addition pour additionner deux nombres et renvoyer le résultat 6. Dans tous les cas, ces expressions sont **non-assignables**, ce qui signifie que vous ne pouvez pas leur affecter de valeur. Dans 4D, les expressions peuvent être **assignables**. Une expression est assignable quand elle peut être utilisée à gauche de l'opérateur d'assignation. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md index 7418c2de73301d..61d3207ff17bd4 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/ORDA/ordaClasses.md @@ -928,18 +928,18 @@ $arch.save() //courseName et name sont "Archaeology II" ## Fonctions exposées et non exposées -For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. +Pour des raisons de sécurité, toutes vos fonctions de classe du modèle de données, y compris les [attributs calculés](#computed-attributes-1), les [attributs alias](#alias-attributes-1) et les [fonctions singleton partagées](../Concepts/classes.md#shared-singleton) ne sont **pas exposées** par défaut aux **requêtes distantes** (elles sont donc privées). -Remote requests are: +Les requêtes distantes incluent : - Les requêtes envoyées par des applications 4D distantes connectées via `Open datastore` -- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) +- Les requêtes REST, y compris les requêtes provenant de [pages Qodly](https://developer.4d.com/qodly/) > Les requêtes client/serveur 4D standard ne sont pas impactées. Les fonctions de classe de modèle de données sont toujours disponibles dans cette architecture. Une fonction qui n'est pas exposée n'est pas disponible sur les applications distantes et ne peut être appelée sur aucune instance d'objet à partir d'une requête REST. Si une application distante tente d'accéder à une fonction non exposée, l'erreur «-10729 - Méthode membre inconnue» est retournée. -To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. La syntaxe formelle est la suivante : +Pour permettre à une fonction de classe du modèle de données d'être appelée par une requête distante, vous devez la déclarer explicitement à l'aide du mot-clé `exposed`. La syntaxe formelle est la suivante : ```4d // déclarer une fonction exposée @@ -947,24 +947,24 @@ exposed Function ``` ```4d -// declare an exposed alias +// déclarer un alias exposé exposed Alias ``` ```4d -// declare an exposed computed attribute +// déclarer un attribut calculé exposé exposed Function get ``` ```4d -// declare a shared singleton function +// déclarer une fonction singleton partagée exposée shared singleton Class constructor() exposed Function ``` :::note -The `exposed` keyword can only be used with the objects decribed above. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. +Le mot-clé `exposed` ne peut être utilisé qu'avec les objets décrits ci-dessus. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md index 2ec5ca24eac22c..cdf67501192640 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md @@ -317,7 +317,7 @@ Vous vous référez à une expression via le type de données qu’elle retourne | Col[5] | Élément de collection | Un élément de collection est une expression qui peut être de tout type | | $entitySel[0] | Entity | Un élément d'une sélection d'entité ORDA est une expression de type entité. Ce type d'expression n'est **pas affectable** | -### Expressions assignables et non-assignables +### Expressions assignables et non-assignables {#assignable-vs-non-assignable-expressions} Une expression peut simplement être une constante littérale, telle que le chiffre 4 ou la chaîne "Hello", ou une variable telle que `$myButton`. Elle peut également utiliser des opérateurs. Par exemple, 4 + 2 est une expression qui utilise l'opérateur d'addition pour additionner deux nombres et renvoyer le résultat 6. Dans tous les cas, ces expressions sont **non-assignables**, ce qui signifie que vous ne pouvez pas leur affecter de valeur. Dans 4D, les expressions peuvent être **assignables**. Une expression est assignable quand elle peut être utilisée à gauche de l'opérateur d'assignation. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md index 7c9c753141b23c..7b302992762342 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/classes.md @@ -741,7 +741,7 @@ Les singletons sont utiles pour définir des valeurs qui doivent être disponibl - un **singleton process** a une instance unique pour le process dans lequel il est instancié, - un **singleton partagé** a une instance unique pour tous les process sur la machine. -- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. Session singletons are particularly appropriate with [Qodly applications](https://developer.4d.com/qodly/). +- une **singleton session** est un singleton partagé, mais avec une instance unique pour tous les process de la [session](../API/SessionClass.md). Les singletons de session sont partagés au sein d'une session entière mais varient d'une session à l'autre. Dans le contexte d'un client-serveur ou d'une application web, les singletons de session permettent de créer et d'utiliser une instance différente pour chaque session, et donc pour chaque utilisateur. Les singletons de session sont particulièrement appropriés pour les [applications Qodly](https://developer.4d.com/qodly/). :::info @@ -782,9 +782,9 @@ La propriété [`.isSingleton`](../API/ClassClass.md#issingleton) des objets de La propriété [`.isSessionSingleton`](../API/ClassClass.md#issessionsingleton) des objets de classe permet de savoir si la classe est un singleton de session. -### Exposed singleton functions +### Fonctions singleton exposées -Shared and session singleton functions support the [`exposed` keyword](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). An exposed singleton function can be directly called by REST requests. This feature is useful to design [Qodly pages calling 4D functions](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). +Les fonctions singleton partagées et de session prennent en charge le mot-clé [`exposed`](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions). Une fonction singleton exposée peut être directement appelée par des requêtes REST. Cette fonction est utile pour la conception de [pages Qodly appelant des fonctions 4D](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#class-functions). ### Exemples diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md index b26831bdde0d2e..ef8af59770420b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md @@ -310,7 +310,7 @@ Vous vous référez à une expression via le type de données qu’elle retourne | Col[5] | Élément de collection | Un élément de collection est une expression qui peut être de tout type | | $entitySel[0] | Entity | Un élément d'une sélection d'entité ORDA est une expression de type entité. Ce type d'expression n'est **pas affectable** | -### Expressions assignables et non-assignables +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} Une expression peut simplement être une constante littérale, telle que le chiffre 4 ou la chaîne "Hello", ou une variable telle que `$myButton`. Elle peut également utiliser des opérateurs. Par exemple, 4 + 2 est une expression qui utilise l'opérateur d'addition pour additionner deux nombres et renvoyer le résultat 6. Dans tous les cas, ces expressions sont **non-assignables**, ce qui signifie que vous ne pouvez pas leur affecter de valeur. Dans 4D, les expressions peuvent être **assignables**. Une expression est assignable quand elle peut être utilisée à gauche de l'opérateur d'assignation. Par exemple : diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md index 7418c2de73301d..61d3207ff17bd4 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/ORDA/ordaClasses.md @@ -928,18 +928,18 @@ $arch.save() //courseName et name sont "Archaeology II" ## Fonctions exposées et non exposées -For security reasons, all of your data model class functions, including [computed attributes](#computed-attributes-1) and [alias attributes](#alias-attributes-1), as well as [shared singleton functions](../Concepts/classes.md#shared-singleton) are **not exposed** (i.e., private) by default to **remote requests**. +Pour des raisons de sécurité, toutes vos fonctions de classe du modèle de données, y compris les [attributs calculés](#computed-attributes-1), les [attributs alias](#alias-attributes-1) et les [fonctions singleton partagées](../Concepts/classes.md#shared-singleton) ne sont **pas exposées** par défaut aux **requêtes distantes** (elles sont donc privées). -Remote requests are: +Les requêtes distantes incluent : - Les requêtes envoyées par des applications 4D distantes connectées via `Open datastore` -- REST requests, including requests from [Qodly pages](https://developer.4d.com/qodly/) +- Les requêtes REST, y compris les requêtes provenant de [pages Qodly](https://developer.4d.com/qodly/) > Les requêtes client/serveur 4D standard ne sont pas impactées. Les fonctions de classe de modèle de données sont toujours disponibles dans cette architecture. Une fonction qui n'est pas exposée n'est pas disponible sur les applications distantes et ne peut être appelée sur aucune instance d'objet à partir d'une requête REST. Si une application distante tente d'accéder à une fonction non exposée, l'erreur «-10729 - Méthode membre inconnue» est retournée. -To allow a function or an attribute to be called by a remote request, you must explicitly declare it using the `exposed` keyword. La syntaxe formelle est la suivante : +Pour permettre à une fonction de classe du modèle de données d'être appelée par une requête distante, vous devez la déclarer explicitement à l'aide du mot-clé `exposed`. La syntaxe formelle est la suivante : ```4d // déclarer une fonction exposée @@ -947,24 +947,24 @@ exposed Function ``` ```4d -// declare an exposed alias +// déclarer un alias exposé exposed Alias ``` ```4d -// declare an exposed computed attribute +// déclarer un attribut calculé exposé exposed Function get ``` ```4d -// declare a shared singleton function +// déclarer une fonction singleton partagée exposée shared singleton Class constructor() exposed Function ``` :::note -The `exposed` keyword can only be used with the objects decribed above. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. +Le mot-clé `exposed` ne peut être utilisé qu'avec les objets décrits ci-dessus. S'il est utilisé avec une fonction de [classe utilisateur standard](Concepts/classes.md), il est ignoré et une erreur est retournée par le compilateur. ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md index f5a3c668406cb6..9caacdaa469a2d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md @@ -310,7 +310,7 @@ This.name:="Square" | Col[5] | コレクション要素 | コレクション要素は式として、サポートされているいずれのタイプでもありえます。 | | $entitySel[0] | Entity | ORDA のエンティティセレクションの要素である、エンティティを返します。 これは **代入不可の式** です。 | -### 代入可 vs 代入不可の式 +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} {#assignable-vs-non-assignable-expressions} 式は、数値の4や"Hello" の文字列のようなリテラル定数であったり、`$myButton` のような変数であったりします。 式には演算子も含められます。 たとえば、4 + 2 という式は加算演算子を使って二つの数値を加算し、結果の 6 を返します。 リテラル定数や演算子を使った式は **代入不可の式**で、式に値を代入することはできません。 **代入可能な式** も存在します。 代入演算子の左側に使えるものが、代入可能な式です。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index ee4a6405ee282c..8984a526a27941 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -46,12 +46,12 @@ API 参照: #### ファイルフォーマットの要件 -- **Fine-tuning API:** Only supports `.jsonl` files with specific required formats -- **Batch API:** Only supports `.jsonl` files up to 200 MB with specific required format -- **Assistants API:** Supports specific file types (see Assistants Tools guide) -- **Chat Completions API:** PDFs are only supported +- **微調整API:** 特定のフォーマットを持つ `.jsonl` ファイルのみがサポートされます +- **Batch API:** 特定のフォーマットを持つ `.jsonl` ファイルで 200 MB までのものがサポートされます +- **Assistants API:** 特定のファイルタイプをサポートします(Assistants ツールガイドを参照してください) +- **チャット補完 API:** PDF のみがサポートされます -#### Sychronous example +#### 同期の例 ```4d var $file:=File("/RESOURCES/training-data.jsonl") @@ -59,7 +59,7 @@ var $file:=File("/RESOURCES/training-data.jsonl") var $params:=cs.AIKit.OpenAIFileParameters.new() $params.expires_after:={} $params.expires_after.anchor:="created_at" -$params.expires_after.seconds:=2592000 // 30 days +$params.expires_after.seconds:=2592000 // 30 日 var $result:=$client.files.create($file; "fine-tune"; $params) @@ -73,7 +73,7 @@ End if #### 非同期の例 -Since file uploads can be long operations (especially for large files up to 512 MB), it's recommended to use asynchronous calls to avoid blocking your application. See [Asynchronous Call](../asynchronous-call.md) for more details. +ファイルアップロードは(特に512 MBまでの大きなファイルの場合)長時間のオペレーションとなり得るため、アプリケーションをブロックするのを避けるために非同期の呼び出しを使用することが推奨されます。 詳細については[非同期呼び出し](../非同期呼び出し.md) を参照してください。 ```4d var $file:=File("/RESOURCES/large-training-data.jsonl") @@ -81,11 +81,11 @@ var $file:=File("/RESOURCES/large-training-data.jsonl") var $params:=cs.AIKit.OpenAIFileParameters.new() $params.onTerminate:=Formula(MyFileUploadCallback($1)) -// This call returns immediately without blocking +// このコードであればブロックすることなく即座に結果を返す $client.files.create($file; "fine-tune"; $params) ``` -The callback function receives an [OpenAIFileResult](OpenAIFileResult.md): +コールバック関数は[OpenAIFileResult](OpenAIFileResult.md) を受け取ります: ```4d // MyFileUploadCallback @@ -95,7 +95,7 @@ If ($result.success) var $uploadedFile:=$result.file ALERT("File uploaded successfully: "+$uploadedFile.filename) - // Store the file ID for later use + // ファイル ID を後で使うために保存しておく Form.uploadedFileId:=$uploadedFile.id Else ALERT("Upload failed: "+Formula(JSON Stringify($result.errors))) @@ -106,17 +106,17 @@ End if **retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult -Returns information about a specific file. +特定のファイルに関する情報を返します。 -**Endpoint:** `GET https://api.openai.com/v1/files/{file_id}` +**エンドポイント:** `GET https://api.openai.com/v1/files/{file_id}` -| 引数 | 型 | 説明 | -| ------------ | --------------------------------------- | ----------------------------------------------------------------------------- | -| `fileId` | Text | **Required.** The ID of the file to retrieve. | -| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | -| 戻り値 | [OpenAIFileResult](OpenAIFileResult.md) | ファイルの結果 | +| 引数 | 型 | 説明 | +| ------------ | --------------------------------------- | ---------------------- | +| `fileId` | Text | **必須。** 取得するファイルの ID 。 | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | リクエスト用のオプションの引数。 | +| 戻り値 | [OpenAIFileResult](OpenAIFileResult.md) | ファイルの結果 | -**Throws:** An error if `fileId` is empty. +**スロー:** `fileId` が空の場合にはエラーをスローします。 #### 例題 @@ -135,14 +135,14 @@ End if **list**(*parameters* : cs.OpenAIFileListParameters) : cs.OpenAIFileListResult -Returns a list of files that belong to the user's organization. +ユーザーの組織に属するファイルの一覧を返します。 -**Endpoint:** `GET https://api.openai.com/v1/files` +**エンドポイント:** `GET https://api.openai.com/v1/files` -| 引数 | 型 | 説明 | -| ------------ | ------------------------------------------------------- | ----------------------------------------------------------------- | -| `parameters` | [OpenAIFileListParameters](OpenAIFileListParameters.md) | Optional parameters for filtering and pagination. | -| 戻り値 | [OpenAIFileListResult](OpenAIFileListResult.md) | The file list result | +| 引数 | 型 | 説明 | +| ------------ | ------------------------------------------------------- | ----------------------------- | +| `parameters` | [OpenAIFileListParameters](OpenAIFileListParameters.md) | フィルタリングとページネーションに関するオプションの引数。 | +| 戻り値 | [OpenAIFileListResult](OpenAIFileListResult.md) | ファイルリストの結果 | #### 例題 @@ -168,17 +168,17 @@ End if **delete**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileDeletedResult -Delete a file. +ファイルを削除します。 -**Endpoint:** `DELETE https://api.openai.com/v1/files/{file_id}` +**エンドポイント:** `DELETE https://api.openai.com/v1/files/{file_id}` -| 引数 | 型 | 説明 | -| ------------ | ----------------------------------------------------- | --------------------------------------------------------------------------- | -| `fileId` | Text | **Required.** The ID of the file to delete. | -| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | -| 戻り値 | [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) | The file deletion result | +| 引数 | 型 | 説明 | +| ------------ | ----------------------------------------------------- | ---------------------- | +| `fileId` | Text | **必須。** 削除するファイルの ID 。 | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | リクエスト用のオプションの引数。 | +| 戻り値 | [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) | ファイル削除の結果 | -**Throws:** An error if `fileId` is empty. +**スロー:** `fileId` が空の場合にはエラーをスローします。 #### 例題 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md b/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md index 30703317e15a79..b2f360c90f5fb3 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md @@ -318,7 +318,7 @@ This.name:="Square" | Col[5] | コレクション要素 | コレクション要素は式として、サポートされているいずれのタイプでもありえます。 | | $entitySel[0] | Entity | ORDA のエンティティセレクションの要素である、エンティティを返します。 これは **代入不可の式** です。 | -### 代入可 vs 代入不可の式 +### 代入可 vs 代入不可の式 {#assignable-vs-non-assignable-expressions} 式は、数値の4や"Hello" の文字列のようなリテラル定数であったり、`$myButton` のような変数であったりします。 式には演算子も含められます。 たとえば、4 + 2 という式は加算演算子を使って二つの数値を加算し、結果の 6 を返します。 リテラル定数や演算子を使った式は **代入不可の式**で、式に値を代入することはできません。 **代入可能な式** も存在します。 代入演算子の左側に使えるものが、代入可能な式です。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md index d1671bcd7133e1..395d4cba6c244b 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md @@ -310,7 +310,7 @@ This.name:="Square" | Col[5] | コレクション要素 | コレクション要素は式として、サポートされているいずれのタイプでもありえます。 | | $entitySel[0] | Entity | ORDA のエンティティセレクションの要素である、エンティティを返します。 これは **代入不可の式** です。 | -### 代入可 vs 代入不可の式 +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} 式は、数値の4や"Hello" の文字列のようなリテラル定数であったり、`$myButton` のような変数であったりします。 式には演算子も含められます。 たとえば、4 + 2 という式は加算演算子を使って二つの数値を加算し、結果の 6 を返します。 リテラル定数や演算子を使った式は **代入不可の式**で、式に値を代入することはできません。 **代入可能な式** も存在します。 代入演算子の左側に使えるものが、代入可能な式です。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md index 427c72a910bcbd..4cb440afdae087 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md @@ -321,7 +321,7 @@ This.name:="Square" | Col[5] | コレクション要素 | コレクション要素は式として、サポートされているいずれのタイプでもありえます。 | | $entitySel[0] | Entity | ORDA のエンティティセレクションの要素である、エンティティを返します。 これは **代入不可の式** です。 | -### 代入可 vs 代入不可の式 +### 代入可 vs 代入不可の式 {#assignable-vs-non-assignable-expressions} 式は、数値の4や"Hello" の文字列のようなリテラル定数であったり、`$myButton` のような変数であったりします。 式には演算子も含められます。 たとえば、4 + 2 という式は加算演算子を使って二つの数値を加算し、結果の 6 を返します。 リテラル定数や演算子を使った式は **代入不可の式**で、式に値を代入することはできません。 **代入可能な式** も存在します。 代入演算子の左側に使えるものが、代入可能な式です。 例: diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md index f5a3c668406cb6..8053e42f0dedd2 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md @@ -310,7 +310,7 @@ This.name:="Square" | Col[5] | コレクション要素 | コレクション要素は式として、サポートされているいずれのタイプでもありえます。 | | $entitySel[0] | Entity | ORDA のエンティティセレクションの要素である、エンティティを返します。 これは **代入不可の式** です。 | -### 代入可 vs 代入不可の式 +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} 式は、数値の4や"Hello" の文字列のようなリテラル定数であったり、`$myButton` のような変数であったりします。 式には演算子も含められます。 たとえば、4 + 2 という式は加算演算子を使って二つの数値を加算し、結果の 6 を返します。 リテラル定数や演算子を使った式は **代入不可の式**で、式に値を代入することはできません。 **代入可能な式** も存在します。 代入演算子の左側に使えるものが、代入可能な式です。 例: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md index 82cb4ce8cbfd67..9cc7dbbcc639e4 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/quick-tour.md @@ -306,7 +306,7 @@ Refere-se a uma expressão pelo tipo de dados que devolve. Existem vários tipos | Col[5] | Elemento de colecção | Um elemento de coleção é uma expressão que pode ser de qualquer tipo suportado | | $entitySel[0] | Entity | Um elemento de uma seleção de entidade ORDA é uma expressão do tipo entidade. Este tipo de expresión es **no asignable** | -### Expressões atribuíveis vs expressões não atribuíveis +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} {#assignable-vs-non-assignable-expressions} Uma expressão pode ser simplesmente uma constante literal, como o número 4 ou a string "Hello", ou uma variável como `$myButton`. Também pode utilizar operadores. Por exemplo, 4 + 2 é uma expressão que utiliza o operador de adição para somar dois números e devolver o resultado 6. Em qualquer dos casos, estas expressões são **não atribuíveis**, o que significa que não lhes pode ser atribuído um valor. Em 4D, as expressões podem ser **atribuíveis**. Uma expressão é atribuível quando pode ser utilizada no lado esquerdo de uma atribuição. Por exemplo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md b/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md index cda6dc0c3b8cd8..4aefee313e1525 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/quick-tour.md @@ -314,7 +314,7 @@ Refere-se a uma expressão pelo tipo de dados que devolve. Existem vários tipos | Col[5] | Elemento de colecção | Um elemento de coleção é uma expressão que pode ser de qualquer tipo suportado | | $entitySel[0] | Entity | Um elemento de uma seleção de entidade ORDA é uma expressão do tipo entidade. Este tipo de expressão é **não atribuível** | -### Expressões atribuíveis vs expressões não atribuíveis +### Expressões atribuíveis vs expressões não atribuíveis {#assignable-vs-non-assignable-expressions} Uma expressão pode ser simplesmente uma constante literal, como o número 4 ou a string "Hello", ou uma variável como `$myButton`. Também pode utilizar operadores. Por exemplo, 4 + 2 é uma expressão que utiliza o operador de adição para somar dois números e devolver o resultado 6. Em qualquer dos casos, estas expressões são **não atribuíveis**, o que significa que não lhes pode ser atribuído um valor. Em 4D, as expressões podem ser **atribuíveis**. Uma expressão é atribuível quando pode ser utilizada no lado esquerdo de uma atribuição. Por exemplo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md index 0002c4cfccdfa8..a3b60389638b7d 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/quick-tour.md @@ -306,7 +306,7 @@ Refere-se a uma expressão pelo tipo de dados que devolve. Existem vários tipos | Col[5] | Elemento de colecção | Um elemento de coleção é uma expressão que pode ser de qualquer tipo suportado | | $entitySel[0] | Entity | Um elemento de uma seleção de entidade ORDA é uma expressão do tipo entidade. Este tipo de expresión es **no asignable** | -### Expressões atribuíveis vs expressões não atribuíveis +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} Uma expressão pode ser simplesmente uma constante literal, como o número 4 ou a string "Hello", ou uma variável como `$myButton`. Também pode utilizar operadores. Por exemplo, 4 + 2 é uma expressão que utiliza o operador de adição para somar dois números e devolver o resultado 6. Em qualquer dos casos, estas expressões são **não atribuíveis**, o que significa que não lhes pode ser atribuído um valor. Em 4D, as expressões podem ser **atribuíveis**. Uma expressão é atribuível quando pode ser utilizada no lado esquerdo de uma atribuição. Por exemplo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md index 218ca0281ab93f..a5351784c89466 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/quick-tour.md @@ -312,7 +312,7 @@ Refere-se a uma expressão pelo tipo de dados que devolve. Existem vários tipos | Col[5] | Elemento de colecção | Um elemento de coleção é uma expressão que pode ser de qualquer tipo suportado | | $entitySel[0] | Entity | Um elemento de uma seleção de entidade ORDA é uma expressão do tipo entidade. Este tipo de expressão é **não atribuível** | -### Expressões atribuíveis vs expressões não atribuíveis +### Expressões atribuíveis vs expressões não atribuíveis {#assignable-vs-non-assignable-expressions} Uma expressão pode ser simplesmente uma constante literal, como o número 4 ou a string "Hello", ou uma variável como `$myButton`. Também pode utilizar operadores. Por exemplo, 4 + 2 é uma expressão que utiliza o operador de adição para somar dois números e devolver o resultado 6. Em qualquer dos casos, estas expressões são **não atribuíveis**, o que significa que não lhes pode ser atribuído um valor. Em 4D, as expressões podem ser **atribuíveis**. Uma expressão é atribuível quando pode ser utilizada no lado esquerdo de uma atribuição. Por exemplo: diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md index 82cb4ce8cbfd67..dbfff1d33ccd2f 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/quick-tour.md @@ -306,7 +306,7 @@ Refere-se a uma expressão pelo tipo de dados que devolve. Existem vários tipos | Col[5] | Elemento de colecção | Um elemento de coleção é uma expressão que pode ser de qualquer tipo suportado | | $entitySel[0] | Entity | Um elemento de uma seleção de entidade ORDA é uma expressão do tipo entidade. Este tipo de expresión es **no asignable** | -### Expressões atribuíveis vs expressões não atribuíveis +### Assignable vs non-assignable expressions {#assignable-vs-non-assignable-expressions} Uma expressão pode ser simplesmente uma constante literal, como o número 4 ou a string "Hello", ou uma variável como `$myButton`. Também pode utilizar operadores. Por exemplo, 4 + 2 é uma expressão que utiliza o operador de adição para somar dois números e devolver o resultado 6. Em qualquer dos casos, estas expressões são **não atribuíveis**, o que significa que não lhes pode ser atribuído um valor. Em 4D, as expressões podem ser **atribuíveis**. Uma expressão é atribuível quando pode ser utilizada no lado esquerdo de uma atribuição. Por exemplo: From 6fbbd345a602257306f6eb6f333ee3ad9ec75cfb Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 3 Dec 2025 17:20:52 +0100 Subject: [PATCH 66/75] Feature/find in components (#3019) * new page * result window * final * Update develop-components.md * final search in design * rename included * fix in properties * Update search-replace-comp.md * after closure --- docs/Extensions/develop-components.md | 10 + docs/Notes/updates.md | 1 + docs/Project/project-method-properties.md | 6 +- docs/Project/search-replace.md | 297 ++++++++++++++++++ .../en/Project/find-components-results.png | Bin 0 -> 99711 bytes docs/assets/en/Project/find-components.png | Bin 0 -> 12825 bytes .../en/Project/find-in-design-expanded.png | Bin 0 -> 18202 bytes docs/assets/en/Project/find-in-design.png | Bin 0 -> 9894 bytes docs/assets/en/Project/rename-dial.png | Bin 0 -> 14946 bytes docs/assets/en/Project/rename.png | Bin 0 -> 11403 bytes docs/assets/en/Project/replace-content.png | Bin 0 -> 6356 bytes docs/assets/en/Project/result-window-menu.png | Bin 0 -> 5548 bytes docs/assets/en/Project/result-window-re.png | Bin 0 -> 537 bytes docs/assets/en/Project/result-window.png | Bin 0 -> 50640 bytes docs/assets/en/Project/search-icon.png | Bin 0 -> 428 bytes docs/code-editor/write-class-method.md | 3 + sidebars.js | 1 + .../FormObjects/properties_Action.md | 4 +- .../commands-legacy/wp-new-style-sheet.md | 2 +- 19 files changed, 318 insertions(+), 6 deletions(-) create mode 100644 docs/Project/search-replace.md create mode 100644 docs/assets/en/Project/find-components-results.png create mode 100644 docs/assets/en/Project/find-components.png create mode 100644 docs/assets/en/Project/find-in-design-expanded.png create mode 100644 docs/assets/en/Project/find-in-design.png create mode 100644 docs/assets/en/Project/rename-dial.png create mode 100644 docs/assets/en/Project/rename.png create mode 100644 docs/assets/en/Project/replace-content.png create mode 100644 docs/assets/en/Project/result-window-menu.png create mode 100644 docs/assets/en/Project/result-window-re.png create mode 100644 docs/assets/en/Project/result-window.png create mode 100644 docs/assets/en/Project/search-icon.png diff --git a/docs/Extensions/develop-components.md b/docs/Extensions/develop-components.md index dc1d29ebfdb0ba..5c3c898ecc6110 100644 --- a/docs/Extensions/develop-components.md +++ b/docs/Extensions/develop-components.md @@ -116,6 +116,16 @@ Standard 4D IDE features are available for the component. You can execute the fo - run methods, - restore from trash or empty trash. + +### Search and replace + +You can use the [**Search and replace** features](../Project/search-replace.md) of the host project to search elements within the code or the forms of your editable components. The **Search in project** menu allows you to select one or all components as search target: + +![](../assets/en/Project/find-components.png) + + + + ## Scope of language commands Except for [Unusable commands](#unusable-commands), a component can use any command of the 4D language. diff --git a/docs/Notes/updates.md b/docs/Notes/updates.md index bde2c6277434cd..d3d11c47db4e57 100644 --- a/docs/Notes/updates.md +++ b/docs/Notes/updates.md @@ -13,6 +13,7 @@ Read [**What’s new in 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2 - [4D Write Pro standard actions](../WritePro/user-legacy/standard-actions.md) that apply [lists](../WritePro/user-legacy/using-a-4d-write-pro-area.md#lists) now automatically adjust paragraph margins to keep markers positioned inside it. - Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. +- [**Find in Design**](../Project/search-replace.md#search-in-components) and [**Replace in contents**](../Project/search-replace.md#replace-in-contents) features can now support editable components. - [**Fixed bug list**](https://bugs.4d.fr/fixedbugslist?version=21_R2): list of all bugs that have been fixed in 4D 21 R2. diff --git a/docs/Project/project-method-properties.md b/docs/Project/project-method-properties.md index 9ef8bcffb9516d..5451d96d494102 100644 --- a/docs/Project/project-method-properties.md +++ b/docs/Project/project-method-properties.md @@ -24,9 +24,9 @@ The new name must comply with 4D naming rules (see [Identifiers](../Concepts/ide :::caution -Changing the name of a method already used in the database can invalidate any methods or formulas that use the old method name and runs the risk of disrupting application functioning. You can rename the method manually but it is strongly recommended to use the renaming function for project methods, described in [Renaming](https://doc.4d.com/4Dv20/4D/20.2/Renaming.300-6750165.en.html). With this function, you can automatically update the name wherever the method is called throughout the Design environment. +Changing the name of a method already used in the project can invalidate any methods or formulas that use the old method name and runs the risk of disrupting application functioning. It is strongly recommended to use the [renaming function for project methods](../Project/search-replace.md#renaming-project-methods-and-variables). With this function, you can automatically update the name wherever the method is called throughout the Design environment. -With 4D Server, the method name is changed on the server when you finish editing it. If more than one user is modifying the method name at the same time, the final method name will be the name specified by the last user to finish editing it. You may want to specify a method owner so that only certain users can change the method's name +With 4D Server, the method name is changed on the server when you finish editing it. If more than one user is modifying the method name at the same time, the final method name will be the name specified by the last user to finish editing it. You may want to specify a method owner so that only certain users can change the method's name. ::: @@ -105,7 +105,7 @@ For more information, refer to [4D SQL engine implementation](https://doc.4d.com *This option is deprecated. Calling code through REST calls is only supported with [ORDA data model class functions](../REST/ClassFunctions.md).* -### Batch setting for method attributes +## Batch setting for method attributes Using the "Attributes for methods" dialog box, you can modify an attribute (Invisible, Offered as a Web Service, etc.) for all or part of the database project methods in a single operation. This feature is especially useful for modifying the attributes of a large number of project methods. It can also be used during development to apply common attributes to groups of similar methods quickly. diff --git a/docs/Project/search-replace.md b/docs/Project/search-replace.md new file mode 100644 index 00000000000000..a97ec9b9962695 --- /dev/null +++ b/docs/Project/search-replace.md @@ -0,0 +1,297 @@ +--- +id: search-replace +title: Search and Replace +--- + +4D provides several search and replace functions for elements in all of the Design environment. + +- You can search for a string or a type of object (variable, comment, expression, etc.) in part of or in the entire project on the basis of custom criteria ("starts with", "contains", etc.). You can, for example, search for all the variables containing the string "MyVar", only in methods whose name begins with "HR_". +- The results are displayed in a results window, where it is possible to perform replacements in the contents. You can also export these results in a text file that can be imported into a spreadsheet. +- You can detect variables and methods that are not used in your code and then remove them to free up memory. +- You can rename a project method or a variable throughout the Design environment in a single operation. + +:::note + +There are also functions for searching among the methods of your project in the context menu of the Methods Page in the Explorer: **Search Callers** (aussi available in the [Code editor](../code-editor/write-class-method.md#search-callers) and **Search Dependencies**. Both functions display the items found in a [Results window](#results-window). + +::: + + +## Search Location + +When you search the Design environment, the following elements are searched: + +- Names of project methods and classes +- Contents of all methods and classes +- Names of tables, fields and forms +- Contents of forms: + - object names and titles + - names of help tips, pictures, variables, style sheets, + - formatting strings + - expressions +- Menus (names and items) and commands associated with menu items +- Choice lists (names and items) +- Help tips (names and content) +- Formats / filters (names and content) +- Comments in the Explorer and in the code + + +## Find in Design + +### Starting a search + +Specify your search criteria in the "Find in design" window: + +1. Click on the Search button (![](../assets/en/Project/search-icon.png)) in the 4D toolbar. +OR + Select the **Find in Design...** command from the **Edit** menu. + +The "Find in design" window appears: + +![](../assets/en/Project/find-in-design.png) + +The areas of the "Find in design" vary dynamically depending on the selections made in the menus. You can expand this window so that all options are visible: + +![](../assets/en/Project/find-in-design-expanded.png) + +2. Build your search using the different menus and entry areas of the dialog box and if necessary enter the character string to be searched for. These items are described in the following sections. + +3. Set the [search options](#search-options) (if necessary). + +4. Click **OK** or press the **Enter** key. +When the search is finished, the [Results window](#results-window) appears, listing the elements found. + +:::note + +You can cancel an extensive search that is underway using the **x** button; this does not close the window or remove any results that were found. + +::: + +Once you have executed a search, the value entered in the search area is saved in memory. This value, as well as all the other values entered during the same session, can be selected from the combo box. + + +### Find + +You specify the type of element to look for using the **Find** menu. The following choices are available: + +- **Text**: In this case, 4D looks for a character string throughout the Design environment. The search is done in plain text mode, without taking the context into account. For example, you can look for the text "ALERT("Error number:"+" or "button27". In this mode, you cannot use the wildcard character because "@" is considered to be a standard character. +- **Comment**: This search is basically the same as the previous one, but it is restricted to the contents of comments (lines beginning with //) in the code and in the Explorer window. For example, you can search for any comments containing the string "To be verified". + +:::note + +The end result of both types of searches depends on the [search mode](#search-mode) selected. + +::: + +- **Language expression**: Used to search for any valid 4D expression; the search is performed in the "contains" search mode. Validity is important because 4D must be able to evaluate an expression to be able to search for it. For example, a search for "[clients" (invalid expression) will not return any result whereas "[clients]" is correct. This option is particularly suitable for searches for value assignments and comparisons. For example: + - Search for "myvar:=" (assignment) + - Search for "myvar=" (comparison) +- **Language element**: Used to search for a specific language element by its name. 4D can distinguish between the following elements: + - **Any language element**: Any element from the list below. + - **Project method or Class**: Name of a project method or class, for example "M_Add" or "EmployeeEntity". + - **Form:** Form name, for example "Input". The command searches among project forms and table forms. + - **Field or Table**: Name of a table or field, for example "Customers". + - **Variable**: Any variable name, such as "$myvar". + **4D constant**: Any constant, such as "Is Picture". + **String in quotes**: Literal text constant; i.e. any value within quotes in the code editor or inserted into text areas of the Form editor (static text or group boxes). For example, a search for "Martin" will return results if your code contains the line: `ds.Customer.query("name = :1"; "Martin")` + - **4D command**: Any 4D command, for example "Alert". + - **Plug-in command**: Plug-in command installed in the application. + - **Properties**: An object property name (includes ORDA attribute names). For example "lastname" will find "$o.lastname" and "ds.Employee.lastname". +- **Any object**: This option searches among all the elements in the Design environment. Only the modification date filter is available. Use this option, for example, to search for "anything modified today". + +### Search mode + +The search mode menu (i.e. "which", "that is" or "whose name") specifies how to search for the value that is entered. The contents of this menu vary according to the type of element to search for as selected in the **Find** dropdown list. + +- Search options for Text or Comment: + - **contains**: Searches all text in the Design environment for the specified string. Search results for "var" can include "myvar", "variable1" or "aVariable". + - **contains whole word**: Searches all text of the Design environment for the string as a whole word. Search results for "var" only include exact occurrences. They will not include "myvar" but will include, for example, "var:=10" or "ID+var" because the symbols : or + are word separators. + - **begins with / ends with**: Searches for the string at the beginning or end of the word (text search) or at the beginning or end of the comment line (comment search). In "Text ends with" mode, searching for "var" will find "myvar". +- Search options for Language element: The menu offers standard options (matches, contains, begins with, ends with). Note that you can use the search wildcard (@) with the matches option (returns all objects of the type specified). + +### Search in components + +When your current project references [editable components](../Extensions/develop-components.md#editing-components), you can designate one or all your components as a target for the search. By default, a search is executed in the host only. To modify the target for a search, deploy the **in the project** menu: + +![](../assets/en/Project/find-components.png) + +You can select as target: + +- the **host project** (default option, top of the list): the search will only be executed within the host project code and forms, excluding components. +- the **host project and all its components**: the search will be executed in the host project and in all its loaded components. +- a **specific component**, among the list of all searchable components: the search will be restricted to this component only, excluding the host and other components. + +:::note + +When no searchable component is found, no menu is available. + +::: + + +The **in the folder** menu (see below) is updated when you select a project since the availability of folders depends on the selected search target(s). The menu is hidden when you select the "host project and all its components" option. + + +### Folder + +The **in the folder** menu restricts the search to a specific folder of the project. By default ("Top Level" option), the search takes place in all the folders. + +:::note + +Folders are defined on the Home Page of the Explorer. + +::: + +### Modification date of the parent + +This menu restricts the search with respect to the creation/modification date of its parent (for example, the method containing the string being searched for). In addition to standard date criteria (is, is before, is after, is not), this menu also contains several options to let you quickly specify a standard search period: + +- **is today**: Period beginning at midnight (00:00 h) of the current day. +- **is since yesterday**: Period including the current day and the previous one. +- **is this week**: Period beginning on Monday of the current week. +- **is this month**: Period beginning on the 1st day of the current month. + +### Searching options + +You can select options that can help speed up your searches: + +- **Search in forms**: When this option is deselected, the search is done throughout the project, except in forms. +- **Search in methods**: When this option is deselected, the search is done throughout the project, except in methods. +- **Case Sensitive**: When this option is selected, the search uses the case of the characters as they have been entered in the Find area. + + + +## Results window + +The Results window lists all elements found that match the search criteria set using different types of searches: + +- [standard search](#starting-a-search) +- [search for unused elements](#find-unused-methods-and-global-variables) +- [search for callers](../code-editor/write-class-method.md#search-callers) +- search for dependencies +- [renaming of project methods and variables](#renaming-project-methods-and-variables) + +It shows the results as a hierarchical list organized by type of elements found. You can expand or collapse all the hierarchical items in the list using the options menu (found at the bottom left of the window) or in the context menu. + +![](../assets/en/Project/result-window.png) + +You can double-click on a line in this window to view the element in its editor, such as the [code editor](../code-editor/write-class-method.md). If you do several searches, each search opens its own result window, leaving previous result windows open. + +When more than one occurrence has been found, the list indicates their **count** next to the element name. + +Each line can display a tip that provides additional information, for example the element property that matches the criteria, or the number of the form page that contains the occurrence. + +When an element found belongs to a component, the **component name** is displayed in parenthesis at the right side of the element name: + +![](../assets/en/Project/find-components-results.png) + +Once a search is completed, you can use the ![](../assets/en/Project/result-window-re.png) button to perform the search again with the same criteria and options. + + +### Options menu + +You can perform various actions using the options menu: + +![](../assets/en/Project/result-window-menu.png) + + +- **Remove from list**: removes selected item(s) from the results window. More specifically, this lets you keep only items targeted by a replacement operation in the contents or used for drag and drop between applications. +- **Remove all items from list except selection**: clears everything from the results window except for the selected item(s). +- [**Replace in content**](#replace-in-contents): replaces a character string within the selected item(s). +- **Select >**: selects one type of item (project methods, object names, and so on) from among all the items found in the Results window. The hierarchical sub-menu also provides commands to select (All) or deselect (None) all the items at once. +- **Collapse all/Expand all**: expands or collapses all the hierarchical items in the list of results. +- **Export Results**: exports information about the search criteria and elements listed in the Results window. This text file can then be imported into a spreadsheet such as Excel, for example. For each item, the following information is exported as tab-separated values in a text file: + - Host project or component name + - Type (method, Class, formObject, trigger...) + - Path + - Property (if accurate): provides the property of the object that matches the criteria. For example, a string could be found in a variable name (variable property) and an object name (name property) within in the same form. This field is empty when the matching element is the object itself. + - Contents (if accurate): provides the contents that actually matches the criteria; for example, the code line that contains the requested string. + - Line number (for code) or page number (for form objects) + + + +## Replace in content + +The Replace in content function allows you to replace one character string with another within the listed objects in the Results window. It is available in the [options menu](#options-menu) of the window. + +:::note + +The **Replace in content** menu item is disabled if you work in a read-only database (e.g. in a .4dz file). + +::: + +When you select this command, a dialog box appears where you enter the character string that will replace all the occurrences found by the initial search: + +![](../assets/en/Project/replace-content.png) + + +Replacing operations work as follows: + +- Replacing is always carried out among all items found in the list and not just for a selection. However, it is possible to narrow the replacing operation by first reducing the contents of the list using the **Remove from list** or **Remove all items from list except selection** commands in the [options menu](#options-menu) or the contextual menu. +- If the Results window includes elements from components, the replacing will be done in the component(s) also. +- Only the occurrences shown in the list will be replaced and only after checking the initial search criteria for cases where objects were modified between the initial search and the replacing operation. +- Replacing is done in the code, properties of form objects, contents of help messages, entry filters, menu items (item text and method calls), choice lists, comments. +- For each object modified, 4D checks whether it is already loaded by another machine or in another window. In the case of conflict, a standard dialog box appears indicating that the object is locked. You can close the object and then try again or cancel its replacement. The replacing operation will then continue with the other objects in the list. +- If a method or form concerned by a "replace in content" operation is currently being edited by the same 4D application, it will be modified directly in the open editor (no warning appears). Forms and methods modified in this way are not saved automatically: you will need to use the **Save** or **Save All** command explicitly to validate the changes. +- After a replacement is made in a list item, it will appear in italics. A count of replacements made in real time appears at the bottom of the window. +- Elements are never renamed themselves by the **Replace in content** feature, except for form objects. Hence it is possible that certain items in the list may not be affected by the replacing operation. This can occur when only the item name corresponds to the initial search criteria. In this case, the list items do not necessarily all appear in italics and the final replacement count may be less than the number of occurrences found by the initial search. + + +## Renaming project methods and variables + +4D provides a dedicated renaming function with distribution throughout the entire project for project methods and variables. + +The **Rename...** command is available from the [Code editor] (for project methods and variables) and the Explorer context menu (for project methods). + +![](../assets/en/Project/rename.png) + +When you select this command, a dialog box appears where you enter the new name for the object: + +![](../assets/en/Project/rename-dial.png) + +The new name must comply with [naming rules](../Concepts/identifiers.md); otherwise a warning appears when you validate the dialog box. For example, you cannot rename a method with a command name such as "Alert". + +Depending on the type of object you are renaming (project method or variable), the renaming dialog box may also contain a distribution option: + +- Project method: The **Update callers in whole database** option renames the method in all the project code that references it. You can also uncheck this option in order, for example, to rename the method only in the Explorer itself. +- Process variable: The **Rename variable in whole database** option renames the variable in all the project code that references it. If you uncheck this option, the variable is only renamed in the current method. +- Local variable: No distribution option for this object; the variable is only renamed in the current method or class. + + + + +## Searching for unused elements + +Two specific search commands allow you to detect variables and methods that are not used in the code of your host project. You can then remove them to free up memory. These commands are found in the **Edit** menu of the Design environment. + +### Find Unused Methods and Global Variables + +This command looks for project methods as well as "global" variables (process and interprocess variables) that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A project method is considered to be unused when: +- it is not in the Trash, +- it is not called anywhere in the 4D code, +- it is not called by a menu command, +- it is not called as a string constant in the 4D code (4D detects a method name in a string even when it is followed by parameters in parentheses). + +A process or interprocess variable is considered to be unused when: +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else in the 4D code, +- it is not used in any form object. + +Note that certain uses cannot be detected by the function - i.e. an element considered unused may in fact be used. This is the case in the following code: + +```4d +var v : Text :="method" +EXECUTE FORMULA("my"+v+String(42)) +``` + +This code builds a method name. The *mymethod42* project method is considered unused when in fact it is called. Therefore, it is advisable to check that the elements declared as unused are in fact unnecessary before you remove them. + +### Find Unused Local Variables + +This command looks for local variables that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A local variable is considered to be unused when: + +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else within the same method. diff --git a/docs/assets/en/Project/find-components-results.png b/docs/assets/en/Project/find-components-results.png new file mode 100644 index 0000000000000000000000000000000000000000..96a5080c02477c29154f3aa239e64abafd26cccd GIT binary patch literal 99711 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 C4wrQR literal 0 HcmV?d00001 diff --git a/docs/assets/en/Project/find-components.png b/docs/assets/en/Project/find-components.png new file mode 100644 index 0000000000000000000000000000000000000000..0b42697051581c10db4727c3d274276a3fb5c775 GIT binary patch literal 12825 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 literal 0 HcmV?d00001 diff --git a/docs/assets/en/Project/find-in-design.png b/docs/assets/en/Project/find-in-design.png new file mode 100644 index 0000000000000000000000000000000000000000..daf7ed8279c6d7345433adbe631f9ca461acf146 GIT binary patch literal 9894 zcmaKS1z1$w_wLZ$Lr6<^gGk2!64KI*ASEFo-Q7qF(jrQCOU)1iNSA?o z{-U3o_C`DR;lYp;9|J8faz0`=K14J6t)p#>8EvYatNI~)_nWwH`aNXK@%!Y= z`HbZJ&NR0^zAF<{-t-DMe|>&`CFWzzL7kw02vYp8d~vgK=Dl*{IXW>B5<|*uVP*#M zW>6$d=8G2gubiPcGWuFxjsxNexcB8{Utb?cZaRju!`5Sq#DqLr#p$?H<0+p9>(^RG z4QRyENXD~j6-N$0Qlv;?1yLbnL8Fdg_2p)SuUi4!@&1MN3j zwbzT*H<4U&@WalJ+b+a6^((0xljMmUk?e?!A@yToq6a~!m6!qXO5_*4bxZwT8;_V$|Y2nXP@y#4`(Bg!A`~7kNI1I3IjE1yCs2| zeiHc2l^(R3#rCXFw-38ovO4$mR!qu9J)E4iu#XSwEdsUeo$}YVGCndHm9yTX7Z7cK zm*lmp(BtX1T?aVA<##gC;S~dzloTx()62>tbU0ydMn%b)$6Q0KCaB2ElfEB@O_Gr4 z5}}ms&_)z5clGS`X_CX&ZF(x4jWfZUpU`>J0vxNM8qdu#-5>qDJcg1a)qWeUM}j(8 zjkiWBGnRP{(8<+LZ+thVtch8tZ+c#QC-B~&JDKdWZ<7$1M|TJ@<*y|ZDn$W20{CV6 z*DsT72|sd}Rwe#mR*_(=^6*fT#jT?4UAxU^E!1(ZyNJ)PsT0T!8tbgB7p!-2<-XnU z%TOl=Rfqj3hu0i0#Rpx7KM{{AO~*=rh)YUwk8H=rA`^QT^x-ecHx0egVqTg2s1H5w*K--X?y-@7WS%9U9V-G5r>87Q59LGuI1M6=h8c?BGopt}Hm1Re`6NYGB4c`t!uHJ=Pj0b z3egf-rPgjrqZJY1rQW4%q83+g4g~ITq_Bc?p{> zC>5aA(%_LeY}%%XiwU`E63$3Ck9R%v^)PYZQiSf~)k z`pq4HloilSfHg=0Nl6_1ZU45%@1c$4;NfgU!^`g1Lcr)OX4tTubYFExp@$*G?)}Nj z+r9^T823XJUY6+s*2NgncDpCSn-9PPtW&L@jv+!uLfOhF}dtfF8ThTU{N!gbKVun_4#oU#4gO51S9 zLS*Y7{W!n!pxhMn6s)zKYR`Mn3}X4SK!M{`@-O^44VcEl6b z{BrYMJ41pHXlSosY*ibOFJGS@-}|2$Z$p;CRDCZ*8!furO%;IO!o|jnBvcgR`k<1M{qja6L)420mO9RY z1Rfc;(EhSMctU^d*t{PvmD}ZeGS4s;5NCu-?4HRP9x0BljfC?ge{^)KH6j#}}C=+WlS7f>Ai+_qCD;g4`*%ttm38 z5S6D}B9NdNiOlu@Z&OdE3mG)T)`H2887(_(x)~h-;r$^(07bLY5Ms&Gfn^nE?rrv^}uKi5te&>(R z*!vaaYc3WxZ@^hc-oY)#=_kpcXC^)bQ}*`D9yC2pIaeL|BJOJPPOcoyXEaCi zZ-fegTEBgFB#%y=$mx!0?gu&|e)?TM!*PC(+$-X?TCFb0bVM+(>4UFv9rYb#WKhlJ z8R=r8q0B#8MAGhUXFSj|Q;G&f$27|ea=rsRJS7*)_tR^I-pS@epuZHsTWASFY#pB2 zYsY})BqDT{^>W;~*ugKBy&Dts<8>?t`Rc7BE4@yf-S0bG*+FK%o^7t$9MZM=jF>ER zSi6@jB+y(pj&@9;m_+Zyf4!UuXeI?6);F654Q`OY5zy{^@g?sDLh`rXd4VnmyE;}& zMBB!ldm5d3{)qdmWC#(XR|u3Og&=ux#oKBf^&IHRr(6wdWyw5zcX4^HnzI|-pD;Wd zqYCNKINe|o$KGgT9FenBm9-`0-L-W?*`6dCug@B_lOp+%;3(T#;f+sd>$I1ZpNir2 z*`m_9u$WR0(#VWP5yT56R*xOp??d;Y&FCN4$3g?cuU>R^F4KDZv`0hN)v=@qt>CZs z)!c6nZ&LG9L%*LeJ6|r|fdYFD{wNG1*(Zux6Mj2L_*KJ_^9MiqgVaqzOeBjRv}KYt zYD@5_852p44r0n#xRa`}$E_{IN2~56UykrOAB7kl70K>A{7+^{UqKBD!90zHdOmnD zAW&ZFDY#K@bY>=|l9brev1{tmDSa5Kd#rr8p;0?FGee=F{ej`qPvY{nS7L)#8wQ)8 z`}5ZGax7PF9WN7EB~t(cPxAU8zers&t@B&>FAr$&-uHO=gZ)0>uF{WFO%z*PCpf>y>{4E&6aOss>&%J0v(iJnA?{DZ5 zotR3{{T;Nu+zMi@?g*7CGJ~g{`C>^Lxe@uRpW|Kn&y_d5=_+Sww#Ga@IdOpzuW1NZ z;M2RlTRyolua|F3eo@)hgd=$^DT%WfaCGOhUXFSf@{L{ZtaYiG_!*Z8xP?_~uBeBX zxWmty-`ZGIvTpw<=4BSWV^g;K{%zzw)*MA;dnCnoKZi;cS`!V^AWkBH^E#tpH-jPVB8g zX;}M%>s#%d4>bXbAI!YYrgT43ROA-Eh@Y;z;U+UwXJLxaE7t*z$Gc5@L$kQ`W4UGA z0+6`r?P!$#?OzoubcgES6kw(v&|Ht!%nd*t|M6!zpn#_QNmd)zfYolWxgHSMKW{ zrG5*qoPNuT%#^A@QWRsePw>SKo^Z0`t7X~^M_NJT_aZmIr0%@zQso4hCX2IY1$!(z zQ|V!YzXi$FjYPb4on30=;beK!u_{i&s0;7rsb<^1FrMD_``pOp;zoh(7phV5OC<<2 zn4;W&CQAS2QK{%si|JlVsheMJ4f3bmBJQ>)7JsF=eo+mF!V`20=IQB_bWum%W3;38 z`+Ym*G;x~Di76N_APg)*BbMKud087M^IWeUpIg=9m6db8Zw6s0f(yPu%0}Jh+am6I zZwLf@0{&Lyv!}(_fhh@|WM7lN_C-Xp z=*MP@4o82%Lz)4#2hu}62S(+|yb-`03z8E!li(Ef_?<|?f!{Hh6&V@XpV83J;AWIh zOGj6r(i0dA6scHBNkbrzV%|KUkZyuZ9iM<8$rhXCv38xn&F)*E6fQ9LFf|XPaw_R$KAuK$lsY3Zi^`UXwT`5CH3U%z}oTU=Z`yt%U=A+QoIor>=6 zmRaA}h|-6AJl~&38&u|QXW%rbdoe^mJ~=ms5z&Lty2xcspb>uJ-R|7Fm?7p>lOb1R zd+@7$;W+Q|>dqgP2%-;nY;-+K3J?9)`2X0F!XhOteW@{l2`VpPEs+W_Wn-e4Z2O6t#d+=G_eq&U2?EiNMUa#K7$NcnjaqHFIv*PZuj-nJRf^CPYG%th z?%F!(+L{ldSr!qSqxQVFcCXgcR^Zo}uRycJ2bLS`e-A2{Vo2H*&^V1gPlxa)JX+mb z?$(E)w|Upu&xYc);Kvo2#k1)B#LcNH;{frB#>H6EHO>Xe3Do&r>uO>;rNFt`H}(>d zgh7BUB7wV_SJas0H%z&6uJUst67CZF}N%WU5krP{^a?Uq=3c3PhVYltX4CL)1B3KMC zh~_WZeD@^?@khjGx*#iMb@yc+5rn2iRc*nyQaot!a5Rn2WoaxG9=^1dBC`%vi?{Y| zXDbRIw!=x>W$XFj&iF5#he0gv&}C^~)z_#<(dNY`hX}l^QT~Bc5?949Db|VN=Z0erD`C;hrLaVGocJb`lS_m_Z6bjp6XEM$5 z=HA}249fito~ITQK$^9;M+pHb@WDZt8{NxX-(!peY-YGc1TIzgD_vtoCL&uqTiX@P zzf1lf0Q?WC@|yI^bv)Zmcrznw0%!KZrr^p*u!Lt;nhW0E-iJqhG=&`lf1xt&-&LH;&HM;KhQqDFsK`hbg#SYL{{`f}EYmmt_Ii8R^KY+%0H8ioI5tVE zd|}w$*^z$#{@Ja6M~0jL2QV`*2?-rHH#eQ%%?fqd{D$;zI?s9D&^@+2zPIIu zH#WJr4X0Y9**diyp*D(X4jf$YXV7X^&F_C>_gHNAAIh}pqfZc{vnCkBAI`K<+xGDZ^ngu*X!NV3Q?7X(dx?b1=I91kozTf@y z^eI)a8dm1{NlX1df2S(=nPbmREz*Rt-*tVXLlQF;slBnjzFgf$EerfX)K}a@#zsd2 z`>1`eo12>n+#_vl-o1NQ<$vcbARquiCO&98!6hdr2MVsi-ZY<=>%c;BtKT?a$LAy2eR zr41e_hgrbjf%bc{CC0VbM}Ayu!npOEfs~a^2002@deF$@xWjrUgd8Ug<3-x>WMESq zheF7#Cmbhzd0k$h4VdE^K#YBB36lO%zns=;#qy+{2ziR3FDgGdvwCGUyKEbN+*(SR zI^17W(g6@q(0Q1i{-=SLHC)1&h zaE?AdLwviNKeDcChWYBhI7Cjo7Os9P9dZHBI9eBfELA>LN>aY_uNAvHofzM5T;eL$ zBJ@2TV9pTtX~<9!D5DZ_L)SHSe+4n|#mj6S4CQ&kn$dMG2Pt*tHcbf=zqtOg$RoQQi7#~L!Xc{gE_;^eZn{gEBUF<}yL z=MDsb6#oXAKV2=x)NU8WyY?YbHKr>p>^V(eL4(S4NS6?^f7ITQ7LY&wk02|1_#0M~ zaQ>eW62$vN!*6p&WxQY-SZatN4q1~6=plzp6siGlMofH6^R z#bki$PY3e?5kZ^gIj(O`<>nRx&whAiFc+I@0^F>f*G1*KTLP(lg9H!N1Pq&_?LoxM ztDB5E%P(~cY^^8w%&r3|0u-gjE`vbc<#u60)!TU?Y+T%EeNbRmm$but1J3^bzD1fj zqp}Vtt{goATt2I59L*TtBaE+v<(L3QrpYf)T>d64i-U=YiT}b;F3zYzs=5IGsk~1) zPDy0HYhiu?cnVnOEdm*vj#6@RvNj8V>T>ppE>8qVd9seJ7d)oxiM`X-Dhp)ZYBEUC zK(IDD-5#@XaEQfZLq$Uyo1KjuD^yt9Ev=02j~QH764Nt?Fdc`KoF-_tY9fdU#J|Ejj*$U!P3djCXe@SLv`JFJx2#t*< zrLVaBga_;nN-3A2A|E44T-G>uiRkRDjeUJDzK*6QL0p;NbxGqpheQaqdchn3K z-6ZhS-q`5R=-zR({HEzXClh1O&z);Q%*IaHZrTNNYtrK1nl^wXXUn{TfD)Rw`bP3b z-y#G9^p|yaKTok3)0x~e7a~uUXx`@f?xoq8$?1E_No_jkod#OmKwg!d|0=uZAy$@x2^ zM6$#Hm{|QiSG#?15V3SXTFb9vVnU6Hg~e+DMdxMDXHe{3UZ!PGlo49Aw5c}$N+Ux9 zm{S}s{wzLS(R6u%rZC$KHcO=H|{HcoJAxT8gD>;$<}+jH&p6hleL{ zVZms9bCYR*HOuY;Lw-jGO?!KL|GQ#As(5P&Omy-WjW zdw=iG``rB2UlIt*Kv7awR@UTON`E{Q0u7StIR^{P>8d#g#SU(UEFC7uKsH53#3MZs z1_L^HjAy218pzQu^_qyes-WOhy+GoF4CJIP1)GgtN1<=y|!eQFFAeg;jG6IJ5epd0)7;1oQo{E&~ZS z3~8{>(#akwB1d~!A{ngz>b=ThTaA7wJa(Fxkfw;0o`4MWrm%NK*j_nEM-vZAoZ;hUw0HzKZ zW+p!7>EvngYwGhxV0)7`c(uka)T8~bg;yOi!nh@{)%0|f}XghNK3iR&fuKVuY| zod<_Ff8Ae0YX*#~VB?VIOtG3V8|hvC{^E+S%vLmX4P?YQf@Jtdc0GQ;h0@Nx=Ue76 zX4tHbP*$J|(U0ZqX(M0;$X83I2Jstf7X>C>uGZm?IgbDbaiOOp1)v@}egb_%hh!5_ zb%}pgTLtOS{XCL=n^D@bUd_~IxAK^1qiwvUm@6e)>wUk{AHmk=86YY_CW#C0;duZ| z5~-z<)NME9zx!))G5la2vFzg$cRc9NG%4pQv-1?GkEJLhjjV7R7SjgQdX4!fT0B0| zoYa_$A-ruv+=j@%%N3yAJ@;ExjyF#@qJJ*20A!YC*`_BU``3LHfWvd0@T&BV#KGL$ zJ-x@yRpzyGX012)o8)@=QdjbIPR}D@1kbEUEH}Q3XRtS>?jE!>O-84$1~I20%@Z%l z=HFD0UNzZYr5|>kyFVe-)-&;3LD?zJawMFHie%{l(gL#|+0QNB>3BWdUGTpBDZu;u z>Gkz>&2^(XsB`Uz_SrLC6`{8?6~>R00VmNZC6>rlQ~5zYkdp;Xcc)s9TPXt=mer5D+00CD;_mP7i|(b!{#Ja%V(pueN19Q5=(y58 zzVhAP-IdYRB?X8E_B-?muLUw-1JE-4^dU=)5qQ4>c)8-toA=%N3tmxk&%c0uLP-e) z0@CQ>;wM2;xvb&G=w$J;&X$bVA~fTZ`UeJcXJ?)r$>bcR<8M&l&57g&nQGtx@IU$l z*9p!5D2mX38SPv!wcmU}^ zl6;Ik5EoWXPB~lKuNl~-!`8B&Pt4E&C82`Dc ze%}ggXgM}g6e{F~2|jy98Wt8N4BRdVpfw;6@B8z{j{K@B{N`pMy z9~|rvoG}Wyz4fie1%@ENH_8NBp#vKWJhtNudgYFKzkCkF2Y?+XpuvQiB&^wWi^uQU z4cL>mA`|uC`0dd;``8eNf6J%s5O`Fd>v#Sno?1NGWv%ydJYc!#lnS=VJXItFXczG5 z;nh}d&)!)RkF6+zgbfNOVq)6><<)}vliQ@K_? z45_h=rJnc2B&bThbd+k@{bd{3t-5@jGZ`!BOE}za8sXo^1Zr4>5}Gt{m?2d`g__k37@&g@;9w zhM#I?=p&^DLrc2`nfRK0hFkM(8&Ti=JFtlyMyB7mj7mG-CFD0&A&<8vLL0NHInM>w zWp};qT8-I{O!}KqKWVP_&oST3x_q|>N2glG*x?0^sz&2R{{BmAzru!O1tiPyB^OB!mYT|HuM!`fPcsyXfC zv|CCF@_e_8Tbmzvl^p{_-#6S9yLyQAaM9!A!sXV6xF6f2k=+W4{aA-S!Nhv3+7{Cj z{k;DzYlp+pL4={R>Lvba$-qXmM||PhNJU9?9LvX$(wIJsub}upGK=gAfdwc{mN4CX zO}gl*Z|CkWxqe?)GKDU^WYjyJaWqGqwCr?i$eq$oU#;tL+jF0m{ zr!13r?!#Wcd|QDSGrASxl_`{yC`eZ|fJ}+Ib3hOHn8bha?8&fhH^Ewh3_!X%Tq045TQh3aOAW3;thKR=w5$ literal 0 HcmV?d00001 diff --git a/docs/assets/en/Project/rename-dial.png b/docs/assets/en/Project/rename-dial.png new file mode 100644 index 0000000000000000000000000000000000000000..441f7c8c38a0b15866a19f621ae24eaedacf6060 GIT binary patch literal 14946 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 P`sC{;C7H^P#)1C}3M4?D literal 0 HcmV?d00001 diff --git a/docs/assets/en/Project/rename.png b/docs/assets/en/Project/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..7c62a1652553136c4f3e3e86296a596ccfad74b8 GIT binary patch literal 11403 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 literal 0 HcmV?d00001 diff --git a/docs/assets/en/Project/replace-content.png b/docs/assets/en/Project/replace-content.png new file mode 100644 index 0000000000000000000000000000000000000000..cf973c42e8bce22ff1c77b686b57970b75d75fc5 GIT binary patch literal 6356 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 literal 0 HcmV?d00001 diff --git a/docs/assets/en/Project/result-window-menu.png b/docs/assets/en/Project/result-window-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..efc22783c719a5a024b7f3baac16e9bc5b2eeab4 GIT binary patch literal 5548 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 b|81a8bRVOjju&Zg00000NkvXXu0mjf$ExU6 literal 0 HcmV?d00001 diff --git a/docs/assets/en/Project/result-window.png b/docs/assets/en/Project/result-window.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6aab5bbe6c632b40f926cefb77471c0689b6f2 GIT binary patch literal 50640 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 W; Date: Wed, 3 Dec 2025 17:30:01 +0100 Subject: [PATCH 67/75] fixes in main --- docs/Concepts/dt_number.md | 6 ++-- docs/aikit/Classes/OpenAIFileDeleted.md | 34 +++++++++++++++++++ sidebars.js | 1 + .../version-19/Concepts/dt_number.md | 4 +-- .../version-20-R10/Concepts/dt_number.md | 4 +-- .../version-20/Concepts/dt_number.md | 4 +-- .../version-21/Concepts/dt_number.md | 4 +-- 7 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 docs/aikit/Classes/OpenAIFileDeleted.md diff --git a/docs/Concepts/dt_number.md b/docs/Concepts/dt_number.md index 0735ba7811d630..f09cf91eec8830 100644 --- a/docs/Concepts/dt_number.md +++ b/docs/Concepts/dt_number.md @@ -49,7 +49,7 @@ Negative numbers are specified with the minus sign (-). For example: |Subtraction |Number - Number |Number |3 – 2 |1| |Multiplication |Number * Number |Number |5 * 2 |10| |Division |Number / Number |Number |5 / 2 |2.5| -|Longint division |Number \ Number |Number |5 \ 2 |2| +|Integer division |Number \ Number |Number |5 \ 2 |2| |Modulo |Number % Number |Number |5 % 2 |1| |Exponentiation |Number ^ Number |Number |2 ^ 3| 8| |Equality |Number = Number |Boolean |10 = 10 |True| @@ -79,9 +79,9 @@ The modulo operator % returns significant values with numbers that are in the Lo ::: -### Longint division +### Integer division -The longint division operator \ returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Real comparison diff --git a/docs/aikit/Classes/OpenAIFileDeleted.md b/docs/aikit/Classes/OpenAIFileDeleted.md new file mode 100644 index 00000000000000..604b682d0e7514 --- /dev/null +++ b/docs/aikit/Classes/OpenAIFileDeleted.md @@ -0,0 +1,34 @@ +--- +id: openaifiledeleted +title: OpenAIFileDeleted +--- + +# OpenAIFileDeleted + +The `OpenAIFileDeleted` class represents the deletion status of a file in the OpenAI API. + +## Properties + +| Property Name | Type | Description | +|---------------|---------|------------------------------------------------| +| `id` | Text | The ID of the deleted file (e.g., "file-abc123"). | +| `deleted` | Boolean | Whether the file was successfully deleted. `True` if deletion succeeded. | +| `object` | Text | The object type, which is always "file". | + +## Example Response + +```json +{ + "id": "file-abc123", + "object": "file", + "deleted": true +} +``` + +## Used by + +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) + +## See also + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) diff --git a/sidebars.js b/sidebars.js index e7a2ba42129b17..b3b36d0237a250 100644 --- a/sidebars.js +++ b/sidebars.js @@ -3353,6 +3353,7 @@ module.exports = "aikit/Classes/openaiembeddingsresult", "aikit/Classes/openaierror", "aikit/Classes/openaifile", + "aikit/Classes/openaifiledeleted", "aikit/Classes/openaifiledeletedresult", "aikit/Classes/openaifilelistparameters", "aikit/Classes/openaifilelistresult", diff --git a/versioned_docs/version-19/Concepts/dt_number.md b/versioned_docs/version-19/Concepts/dt_number.md index 4c8cf85f76d0ca..f9502a3a391ae3 100644 --- a/versioned_docs/version-19/Concepts/dt_number.md +++ b/versioned_docs/version-19/Concepts/dt_number.md @@ -73,9 +73,9 @@ The modulo operator % returns significant values with numbers that are in the Lo ::: -### Longint division +### Integer division -The longint division operator \ returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Real comparison diff --git a/versioned_docs/version-20-R10/Concepts/dt_number.md b/versioned_docs/version-20-R10/Concepts/dt_number.md index 0735ba7811d630..f3e140835167e7 100644 --- a/versioned_docs/version-20-R10/Concepts/dt_number.md +++ b/versioned_docs/version-20-R10/Concepts/dt_number.md @@ -79,9 +79,9 @@ The modulo operator % returns significant values with numbers that are in the Lo ::: -### Longint division +### Integer division -The longint division operator \ returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Real comparison diff --git a/versioned_docs/version-20/Concepts/dt_number.md b/versioned_docs/version-20/Concepts/dt_number.md index 4c8cf85f76d0ca..f9502a3a391ae3 100644 --- a/versioned_docs/version-20/Concepts/dt_number.md +++ b/versioned_docs/version-20/Concepts/dt_number.md @@ -73,9 +73,9 @@ The modulo operator % returns significant values with numbers that are in the Lo ::: -### Longint division +### Integer division -The longint division operator \ returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Real comparison diff --git a/versioned_docs/version-21/Concepts/dt_number.md b/versioned_docs/version-21/Concepts/dt_number.md index 0735ba7811d630..f3e140835167e7 100644 --- a/versioned_docs/version-21/Concepts/dt_number.md +++ b/versioned_docs/version-21/Concepts/dt_number.md @@ -79,9 +79,9 @@ The modulo operator % returns significant values with numbers that are in the Lo ::: -### Longint division +### Integer division -The longint division operator \ returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Real comparison From ec61c9dd267b85ff6b6d9d64b669081bce8cd002 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 3 Dec 2025 18:18:31 +0100 Subject: [PATCH 68/75] updated get/set database parameters --- .../commands-legacy/get-database-parameter.md | 810 ++++++++++-------- .../commands-legacy/set-database-parameter.md | 803 +++++++++-------- .../commands-legacy/get-database-parameter.md | 810 ++++++++++-------- .../commands-legacy/set-database-parameter.md | 803 +++++++++-------- 4 files changed, 1766 insertions(+), 1460 deletions(-) diff --git a/docs/commands-legacy/get-database-parameter.md b/docs/commands-legacy/get-database-parameter.md index a4af0faf373e1e..d17f67f25c816c 100644 --- a/docs/commands-legacy/get-database-parameter.md +++ b/docs/commands-legacy/get-database-parameter.md @@ -22,6 +22,36 @@ displayed_sidebar: docs The *selector* parameter designates the parameter to get. 4D offers you the following predefined constants, which are in the “*Database Parameters*” theme: +### 4D Remote mode timeout (14) + +**Scope** (legacy network layer only): 4D application if *value* positive + +**Kept between two sessions**: Yes if *value* positive + +**Description**: To be used in very specific cases. Value of the timeout granted by the remote 4D machine to the 4D Server machine. The default timeout value used by 4D in remote mode is set on the "Client-Server/Network options" page of the Database settings dialog box on the remote machine. + +The 4D Remote mode timeout selector is only taken into account if you are using the legacy network. It is ignored when the *ServerNet* layer is activated: this setting is entirely managed by the 4D Server timeout (13) selector. + + + + +### 4D Server log recording (28) + +**Thread-safe** : Yes + +**Scope**: 4D Server, 4D remote* + +* **Kept between two sessions**: No + +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). + +**Description**: Starts or stops the recording of standard requests received by 4D Server (excluding Web requests). By default, the value is 0 (requests not recorded). + +4D Server lets you record each request received by the server machine in a log file. When this mechanism is enabled, two files are created in the Logs folder of the database. They are named *4DRequestsLogServer\_X*.txt and *4DRequestsLog\_ProcessInfoServer\_X*.txt on the server, and *4DRequestsLog\_X*.txt and *4DRequestsLog\_ProcessInfo\_X*.txt on the remote, where X is the sequential number of the log. Once a file has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. + + + + ### 4D Server timeout (13) **Scope**: 4D application if *value* positive @@ -40,41 +70,60 @@ If you pass a **positive** value in the *value*parameter, you set a global and p -### 4D Remote mode timeout (14) -**Scope** (legacy network layer only): 4D application if *value* positive +### Auto synchro resources folder (48) -**Kept between two sessions**: Yes if *value* positive +**Scope**:4D remote machine -**Description**: To be used in very specific cases. Value of the timeout granted by the remote 4D machine to the 4D Server machine. The default timeout value used by 4D in remote mode is set on the "Client-Server/Network options" page of the Database settings dialog box on the remote machine. +**Kept between two** **sessions**: No -The 4D Remote mode timeout selector is only taken into account if you are using the legacy network. It is ignored when the *ServerNet* layer is activated: this setting is entirely managed by the 4D Server timeout (13) selector. +**Possible values**: 0 (no synchronization), 1 (auto synchronization) or 2 (ask). +**Description**: Dynamic synchronization mode for *Resources* folder of 4D client machine that executed the command with that of the server. +When the contents of the *Resources* folder on the server has been modified or a user has requested synchronization (for example via the resources explorer or following the execution of the [SET DATABASE LOCALIZATION](set-database-localization.md) command), the server notifies the connected client machines. + +Three synchronization modes are then possible on the client side. The Auto Synchro Resources Folder selector is used to specify the mode to be used by the client machine for the current session: + +0 (default value): no dynamic synchronization (synchronization request is ignored) 1: automatic dynamic synchronization2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. + + + + +### Cache flush periodicity (95) + +**Thread-safe** : Yes -### Port ID (15) **Scope**: 4D local, 4D Server **Kept between two sessions**: No -**Description**: Command SET DATABASE TCP port ID used by the 4D Web server with 4D in local mode and 4D Server. The default value, which can be set on the "Web/Configuration" page of the Preferences dialog box, is 80\. You can use the constants of the *TCP Port Numbers* theme for the *value* parameter. +**Possible values**: longint > 1 (seconds) -The Port ID selector is useful for 4D Web Servers compiled and merged with 4D Desktop (in which there is no access to the Design mode). For more information about the TCP port ID, refer to the *Web Server Settings* section. +**Description**: Gets or sets the current cache flush periodicity, expressed in seconds. Modifying this value overrides the **Flush Cache every X Seconds** option in the [XML DECODE](xml-decode.md) of the Database settings for the session (it is not stored in the Database settings). -### Character set (17) -**Scope**: 4D local, 4D Server +### Cache unload minimum size (66) -**Kept between two sessions**: Yes +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Kept between two sessions**: No + +**Possible values**: Positive longint > 1. +**Description**: Minimum size of memory to release from the database cache when the engine needs to make space in order to allocate an object to it (value in bytes). + +The purpose of this selector is to reduce the number of times that data is released from the cache in order to obtain better performance. You can vary this setting according to the size of the cache and that of the blocks of data being handled in your database. + +By default, if this selector is not used, 4D unloads at least 10% of the cache when space is needed. -### Max concurrent Web processes (18) + + +### Character set (17) **Scope**: 4D local, 4D Server @@ -84,15 +133,19 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De -### Client port ID (22) -**Scope**: All 4D remote machines +### Circular log limitation (90) - **Kept between two** **sessions**: Yes +**Thread-safe** : Yes - **Possible values**: See selector 15 +**Scope**: 4D local, 4D Server. + +**Kept between two sessions**: No + +**Possible values**: Any integer value, 0 = keep all logs + +**Description**: Maximum number of files to keep in rotation for each type of log. By default, the 50 most recent files are kept. If you pass a value *X*, only the *X* most recent files are kept, with the oldest being erased automatically when a new one is created. This setting applies to all log files, i.e. request logs (selectors 28 and 45), debug log (selector 34), events log (selector 79), Web logs (selectors 29 and 84 of the [WEB SET OPTION](web-set-option.md) command), etc. -**Description**: Used to specify this parameter for all the remote 4D machines used as Web servers. The values defined using these selectors are applied to all the remote machines used as Web servers. If you want to define values only for certain remote machines, use the Preferences dialog box of 4D in remote mode. @@ -108,6 +161,41 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De + +### Client HTTPS port ID (40) + +**Scope**:All 4D remote machines + +**Kept between two** **sessions**: Yes + +**Possible values**: 0 to 65535 + +**Description**: TCP port number used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). + +This selector can be used to modify by programming the TCP port used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). + +This selector operates exactly the same way as selector 39; however, it applies to all the 4D remote machines used as Web servers. If you only want to modify the value of certain specific client machines, use the Preferences dialog box of the remote 4D. + + + + +### Client log recording (45) + +**Scope**: Remote 4D machine + +**Kept between two sessions**: No + +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, attached to file name). + +**Description**: Starts or stops recording of standard requests carried out by the 4D client machine that executed the command (excluding Web requests). By default, the value is 0 (no recording of requests). + +4D lets you record the log of requests carried out by the client machine. When this mechanism is activated, two files are created on the client machine, in the Logs subfolder of the local folder of the database. They are named 4DRequestsLog\_X.txt and 4DRequestsLog\_ProcessInfo\_X.txt, where X is the sequential number of the log. Once the file 4DRequestsLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file with the same name already exists, it is directly replaced. You can set the starting number for the sequence using the value parameter. + +These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. + + + + ### Client max concurrent Web proc (25) **Scope**: All 4D remote machines @@ -120,29 +208,36 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De -### Maximum Web requests size (27) -**Scope**: 4D local, 4D Server +### Client port ID (22) - Kept between two **sessions**: Yes +**Scope**: All 4D remote machines -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. + **Kept between two** **sessions**: Yes + **Possible values**: See selector 15 +**Description**: Used to specify this parameter for all the remote 4D machines used as Web servers. The values defined using these selectors are applied to all the remote machines used as Web servers. If you want to define values only for certain remote machines, use the Preferences dialog box of 4D in remote mode. -### 4D Server log recording (28) -**Thread-safe** : Yes -**Scope**: 4D Server, 4D remote* -* **Kept between two sessions**: No +### Client Server port ID (35) -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). +**Scope**:Database -**Description**: Starts or stops the recording of standard requests received by 4D Server (excluding Web requests). By default, the value is 0 (requests not recorded). +**Kept between two** **sessions**: Yes + +**Possible values**: 0 to 65535 + +**Description**: TCP port number where the 4D Server publishes the database (bound for 4D remote machines). By default, the value is 19813\. + +Customizing this value means that several 4D client-server applications can be used on the same machine with the TCP protocol; in this case, you must indicate a different port number for each application. + +The value is stored in the database structure file. It can be set with 4D in local mode but is only taken into account in client-server configuration. + +When you modify this value, it is necessary to restart the server machine in order for the new value to be taken into account. -4D Server lets you record each request received by the server machine in a log file. When this mechanism is enabled, two files are created in the Logs folder of the database. They are named *4DRequestsLogServer\_X*.txt and *4DRequestsLog\_ProcessInfoServer\_X*.txt on the server, and *4DRequestsLog\_X*.txt and *4DRequestsLog\_ProcessInfo\_X*.txt on the remote, where X is the sequential number of the log. Once a file has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. @@ -154,23 +249,42 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De **Possible values**: 0 = Do not record (default), 1 = Record in CLF format, 2 = Record in DLF format, 3 = Record in ELF format, 4 = Record in WLF format. -**Description**: Command SET DATABASE PARAMETEStarts or stops the recording of Web requests received by the Web servers of all the client machines. By default, the value is 0 (requests not recorded). +**Description**: Starts or stops the recording of Web requests received by the Web servers of all the client machines. By default, the value is 0 (requests not recorded). The operation of this selector is identical to that of selector 29; however, it applies to all the 4D remote machines used as Web servers. The "logweb.txt" file is, in this case, automatically placed in the Logs subfolder of the remote 4D database folder (cache folder). If you only want to set values for certain client machines, use the Preferences dialog box of 4D in remote mode. -### Table sequence number (31) -**Scope**:4D application +### Current process debug log recording (111) - **Kept between two sessions**: Yes +**Scope:** 4D application - **Possible values**: Any longint value. +**Kept between two sessions:** No + +**Description**: Starts or stops the sequential recording of programming events **for the current process** in a separated log file. This log is similar to the Debug log recording (selector 34) but focuses on the current process only. The log file name includes the letter "p" and the process number: 4DDebugLog\[\_p*N*_*n*].txt, where N is the process unique ID. -**Description**: Command SET DATABASE PARAMETERThis selector is used to modify or get the current unique number for records of the table passed as parameter. "Current number" means "last number used": if you modify this value using [SET DATABASE PARAMETER](set-database-parameter.md), the next record will be created with a number that consists of the value passed + 1\. This new number is the one returned by the [Sequence number](sequence-number.md) command as well in any field of the table to which the "Autoincrement" property has been assigned in the Structure editor or via SQL. +For more information about this format and on the use of the *4DDebugLog* file, please refer to *Description of log files* in the Design Reference. + +**Notes:** This selector is provided solely for the purpose of debugging and should be used with care. In particular, it must not put into production since it can have an impact on the application performance. You can use both Debug log recording and Current process debug log recording selectors simultaneously, in which case the current process actions will not be logged in the main log file. + + + + +### Dates inside objects (85) + +**Scope:** Current process + +**Kept between two sessions**: No + + **Possible values**: String type without time zone (0), String type with time zone (1), Date type (2) (default) + +**Description**: Defines the way dates are stored within objects, as well as how they will be imported/exported in JSON. + +When the selector value is Date type (default value for databases created with 4D v17 and higher), 4D dates are stored with the date type within objects, with respect to the local date settings. When converted to JSON format, date attributes will be converted to strings which do not include a time. (**Note:** this setting can be set by means of the "Use date type instead of ISO date format in objects" option found on the *Compatibility page* of the Database Settings). + +Passing String type with time zone in this selector will convert 4D dates into ISO strings and take the local time zone into account. For example, converting the date 23/08/2013 gives you "2013-08-22T22:00:000Z" in JSON format when the operation is performed in France during Daylight Savings Time (GMT+2). This principle conforms to the standard operation of JavaScript. This can be a source of errors when you want to send JSON date values to someone in a different time zone. For example, when you export a table using [Selection to JSON](selection-to-json.md) in France that is meant to be reimported in the US using [JSON TO SELECTION](json-to-selection.md). Since dates are re-interpreted in each time zone, the values stored in the database will be different. In this case, you can modify the conversion mode for dates so that they do not take the time zone into account by passing String type without time zone in this selector. Converting the date 23/08/2013 will then give you "2013-08-23T00:00:00Z" in all cases. -By default, this unique number is set by 4D and corresponds to the order of record creation. For additional information, refer to the documentation of the [Sequence number](sequence-number.md) command. @@ -180,42 +294,34 @@ By default, this unique number is set by 4D and corresponds to the order of reco **Scope**: 4D application -Kept between two **sessions**: No +**Kept between two sessions**: No **Description**: Starts or stops the sequential recording of events occurring at the 4D programming level in the *4DDebugLog\[\_n\].txt* file or *4DDebugLogServer\[\_n\].txt* (where \_n is the segment number of the file and *Server* is added to the file name when generated on the server). Two modes are available: - Standard mode provides a basic view of events and the file is automatically placed in the Logs subfolder of the database, next to the structure file. Execution times are expressed in milliseconds with the "< ms" value displayed when an operation lasts less than one millisecond. - - Tabbed mode provides additional information and uses a more compact, tabbed format in the file. Execution times are expressed in microseconds. **Possible values**: Longint containing a bit field: value = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (value 1) requests to enable the file (note that any other non-null value also enables it as well) - - Bit 1 (value 2) requests call parameters to commands and (interpreted mode only) methods - - Bit 2 (value 4) enables tabbed format. - - Bit 3 (value 8) disables immediate writing of each operation on disk (enabled by default). Immediate writing is slower but more effective, for example for investigating causes of a crash. If you disable this mode, the file contents are generated more quickly. - - Bit 4 (value 16) disables recording of plug-in calls (enabled by default). - - Bit 5 (value 32) disables member function logging. Examples: +```4d SET DATABASE PARAMETER (34;1) // enables standard mode without parameters, with runtimes - SET DATABASE PARAMETER (34;2) // enables standard mode with parameters and runtimes - SET DATABASE PARAMETER (34;2+4) // enables tabbed mode with parameters and runtimes - SET DATABASE PARAMETER (34;0) // disables file +``` For any type of interpreted or compiled 4D application (4D all modes, 4D Server, 4D Volume Desktop), you can avoid having a file record too much information by: - restricting the 4D commands that are examined by using Log command list (selector 80), or - - restricting it to the current process only with Current process debug log recording (selector 111). This will add the letter "p" and the process number to the file name: *4DDebugLog\[\_pn\_n\].txt* or *4DDebugLogServer\[\_pn\_n\].txt* * *For more information about this format and on the use of the *4DDebugLog* file, please refer to the *Description of log files* section.. @@ -228,484 +334,461 @@ For any type of interpreted or compiled 4D application (4D all modes, 4D Server, -### Client Server port ID (35) -**Scope**:Database +### Diagnostic log level (86) - **Kept between two** **sessions**: Yes +**Thread-safe** : Yes - **Possible values**: 0 to 65535 +**Scope:** 4D application -**Description**: TCP port number where the 4D Server publishes the database (bound for 4D remote machines). By default, the value is 19813\. +**Kept between two sessions:** No -Customizing this value means that several 4D client-server applications can be used on the same machine with the TCP protocol; in this case, you must indicate a different port number for each application. +**Description:** Level(s) of messages to be included in the diagnostic log when enabled (see selector Diagnostic log recording). Each level designates a category of diagnostic messages and automatically includes more important categorie(s). For a description of categories, see *Diagnostic log levels* section on *developer.4d.com*. -The value is stored in the database structure file. It can be set with 4D in local mode but is only taken into account in client-server configuration. +**Possible values:** One of the following constants (Log info by default): +- Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) +- Log debug: activates ERROR, WARN, INFO, DEBUG +- Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN +- Log error: activates ERROR (least detailed level) -When you modify this value, it is necessary to restart the server machine in order for the new value to be taken into account. -### HTTPS Port ID (39) +### Diagnostic log recording (79) -**Scope**:4D local, 4D Server +**Thread-safe** : Yes - Kept between two **sessions**: Yes +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Kept between two sessions**: No +Possible values: 0 or 1 (0 = do not record, 1 = record) +**Description**: Starts or stops recording of the 4D diagnostic file. By default, the value is 0 (do not record). -### Client HTTPS port ID (40) +4D can continuously record a set of events related to the internal application operation into a diagnostic file. Information contained in this file is intended for the development of 4D applications and can be analyzed with the help of the 4D tech support (for more information, please refer to the *Description of log files* section on *developer.4d.com*). When you pass 1 in this selector, a diagnostic file is automatically created (or opened) in the database **Logs** folder. The file is named *4DDiagnosticLog\_X*.txt (or *4DDiagnosticLogServer\_X*.txt if generated on the server). Once this file reaches a size of 10 MB, it is closed and a new file is generated, with an incremented sequence number X. -**Scope**:All 4D remote machines +Note that you can include custom information in this file using the [LOG EVENT](log-event.md) command. - **Kept between two** **sessions**: Yes - **Possible values**: 0 to 65535 -**Description**: TCP port number used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). -This selector can be used to modify by programming the TCP port used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). +### Direct2D get active status (74) -This selector operates exactly the same way as selector 39; however, it applies to all the 4D remote machines used as Web servers. If you only want to modify the value of certain specific client machines, use the Preferences dialog box of the remote 4D. +**Note**: You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. +**Description**: Returns active implementation of Direct2D under Windows. +**Possible values**: 0, 1, 2, 3, 4 or 5 (see values of selector 69). The value returned depends on the availability of Direct2D, the hardware and the quality of Direct2D support by the operating system. -### SQL Autocommit (43) +For example, if you execute: -**Scope**:Database +```4d + SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) + $mode:=Get database parameter(Direct2D get active status) +``` - **Kept between two** **sessions**: Yes +- On Windows 7 and higher, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 3 (software context). - **Possible values**: 0 (deactivation) or 1 (activation) +- On Windows Vista, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 0 (disabling of Direct2D). -**Description**: Activation or deactivation of the SQL auto-commit mode. By default, the value is 0 (deactivated mode) +- On Windows XP, *$mode* is always set to 0 (not compatible with Direct2D). - The auto-commit mode is used to strengthen the referential integrity of the database. When this mode is active, all *SELECT*, *INSERT*, *UPDATE* and *DELETE* (SIUD) queries are automatically included in ad hoc transactions when they are not already executed within a transaction. This mode can also be set in the Preferences of the database. -### SQL Engine case sensitivity (44) +### Direct2D status (69) -**Scope**: Database +**Scope**: 4D application -Kept between two **sessions**: Yes +**Kept between two sessions**: No -**Possible values**: 0 (case not taken into account) or 1 (case-sensitive) +**Description**: Activation mode of Direct2D under Windows. -**Description**: Activation or deactivation of case-sensitivity for string comparisons carried out by the SQL engine. +**Possible values**: One of the following constants (mode 3 by default): -By default, the value is 1 (case-sensitive): the SQL engine differentiates between upper and lower case and between accented characters when comparing strings (sorts and queries). For example “ABC”= “ABC” but “ABC” # “Abc” and "abc" # "âbc." In certain cases, for example so as to align the functioning of the SQL engine with that of the 4D engine, you may wish for string comparisons to not be case-sensitive (“ABC”=“Abc"="âbc"). +- Direct2D Disabled (0): Direct2D mode is not enabled and the database functions in the previous mode (GDI/GDIPlus). +- Direct2D Hardware (1): Use Direct2D as graphics hardware context for entire 4D application. If this context is not available, use Direct2D graphics software context. +- Direct2D Software (3) (Default mode): Beginning with Windows 7, use Direct2D graphics software context for entire 4D application. -**Warning:* Since this option modifies the database structure file and all processes, for performance reasons it is highly recommended to set it at database startup only.* This option can also be set in the Database settings. +**Warning:* This selector is provided for debugging purposes only. Since several 4D features rely on Direct2D, it must not be disabled in deployed applications. Only the default mode (Direct2D Software) is approved for deployed applications.* -### Client log recording (45) -**Scope**: Remote 4D machine +### HTTP compression level (50) -Kept between two **sessions**: No +**Scope**:4D application -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, attached to file name). +**Kept between two sessions**: No -**Description**: Starts or stops recording of standard requests carried out by the 4D client machine that executed the command (excluding Web requests). By default, the value is 0 (no recording of requests). +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -4D lets you record the log of requests carried out by the client machine. When this mechanism is activated, two files are created on the client machine, in the Logs subfolder of the local folder of the database. They are named 4DRequestsLog\_X.txt and 4DRequestsLog\_ProcessInfo\_X.txt, where X is the sequential number of the log. Once the file 4DRequestsLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file with the same name already exists, it is directly replaced. You can set the starting number for the sequence using the value parameter. -These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. +### HTTP compression threshold (51) -### Query by formula on server (46) +**Scope**:4D application -**Scope**: Current table and process +**Kept between two** **sessions**: No - **Kept between two sessions**: No +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. - **Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) -**Description**: Execution location of [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands for the *table* passed in the parameter. -When using a database in client-server mode, the query "by formula" commands can be executed either on the server or on the client machine: -In databases created with 4D v11 SQL, these commands are executed on the server. In converted databases, these commands are executed on the client machine, as in previous versions of 4D.In converted databases, a specific preference (Application/Compatibility page) can be used to globally modify the execution location of these commands.This difference in execution location influences not only application performance (execution on the server is usually faster) but also programming. In fact, the value of the components of the formula (in particular variables called via a method) differ according to the execution context. You can use this selector to punctually adapt the operation of your application. +### HTTPS Port ID (39) -If you pass 0 in the *value* l’parameter, the execution location of query "by formula" commands will depend on the database configuration: in databases created with 4D v11 SQL, these commands will be executed on the server. In converted databases, they will be executed on the client machine or the server according to the database preferences. Pass 1 or 2 in *value* to "force" the execution of these commands, respectively, on the client or on the server machine. +**Scope**:4D local, 4D Server -Refer to example 2. +**Kept between two sessions**: Yes -**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -### Order by formula on server (47) -**Scope**:Current table and process +### Idle connections timeout (54) - **Kept between two** **sessions**: No +**Scope**:4D application unless value is negative - **Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) +**Kept between two sessions**: No -**Description** : Execution location of [ORDER BY FORMULA](order-by-formula.md) command for the table passed in the parameter. +**Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -When using a database in client-server mode, this command can be executed either on the server or on the client machine. This selector can be used to specify the execution location of this command (server or client). This mode can also be set in the database preferences. For more information, please refer to the description of selector 46, Query By Formula On Server. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. -**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. +On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. +If you pass a positive value in *value*, it applies to all new connections in all the processes. If you pass a negative value, it applies to connections that are open in the current process. If you pass 0, idle connections are not subjected to a timeout. +This parameter must be set on the client side. Usually, you do not need to change this value. -### Auto synchro resources folder (48) -**Scope**:4D remote machine - **Kept between two** **sessions**: No - **Possible values**: 0 (no synchronization), 1 (auto synchronization) or 2 (ask). +### IMAP Log (119) -**Description**: Dynamic synchronization mode for *Resources* folder of 4D client machine that executed the command with that of the server. +**Thread-safe** : Yes -When the contents of the *Resources* folder on the server has been modified or a user has requested synchronization (for example via the resources explorer or following the execution of the [SET DATABASE LOCALIZATION](set-database-localization.md) command), the server notifies the connected client machines. +**Scope**: 4D local, 4D Server -Three synchronization modes are then possible on the client side. The Auto Synchro Resources Folder selector is used to specify the mode to be used by the client machine for the current session: +**Kept between two sessions**: No -0 (default value): no dynamic synchronization (synchronization request is ignored) 1: automatic dynamic synchronization2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (IMAP exchanges not recorded). +**Description**: Starts or stops the recording of exchanges between 4D and the IMAP server, when a transporter object is processed through *IMAP\_transporter.getMail( )* or *IMAP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DIMAPLog\_X.txt, where X is the sequential number of the log. Once the file 4DIMAPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. +For more information on the 4DIMAPLog\_X.txt files, please refer to [*Description of log files*](../Debugging/debugLogFiles.md). -### Query by formula joins (49) -**Scope**:Current process - **Kept between two** **sessions**: No - **Possible values**: 0 (use database configuration), 1 (always use automatic relations) or 2 (use SQL joins if possible). +### Is current database a project (112) -**Description**: Operating mode of the [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands relating to the use of "SQL joins." +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -In databases created starting with version 11.2 of 4D v11 SQL, these commands carry out joins based on the SQL joins model. This mechanism can be used to modify the selection of a table according to a query carried out on another table without these tables being connected by an automatic relation (necessary condition in previous versions of 4D). +**Scope**: 4D application -The QUERY BY FORMULA Joins selector lets you specify the operating mode of the query by formula commands for the current process: +**Description**: Returns 1 if the current database architecture is a project, and 0 otherwise. For more information, please refer to [*Project vs binary database* section on doc.4d.com](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-new-database.300-6750129.en.html#5057971). -0: Uses the current settings of the database (default value). In databases created starting with version 11.2 of 4D v11 SQL, "SQL joins" are always activated for queries by formula. In converted databases, this mechanism is not activated by default for compatibility reasons but can be implemented via a preference.1: Always use automatic relations (= functioning of previous versions of 4D). In this mode, a relation is necessary in order to set the selection of a table according to queries carried out on another table. 4D does not do "SQL joins."2: Use SQL joins if possible (= default operation of databases created in version 11.2 and higher of 4D v11 SQL ). In this mode, 4D establishes "SQL joins" for queries by formula when the formula is suited for it (with two notable exceptions, see the description of the [QUERY BY FORMULA](query-by-formula.md) or [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) command).**Note:** With 4D in remote mode, "SQL joins" can only be used if the formulas are executed on the server (they must have access to the records). To configure where formulas are to be executed, please refer to selectors 46 and 47. -### HTTP compression level (50) +### Is host database a project (113) -**Scope**:4D application +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. - Kept between two **sessions**: No +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Description**: Returns 1 if the host database architecture is a project, and 0 otherwise. For more information, please refer to [*Project vs binary database* section on doc.4d.com](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-new-database.300-6750129.en.html#5057971). -### HTTP compression threshold (51) -**Scope**:4D application +### Is host database writable (117) - **Kept between two** **sessions**: No +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Scope**: 4D application +**Description**: Returns 1 if the host project file/structure file is writable, and 0 if it is read-only. -### Server base process stack size (53) -**Scope**: 4D Server - Kept between two **sessions**: No +### Libldap version (114) - **Possible values**: Positive longint. +**Scope**: Current 4D machine -**Description**: Size of the stack allocated to each preemptive system process on the server, expressed in bytes. The default size is determined by the system. +**Kept between two sessions**: n/a -Preemptive system processes (processes of the 4D client base process type) are loaded to control the main 4D client processes. The size allocated by default to the stack of each preemptive process allows a good ease of execution but may prove to be consequential when very large numbers of processes (several hundred) are created. +**Description**: Returns the version number of the LDAP library in the 4D application on the current machine. (Read only) -For optimization purposes, this size can be reduced considerably if the operations carried out by the database allow for it (for example if the database does not carry out sorts of large quantities of records). Values of 512 or even 256 KB are possible. Be careful, under-sizing the stack is critical and can be harmful to the operation of 4D Server. Setting this parameter should be done with caution and must take the database conditions of use into account (number of records, type of operations, etc.). -In order to be taken into account, this parameter must be executed on the server machine (for example in the *On Server Startup Database Method*). +### Libsasl version (115) -### Idle connections timeout (54) +**Scope**: Current 4D machine -**Scope**:4D application unless value is negative +**Kept between two sessions**: n/a -**Kept between two** **sessions**: No +**Description**: Returns the version number of the SASL library in the 4D application on the current machine. (Read only) -**Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. -On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. -If you pass a positive value in *value*, it applies to all new connections in all the processes. If you pass a negative value, it applies to connections that are open in the current process. If you pass 0, idle connections are not subjected to a timeout. +### Libzip version (120) -This parameter must be set on the client side. Usually, you do not need to change this value. +**Scope:** Current 4D machine +**Kept between two sessions:** n/a +**Description:** Returns the version number of the libzip library in the 4D application on the current machine. (Read only) -### PHP interpreter IP address (55) -**Scope**:4D application - Kept between two **sessions**: No -**Values**: Formatted string of the IPv4 type (for example "127.0.0.1") or IPv6 type (for example "2001:0db8:0000:0000:0000:ff00:0042:8329") +### Log command list (80) -**Description**: IP address used locally by 4D to communicate with the PHP interpreter via FastCGI. By default, the value is "127.0.0.1" (addresses in IPv6 format are supported starting with 4D v16R4). This address must correspond to the machine where 4D is located. This parameter can also be set globally for all the machines via the Database Settings. +**Scope**: 4D application -For more information about the PHP interpreter, please refer to the *Design Reference* manual. +**Kept between two sessions**: No +**Possible values**: String containing a list of 4D command numbers to record (separated by semi-colons) or "all" to record all the commands or "" (empty string) to record none of them or prefixed by "-" to exclude specific commands. +**Description**: List of 4D commands to record in or exclude from the debugging file (see selector 34, Debug Log Recording). By default, all 4D commands are recorded. -### PHP interpreter port (56) +This selector restricts the quantity of information saved in the debugging file by limiting the 4D commands whose execution you want to record or exclude from recording. For example, you can write: -**Scope**:4D application +```4d +//Record only the QUERY and QUERY SELECTION commands +SET DATABASE PARAMETER(Log command list;"277;341") +``` +OR +```4d +//Exclude the SET USER ALIAS and DELAY PROCESS commands from being recorded +SET DATABASE PARAMETER(Log command list;"-1666;-323") +``` - **Kept between two** **sessions**: No -**Values**: Positive long integer type value. By default, the value is 8002\. -**Description**: Number of the TCP port used by the PHP interpreter of 4D. This parameter can also be modified globally for all the machines via the Database Settings. For more information about the PHP interpreter, please refer to the *Design Reference* manual. +### Max concurrent Web processes (18) +**Scope**: 4D local, 4D Server +**Kept between two sessions**: Yes -### SSL cipher list (64) +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Scope**: 4D application -Kept between two **sessions**: No -**Possible values**: Sequence of strings separated by colons. -**Description:** Cipher list used by 4D for the secure protocol. This list modifies the priority of ciphering algorithms implemented by 4D. For example, you can pass the following string in the *value* parameter: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". For a complete description of the syntax for the ciphers list, refer to the *ciphers page of the OpenSSL* *site*. +### Maximum Web requests size (27) -This setting applies to the main Web server (excluding Web server objects), the SQL server, client/server connections, as well as the HTTP client and all the 4D commands that make use of the secure protocol. It is temporary (it is not maintained between sessions). +**Scope**: 4D local, 4D Server -When the cipher list has been modified, you will need to restart the server concerned in order for the new settings to be taken into account. +**Kept between two sessions**: Yes -To reset the cipher list to its default value (stored permanently in the SLI file), call the [SET DATABASE PARAMETER](set-database-parameter.md) command and pass an empty string ("") in the *value* parameter. +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Note:** With the [Get database parameter](get-database-parameter.md) command, the cipher list is returned in the optional *stringValue* parameter and the return parameter is always 0. -### Cache unload minimum size (66) +### Min TLS version (105) -**Scope**: 4D application +**Scope**: 4D Server, 4D Web Server and 4D SQL Server **Kept between two sessions**: No -**Possible values**: Positive longint > 1. - -**Description**: Minimum size of memory to release from the database cache when the engine needs to make space in order to allocate an object to it (value in bytes). - -The purpose of this selector is to reduce the number of times that data is released from the cache in order to obtain better performance. You can vary this setting according to the size of the cache and that of the blocks of data being handled in your database. - -By default, if this selector is not used, 4D unloads at least 10% of the cache when space is needed. - +**Description**: Used to specify the minimum Transport Layer Security (TLS) version, which provides data encryption and authentication between applications and servers. Connection attempts from clients supporting only versions below the minimum will be rejected. The setting is applied globally to the network layer. Once modified, the server must be restarted to use the new value. +**Default value**: TLSv1\_3 -### Direct2D status (69) +**Possible values**: +- TLSv1\_2 (TLS 1.2, introduced in 2008) +- TLSv1\_3 (TLS 1.3, introduced in 2018) -**Scope**: 4D application +**NOTES**: +- The 4D Internet Commands plugin uses a different network layer, therefore this selector will have no impact on its TLS version. +- This setting is ignored for your client server connections if your 4D Server uses the legacy network layer. -**Kept between two sessions**: No -**Description**: Activation mode of Direct2D under Windows. -**Possible values**: One of the following constants (mode 3 by default): -Direct2D Disabled (0): Direct2D mode is not enabled and the database functions in the previous mode (GDI/GDIPlus). +### Number of formulas in cache (92) -Direct2D Hardware (1): Use Direct2D as graphics hardware context for entire 4D application. If this context is not available, use Direct2D graphics software context. +**Scope**: 4D application -Direct2D Software (3) (Default mode): Beginning with Windows 7, use Direct2D graphics software context for entire 4D application. +**Kept between two sessions**: No -**Warning:* This selector is provided for debugging purposes only. Since several 4D features rely on Direct2D, it must not be disabled in deployed applications. Only the default mode (Direct2D Software) is approved for deployed applications.* +**Possible values**: Positive longints +**Default value**: 0 (no cache) +**Description**: Sets or gets the maximum number of formulas to be kept in the cache of formulas, which is used by the [EXECUTE FORMULA](execute-formula.md) command. This limit is applied to all processes, but each process has its own formula cache. Caching formulas accelerates the [EXECUTE FORMULA](execute-formula.md) command execution in compiled mode since each cached formula is tokenized only once in this case. When you change the cache value, existing contents are reset even if the new size is larger than the previous one. Once the maximum number of formulas in the cache is reached, a new executed formula will erase the oldest one in the cache (FIFO mode). This parameter is only taken into account in compiled databases or compiled components. -### Direct2D get active status (74) -**Note**: You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Description**: Returns active implementation of Direct2D under Windows. -**Possible values**: 0, 1, 2, 3, 4 or 5 (see values of selector 69). The value returned depends on the availability of Direct2D, the hardware and the quality of Direct2D support by the operating system. +### OpenSSL version (94) -For example, if you execute: +**Scope**: all 4D machines* - SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) $mode:=Get database parameter(Direct2D get active status) +**Kept between two sessions**: No -- On Windows 7 and higher, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 3 (software context). +**Description**: Returns the version number of the OpenSSL library in use on the machine. (Read only) -- On Windows Vista, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 0 (disabling of Direct2D). -- On Windows XP, *$mode* is always set to 0 (not compatible with Direct2D). +### Order by formula on server (47) -### Diagnostic log recording (79) +**Scope**:Current table and process -**Thread-safe** : Yes +**Kept between two** **sessions**: No -**Scope**: 4D application +**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) -Kept between two **sessions**: No +**Description** : Execution location of [ORDER BY FORMULA](order-by-formula.md) command for the table passed in the parameter. -Possible values: 0 or 1 (0 = do not record, 1 = record) +When using a database in client-server mode, this command can be executed either on the server or on the client machine. This selector can be used to specify the execution location of this command (server or client). This mode can also be set in the database preferences. For more information, please refer to the description of selector 46, Query By Formula On Server. -**Description**: Starts or stops recording of the 4D diagnostic file. By default, the value is 0 (do not record). +**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. -4D can continuously record a set of events related to the internal application operation into a diagnostic file. Information contained in this file is intended for the development of 4D applications and can be analyzed with the help of the 4D tech support (for more information, please refer to the *Description of log files* section on *developer.4d.com*). When you pass 1 in this selector, a diagnostic file is automatically created (or opened) in the database **Logs** folder. The file is named *4DDiagnosticLog\_X*.txt (or *4DDiagnosticLogServer\_X*.txt if generated on the server). Once this file reaches a size of 10 MB, it is closed and a new file is generated, with an incremented sequence number X. -Note that you can include custom information in this file using the [LOG EVENT](log-event.md) command. +### Pause logging (121) -### Log command list (80) +**Thread-safe** : Yes **Scope**: 4D application -Kept between two **sessions**: No - -Possible values: String containing a list of 4D command numbers to record (separated by semi-colons) or "all" to record all the commands or "" (empty string) to record none of them or prefixed by "-" to exclude specific commands. - -**Description**: List of 4D commands to record in or exclude from the debugging file (see selector 34, Debug Log Recording). By default, all 4D commands are recorded. - -This selector restricts the quantity of information saved in the debugging file by limiting the 4D commands whose execution you want to record or exclude from recording. For example, you can write: - - SET DATABASE PARAMETER(Log command list;"277;341") //Record only the QUERY and QUERY SELECTION commands OR SET DATABASE PARAMETER(Log command list;"-1666;-323") //Exclude the SET USER ALIAS and DELAY PROCESS commands from being recorded - - +**Kept between two** **sessions**: No -### Spellchecker (81) +**Possible values**: 0 (resume logs), 1 (pause logs) -**Scope**: 4D application +**Description:** This selector allows to suspend/resume all logging operations started on the application (except ORDA logs). This feature can be useful to temporarily lighten the 4D application tasks or schedule logging operations. - **Kept between two sessions**: No - **Possible values**: 0 (default) = native macOS spellchecker (Hunspell disabled), 1 = Hunspell spellcheck enabled. -**Description**: Enables the Hunspell spellcheck under macOS. By default, the native spellchecker is enabled on this platform. You may prefer to use the Hunspell spellcheck, for example, in order to unify the interface for your cross-platform applications (under Windows, only the Hunspell spellcheck is available). For more information, refer to *Spell checking*. +### PHP interpreter IP address (55) +**Scope**:4D application -### Dates inside objects (85) +**Kept between two sessions**: No -Scope: Current process +**Values**: Formatted string of the IPv4 type (for example "127.0.0.1") or IPv6 type (for example "2001:0db8:0000:0000:0000:ff00:0042:8329") - Kept between two **sessions**: No +**Description**: IP address used locally by 4D to communicate with the PHP interpreter via FastCGI. By default, the value is "127.0.0.1" (addresses in IPv6 format are supported starting with 4D v16R4). This address must correspond to the machine where 4D is located. This parameter can also be set globally for all the machines via the Database Settings. - **Possible values**: String type without time zone (0), String type with time zone (1), Date type (2) (default) +For more information about the PHP interpreter, please refer to the *Design Reference* manual. -**Description**: Defines the way dates are stored within objects, as well as how they will be imported/exported in JSON. -When the selector value is Date type (default value for databases created with 4D v17 and higher), 4D dates are stored with the date type within objects, with respect to the local date settings. When converted to JSON format, date attributes will be converted to strings which do not include a time. (**Note:** this setting can be set by means of the "Use date type instead of ISO date format in objects" option found on the *Compatibility page* of the Database Settings). -Passing String type with time zone in this selector will convert 4D dates into ISO strings and take the local time zone into account. For example, converting the date 23/08/2013 gives you "2013-08-22T22:00:000Z" in JSON format when the operation is performed in France during Daylight Savings Time (GMT+2). This principle conforms to the standard operation of JavaScript. This can be a source of errors when you want to send JSON date values to someone in a different time zone. For example, when you export a table using [Selection to JSON](selection-to-json.md) in France that is meant to be reimported in the US using [JSON TO SELECTION](json-to-selection.md). Since dates are re-interpreted in each time zone, the values stored in the database will be different. In this case, you can modify the conversion mode for dates so that they do not take the time zone into account by passing String type without time zone in this selector. Converting the date 23/08/2013 will then give you "2013-08-23T00:00:00Z" in all cases. +### PHP interpreter port (56) +**Scope**:4D application -### Diagnostic log level (86) +**Kept between two sessions**: No -**Thread-safe** : Yes +**Values**: Positive long integer type value. By default, the value is 8002\. -**Scope:** 4D application +**Description**: Number of the TCP port used by the PHP interpreter of 4D. This parameter can also be modified globally for all the machines via the Database Settings. For more information about the PHP interpreter, please refer to the *Design Reference* manual. -**Kept between two sessions:** No -**Description:** Level(s) of messages to be included in the diagnostic log when enabled (see selector Diagnostic log recording). Each level designates a category of diagnostic messages and automatically includes more important categorie(s). For a description of categories, see *Diagnostic log levels* section on *developer.4d.com*. -**Possible values:** One of the following constants (Log info by default): Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) Log debug: activates ERROR, WARN, INFO, DEBUG Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN Log error: activates ERROR (least detailed level) +### POP3 Log (116) +**Thread-safe** : Yes -### Use legacy network layer (87) +**Scope:** 4D local, 4D Server -**Scope**: 4D in local mode, 4D Server +**Kept between two sessions:** No -**Kept between two sessions**: Yes +**Possible values:** 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (POP3 exchanges not recorded). -**Description:** Sets or gets the current status of the legacy network layer for client/server connections. The legacy network layer is obsolete beginning with 4D v14 R5 and should be replaced progressively in your applications with the *ServerNet* network layer. *ServerNet* will be required in upcoming 4D releases in order to benefit from future network evolutions. For compatibility reasons, the legacy network layer is still supported to allow a smooth transition for existing applications; (it is used by default in applications converted from a release prior to v14 R5). Pass 1 in this parameter to use the legacy network layer (and disable *ServerNet*) for your client/server connections, and pass 0 to disable the legacy network (and use the *ServerNet*). +**Description**: Starts or stops the recording of exchanges between 4D and the POP3 server, when a transporter object is processed through *POP3\_transporter.getMail( )* or *POP3\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DPOP3Log\_X.txt, where X is the sequential number of the log. Once the file 4DPOP3Log has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -This property can also be set by means of the "Use legacy network layer" option found on the *Compatibility page* of the Database Settings (see *Network and Client-Server options*). In this section, you will also find a discussion about migration strategy. We recommend that you activate the *ServerNet* as soon as possible. You will need to restart the application in order for this parameter to be taken into account. +For more information on the 4DPOP3Log\_X.txt files, please refer to the *Description of log files* section. -**Possible values:** 0 or 1 (0 = do not use legacy layer, 1 = use legacy layer) -**Default value:** 0 in databases created with 4D v14 R5 or higher, 1 in databases converted from 4D v14 R4 or earlier. +### Port ID (15) -### SQL Server Port ID (88) +**Scope**: 4D local, 4D Server -**Scope**: 4D local, 4D Server. +**Kept between two sessions**: No -**Kept between two sessions**: Yes +**Description**: TCP port ID used by the 4D Web server with 4D in local mode and 4D Server. The default value, which can be set on the "Web/Configuration" page of the Preferences dialog box, is 80\. You can use the constants of the *TCP Port Numbers* theme for the *value* parameter. -**Description**: Gets or sets the TCP port number used by the integrated SQL server of 4D in local mode or 4D Server. By default, the value is 19812\. When this selector is set, the database setting is updated. You can also set the TCP port number on the "SQL" page of the Database Settings dialog box. +The Port ID selector is useful for 4D Web Servers compiled and merged with 4D Desktop (in which there is no access to the Design mode). For more information about the TCP port ID, refer to the *Web Server Settings* section. -**Possible values**: 0 to 65535. -**Default value**: 19812 +### Query by formula joins (49) -### Circular log limitation (90) +**Scope**:Current process -**Thread-safe** : Yes +**Kept between two** **sessions**: No -**Scope**: 4D local, 4D Server. +**Possible values**: 0 (use database configuration), 1 (always use automatic relations) or 2 (use SQL joins if possible). -**Kept between two sessions**: No +**Description**: Operating mode of the [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands relating to the use of "SQL joins." -**Possible values**: Any integer value, 0 = keep all logs +In databases created starting with version 11.2 of 4D v11 SQL, these commands carry out joins based on the SQL joins model. This mechanism can be used to modify the selection of a table according to a query carried out on another table without these tables being connected by an automatic relation (necessary condition in previous versions of 4D). -**Description**: Maximum number of files to keep in rotation for each type of log. By default, the 50 most recent files are kept. If you pass a value *X*, only the *X* most recent files are kept, with the oldest being erased automatically when a new one is created. This setting applies to all log files, i.e. request logs (selectors 28 and 45), debug log (selector 34), events log (selector 79), Web logs (selectors 29 and 84 of the [WEB SET OPTION](web-set-option.md) command), etc. +The QUERY BY FORMULA Joins selector lets you specify the operating mode of the query by formula commands for the current process: +- 0: Uses the current settings of the database (default value). In databases created starting with version 11.2 of 4D v11 SQL, "SQL joins" are always activated for queries by formula. In converted databases, this mechanism is not activated by default for compatibility reasons but can be implemented via a preference. +- 1: Always use automatic relations (= functioning of previous versions of 4D). In this mode, a relation is necessary in order to set the selection of a table according to queries carried out on another table. 4D does not do "SQL joins." +- 2: Use SQL joins if possible (= default operation of databases created in version 11.2 and higher of 4D v11 SQL ). In this mode, 4D establishes "SQL joins" for queries by formula when the formula is suited for it (with two notable exceptions, see the description of the [QUERY BY FORMULA](query-by-formula.md) or [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) command). +**Note:** With 4D in remote mode, "SQL joins" can only be used if the formulas are executed on the server (they must have access to the records). To configure where formulas are to be executed, please refer to selectors 46 and 47. -### Number of formulas in cache (92) -**Scope**: 4D application -**Kept between two sessions**: No -**Possible values**: Positive longints +### Query by formula on server (46) -**Default value**: 0 (no cache) +**Scope**: Current table and process -**Description**: Sets or gets the maximum number of formulas to be kept in the cache of formulas, which is used by the [EXECUTE FORMULA](execute-formula.md) command. This limit is applied to all processes, but each process has its own formula cache. Caching formulas accelerates the [EXECUTE FORMULA](execute-formula.md) command execution in compiled mode since each cached formula is tokenized only once in this case. When you change the cache value, existing contents are reset even if the new size is larger than the previous one. Once the maximum number of formulas in the cache is reached, a new executed formula will erase the oldest one in the cache (FIFO mode). This parameter is only taken into account in compiled databases or compiled components. +**Kept between two sessions**: No +**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) +**Description**: Execution location of [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands for the *table* passed in the parameter. -### OpenSSL version (94) +When using a database in client-server mode, the query "by formula" commands can be executed either on the server or on the client machine: -**Scope**: all 4D machines* +In databases created with 4D v11 SQL, these commands are executed on the server. In converted databases, these commands are executed on the client machine, as in previous versions of 4D.In converted databases, a specific preference (Application/Compatibility page) can be used to globally modify the execution location of these commands.This difference in execution location influences not only application performance (execution on the server is usually faster) but also programming. In fact, the value of the components of the formula (in particular variables called via a method) differ according to the execution context. You can use this selector to punctually adapt the operation of your application. -* **Kept between two sessions**: No +If you pass 0 in the *value* l’parameter, the execution location of query "by formula" commands will depend on the database configuration: in databases created with 4D v11 SQL, these commands will be executed on the server. In converted databases, they will be executed on the client machine or the server according to the database preferences. Pass 1 or 2 in *value* to "force" the execution of these commands, respectively, on the client or on the server machine. -**Description**: Returns the version number of the OpenSSL library in use on the machine. (Read only) +Refer to example 2. +**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. -### Cache flush periodicity (95) -**Thread-safe** : Yes +### RDP optimization (133) -**Scope**: 4D local, 4D Server +**Scope:** 4D application. -**Kept between two sessions**: No +**Kept between two sessions:** No. -**Possible values**: longint > 1 (seconds) +**Possible values:** `0`: Disabled (default), `1`: Enabled. -**Description**: Gets or sets the current cache flush periodicity, expressed in seconds. Modifying this value overrides the **Flush Cache every X Seconds** option in the [XML DECODE](xml-decode.md) of the Database settings for the session (it is not stored in the Database settings). +**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). @@ -723,247 +806,240 @@ The sleep timeout is applied after a machine running a 4D remote application has -### Tips enabled (101) -**Scope:** 4D application +### Server base process stack size (53) -**Kept between two sessions:** No +**Scope**: 4D Server -**Possible values:** 0 = tips disabled, 1 = tips enabled (default) +**Kept between two sessions**: No -**Description:** Sets or gets the current display status of the tips for the 4D application. By default, tips are enabled. +**Possible values**: Positive longint. - Note that this parameter sets all 4D tips, i.e. form help messages and Design mode editor's tips. +**Description**: Size of the stack allocated to each preemptive system process on the server, expressed in bytes. The default size is determined by the system. +Preemptive system processes (processes of the 4D client base process type) are loaded to control the main 4D client processes. The size allocated by default to the stack of each preemptive process allows a good ease of execution but may prove to be consequential when very large numbers of processes (several hundred) are created. +For optimization purposes, this size can be reduced considerably if the operations carried out by the database allow for it (for example if the database does not carry out sorts of large quantities of records). Values of 512 or even 256 KB are possible. Be careful, under-sizing the stack is critical and can be harmful to the operation of 4D Server. Setting this parameter should be done with caution and must take the database conditions of use into account (number of records, type of operations, etc.). -### Tips delay (102) +In order to be taken into account, this parameter must be executed on the server machine (for example in the *On Server Startup Database Method*). -**Scope:** 4D application -**Kept between two sessions:** No -**Possible values:** longint >= 0 (ticks) -**Description:** Delay before tips are displayed once the mouse cursor has stopped in objects with attached help messages. Value is expressed in ticks (1/60th of a second). Default value is 45 ticks (0.75 seconds). +### SMTP Log (110) +**Thread-safe** : Yes +**Scope**: 4D local, 4D Server* -### Tips duration (103) +**Kept between two sessions**: No -**Scope:** 4D application +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (SMTP exchanges not recorded). -**Kept between two sessions:** No +**Description**: Starts or stops the recording of exchanges between 4D and the SMTP server, when a *transporter* object is processed through *transporter.send( )* or *SMTP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DSMTPLog\_X.txt, where *X* is the sequential number of the log. Once the file 4DSMTPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -**Possible values:** longint >= 60 (ticks) +For more information on the 4DSMTPLog\_X.txt files, please refer to the *Description of log files* section. -**Description:** Maximum display duration for a tip. Value is expressed in ticks (1/60th of a second). Default value is 720 ticks (12 seconds). -### Min TLS version (105) +### Spellchecker (81) -**Scope**: 4D Server, 4D Web Server and 4D SQL Server +**Scope**: 4D application -**Kept between two sessions**: No + **Kept between two sessions**: No -**Description**: Used to specify the minimum Transport Layer Security (TLS) version, which provides data encryption and authentication between applications and servers. Connection attempts from clients supporting only versions below the minimum will be rejected. The setting is applied globally to the network layer. Once modified, the server must be restarted to use the new value. + **Possible values**: 0 (default) = native macOS spellchecker (Hunspell disabled), 1 = Hunspell spellcheck enabled. -**Default value**: TLSv1\_3 +**Description**: Enables the Hunspell spellcheck under macOS. By default, the native spellchecker is enabled on this platform. You may prefer to use the Hunspell spellcheck, for example, in order to unify the interface for your cross-platform applications (under Windows, only the Hunspell spellcheck is available). For more information, refer to *Spell checking*. -**Possible values**: TLSv1\_2 (TLS 1.2, introduced in 2008) TLSv1\_3 (TLS 1.3, introduced in 2018) **NOTES**: -- The 4D Internet Commands plugin uses a different network layer, therefore this selector will have no impact on its TLS version. -- This setting is ignored for your client server connections if your 4D Server uses the legacy network layer. +### SQL Autocommit (43) +**Scope**:Database -### User param value (108) +**Kept between two** **sessions**: Yes -**Scope:** 4D local, 4D Server +**Possible values**: 0 (deactivation) or 1 (activation) -**Kept between two sessions:** No +**Description**: Activation or deactivation of the SQL auto-commit mode. By default, the value is 0 (deactivated mode) -**Possible values**: Any custom string + The auto-commit mode is used to strengthen the referential integrity of the database. When this mode is active, all *SELECT*, *INSERT*, *UPDATE* and *DELETE* (SIUD) queries are automatically included in ad hoc transactions when they are not already executed within a transaction. This mode can also be set in the Preferences of the database. -**Description:** Custom string passed from one session to the next one when the 4D application is restarted. This selector is useful in the context of automated unit tests that require applications to restart with different parameters. -When used with [SET DATABASE PARAMETER](set-database-parameter.md), defines a new value that will be available within the next opened database after 4D is restarted manually or using the [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), or [RESTART 4D](restart-4d.md) commands. When used with [Get database parameter](get-database-parameter.md), gets the currently available user parameter value, defined using a command line (see *Command Line Interface*), the .4DLink file (see *Using a 4DLink file*), or a call to [SET DATABASE PARAMETER](set-database-parameter.md) during the previous session. (\*) If [SET DATABASE PARAMETER](set-database-parameter.md) sets a User param value before a call to [OPEN DATABASE](open-database.md) with a .4DLink file that also contains a user-param xml attribute, 4D takes into account only the parameter provided by [SET DATABASE PARAMETER](set-database-parameter.md). +### SQL Engine case sensitivity (44) -### Times inside objects (109) +**Scope**: Database -Scope: 4D local, 4D Server (all processes) +**Kept between two sessions**: Yes - Kept between two **sessions**: No +**Possible values**: 0 (case not taken into account) or 1 (case-sensitive) - **Possible values**: Times in seconds (0) (default), Times in milliseconds (1) +**Description**: Activation or deactivation of case-sensitivity for string comparisons carried out by the SQL engine. -**Description**: Defines the way time values are converted and stored within object properties and collection elements, as well as how they will be imported/exported in JSON and in Web areas. By default, starting with 4D v17, times are converted and stored as number of seconds in objects. +By default, the value is 1 (case-sensitive): the SQL engine differentiates between upper and lower case and between accented characters when comparing strings (sorts and queries). For example “ABC”= “ABC” but “ABC” # “Abc” and "abc" # "âbc." In certain cases, for example so as to align the functioning of the SQL engine with that of the 4D engine, you may wish for string comparisons to not be case-sensitive (“ABC”=“Abc"="âbc"). -In previous releases, time values were converted and stored as number of milliseconds in those contexts. Using this selector can help you migrating your applications by reverting to previous settings if necessary. +**Warning:* Since this option modifies the database structure file and all processes, for performance reasons it is highly recommended to set it at database startup only.* This option can also be set in the Database settings. -**Note**: ORDA methods and SQL engine ignore this setting, they always assume time values to be numbers of seconds. -### SMTP Log (110) +### SQL Server Port ID (88) -**Thread-safe** : Yes +**Scope**: 4D local, 4D Server. -**Scope**: 4D local, 4D Server* +**Kept between two sessions**: Yes -* **Kept between two sessions**: No +**Description**: Gets or sets the TCP port number used by the integrated SQL server of 4D in local mode or 4D Server. By default, the value is 19812\. When this selector is set, the database setting is updated. You can also set the TCP port number on the "SQL" page of the Database Settings dialog box. - **Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (SMTP exchanges not recorded). +**Possible values**: 0 to 65535. -**Description**: Starts or stops the recording of exchanges between 4D and the SMTP server, when a *transporter* object is processed through *transporter.send( )* or *SMTP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DSMTPLog\_X.txt, where *X* is the sequential number of the log. Once the file 4DSMTPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. +**Default value**: 19812 -For more information on the 4DSMTPLog\_X.txt files, please refer to the *Description of log files* section. -### Current process debug log recording (111) +### SSL cipher list (64) -**Scope:** 4D application +**Scope**: 4D application -**Kept between two sessions:** No +**Kept between two sessions**: No -**Description**: Starts or stops the sequential recording of programming events **for the current process** in a separated log file. This log is similar to the Debug log recording (selector 34) but focuses on the current process only. The log file name includes the letter "p" and the process number: 4DDebugLog\[\_p*N*_*n*].txt, where N is the process unique ID. +**Possible values**: Sequence of strings separated by colons. -For more information about this format and on the use of the *4DDebugLog* file, please refer to *Description of log files* in the Design Reference. +**Description:** Cipher list used by 4D for the secure protocol. This list modifies the priority of ciphering algorithms implemented by 4D. For example, you can pass the following string in the *value* parameter: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". For a complete description of the syntax for the ciphers list, refer to the *ciphers page of the OpenSSL site*. -**Notes:** This selector is provided solely for the purpose of debugging and should be used with care. In particular, it must not put into production since it can have an impact on the application performance. You can use both Debug log recording and Current process debug log recording selectors simultaneously, in which case the current process actions will not be logged in the main log file. +This setting applies to the main Web server (excluding Web server objects), the SQL server, client/server connections, as well as the HTTP client and all the 4D commands that make use of the secure protocol. It is temporary (it is not maintained between sessions). +When the cipher list has been modified, you will need to restart the server concerned in order for the new settings to be taken into account. +To reset the cipher list to its default value (stored permanently in the SLI file), call the [SET DATABASE PARAMETER](set-database-parameter.md) command and pass an empty string ("") in the *value* parameter. -### Is current database a project (112) +**Note:** With the [Get database parameter](get-database-parameter.md) command, the cipher list is returned in the optional *stringValue* parameter and the return parameter is always 0. -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Scope**: 4D application -**Description**: Returns 1 if the current database architecture is a project, and 0 otherwise. For more information, please refer to *Project vs binary database* section. +### Table sequence number (31) +**Scope**:4D application -### Is host database a project (113) + **Kept between two sessions**: Yes -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. + **Possible values**: Any longint value. -**Scope**: 4D application +**Description**: This selector is used to modify or get the current unique number for records of the table passed as parameter. "Current number" means "last number used": if you modify this value using [SET DATABASE PARAMETER](set-database-parameter.md), the next record will be created with a number that consists of the value passed + 1\. This new number is the one returned by the [Sequence number](sequence-number.md) command as well in any field of the table to which the "Autoincrement" property has been assigned in the Structure editor or via SQL. -**Description**: Returns 1 if the host database architecture is a project, and 0 otherwise. For more information, please refer to *Project vs binary database* section. +By default, this unique number is set by 4D and corresponds to the order of record creation. For additional information, refer to the documentation of the [Sequence number](sequence-number.md) command. -### Libldap version (114) -**Scope**: Current 4D machine +### TCPUDP log recording (131) -**Kept between two sessions**: n/a +**Scope:** 4D application. -**Description**: Returns the version number of the LDAP library in the 4D application on the current machine. (Read only) +**Kept between two sessions:** No. +**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -### Libsasl version (115) -**Scope**: Current 4D machine -**Kept between two sessions**: n/a -**Description**: Returns the version number of the SASL library in the 4D application on the current machine. (Read only) +### Times inside objects (109) +**Scope:** 4D local, 4D Server (all processes) +**Kept between two sessions**: No -### POP3 Log (116) +**Possible values**: Times in seconds (0) (default), Times in milliseconds (1) -**Thread-safe** : Yes +**Description**: Defines the way time values are converted and stored within object properties and collection elements, as well as how they will be imported/exported in JSON and in Web areas. By default, starting with 4D v17, times are converted and stored as number of seconds in objects. -**Scope:** 4D local, 4D Server +In previous releases, time values were converted and stored as number of milliseconds in those contexts. Using this selector can help you migrating your applications by reverting to previous settings if necessary. -**Kept between two sessions:** No +**Note**: ORDA methods and SQL engine ignore this setting, they always assume time values to be numbers of seconds. -**Possible values:** 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (POP3 exchanges not recorded). -**Description**: Starts or stops the recording of exchanges between 4D and the POP3 server, when a transporter object is processed through *POP3\_transporter.getMail( )* or *POP3\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DPOP3Log\_X.txt, where X is the sequential number of the log. Once the file 4DPOP3Log has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -For more information on the 4DPOP3Log\_X.txt files, please refer to the *Description of log files* section. +### Tips delay (102) +**Scope:** 4D application -### Is host database writable (117) +**Kept between two sessions:** No -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. +**Possible values:** longint >= 0 (ticks) -**Scope**: 4D application +**Description:** Delay before tips are displayed once the mouse cursor has stopped in objects with attached help messages. Value is expressed in ticks (1/60th of a second). Default value is 45 ticks (0.75 seconds). -**Description**: Returns 1 if the host project file/structure file is writable, and 0 if it is read-only. -### IMAP Log (119) +### Tips duration (103) -**Thread-safe** : Yes +**Scope:** 4D application -**Scope**: 4D local, 4D Server +**Kept between two sessions:** No -**Kept between two sessions**: No +**Possible values:** longint >= 60 (ticks) -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (IMAP exchanges not recorded). +**Description:** Maximum display duration for a tip. Value is expressed in ticks (1/60th of a second). Default value is 720 ticks (12 seconds). -**Description**: Starts or stops the recording of exchanges between 4D and the IMAP server, when a transporter object is processed through *IMAP\_transporter.getMail( )* or *IMAP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DIMAPLog\_X.txt, where X is the sequential number of the log. Once the file 4DIMAPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -For more information on the 4DIMAPLog\_X.txt files, please refer to the *Description of log files* section. +### Tips enabled (101) -### Libzip version (120) +**Scope:** 4D application -**Scope:** Current 4D machine +**Kept between two sessions:** No -**Kept between two sessions:** n/a +**Possible values:** 0 = tips disabled, 1 = tips enabled (default) -**Description:** Returns the version number of the libzip library in the 4D application on the current machine. (Read only) +**Description:** Sets or gets the current display status of the tips for the 4D application. By default, tips are enabled. + Note that this parameter sets all 4D tips, i.e. form help messages and Design mode editor's tips. -### Pause logging (121) -**Thread-safe** : Yes -**Scope**: 4D application +### Use legacy network layer (87) -**Kept between two** **sessions**: No +**Scope**: 4D in local mode, 4D Server -**Possible values**: 0 (resume logs), 1 (pause logs) +**Kept between two sessions**: Yes -**Description:** This selector allows to suspend/resume all logging operations started on the application (except ORDA logs). This feature can be useful to temporarily lighten the 4D application tasks or schedule logging operations. +**Description:** Sets or gets the current status of the legacy network layer for client/server connections. The legacy network layer is obsolete beginning with 4D v14 R5 and should be replaced progressively in your applications with the *ServerNet* network layer. *ServerNet* will be required in upcoming 4D releases in order to benefit from future network evolutions. For compatibility reasons, the legacy network layer is still supported to allow a smooth transition for existing applications; (it is used by default in applications converted from a release prior to v14 R5). Pass 1 in this parameter to use the legacy network layer (and disable *ServerNet*) for your client/server connections, and pass 0 to disable the legacy network (and use the *ServerNet*). +This property can also be set by means of the "Use legacy network layer" option found on the *Compatibility page* of the Database Settings (see *Network and Client-Server options*). In this section, you will also find a discussion about migration strategy. We recommend that you activate the *ServerNet* as soon as possible. You will need to restart the application in order for this parameter to be taken into account. +**Possible values:** 0 or 1 (0 = do not use legacy layer, 1 = use legacy layer) -### TCPUDP log recording (131) +**Default value:** 0 in databases created with 4D v14 R5 or higher, 1 in databases converted from 4D v14 R4 or earlier. -**Possible values:** - `0`: Logging is disabled. - `1`: Logging is enabled. -**Description:** Retrieves the status of the `4DTCPUDPLog.txt` file for logging TCP events and returns whether the `4DTCPUDPLog.txt` log file is currently active or not. +### User param value (108) +**Scope:** 4D local, 4D Server +**Kept between two sessions:** No -### RDP optimization**Scope:** 4D application. +**Possible values**: Any custom string -**Kept between two sessions:** No. +**Description:** Custom string passed from one session to the next one when the 4D application is restarted. This selector is useful in the context of automated unit tests that require applications to restart with different parameters. -**Possible values:** `0`: Disabled (default), `1`: Enabled. +When used with [SET DATABASE PARAMETER](set-database-parameter.md), defines a new value that will be available within the next opened database after 4D is restarted manually or using the [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), or [RESTART 4D](restart-4d.md) commands. When used with [Get database parameter](get-database-parameter.md), gets the currently available user parameter value, defined using a command line (see *Command Line Interface*), the .4DLink file (see *Using a 4DLink file*), or a call to [SET DATABASE PARAMETER](set-database-parameter.md) during the previous session. - **Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). +(\*) If [SET DATABASE PARAMETER](set-database-parameter.md) sets a User param value before a call to [OPEN DATABASE](open-database.md) with a .4DLink file that also contains a user-param xml attribute, 4D takes into account only the parameter provided by [SET DATABASE PARAMETER](set-database-parameter.md). diff --git a/docs/commands-legacy/set-database-parameter.md b/docs/commands-legacy/set-database-parameter.md index 61a24845e90b76..9cd57b0a22d0ab 100644 --- a/docs/commands-legacy/set-database-parameter.md +++ b/docs/commands-legacy/set-database-parameter.md @@ -21,6 +21,36 @@ displayed_sidebar: docs The *selector* designates the database parameter to modify. 4D offers predefined constants, which are located in the “*Database Parameters*” theme. The following table lists each constant, describes its scope and indicates whether any changes made are kept between two sessions: +### 4D Remote mode timeout (14) + +**Scope** (legacy network layer only): 4D application if *value* positive + +**Kept between two sessions**: Yes if *value* positive + +**Description**: To be used in very specific cases. Value of the timeout granted by the remote 4D machine to the 4D Server machine. The default timeout value used by 4D in remote mode is set on the "Client-Server/Network options" page of the Database settings dialog box on the remote machine. + +The 4D Remote mode timeout selector is only taken into account if you are using the legacy network. It is ignored when the *ServerNet* layer is activated: this setting is entirely managed by the 4D Server timeout (13) selector. + + + + +### 4D Server log recording (28) + +**Thread-safe** : Yes + +**Scope**: 4D Server, 4D remote* + +* **Kept between two sessions**: No + +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). + +**Description**: Starts or stops the recording of standard requests received by 4D Server (excluding Web requests). By default, the value is 0 (requests not recorded). + +4D Server lets you record each request received by the server machine in a log file. When this mechanism is enabled, two files are created in the Logs folder of the database. They are named *4DRequestsLogServer\_X*.txt and *4DRequestsLog\_ProcessInfoServer\_X*.txt on the server, and *4DRequestsLog\_X*.txt and *4DRequestsLog\_ProcessInfo\_X*.txt on the remote, where X is the sequential number of the log. Once a file has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. + + + + ### 4D Server timeout (13) **Scope**: 4D application if *value* positive @@ -39,41 +69,63 @@ If you pass a **positive** value in the *value*parameter, you set a global and p -### 4D Remote mode timeout (14) -**Scope** (legacy network layer only): 4D application if *value* positive +### Auto synchro resources folder (48) -**Kept between two sessions**: Yes if *value* positive +**Scope**:4D remote machine -**Description**: To be used in very specific cases. Value of the timeout granted by the remote 4D machine to the 4D Server machine. The default timeout value used by 4D in remote mode is set on the "Client-Server/Network options" page of the Database settings dialog box on the remote machine. +**Kept between two** **sessions**: No + +**Possible values**: 0 (no synchronization), 1 (auto synchronization) or 2 (ask). + +**Description**: Dynamic synchronization mode for *Resources* folder of 4D client machine that executed the command with that of the server. + +When the contents of the *Resources* folder on the server has been modified or a user has requested synchronization (for example via the resources explorer or following the execution of the [SET DATABASE LOCALIZATION](set-database-localization.md) command), the server notifies the connected client machines. + +Three synchronization modes are then possible on the client side. The Auto Synchro Resources Folder selector is used to specify the mode to be used by the client machine for the current session: + +- 0 (default value): no dynamic synchronization (synchronization request is ignored) +- 1: automatic dynamic synchronization +- 2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. -The 4D Remote mode timeout selector is only taken into account if you are using the legacy network. It is ignored when the *ServerNet* layer is activated: this setting is entirely managed by the 4D Server timeout (13) selector. -### Port ID (15) + +### Cache flush periodicity (95) + +**Thread-safe** : Yes + **Scope**: 4D local, 4D Server **Kept between two sessions**: No -**Description**: TCP port ID used by the 4D Web server with 4D in local mode and 4D Server. The default value, which can be set on the "Web/Configuration" page of the Preferences dialog box, is 80\. You can use the constants of the *TCP Port Numbers* theme for the *value* parameter. +**Possible values**: longint > 1 (seconds) -The Port ID selector is useful for 4D Web Servers compiled and merged with 4D Desktop (in which there is no access to the Design mode). For more information about the TCP port ID, refer to the *Web Server Settings* section. +**Description**: Gets or sets the current cache flush periodicity, expressed in seconds. Modifying this value overrides the **Flush Cache every X Seconds** option in the [XML DECODE](xml-decode.md) of the Database settings for the session (it is not stored in the Database settings). -### Character set (17) -**Scope**: 4D local, 4D Server +### Cache unload minimum size (66) -**Kept between two sessions**: Yes +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Kept between two sessions**: No +**Possible values**: Positive longint > 1. + +**Description**: Minimum size of memory to release from the database cache when the engine needs to make space in order to allocate an object to it (value in bytes). + +The purpose of this selector is to reduce the number of times that data is released from the cache in order to obtain better performance. You can vary this setting according to the size of the cache and that of the blocks of data being handled in your database. + +By default, if this selector is not used, 4D unloads at least 10% of the cache when space is needed. -### Max concurrent Web processes (18) + + +### Character set (17) **Scope**: 4D local, 4D Server @@ -83,15 +135,19 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De -### Client port ID (22) -**Scope**: All 4D remote machines +### Circular log limitation (90) - **Kept between two** **sessions**: Yes +**Thread-safe** : Yes - **Possible values**: See selector 15 +**Scope**: 4D local, 4D Server. + +**Kept between two sessions**: No + +**Possible values**: Any integer value, 0 = keep all logs + +**Description**: Maximum number of files to keep in rotation for each type of log. By default, the 50 most recent files are kept. If you pass a value *X*, only the *X* most recent files are kept, with the oldest being erased automatically when a new one is created. This setting applies to all log files, i.e. request logs (selectors 28 and 45), debug log (selector 34), events log (selector 79), Web logs (selectors 29 and 84 of the [WEB SET OPTION](web-set-option.md) command), etc. -**Description**: Used to specify this parameter for all the remote 4D machines used as Web servers. The values defined using these selectors are applied to all the remote machines used as Web servers. If you want to define values only for certain remote machines, use the Preferences dialog box of 4D in remote mode. @@ -107,6 +163,41 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De + +### Client HTTPS port ID (40) + +**Scope**:All 4D remote machines + +**Kept between two** **sessions**: Yes + +**Possible values**: 0 to 65535 + +**Description**: TCP port number used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). + +This selector can be used to modify by programming the TCP port used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). + +This selector operates exactly the same way as selector 39; however, it applies to all the 4D remote machines used as Web servers. If you only want to modify the value of certain specific client machines, use the Preferences dialog box of the remote 4D. + + + + +### Client log recording (45) + +**Scope**: Remote 4D machine + +**Kept between two sessions**: No + +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, attached to file name). + +**Description**: Starts or stops recording of standard requests carried out by the 4D client machine that executed the command (excluding Web requests). By default, the value is 0 (no recording of requests). + +4D lets you record the log of requests carried out by the client machine. When this mechanism is activated, two files are created on the client machine, in the Logs subfolder of the local folder of the database. They are named 4DRequestsLog\_X.txt and 4DRequestsLog\_ProcessInfo\_X.txt, where X is the sequential number of the log. Once the file 4DRequestsLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file with the same name already exists, it is directly replaced. You can set the starting number for the sequence using the value parameter. + +These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. + + + + ### Client max concurrent Web proc (25) **Scope**: All 4D remote machines @@ -119,29 +210,36 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De -### Maximum Web requests size (27) -**Scope**: 4D local, 4D Server +### Client port ID (22) -**Kept between two sessions**: Yes +**Scope**: All 4D remote machines -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. + **Kept between two** **sessions**: Yes + **Possible values**: See selector 15 +**Description**: Used to specify this parameter for all the remote 4D machines used as Web servers. The values defined using these selectors are applied to all the remote machines used as Web servers. If you want to define values only for certain remote machines, use the Preferences dialog box of 4D in remote mode. -### 4D Server log recording (28) -**Thread-safe** : Yes -**Scope**: 4D Server, 4D remote* -* **Kept between two sessions**: No +### Client Server port ID (35) -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). +**Scope**:Database -**Description**: Starts or stops the recording of standard requests received by 4D Server (excluding Web requests). By default, the value is 0 (requests not recorded). +**Kept between two** **sessions**: Yes + +**Possible values**: 0 to 65535 + +**Description**: TCP port number where the 4D Server publishes the database (bound for 4D remote machines). By default, the value is 19813\. + +Customizing this value means that several 4D client-server applications can be used on the same machine with the TCP protocol; in this case, you must indicate a different port number for each application. + +The value is stored in the database structure file. It can be set with 4D in local mode but is only taken into account in client-server configuration. + +When you modify this value, it is necessary to restart the server machine in order for the new value to be taken into account. -4D Server lets you record each request received by the server machine in a log file. When this mechanism is enabled, two files are created in the Logs folder of the database. They are named *4DRequestsLogServer\_X*.txt and *4DRequestsLog\_ProcessInfoServer\_X*.txt on the server, and *4DRequestsLog\_X*.txt and *4DRequestsLog\_ProcessInfo\_X*.txt on the remote, where X is the sequential number of the log. Once a file has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. @@ -159,17 +257,36 @@ The operation of this selector is identical to that of selector 29; however, it -### Table sequence number (31) -**Scope**:4D application +### Current process debug log recording (111) - **Kept between two sessions**: Yes +**Scope:** 4D application - **Possible values**: Any longint value. +**Kept between two sessions:** No -**Description**: This selector is used to modify or get the current unique number for records of the table passed as parameter. "Current number" means "last number used": if you modify this value using [SET DATABASE PARAMETER](set-database-parameter.md), the next record will be created with a number that consists of the value passed + 1\. This new number is the one returned by the [Sequence number](sequence-number.md) command as well in any field of the table to which the "Autoincrement" property has been assigned in the Structure editor or via SQL. +**Description**: Starts or stops the sequential recording of programming events **for the current process** in a separated log file. This log is similar to the Debug log recording (selector 34) but focuses on the current process only. The log file name includes the letter "p" and the process number: 4DDebugLog\[\_p*N*_*n*].txt, where N is the process unique ID. + +For more information about this format and on the use of the *4DDebugLog* file, please refer to *Description of log files* in the Design Reference. + +**Notes:** This selector is provided solely for the purpose of debugging and should be used with care. In particular, it must not put into production since it can have an impact on the application performance. You can use both Debug log recording and Current process debug log recording selectors simultaneously, in which case the current process actions will not be logged in the main log file. + + + + +### Dates inside objects (85) + +**Scope:** Current process + +**Kept between two sessions**: No + + **Possible values**: String type without time zone (0), String type with time zone (1), Date type (2) (default) + +**Description**: Defines the way dates are stored within objects, as well as how they will be imported/exported in JSON. + +When the selector value is Date type (default value for databases created with 4D v17 and higher), 4D dates are stored with the date type within objects, with respect to the local date settings. When converted to JSON format, date attributes will be converted to strings which do not include a time. (**Note:** this setting can be set by means of the "Use date type instead of ISO date format in objects" option found on the *Compatibility page* of the Database Settings). + +Passing String type with time zone in this selector will convert 4D dates into ISO strings and take the local time zone into account. For example, converting the date 23/08/2013 gives you "2013-08-22T22:00:000Z" in JSON format when the operation is performed in France during Daylight Savings Time (GMT+2). This principle conforms to the standard operation of JavaScript. This can be a source of errors when you want to send JSON date values to someone in a different time zone. For example, when you export a table using [Selection to JSON](selection-to-json.md) in France that is meant to be reimported in the US using [JSON TO SELECTION](json-to-selection.md). Since dates are re-interpreted in each time zone, the values stored in the database will be different. In this case, you can modify the conversion mode for dates so that they do not take the time zone into account by passing String type without time zone in this selector. Converting the date 23/08/2013 will then give you "2013-08-23T00:00:00Z" in all cases. -By default, this unique number is set by 4D and corresponds to the order of record creation. For additional information, refer to the documentation of the [Sequence number](sequence-number.md) command. @@ -184,37 +301,29 @@ By default, this unique number is set by 4D and corresponds to the order of reco **Description**: Starts or stops the sequential recording of events occurring at the 4D programming level in the *4DDebugLog\[\_n\].txt* file or *4DDebugLogServer\[\_n\].txt* (where \_n is the segment number of the file and *Server* is added to the file name when generated on the server). Two modes are available: - Standard mode provides a basic view of events and the file is automatically placed in the Logs subfolder of the database, next to the structure file. Execution times are expressed in milliseconds with the "< ms" value displayed when an operation lasts less than one millisecond. - - Tabbed mode provides additional information and uses a more compact, tabbed format in the file. Execution times are expressed in microseconds. **Possible values**: Longint containing a bit field: value = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (value 1) requests to enable the file (note that any other non-null value also enables it as well) - - Bit 1 (value 2) requests call parameters to commands and (interpreted mode only) methods - - Bit 2 (value 4) enables tabbed format. - - Bit 3 (value 8) disables immediate writing of each operation on disk (enabled by default). Immediate writing is slower but more effective, for example for investigating causes of a crash. If you disable this mode, the file contents are generated more quickly. - - Bit 4 (value 16) disables recording of plug-in calls (enabled by default). - - Bit 5 (value 32) disables member function logging. Examples: +```4d SET DATABASE PARAMETER (34;1) // enables standard mode without parameters, with runtimes - SET DATABASE PARAMETER (34;2) // enables standard mode with parameters and runtimes - SET DATABASE PARAMETER (34;2+4) // enables tabbed mode with parameters and runtimes - SET DATABASE PARAMETER (34;0) // disables file +``` For any type of interpreted or compiled 4D application (4D all modes, 4D Server, 4D Volume Desktop), you can avoid having a file record too much information by: - restricting the 4D commands that are examined by using Log command list (selector 80), or - - restricting it to the current process only with Current process debug log recording (selector 111). This will add the letter "p" and the process number to the file name: *4DDebugLog\[\_pn\_n\].txt* or *4DDebugLogServer\[\_pn\_n\].txt* * *For more information about this format and on the use of the *4DDebugLog* file, please refer to the *Description of log files* section.. @@ -227,484 +336,461 @@ For any type of interpreted or compiled 4D application (4D all modes, 4D Server, -### Client Server port ID (35) -**Scope**:Database +### Diagnostic log level (86) -**Kept between two** **sessions**: Yes +**Thread-safe** : Yes -**Possible values**: 0 to 65535 +**Scope:** 4D application -**Description**: TCP port number where the 4D Server publishes the database (bound for 4D remote machines). By default, the value is 19813\. +**Kept between two sessions:** No -Customizing this value means that several 4D client-server applications can be used on the same machine with the TCP protocol; in this case, you must indicate a different port number for each application. +**Description:** Level(s) of messages to be included in the diagnostic log when enabled (see selector Diagnostic log recording). Each level designates a category of diagnostic messages and automatically includes more important categorie(s). For a description of categories, see *Diagnostic log levels* section on *developer.4d.com*. -The value is stored in the database structure file. It can be set with 4D in local mode but is only taken into account in client-server configuration. +**Possible values:** One of the following constants (Log info by default): +- Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) +- Log debug: activates ERROR, WARN, INFO, DEBUG +- Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN +- Log error: activates ERROR (least detailed level) -When you modify this value, it is necessary to restart the server machine in order for the new value to be taken into account. -### HTTPS Port ID (39) +### Diagnostic log recording (79) -**Scope**:4D local, 4D Server +**Thread-safe** : Yes -**Kept between two sessions**: Yes +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Kept between two sessions**: No +Possible values: 0 or 1 (0 = do not record, 1 = record) +**Description**: Starts or stops recording of the 4D diagnostic file. By default, the value is 0 (do not record). -### Client HTTPS port ID (40) +4D can continuously record a set of events related to the internal application operation into a diagnostic file. Information contained in this file is intended for the development of 4D applications and can be analyzed with the help of the 4D tech support (for more information, please refer to the *Description of log files* section on *developer.4d.com*). When you pass 1 in this selector, a diagnostic file is automatically created (or opened) in the database **Logs** folder. The file is named *4DDiagnosticLog\_X*.txt (or *4DDiagnosticLogServer\_X*.txt if generated on the server). Once this file reaches a size of 10 MB, it is closed and a new file is generated, with an incremented sequence number X. -**Scope**:All 4D remote machines +Note that you can include custom information in this file using the [LOG EVENT](log-event.md) command. -**Kept between two** **sessions**: Yes -**Possible values**: 0 to 65535 -**Description**: TCP port number used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). -This selector can be used to modify by programming the TCP port used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). +### Direct2D get active status (74) -This selector operates exactly the same way as selector 39; however, it applies to all the 4D remote machines used as Web servers. If you only want to modify the value of certain specific client machines, use the Preferences dialog box of the remote 4D. +**Note**: You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. +**Description**: Returns active implementation of Direct2D under Windows. +**Possible values**: 0, 1, 2, 3, 4 or 5 (see values of selector 69). The value returned depends on the availability of Direct2D, the hardware and the quality of Direct2D support by the operating system. -### SQL Autocommit (43) +For example, if you execute: -**Scope**:Database +```4d + SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) + $mode:=Get database parameter(Direct2D get active status) +``` -**Kept between two** **sessions**: Yes +- On Windows 7 and higher, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 3 (software context). -**Possible values**: 0 (deactivation) or 1 (activation) +- On Windows Vista, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 0 (disabling of Direct2D). -**Description**: Activation or deactivation of the SQL auto-commit mode. By default, the value is 0 (deactivated mode) +- On Windows XP, *$mode* is always set to 0 (not compatible with Direct2D). - The auto-commit mode is used to strengthen the referential integrity of the database. When this mode is active, all *SELECT*, *INSERT*, *UPDATE* and *DELETE* (SIUD) queries are automatically included in ad hoc transactions when they are not already executed within a transaction. This mode can also be set in the Preferences of the database. -### SQL Engine case sensitivity (44) +### Direct2D status (69) -**Scope**: Database +**Scope**: 4D application -**Kept between two sessions**: Yes +**Kept between two sessions**: No -**Possible values**: 0 (case not taken into account) or 1 (case-sensitive) +**Description**: Activation mode of Direct2D under Windows. -**Description**: Activation or deactivation of case-sensitivity for string comparisons carried out by the SQL engine. +**Possible values**: One of the following constants (mode 3 by default): -By default, the value is 1 (case-sensitive): the SQL engine differentiates between upper and lower case and between accented characters when comparing strings (sorts and queries). For example “ABC”= “ABC” but “ABC” # “Abc” and "abc" # "âbc." In certain cases, for example so as to align the functioning of the SQL engine with that of the 4D engine, you may wish for string comparisons to not be case-sensitive (“ABC”=“Abc"="âbc"). +- Direct2D Disabled (0): Direct2D mode is not enabled and the database functions in the previous mode (GDI/GDIPlus). +- Direct2D Hardware (1): Use Direct2D as graphics hardware context for entire 4D application. If this context is not available, use Direct2D graphics software context. +- Direct2D Software (3) (Default mode): Beginning with Windows 7, use Direct2D graphics software context for entire 4D application. -**Warning:* Since this option modifies the database structure file and all processes, for performance reasons it is highly recommended to set it at database startup only.* This option can also be set in the Database settings. +**Warning:* This selector is provided for debugging purposes only. Since several 4D features rely on Direct2D, it must not be disabled in deployed applications. Only the default mode (Direct2D Software) is approved for deployed applications.* -### Client log recording (45) -**Scope**: Remote 4D machine +### HTTP compression level (50) -**Kept between two sessions**: No +**Scope**:4D application -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, attached to file name). +**Kept between two sessions**: No -**Description**: Starts or stops recording of standard requests carried out by the 4D client machine that executed the command (excluding Web requests). By default, the value is 0 (no recording of requests). +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -4D lets you record the log of requests carried out by the client machine. When this mechanism is activated, two files are created on the client machine, in the Logs subfolder of the local folder of the database. They are named 4DRequestsLog\_X.txt and 4DRequestsLog\_ProcessInfo\_X.txt, where X is the sequential number of the log. Once the file 4DRequestsLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file with the same name already exists, it is directly replaced. You can set the starting number for the sequence using the value parameter. -These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. +### HTTP compression threshold (51) -### Query by formula on server (46) +**Scope**:4D application -**Scope**: Current table and process +**Kept between two** **sessions**: No -**Kept between two sessions**: No +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) -**Description**: Execution location of [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands for the *table* passed in the parameter. -When using a database in client-server mode, the query "by formula" commands can be executed either on the server or on the client machine: -In databases created with 4D v11 SQL, these commands are executed on the server. In converted databases, these commands are executed on the client machine, as in previous versions of 4D.In converted databases, a specific preference (Application/Compatibility page) can be used to globally modify the execution location of these commands.This difference in execution location influences not only application performance (execution on the server is usually faster) but also programming. In fact, the value of the components of the formula (in particular variables called via a method) differ according to the execution context. You can use this selector to punctually adapt the operation of your application. +### HTTPS Port ID (39) -If you pass 0 in the *value* l’parameter, the execution location of query "by formula" commands will depend on the database configuration: in databases created with 4D v11 SQL, these commands will be executed on the server. In converted databases, they will be executed on the client machine or the server according to the database preferences. Pass 1 or 2 in *value* to "force" the execution of these commands, respectively, on the client or on the server machine. +**Scope**:4D local, 4D Server -Refer to example 2. +**Kept between two sessions**: Yes -**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -### Order by formula on server (47) -**Scope**:Current table and process +### Idle connections timeout (54) -**Kept between two** **sessions**: No +**Scope**:4D application unless value is negative -**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) +**Kept between two sessions**: No -**Description** : Execution location of [ORDER BY FORMULA](order-by-formula.md) command for the table passed in the parameter. +**Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -When using a database in client-server mode, this command can be executed either on the server or on the client machine. This selector can be used to specify the execution location of this command (server or client). This mode can also be set in the database preferences. For more information, please refer to the description of selector 46, Query By Formula On Server. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. -**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. +On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. +If you pass a positive value in *value*, it applies to all new connections in all the processes. If you pass a negative value, it applies to connections that are open in the current process. If you pass 0, idle connections are not subjected to a timeout. +This parameter must be set on the client side. Usually, you do not need to change this value. -### Auto synchro resources folder (48) -**Scope**:4D remote machine -**Kept between two** **sessions**: No -**Possible values**: 0 (no synchronization), 1 (auto synchronization) or 2 (ask). +### IMAP Log (119) -**Description**: Dynamic synchronization mode for *Resources* folder of 4D client machine that executed the command with that of the server. +**Thread-safe** : Yes -When the contents of the *Resources* folder on the server has been modified or a user has requested synchronization (for example via the resources explorer or following the execution of the [SET DATABASE LOCALIZATION](set-database-localization.md) command), the server notifies the connected client machines. +**Scope**: 4D local, 4D Server -Three synchronization modes are then possible on the client side. The Auto Synchro Resources Folder selector is used to specify the mode to be used by the client machine for the current session: +**Kept between two sessions**: No -0 (default value): no dynamic synchronization (synchronization request is ignored) 1: automatic dynamic synchronization2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (IMAP exchanges not recorded). +**Description**: Starts or stops the recording of exchanges between 4D and the IMAP server, when a transporter object is processed through *IMAP\_transporter.getMail( )* or *IMAP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DIMAPLog\_X.txt, where X is the sequential number of the log. Once the file 4DIMAPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. +For more information on the 4DIMAPLog\_X.txt files, please refer to [Description of log files](../Debugging/debugLogFiles.md). -### Query by formula joins (49) -**Scope**:Current process -**Kept between two** **sessions**: No -**Possible values**: 0 (use database configuration), 1 (always use automatic relations) or 2 (use SQL joins if possible). +### Is current database a project (112) -**Description**: Operating mode of the [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands relating to the use of "SQL joins." +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -In databases created starting with version 11.2 of 4D v11 SQL, these commands carry out joins based on the SQL joins model. This mechanism can be used to modify the selection of a table according to a query carried out on another table without these tables being connected by an automatic relation (necessary condition in previous versions of 4D). +**Scope**: 4D application -The QUERY BY FORMULA Joins selector lets you specify the operating mode of the query by formula commands for the current process: +**Description**: Returns 1 if the current database architecture is a project, and 0 otherwise. For more information, please refer to [*Project vs binary database* section on doc.4d.com](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-new-database.300-6750129.en.html#5057971). -0: Uses the current settings of the database (default value). In databases created starting with version 11.2 of 4D v11 SQL, "SQL joins" are always activated for queries by formula. In converted databases, this mechanism is not activated by default for compatibility reasons but can be implemented via a preference.1: Always use automatic relations (= functioning of previous versions of 4D). In this mode, a relation is necessary in order to set the selection of a table according to queries carried out on another table. 4D does not do "SQL joins."2: Use SQL joins if possible (= default operation of databases created in version 11.2 and higher of 4D v11 SQL ). In this mode, 4D establishes "SQL joins" for queries by formula when the formula is suited for it (with two notable exceptions, see the description of the [QUERY BY FORMULA](query-by-formula.md) or [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) command).**Note:** With 4D in remote mode, "SQL joins" can only be used if the formulas are executed on the server (they must have access to the records). To configure where formulas are to be executed, please refer to selectors 46 and 47. -### HTTP compression level (50) +### Is host database a project (113) -**Scope**:4D application +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Kept between two sessions**: No +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Description**: Returns 1 if the host database architecture is a project, and 0 otherwise. For more information, please refer to [*Project vs binary database* section on doc.4d.com](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-new-database.300-6750129.en.html#5057971). -### HTTP compression threshold (51) -**Scope**:4D application +### Is host database writable (117) -**Kept between two** **sessions**: No +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Scope**: 4D application +**Description**: Returns 1 if the host project file/structure file is writable, and 0 if it is read-only. -### Server base process stack size (53) -**Scope**: 4D Server -**Kept between two sessions**: No +### Libldap version (114) -**Possible values**: Positive longint. +**Scope**: Current 4D machine -**Description**: Size of the stack allocated to each preemptive system process on the server, expressed in bytes. The default size is determined by the system. +**Kept between two sessions**: n/a -Preemptive system processes (processes of the 4D client base process type) are loaded to control the main 4D client processes. The size allocated by default to the stack of each preemptive process allows a good ease of execution but may prove to be consequential when very large numbers of processes (several hundred) are created. +**Description**: Returns the version number of the LDAP library in the 4D application on the current machine. (Read only) -For optimization purposes, this size can be reduced considerably if the operations carried out by the database allow for it (for example if the database does not carry out sorts of large quantities of records). Values of 512 or even 256 KB are possible. Be careful, under-sizing the stack is critical and can be harmful to the operation of 4D Server. Setting this parameter should be done with caution and must take the database conditions of use into account (number of records, type of operations, etc.). -In order to be taken into account, this parameter must be executed on the server machine (for example in the *On Server Startup Database Method*). +### Libsasl version (115) -### Idle connections timeout (54) +**Scope**: Current 4D machine -**Scope**:4D application unless value is negative +**Kept between two sessions**: n/a -**Kept between two sessions**: No +**Description**: Returns the version number of the SASL library in the 4D application on the current machine. (Read only) -**Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. -On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. -If you pass a positive value in *value*, it applies to all new connections in all the processes. If you pass a negative value, it applies to connections that are open in the current process. If you pass 0, idle connections are not subjected to a timeout. +### Libzip version (120) -This parameter must be set on the client side. Usually, you do not need to change this value. +**Scope:** Current 4D machine +**Kept between two sessions:** n/a +**Description:** Returns the version number of the libzip library in the 4D application on the current machine. (Read only) -### PHP interpreter IP address (55) -**Scope**:4D application -**Kept between two sessions**: No -**Values**: Formatted string of the IPv4 type (for example "127.0.0.1") or IPv6 type (for example "2001:0db8:0000:0000:0000:ff00:0042:8329") +### Log command list (80) -**Description**: IP address used locally by 4D to communicate with the PHP interpreter via FastCGI. By default, the value is "127.0.0.1" (addresses in IPv6 format are supported starting with 4D v16R4). This address must correspond to the machine where 4D is located. This parameter can also be set globally for all the machines via the Database Settings. +**Scope**: 4D application -For more information about the PHP interpreter, please refer to the *Design Reference* manual. +**Kept between two sessions**: No +**Possible values**: String containing a list of 4D command numbers to record (separated by semi-colons) or "all" to record all the commands or "" (empty string) to record none of them or prefixed by "-" to exclude specific commands. +**Description**: List of 4D commands to record in or exclude from the debugging file (see selector 34, Debug Log Recording). By default, all 4D commands are recorded. -### PHP interpreter port (56) +This selector restricts the quantity of information saved in the debugging file by limiting the 4D commands whose execution you want to record or exclude from recording. For example, you can write: -**Scope**:4D application +```4d +//Record only the QUERY and QUERY SELECTION commands +SET DATABASE PARAMETER(Log command list;"277;341") +``` +OR +```4d +//Exclude the SET USER ALIAS and DELAY PROCESS commands from being recorded +SET DATABASE PARAMETER(Log command list;"-1666;-323") +``` -**Kept between two sessions**: No -**Values**: Positive long integer type value. By default, the value is 8002\. -**Description**: Number of the TCP port used by the PHP interpreter of 4D. This parameter can also be modified globally for all the machines via the Database Settings. For more information about the PHP interpreter, please refer to the *Design Reference* manual. +### Max concurrent Web processes (18) +**Scope**: 4D local, 4D Server +**Kept between two sessions**: Yes -### SSL cipher list (64) +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Scope**: 4D application -**Kept between two sessions**: No -**Possible values**: Sequence of strings separated by colons. -**Description:** Cipher list used by 4D for the secure protocol. This list modifies the priority of ciphering algorithms implemented by 4D. For example, you can pass the following string in the *value* parameter: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". For a complete description of the syntax for the ciphers list, refer to the *ciphers page of the OpenSSL* *site*. +### Maximum Web requests size (27) -This setting applies to the main Web server (excluding Web server objects), the SQL server, client/server connections, as well as the HTTP client and all the 4D commands that make use of the secure protocol. It is temporary (it is not maintained between sessions). +**Scope**: 4D local, 4D Server -When the cipher list has been modified, you will need to restart the server concerned in order for the new settings to be taken into account. +**Kept between two sessions**: Yes -To reset the cipher list to its default value (stored permanently in the SLI file), call the [SET DATABASE PARAMETER](set-database-parameter.md) command and pass an empty string ("") in the *value* parameter. +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Note:** With the [Get database parameter](get-database-parameter.md) command, the cipher list is returned in the optional *stringValue* parameter and the return parameter is always 0. -### Cache unload minimum size (66) +### Min TLS version (105) -**Scope**: 4D application +**Scope**: 4D Server, 4D Web Server and 4D SQL Server **Kept between two sessions**: No -**Possible values**: Positive longint > 1. - -**Description**: Minimum size of memory to release from the database cache when the engine needs to make space in order to allocate an object to it (value in bytes). - -The purpose of this selector is to reduce the number of times that data is released from the cache in order to obtain better performance. You can vary this setting according to the size of the cache and that of the blocks of data being handled in your database. - -By default, if this selector is not used, 4D unloads at least 10% of the cache when space is needed. - +**Description**: Used to specify the minimum Transport Layer Security (TLS) version, which provides data encryption and authentication between applications and servers. Connection attempts from clients supporting only versions below the minimum will be rejected. The setting is applied globally to the network layer. Once modified, the server must be restarted to use the new value. +**Default value**: TLSv1\_3 -### Direct2D status (69) +**Possible values**: +- TLSv1\_2 (TLS 1.2, introduced in 2008) +- TLSv1\_3 (TLS 1.3, introduced in 2018) -**Scope**: 4D application +**NOTES**: +- The 4D Internet Commands plugin uses a different network layer, therefore this selector will have no impact on its TLS version. +- This setting is ignored for your client server connections if your 4D Server uses the legacy network layer. -**Kept between two sessions**: No -**Description**: Activation mode of Direct2D under Windows. -**Possible values**: One of the following constants (mode 3 by default): -Direct2D Disabled (0): Direct2D mode is not enabled and the database functions in the previous mode (GDI/GDIPlus). +### Number of formulas in cache (92) -Direct2D Hardware (1): Use Direct2D as graphics hardware context for entire 4D application. If this context is not available, use Direct2D graphics software context. +**Scope**: 4D application -Direct2D Software (3) (Default mode): Beginning with Windows 7, use Direct2D graphics software context for entire 4D application. +**Kept between two sessions**: No -**Warning:* This selector is provided for debugging purposes only. Since several 4D features rely on Direct2D, it must not be disabled in deployed applications. Only the default mode (Direct2D Software) is approved for deployed applications.* +**Possible values**: Positive longints +**Default value**: 0 (no cache) +**Description**: Sets or gets the maximum number of formulas to be kept in the cache of formulas, which is used by the [EXECUTE FORMULA](execute-formula.md) command. This limit is applied to all processes, but each process has its own formula cache. Caching formulas accelerates the [EXECUTE FORMULA](execute-formula.md) command execution in compiled mode since each cached formula is tokenized only once in this case. When you change the cache value, existing contents are reset even if the new size is larger than the previous one. Once the maximum number of formulas in the cache is reached, a new executed formula will erase the oldest one in the cache (FIFO mode). This parameter is only taken into account in compiled databases or compiled components. -### Direct2D get active status (74) -**Note**: You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Description**: Returns active implementation of Direct2D under Windows. -**Possible values**: 0, 1, 2, 3, 4 or 5 (see values of selector 69). The value returned depends on the availability of Direct2D, the hardware and the quality of Direct2D support by the operating system. +### OpenSSL version (94) -For example, if you execute: +**Scope**: all 4D machines* - SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) $mode:=Get database parameter(Direct2D get active status) +**Kept between two sessions**: No -- On Windows 7 and higher, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 3 (software context). +**Description**: Returns the version number of the OpenSSL library in use on the machine. (Read only) -- On Windows Vista, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 0 (disabling of Direct2D). -- On Windows XP, *$mode* is always set to 0 (not compatible with Direct2D). +### Order by formula on server (47) -### Diagnostic log recording (79) +**Scope**:Current table and process -**Thread-safe** : Yes +**Kept between two** **sessions**: No -**Scope**: 4D application +**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) -**Kept between two sessions**: No +**Description** : Execution location of [ORDER BY FORMULA](order-by-formula.md) command for the table passed in the parameter. -Possible values: 0 or 1 (0 = do not record, 1 = record) +When using a database in client-server mode, this command can be executed either on the server or on the client machine. This selector can be used to specify the execution location of this command (server or client). This mode can also be set in the database preferences. For more information, please refer to the description of selector 46, Query By Formula On Server. -**Description**: Starts or stops recording of the 4D diagnostic file. By default, the value is 0 (do not record). +**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. -4D can continuously record a set of events related to the internal application operation into a diagnostic file. Information contained in this file is intended for the development of 4D applications and can be analyzed with the help of the 4D tech support (for more information, please refer to the *Description of log files* section on *developer.4d.com*). When you pass 1 in this selector, a diagnostic file is automatically created (or opened) in the database **Logs** folder. The file is named *4DDiagnosticLog\_X*.txt (or *4DDiagnosticLogServer\_X*.txt if generated on the server). Once this file reaches a size of 10 MB, it is closed and a new file is generated, with an incremented sequence number X. -Note that you can include custom information in this file using the [LOG EVENT](log-event.md) command. +### Pause logging (121) -### Log command list (80) +**Thread-safe** : Yes **Scope**: 4D application -**Kept between two sessions**: No +**Kept between two** **sessions**: No -**Possible values**: String containing a list of 4D command numbers to record (separated by semi-colons) or "all" to record all the commands or "" (empty string) to record none of them or prefixed by "-" to exclude specific commands. +**Possible values**: 0 (resume logs), 1 (pause logs) -**Description**: List of 4D commands to record in or exclude from the debugging file (see selector 34, Debug Log Recording). By default, all 4D commands are recorded. +**Description:** This selector allows to suspend/resume all logging operations started on the application (except ORDA logs). This feature can be useful to temporarily lighten the 4D application tasks or schedule logging operations. -This selector restricts the quantity of information saved in the debugging file by limiting the 4D commands whose execution you want to record or exclude from recording. For example, you can write: - SET DATABASE PARAMETER(Log command list;"277;341") //Record only the QUERY and QUERY SELECTION commands OR SET DATABASE PARAMETER(Log command list;"-1666;-323") //Exclude the SET USER ALIAS and DELAY PROCESS commands from being recorded +### PHP interpreter IP address (55) -### Spellchecker (81) +**Scope**:4D application -**Scope**: 4D application +**Kept between two sessions**: No - **Kept between two sessions**: No +**Values**: Formatted string of the IPv4 type (for example "127.0.0.1") or IPv6 type (for example "2001:0db8:0000:0000:0000:ff00:0042:8329") - **Possible values**: 0 (default) = native macOS spellchecker (Hunspell disabled), 1 = Hunspell spellcheck enabled. +**Description**: IP address used locally by 4D to communicate with the PHP interpreter via FastCGI. By default, the value is "127.0.0.1" (addresses in IPv6 format are supported starting with 4D v16R4). This address must correspond to the machine where 4D is located. This parameter can also be set globally for all the machines via the Database Settings. -**Description**: Enables the Hunspell spellcheck under macOS. By default, the native spellchecker is enabled on this platform. You may prefer to use the Hunspell spellcheck, for example, in order to unify the interface for your cross-platform applications (under Windows, only the Hunspell spellcheck is available). For more information, refer to *Spell checking*. +For more information about the PHP interpreter, please refer to the *Design Reference* manual. -### Dates inside objects (85) -**Scope:** Current process +### PHP interpreter port (56) -**Kept between two sessions**: No +**Scope**:4D application - **Possible values**: String type without time zone (0), String type with time zone (1), Date type (2) (default) +**Kept between two sessions**: No -**Description**: Defines the way dates are stored within objects, as well as how they will be imported/exported in JSON. +**Values**: Positive long integer type value. By default, the value is 8002\. -When the selector value is Date type (default value for databases created with 4D v17 and higher), 4D dates are stored with the date type within objects, with respect to the local date settings. When converted to JSON format, date attributes will be converted to strings which do not include a time. (**Note:** this setting can be set by means of the "Use date type instead of ISO date format in objects" option found on the *Compatibility page* of the Database Settings). +**Description**: Number of the TCP port used by the PHP interpreter of 4D. This parameter can also be modified globally for all the machines via the Database Settings. For more information about the PHP interpreter, please refer to the *Design Reference* manual. -Passing String type with time zone in this selector will convert 4D dates into ISO strings and take the local time zone into account. For example, converting the date 23/08/2013 gives you "2013-08-22T22:00:000Z" in JSON format when the operation is performed in France during Daylight Savings Time (GMT+2). This principle conforms to the standard operation of JavaScript. This can be a source of errors when you want to send JSON date values to someone in a different time zone. For example, when you export a table using [Selection to JSON](selection-to-json.md) in France that is meant to be reimported in the US using [JSON TO SELECTION](json-to-selection.md). Since dates are re-interpreted in each time zone, the values stored in the database will be different. In this case, you can modify the conversion mode for dates so that they do not take the time zone into account by passing String type without time zone in this selector. Converting the date 23/08/2013 will then give you "2013-08-23T00:00:00Z" in all cases. -### Diagnostic log level (86) +### POP3 Log (116) **Thread-safe** : Yes -**Scope:** 4D application +**Scope:** 4D local, 4D Server **Kept between two sessions:** No -**Description:** Level(s) of messages to be included in the diagnostic log when enabled (see selector Diagnostic log recording). Each level designates a category of diagnostic messages and automatically includes more important categorie(s). For a description of categories, see *Diagnostic log levels* section on *developer.4d.com*. - -**Possible values:** One of the following constants (Log info by default): Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) Log debug: activates ERROR, WARN, INFO, DEBUG Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN Log error: activates ERROR (least detailed level) - - +**Possible values:** 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (POP3 exchanges not recorded). -### Use legacy network layer (87) +**Description**: Starts or stops the recording of exchanges between 4D and the POP3 server, when a transporter object is processed through *POP3\_transporter.getMail( )* or *POP3\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DPOP3Log\_X.txt, where X is the sequential number of the log. Once the file 4DPOP3Log has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -**Scope**: 4D in local mode, 4D Server +For more information on the 4DPOP3Log\_X.txt files, please refer to the *Description of log files* section. -**Kept between two sessions**: Yes -**Description:** Sets or gets the current status of the legacy network layer for client/server connections. The legacy network layer is obsolete beginning with 4D v14 R5 and should be replaced progressively in your applications with the *ServerNet* network layer. *ServerNet* will be required in upcoming 4D releases in order to benefit from future network evolutions. For compatibility reasons, the legacy network layer is still supported to allow a smooth transition for existing applications; (it is used by default in applications converted from a release prior to v14 R5). Pass 1 in this parameter to use the legacy network layer (and disable *ServerNet*) for your client/server connections, and pass 0 to disable the legacy network (and use the *ServerNet*). -This property can also be set by means of the "Use legacy network layer" option found on the *Compatibility page* of the Database Settings (see *Network and Client-Server options*). In this section, you will also find a discussion about migration strategy. We recommend that you activate the *ServerNet* as soon as possible. You will need to restart the application in order for this parameter to be taken into account. -**Possible values:** 0 or 1 (0 = do not use legacy layer, 1 = use legacy layer) +### Port ID (15) -**Default value:** 0 in databases created with 4D v14 R5 or higher, 1 in databases converted from 4D v14 R4 or earlier. +**Scope**: 4D local, 4D Server +**Kept between two sessions**: No +**Description**: TCP port ID used by the 4D Web server with 4D in local mode and 4D Server. The default value, which can be set on the "Web/Configuration" page of the Preferences dialog box, is 80\. You can use the constants of the *TCP Port Numbers* theme for the *value* parameter. -### SQL Server Port ID (88) +The Port ID selector is useful for 4D Web Servers compiled and merged with 4D Desktop (in which there is no access to the Design mode). For more information about the TCP port ID, refer to the *Web Server Settings* section. -**Scope**: 4D local, 4D Server. -**Kept between two sessions**: Yes -**Description**: Gets or sets the TCP port number used by the integrated SQL server of 4D in local mode or 4D Server. By default, the value is 19812\. When this selector is set, the database setting is updated. You can also set the TCP port number on the "SQL" page of the Database Settings dialog box. -**Possible values**: 0 to 65535. +### Query by formula joins (49) -**Default value**: 19812 +**Scope**:Current process +**Kept between two** **sessions**: No +**Possible values**: 0 (use database configuration), 1 (always use automatic relations) or 2 (use SQL joins if possible). -### Circular log limitation (90) +**Description**: Operating mode of the [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands relating to the use of "SQL joins." -**Thread-safe** : Yes +In databases created starting with version 11.2 of 4D v11 SQL, these commands carry out joins based on the SQL joins model. This mechanism can be used to modify the selection of a table according to a query carried out on another table without these tables being connected by an automatic relation (necessary condition in previous versions of 4D). -**Scope**: 4D local, 4D Server. +The QUERY BY FORMULA Joins selector lets you specify the operating mode of the query by formula commands for the current process: -**Kept between two sessions**: No +- 0: Uses the current settings of the database (default value). In databases created starting with version 11.2 of 4D v11 SQL, "SQL joins" are always activated for queries by formula. In converted databases, this mechanism is not activated by default for compatibility reasons but can be implemented via a preference. +- 1: Always use automatic relations (= functioning of previous versions of 4D). In this mode, a relation is necessary in order to set the selection of a table according to queries carried out on another table. 4D does not do "SQL joins." +- 2: Use SQL joins if possible (= default operation of databases created in version 11.2 and higher of 4D v11 SQL ). In this mode, 4D establishes "SQL joins" for queries by formula when the formula is suited for it (with two notable exceptions, see the description of the [QUERY BY FORMULA](query-by-formula.md) or [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) command). -**Possible values**: Any integer value, 0 = keep all logs +**Note:** With 4D in remote mode, "SQL joins" can only be used if the formulas are executed on the server (they must have access to the records). To configure where formulas are to be executed, please refer to selectors 46 and 47. -**Description**: Maximum number of files to keep in rotation for each type of log. By default, the 50 most recent files are kept. If you pass a value *X*, only the *X* most recent files are kept, with the oldest being erased automatically when a new one is created. This setting applies to all log files, i.e. request logs (selectors 28 and 45), debug log (selector 34), events log (selector 79), Web logs (selectors 29 and 84 of the [WEB SET OPTION](web-set-option.md) command), etc. -### Number of formulas in cache (92) +### Query by formula on server (46) -**Scope**: 4D application +**Scope**: Current table and process **Kept between two sessions**: No -**Possible values**: Positive longints - -**Default value**: 0 (no cache) - -**Description**: Sets or gets the maximum number of formulas to be kept in the cache of formulas, which is used by the [EXECUTE FORMULA](execute-formula.md) command. This limit is applied to all processes, but each process has its own formula cache. Caching formulas accelerates the [EXECUTE FORMULA](execute-formula.md) command execution in compiled mode since each cached formula is tokenized only once in this case. When you change the cache value, existing contents are reset even if the new size is larger than the previous one. Once the maximum number of formulas in the cache is reached, a new executed formula will erase the oldest one in the cache (FIFO mode). This parameter is only taken into account in compiled databases or compiled components. - +**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) +**Description**: Execution location of [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands for the *table* passed in the parameter. -### OpenSSL version (94) +When using a database in client-server mode, the query "by formula" commands can be executed either on the server or on the client machine: -**Scope**: all 4D machines* +In databases created with 4D v11 SQL, these commands are executed on the server. In converted databases, these commands are executed on the client machine, as in previous versions of 4D.In converted databases, a specific preference (Application/Compatibility page) can be used to globally modify the execution location of these commands.This difference in execution location influences not only application performance (execution on the server is usually faster) but also programming. In fact, the value of the components of the formula (in particular variables called via a method) differ according to the execution context. You can use this selector to punctually adapt the operation of your application. -**Kept between two sessions**: No +If you pass 0 in the *value* l’parameter, the execution location of query "by formula" commands will depend on the database configuration: in databases created with 4D v11 SQL, these commands will be executed on the server. In converted databases, they will be executed on the client machine or the server according to the database preferences. Pass 1 or 2 in *value* to "force" the execution of these commands, respectively, on the client or on the server machine. -**Description**: Returns the version number of the OpenSSL library in use on the machine. (Read only) +Refer to example 2. +**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. -### Cache flush periodicity (95) -**Thread-safe** : Yes +### RDP optimization (133) -**Scope**: 4D local, 4D Server +**Scope:** 4D application. -**Kept between two sessions**: No +**Kept between two sessions:** No. -**Possible values**: longint > 1 (seconds) +**Possible values:** `0`: Disabled (default), `1`: Enabled. -**Description**: Gets or sets the current cache flush periodicity, expressed in seconds. Modifying this value overrides the **Flush Cache every X Seconds** option in the [XML DECODE](xml-decode.md) of the Database settings for the session (it is not stored in the Database settings). +**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). @@ -722,249 +808,240 @@ The sleep timeout is applied after a machine running a 4D remote application has -### Tips enabled (101) -**Scope:** 4D application +### Server base process stack size (53) -**Kept between two sessions:** No +**Scope**: 4D Server -**Possible values:** 0 = tips disabled, 1 = tips enabled (default) +**Kept between two sessions**: No -**Description:** Sets or gets the current display status of the tips for the 4D application. By default, tips are enabled. +**Possible values**: Positive longint. - Note that this parameter sets all 4D tips, i.e. form help messages and Design mode editor's tips. +**Description**: Size of the stack allocated to each preemptive system process on the server, expressed in bytes. The default size is determined by the system. +Preemptive system processes (processes of the 4D client base process type) are loaded to control the main 4D client processes. The size allocated by default to the stack of each preemptive process allows a good ease of execution but may prove to be consequential when very large numbers of processes (several hundred) are created. +For optimization purposes, this size can be reduced considerably if the operations carried out by the database allow for it (for example if the database does not carry out sorts of large quantities of records). Values of 512 or even 256 KB are possible. Be careful, under-sizing the stack is critical and can be harmful to the operation of 4D Server. Setting this parameter should be done with caution and must take the database conditions of use into account (number of records, type of operations, etc.). -### Tips delay (102) +In order to be taken into account, this parameter must be executed on the server machine (for example in the *On Server Startup Database Method*). -**Scope:** 4D application -**Kept between two sessions:** No -**Possible values:** longint >= 0 (ticks) -**Description:** Delay before tips are displayed once the mouse cursor has stopped in objects with attached help messages. Value is expressed in ticks (1/60th of a second). Default value is 45 ticks (0.75 seconds). +### SMTP Log (110) +**Thread-safe** : Yes +**Scope**: 4D local, 4D Server* -### Tips duration (103) +**Kept between two sessions**: No -**Scope:** 4D application +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (SMTP exchanges not recorded). -**Kept between two sessions:** No +**Description**: Starts or stops the recording of exchanges between 4D and the SMTP server, when a *transporter* object is processed through *transporter.send( )* or *SMTP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DSMTPLog\_X.txt, where *X* is the sequential number of the log. Once the file 4DSMTPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -**Possible values:** longint >= 60 (ticks) +For more information on the 4DSMTPLog\_X.txt files, please refer to the *Description of log files* section. -**Description:** Maximum display duration for a tip. Value is expressed in ticks (1/60th of a second). Default value is 720 ticks (12 seconds). -### Min TLS version (105) +### Spellchecker (81) -**Scope**: 4D Server, 4D Web Server and 4D SQL Server +**Scope**: 4D application -**Kept between two sessions**: No + **Kept between two sessions**: No -**Description**: Used to specify the minimum Transport Layer Security (TLS) version, which provides data encryption and authentication between applications and servers. Connection attempts from clients supporting only versions below the minimum will be rejected. The setting is applied globally to the network layer. Once modified, the server must be restarted to use the new value. + **Possible values**: 0 (default) = native macOS spellchecker (Hunspell disabled), 1 = Hunspell spellcheck enabled. -**Default value**: TLSv1\_3 +**Description**: Enables the Hunspell spellcheck under macOS. By default, the native spellchecker is enabled on this platform. You may prefer to use the Hunspell spellcheck, for example, in order to unify the interface for your cross-platform applications (under Windows, only the Hunspell spellcheck is available). For more information, refer to *Spell checking*. -**Possible values**: TLSv1\_2 (TLS 1.2, introduced in 2008) TLSv1\_3 (TLS 1.3, introduced in 2018) **NOTES**: -- The 4D Internet Commands plugin uses a different network layer, therefore this selector will have no impact on its TLS version. -- This setting is ignored for your client server connections if your 4D Server uses the legacy network layer. +### SQL Autocommit (43) +**Scope**:Database -### User param value (108) +**Kept between two** **sessions**: Yes -**Scope:** 4D local, 4D Server +**Possible values**: 0 (deactivation) or 1 (activation) -**Kept between two sessions:** No +**Description**: Activation or deactivation of the SQL auto-commit mode. By default, the value is 0 (deactivated mode) -**Possible values**: Any custom string + The auto-commit mode is used to strengthen the referential integrity of the database. When this mode is active, all *SELECT*, *INSERT*, *UPDATE* and *DELETE* (SIUD) queries are automatically included in ad hoc transactions when they are not already executed within a transaction. This mode can also be set in the Preferences of the database. -**Description:** Custom string passed from one session to the next one when the 4D application is restarted. This selector is useful in the context of automated unit tests that require applications to restart with different parameters. -When used with [SET DATABASE PARAMETER](set-database-parameter.md), defines a new value that will be available within the next opened database after 4D is restarted manually or using the [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), or [RESTART 4D](restart-4d.md) commands. When used with [Get database parameter](get-database-parameter.md), gets the currently available user parameter value, defined using a command line (see *Command Line Interface*), the .4DLink file (see *Using a 4DLink file*), or a call to [SET DATABASE PARAMETER](set-database-parameter.md) during the previous session. (\*) If [SET DATABASE PARAMETER](set-database-parameter.md) sets a User param value before a call to [OPEN DATABASE](open-database.md) with a .4DLink file that also contains a user-param xml attribute, 4D takes into account only the parameter provided by [SET DATABASE PARAMETER](set-database-parameter.md). +### SQL Engine case sensitivity (44) -### Times inside objects (109) +**Scope**: Database -**Scope:** 4D local, 4D Server (all processes) +**Kept between two sessions**: Yes -**Kept between two sessions**: No +**Possible values**: 0 (case not taken into account) or 1 (case-sensitive) -**Possible values**: Times in seconds (0) (default), Times in milliseconds (1) +**Description**: Activation or deactivation of case-sensitivity for string comparisons carried out by the SQL engine. -**Description**: Defines the way time values are converted and stored within object properties and collection elements, as well as how they will be imported/exported in JSON and in Web areas. By default, starting with 4D v17, times are converted and stored as number of seconds in objects. +By default, the value is 1 (case-sensitive): the SQL engine differentiates between upper and lower case and between accented characters when comparing strings (sorts and queries). For example “ABC”= “ABC” but “ABC” # “Abc” and "abc" # "âbc." In certain cases, for example so as to align the functioning of the SQL engine with that of the 4D engine, you may wish for string comparisons to not be case-sensitive (“ABC”=“Abc"="âbc"). -In previous releases, time values were converted and stored as number of milliseconds in those contexts. Using this selector can help you migrating your applications by reverting to previous settings if necessary. +**Warning:* Since this option modifies the database structure file and all processes, for performance reasons it is highly recommended to set it at database startup only.* This option can also be set in the Database settings. -**Note**: ORDA methods and SQL engine ignore this setting, they always assume time values to be numbers of seconds. -### SMTP Log (110) +### SQL Server Port ID (88) -**Thread-safe** : Yes +**Scope**: 4D local, 4D Server. -**Scope**: 4D local, 4D Server* +**Kept between two sessions**: Yes -**Kept between two sessions**: No +**Description**: Gets or sets the TCP port number used by the integrated SQL server of 4D in local mode or 4D Server. By default, the value is 19812\. When this selector is set, the database setting is updated. You can also set the TCP port number on the "SQL" page of the Database Settings dialog box. -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (SMTP exchanges not recorded). +**Possible values**: 0 to 65535. -**Description**: Starts or stops the recording of exchanges between 4D and the SMTP server, when a *transporter* object is processed through *transporter.send( )* or *SMTP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DSMTPLog\_X.txt, where *X* is the sequential number of the log. Once the file 4DSMTPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. +**Default value**: 19812 -For more information on the 4DSMTPLog\_X.txt files, please refer to the *Description of log files* section. -### Current process debug log recording (111) +### SSL cipher list (64) -**Scope:** 4D application +**Scope**: 4D application -**Kept between two sessions:** No +**Kept between two sessions**: No -**Description**: Starts or stops the sequential recording of programming events **for the current process** in a separated log file. This log is similar to the Debug log recording (selector 34) but focuses on the current process only. The log file name includes the letter "p" and the process number: 4DDebugLog\[\_p*N*_*n*].txt, where N is the process unique ID. +**Possible values**: Sequence of strings separated by colons. -For more information about this format and on the use of the *4DDebugLog* file, please refer to *Description of log files* in the Design Reference. +**Description:** Cipher list used by 4D for the secure protocol. This list modifies the priority of ciphering algorithms implemented by 4D. For example, you can pass the following string in the *value* parameter: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". For a complete description of the syntax for the ciphers list, refer to the *ciphers page of the OpenSSL* *site*. -**Notes:** This selector is provided solely for the purpose of debugging and should be used with care. In particular, it must not put into production since it can have an impact on the application performance. You can use both Debug log recording and Current process debug log recording selectors simultaneously, in which case the current process actions will not be logged in the main log file. +This setting applies to the main Web server (excluding Web server objects), the SQL server, client/server connections, as well as the HTTP client and all the 4D commands that make use of the secure protocol. It is temporary (it is not maintained between sessions). +When the cipher list has been modified, you will need to restart the server concerned in order for the new settings to be taken into account. +To reset the cipher list to its default value (stored permanently in the SLI file), call the [SET DATABASE PARAMETER](set-database-parameter.md) command and pass an empty string ("") in the *value* parameter. -### Is current database a project (112) +**Note:** With the [Get database parameter](get-database-parameter.md) command, the cipher list is returned in the optional *stringValue* parameter and the return parameter is always 0. -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Scope**: 4D application -**Description**: Returns 1 if the current database architecture is a project, and 0 otherwise. For more information, please refer to *Project vs binary database* section. +### Table sequence number (31) +**Scope**:4D application -### Is host database a project (113) + **Kept between two sessions**: Yes -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. + **Possible values**: Any longint value. -**Scope**: 4D application +**Description**: This selector is used to modify or get the current unique number for records of the table passed as parameter. "Current number" means "last number used": if you modify this value using [SET DATABASE PARAMETER](set-database-parameter.md), the next record will be created with a number that consists of the value passed + 1\. This new number is the one returned by the [Sequence number](sequence-number.md) command as well in any field of the table to which the "Autoincrement" property has been assigned in the Structure editor or via SQL. -**Description**: Returns 1 if the host database architecture is a project, and 0 otherwise. For more information, please refer to *Project vs binary database* section. +By default, this unique number is set by 4D and corresponds to the order of record creation. For additional information, refer to the documentation of the [Sequence number](sequence-number.md) command. -### Libldap version (114) -**Scope**: Current 4D machine +### TCPUDP log recording (131) -**Kept between two sessions**: n/a +**Scope:** 4D application. -**Description**: Returns the version number of the LDAP library in the 4D application on the current machine. (Read only) +**Kept between two sessions:** No. +**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -### Libsasl version (115) -**Scope**: Current 4D machine -**Kept between two sessions**: n/a -**Description**: Returns the version number of the SASL library in the 4D application on the current machine. (Read only) +### Times inside objects (109) +**Scope:** 4D local, 4D Server (all processes) +**Kept between two sessions**: No -### POP3 Log (116) +**Possible values**: Times in seconds (0) (default), Times in milliseconds (1) -**Thread-safe** : Yes +**Description**: Defines the way time values are converted and stored within object properties and collection elements, as well as how they will be imported/exported in JSON and in Web areas. By default, starting with 4D v17, times are converted and stored as number of seconds in objects. -**Scope:** 4D local, 4D Server +In previous releases, time values were converted and stored as number of milliseconds in those contexts. Using this selector can help you migrating your applications by reverting to previous settings if necessary. -**Kept between two sessions:** No +**Note**: ORDA methods and SQL engine ignore this setting, they always assume time values to be numbers of seconds. -**Possible values:** 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (POP3 exchanges not recorded). -**Description**: Starts or stops the recording of exchanges between 4D and the POP3 server, when a transporter object is processed through *POP3\_transporter.getMail( )* or *POP3\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DPOP3Log\_X.txt, where X is the sequential number of the log. Once the file 4DPOP3Log has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -For more information on the 4DPOP3Log\_X.txt files, please refer to the *Description of log files* section. +### Tips delay (102) +**Scope:** 4D application -### Is host database writable (117) +**Kept between two sessions:** No -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. +**Possible values:** longint >= 0 (ticks) -**Scope**: 4D application +**Description:** Delay before tips are displayed once the mouse cursor has stopped in objects with attached help messages. Value is expressed in ticks (1/60th of a second). Default value is 45 ticks (0.75 seconds). -**Description**: Returns 1 if the host project file/structure file is writable, and 0 if it is read-only. -### IMAP Log (119) +### Tips duration (103) -**Thread-safe** : Yes +**Scope:** 4D application -**Scope**: 4D local, 4D Server +**Kept between two sessions:** No -**Kept between two sessions**: No +**Possible values:** longint >= 60 (ticks) -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (IMAP exchanges not recorded). +**Description:** Maximum display duration for a tip. Value is expressed in ticks (1/60th of a second). Default value is 720 ticks (12 seconds). -**Description**: Starts or stops the recording of exchanges between 4D and the IMAP server, when a transporter object is processed through *IMAP\_transporter.getMail( )* or *IMAP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DIMAPLog\_X.txt, where X is the sequential number of the log. Once the file 4DIMAPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -For more information on the 4DIMAPLog\_X.txt files, please refer to the *Description of log files* section. +### Tips enabled (101) -### Libzip version (120) +**Scope:** 4D application -**Scope:** Current 4D machine +**Kept between two sessions:** No -**Kept between two sessions:** n/a +**Possible values:** 0 = tips disabled, 1 = tips enabled (default) -**Description:** Returns the version number of the libzip library in the 4D application on the current machine. (Read only) +**Description:** Sets or gets the current display status of the tips for the 4D application. By default, tips are enabled. + Note that this parameter sets all 4D tips, i.e. form help messages and Design mode editor's tips. -### Pause logging (121) -**Thread-safe** : Yes -**Scope**: 4D application +### Use legacy network layer (87) -**Kept between two** **sessions**: No +**Scope**: 4D in local mode, 4D Server -**Possible values**: 0 (resume logs), 1 (pause logs) +**Kept between two sessions**: Yes -**Description:** This selector allows to suspend/resume all logging operations started on the application (except ORDA logs). This feature can be useful to temporarily lighten the 4D application tasks or schedule logging operations. +**Description:** Sets or gets the current status of the legacy network layer for client/server connections. The legacy network layer is obsolete beginning with 4D v14 R5 and should be replaced progressively in your applications with the *ServerNet* network layer. *ServerNet* will be required in upcoming 4D releases in order to benefit from future network evolutions. For compatibility reasons, the legacy network layer is still supported to allow a smooth transition for existing applications; (it is used by default in applications converted from a release prior to v14 R5). Pass 1 in this parameter to use the legacy network layer (and disable *ServerNet*) for your client/server connections, and pass 0 to disable the legacy network (and use the *ServerNet*). +This property can also be set by means of the "Use legacy network layer" option found on the *Compatibility page* of the Database Settings (see *Network and Client-Server options*). In this section, you will also find a discussion about migration strategy. We recommend that you activate the *ServerNet* as soon as possible. You will need to restart the application in order for this parameter to be taken into account. +**Possible values:** 0 or 1 (0 = do not use legacy layer, 1 = use legacy layer) -### TCPUDP log recording (131) +**Default value:** 0 in databases created with 4D v14 R5 or higher, 1 in databases converted from 4D v14 R4 or earlier. -**Scope:** 4D application. -**Kept between two sessions:** No. -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. +### User param value (108) +**Scope:** 4D local, 4D Server +**Kept between two sessions:** No -### RDP optimization (133) +**Possible values**: Any custom string -**Scope:** 4D application. +**Description:** Custom string passed from one session to the next one when the 4D application is restarted. This selector is useful in the context of automated unit tests that require applications to restart with different parameters. -**Kept between two sessions:** No. +When used with [SET DATABASE PARAMETER](set-database-parameter.md), defines a new value that will be available within the next opened database after 4D is restarted manually or using the [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), or [RESTART 4D](restart-4d.md) commands. When used with [Get database parameter](get-database-parameter.md), gets the currently available user parameter value, defined using a command line (see *Command Line Interface*), the .4DLink file (see *Using a 4DLink file*), or a call to [SET DATABASE PARAMETER](set-database-parameter.md) during the previous session. (\*) If [SET DATABASE PARAMETER](set-database-parameter.md) sets a User param value before a call to [OPEN DATABASE](open-database.md) with a .4DLink file that also contains a user-param xml attribute, 4D takes into account only the parameter provided by [SET DATABASE PARAMETER](set-database-parameter.md). -**Possible values:** `0`: Disabled (default), `1`: Enabled. -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). :::note diff --git a/versioned_docs/version-21/commands-legacy/get-database-parameter.md b/versioned_docs/version-21/commands-legacy/get-database-parameter.md index a4af0faf373e1e..d17f67f25c816c 100644 --- a/versioned_docs/version-21/commands-legacy/get-database-parameter.md +++ b/versioned_docs/version-21/commands-legacy/get-database-parameter.md @@ -22,6 +22,36 @@ displayed_sidebar: docs The *selector* parameter designates the parameter to get. 4D offers you the following predefined constants, which are in the “*Database Parameters*” theme: +### 4D Remote mode timeout (14) + +**Scope** (legacy network layer only): 4D application if *value* positive + +**Kept between two sessions**: Yes if *value* positive + +**Description**: To be used in very specific cases. Value of the timeout granted by the remote 4D machine to the 4D Server machine. The default timeout value used by 4D in remote mode is set on the "Client-Server/Network options" page of the Database settings dialog box on the remote machine. + +The 4D Remote mode timeout selector is only taken into account if you are using the legacy network. It is ignored when the *ServerNet* layer is activated: this setting is entirely managed by the 4D Server timeout (13) selector. + + + + +### 4D Server log recording (28) + +**Thread-safe** : Yes + +**Scope**: 4D Server, 4D remote* + +* **Kept between two sessions**: No + +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). + +**Description**: Starts or stops the recording of standard requests received by 4D Server (excluding Web requests). By default, the value is 0 (requests not recorded). + +4D Server lets you record each request received by the server machine in a log file. When this mechanism is enabled, two files are created in the Logs folder of the database. They are named *4DRequestsLogServer\_X*.txt and *4DRequestsLog\_ProcessInfoServer\_X*.txt on the server, and *4DRequestsLog\_X*.txt and *4DRequestsLog\_ProcessInfo\_X*.txt on the remote, where X is the sequential number of the log. Once a file has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. + + + + ### 4D Server timeout (13) **Scope**: 4D application if *value* positive @@ -40,41 +70,60 @@ If you pass a **positive** value in the *value*parameter, you set a global and p -### 4D Remote mode timeout (14) -**Scope** (legacy network layer only): 4D application if *value* positive +### Auto synchro resources folder (48) -**Kept between two sessions**: Yes if *value* positive +**Scope**:4D remote machine -**Description**: To be used in very specific cases. Value of the timeout granted by the remote 4D machine to the 4D Server machine. The default timeout value used by 4D in remote mode is set on the "Client-Server/Network options" page of the Database settings dialog box on the remote machine. +**Kept between two** **sessions**: No -The 4D Remote mode timeout selector is only taken into account if you are using the legacy network. It is ignored when the *ServerNet* layer is activated: this setting is entirely managed by the 4D Server timeout (13) selector. +**Possible values**: 0 (no synchronization), 1 (auto synchronization) or 2 (ask). +**Description**: Dynamic synchronization mode for *Resources* folder of 4D client machine that executed the command with that of the server. +When the contents of the *Resources* folder on the server has been modified or a user has requested synchronization (for example via the resources explorer or following the execution of the [SET DATABASE LOCALIZATION](set-database-localization.md) command), the server notifies the connected client machines. + +Three synchronization modes are then possible on the client side. The Auto Synchro Resources Folder selector is used to specify the mode to be used by the client machine for the current session: + +0 (default value): no dynamic synchronization (synchronization request is ignored) 1: automatic dynamic synchronization2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. + + + + +### Cache flush periodicity (95) + +**Thread-safe** : Yes -### Port ID (15) **Scope**: 4D local, 4D Server **Kept between two sessions**: No -**Description**: Command SET DATABASE TCP port ID used by the 4D Web server with 4D in local mode and 4D Server. The default value, which can be set on the "Web/Configuration" page of the Preferences dialog box, is 80\. You can use the constants of the *TCP Port Numbers* theme for the *value* parameter. +**Possible values**: longint > 1 (seconds) -The Port ID selector is useful for 4D Web Servers compiled and merged with 4D Desktop (in which there is no access to the Design mode). For more information about the TCP port ID, refer to the *Web Server Settings* section. +**Description**: Gets or sets the current cache flush periodicity, expressed in seconds. Modifying this value overrides the **Flush Cache every X Seconds** option in the [XML DECODE](xml-decode.md) of the Database settings for the session (it is not stored in the Database settings). -### Character set (17) -**Scope**: 4D local, 4D Server +### Cache unload minimum size (66) -**Kept between two sessions**: Yes +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Kept between two sessions**: No + +**Possible values**: Positive longint > 1. +**Description**: Minimum size of memory to release from the database cache when the engine needs to make space in order to allocate an object to it (value in bytes). + +The purpose of this selector is to reduce the number of times that data is released from the cache in order to obtain better performance. You can vary this setting according to the size of the cache and that of the blocks of data being handled in your database. + +By default, if this selector is not used, 4D unloads at least 10% of the cache when space is needed. -### Max concurrent Web processes (18) + + +### Character set (17) **Scope**: 4D local, 4D Server @@ -84,15 +133,19 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De -### Client port ID (22) -**Scope**: All 4D remote machines +### Circular log limitation (90) - **Kept between two** **sessions**: Yes +**Thread-safe** : Yes - **Possible values**: See selector 15 +**Scope**: 4D local, 4D Server. + +**Kept between two sessions**: No + +**Possible values**: Any integer value, 0 = keep all logs + +**Description**: Maximum number of files to keep in rotation for each type of log. By default, the 50 most recent files are kept. If you pass a value *X*, only the *X* most recent files are kept, with the oldest being erased automatically when a new one is created. This setting applies to all log files, i.e. request logs (selectors 28 and 45), debug log (selector 34), events log (selector 79), Web logs (selectors 29 and 84 of the [WEB SET OPTION](web-set-option.md) command), etc. -**Description**: Used to specify this parameter for all the remote 4D machines used as Web servers. The values defined using these selectors are applied to all the remote machines used as Web servers. If you want to define values only for certain remote machines, use the Preferences dialog box of 4D in remote mode. @@ -108,6 +161,41 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De + +### Client HTTPS port ID (40) + +**Scope**:All 4D remote machines + +**Kept between two** **sessions**: Yes + +**Possible values**: 0 to 65535 + +**Description**: TCP port number used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). + +This selector can be used to modify by programming the TCP port used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). + +This selector operates exactly the same way as selector 39; however, it applies to all the 4D remote machines used as Web servers. If you only want to modify the value of certain specific client machines, use the Preferences dialog box of the remote 4D. + + + + +### Client log recording (45) + +**Scope**: Remote 4D machine + +**Kept between two sessions**: No + +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, attached to file name). + +**Description**: Starts or stops recording of standard requests carried out by the 4D client machine that executed the command (excluding Web requests). By default, the value is 0 (no recording of requests). + +4D lets you record the log of requests carried out by the client machine. When this mechanism is activated, two files are created on the client machine, in the Logs subfolder of the local folder of the database. They are named 4DRequestsLog\_X.txt and 4DRequestsLog\_ProcessInfo\_X.txt, where X is the sequential number of the log. Once the file 4DRequestsLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file with the same name already exists, it is directly replaced. You can set the starting number for the sequence using the value parameter. + +These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. + + + + ### Client max concurrent Web proc (25) **Scope**: All 4D remote machines @@ -120,29 +208,36 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De -### Maximum Web requests size (27) -**Scope**: 4D local, 4D Server +### Client port ID (22) - Kept between two **sessions**: Yes +**Scope**: All 4D remote machines -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. + **Kept between two** **sessions**: Yes + **Possible values**: See selector 15 +**Description**: Used to specify this parameter for all the remote 4D machines used as Web servers. The values defined using these selectors are applied to all the remote machines used as Web servers. If you want to define values only for certain remote machines, use the Preferences dialog box of 4D in remote mode. -### 4D Server log recording (28) -**Thread-safe** : Yes -**Scope**: 4D Server, 4D remote* -* **Kept between two sessions**: No +### Client Server port ID (35) -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). +**Scope**:Database -**Description**: Starts or stops the recording of standard requests received by 4D Server (excluding Web requests). By default, the value is 0 (requests not recorded). +**Kept between two** **sessions**: Yes + +**Possible values**: 0 to 65535 + +**Description**: TCP port number where the 4D Server publishes the database (bound for 4D remote machines). By default, the value is 19813\. + +Customizing this value means that several 4D client-server applications can be used on the same machine with the TCP protocol; in this case, you must indicate a different port number for each application. + +The value is stored in the database structure file. It can be set with 4D in local mode but is only taken into account in client-server configuration. + +When you modify this value, it is necessary to restart the server machine in order for the new value to be taken into account. -4D Server lets you record each request received by the server machine in a log file. When this mechanism is enabled, two files are created in the Logs folder of the database. They are named *4DRequestsLogServer\_X*.txt and *4DRequestsLog\_ProcessInfoServer\_X*.txt on the server, and *4DRequestsLog\_X*.txt and *4DRequestsLog\_ProcessInfo\_X*.txt on the remote, where X is the sequential number of the log. Once a file has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. @@ -154,23 +249,42 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De **Possible values**: 0 = Do not record (default), 1 = Record in CLF format, 2 = Record in DLF format, 3 = Record in ELF format, 4 = Record in WLF format. -**Description**: Command SET DATABASE PARAMETEStarts or stops the recording of Web requests received by the Web servers of all the client machines. By default, the value is 0 (requests not recorded). +**Description**: Starts or stops the recording of Web requests received by the Web servers of all the client machines. By default, the value is 0 (requests not recorded). The operation of this selector is identical to that of selector 29; however, it applies to all the 4D remote machines used as Web servers. The "logweb.txt" file is, in this case, automatically placed in the Logs subfolder of the remote 4D database folder (cache folder). If you only want to set values for certain client machines, use the Preferences dialog box of 4D in remote mode. -### Table sequence number (31) -**Scope**:4D application +### Current process debug log recording (111) - **Kept between two sessions**: Yes +**Scope:** 4D application - **Possible values**: Any longint value. +**Kept between two sessions:** No + +**Description**: Starts or stops the sequential recording of programming events **for the current process** in a separated log file. This log is similar to the Debug log recording (selector 34) but focuses on the current process only. The log file name includes the letter "p" and the process number: 4DDebugLog\[\_p*N*_*n*].txt, where N is the process unique ID. -**Description**: Command SET DATABASE PARAMETERThis selector is used to modify or get the current unique number for records of the table passed as parameter. "Current number" means "last number used": if you modify this value using [SET DATABASE PARAMETER](set-database-parameter.md), the next record will be created with a number that consists of the value passed + 1\. This new number is the one returned by the [Sequence number](sequence-number.md) command as well in any field of the table to which the "Autoincrement" property has been assigned in the Structure editor or via SQL. +For more information about this format and on the use of the *4DDebugLog* file, please refer to *Description of log files* in the Design Reference. + +**Notes:** This selector is provided solely for the purpose of debugging and should be used with care. In particular, it must not put into production since it can have an impact on the application performance. You can use both Debug log recording and Current process debug log recording selectors simultaneously, in which case the current process actions will not be logged in the main log file. + + + + +### Dates inside objects (85) + +**Scope:** Current process + +**Kept between two sessions**: No + + **Possible values**: String type without time zone (0), String type with time zone (1), Date type (2) (default) + +**Description**: Defines the way dates are stored within objects, as well as how they will be imported/exported in JSON. + +When the selector value is Date type (default value for databases created with 4D v17 and higher), 4D dates are stored with the date type within objects, with respect to the local date settings. When converted to JSON format, date attributes will be converted to strings which do not include a time. (**Note:** this setting can be set by means of the "Use date type instead of ISO date format in objects" option found on the *Compatibility page* of the Database Settings). + +Passing String type with time zone in this selector will convert 4D dates into ISO strings and take the local time zone into account. For example, converting the date 23/08/2013 gives you "2013-08-22T22:00:000Z" in JSON format when the operation is performed in France during Daylight Savings Time (GMT+2). This principle conforms to the standard operation of JavaScript. This can be a source of errors when you want to send JSON date values to someone in a different time zone. For example, when you export a table using [Selection to JSON](selection-to-json.md) in France that is meant to be reimported in the US using [JSON TO SELECTION](json-to-selection.md). Since dates are re-interpreted in each time zone, the values stored in the database will be different. In this case, you can modify the conversion mode for dates so that they do not take the time zone into account by passing String type without time zone in this selector. Converting the date 23/08/2013 will then give you "2013-08-23T00:00:00Z" in all cases. -By default, this unique number is set by 4D and corresponds to the order of record creation. For additional information, refer to the documentation of the [Sequence number](sequence-number.md) command. @@ -180,42 +294,34 @@ By default, this unique number is set by 4D and corresponds to the order of reco **Scope**: 4D application -Kept between two **sessions**: No +**Kept between two sessions**: No **Description**: Starts or stops the sequential recording of events occurring at the 4D programming level in the *4DDebugLog\[\_n\].txt* file or *4DDebugLogServer\[\_n\].txt* (where \_n is the segment number of the file and *Server* is added to the file name when generated on the server). Two modes are available: - Standard mode provides a basic view of events and the file is automatically placed in the Logs subfolder of the database, next to the structure file. Execution times are expressed in milliseconds with the "< ms" value displayed when an operation lasts less than one millisecond. - - Tabbed mode provides additional information and uses a more compact, tabbed format in the file. Execution times are expressed in microseconds. **Possible values**: Longint containing a bit field: value = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (value 1) requests to enable the file (note that any other non-null value also enables it as well) - - Bit 1 (value 2) requests call parameters to commands and (interpreted mode only) methods - - Bit 2 (value 4) enables tabbed format. - - Bit 3 (value 8) disables immediate writing of each operation on disk (enabled by default). Immediate writing is slower but more effective, for example for investigating causes of a crash. If you disable this mode, the file contents are generated more quickly. - - Bit 4 (value 16) disables recording of plug-in calls (enabled by default). - - Bit 5 (value 32) disables member function logging. Examples: +```4d SET DATABASE PARAMETER (34;1) // enables standard mode without parameters, with runtimes - SET DATABASE PARAMETER (34;2) // enables standard mode with parameters and runtimes - SET DATABASE PARAMETER (34;2+4) // enables tabbed mode with parameters and runtimes - SET DATABASE PARAMETER (34;0) // disables file +``` For any type of interpreted or compiled 4D application (4D all modes, 4D Server, 4D Volume Desktop), you can avoid having a file record too much information by: - restricting the 4D commands that are examined by using Log command list (selector 80), or - - restricting it to the current process only with Current process debug log recording (selector 111). This will add the letter "p" and the process number to the file name: *4DDebugLog\[\_pn\_n\].txt* or *4DDebugLogServer\[\_pn\_n\].txt* * *For more information about this format and on the use of the *4DDebugLog* file, please refer to the *Description of log files* section.. @@ -228,484 +334,461 @@ For any type of interpreted or compiled 4D application (4D all modes, 4D Server, -### Client Server port ID (35) -**Scope**:Database +### Diagnostic log level (86) - **Kept between two** **sessions**: Yes +**Thread-safe** : Yes - **Possible values**: 0 to 65535 +**Scope:** 4D application -**Description**: TCP port number where the 4D Server publishes the database (bound for 4D remote machines). By default, the value is 19813\. +**Kept between two sessions:** No -Customizing this value means that several 4D client-server applications can be used on the same machine with the TCP protocol; in this case, you must indicate a different port number for each application. +**Description:** Level(s) of messages to be included in the diagnostic log when enabled (see selector Diagnostic log recording). Each level designates a category of diagnostic messages and automatically includes more important categorie(s). For a description of categories, see *Diagnostic log levels* section on *developer.4d.com*. -The value is stored in the database structure file. It can be set with 4D in local mode but is only taken into account in client-server configuration. +**Possible values:** One of the following constants (Log info by default): +- Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) +- Log debug: activates ERROR, WARN, INFO, DEBUG +- Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN +- Log error: activates ERROR (least detailed level) -When you modify this value, it is necessary to restart the server machine in order for the new value to be taken into account. -### HTTPS Port ID (39) +### Diagnostic log recording (79) -**Scope**:4D local, 4D Server +**Thread-safe** : Yes - Kept between two **sessions**: Yes +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Kept between two sessions**: No +Possible values: 0 or 1 (0 = do not record, 1 = record) +**Description**: Starts or stops recording of the 4D diagnostic file. By default, the value is 0 (do not record). -### Client HTTPS port ID (40) +4D can continuously record a set of events related to the internal application operation into a diagnostic file. Information contained in this file is intended for the development of 4D applications and can be analyzed with the help of the 4D tech support (for more information, please refer to the *Description of log files* section on *developer.4d.com*). When you pass 1 in this selector, a diagnostic file is automatically created (or opened) in the database **Logs** folder. The file is named *4DDiagnosticLog\_X*.txt (or *4DDiagnosticLogServer\_X*.txt if generated on the server). Once this file reaches a size of 10 MB, it is closed and a new file is generated, with an incremented sequence number X. -**Scope**:All 4D remote machines +Note that you can include custom information in this file using the [LOG EVENT](log-event.md) command. - **Kept between two** **sessions**: Yes - **Possible values**: 0 to 65535 -**Description**: TCP port number used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). -This selector can be used to modify by programming the TCP port used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). +### Direct2D get active status (74) -This selector operates exactly the same way as selector 39; however, it applies to all the 4D remote machines used as Web servers. If you only want to modify the value of certain specific client machines, use the Preferences dialog box of the remote 4D. +**Note**: You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. +**Description**: Returns active implementation of Direct2D under Windows. +**Possible values**: 0, 1, 2, 3, 4 or 5 (see values of selector 69). The value returned depends on the availability of Direct2D, the hardware and the quality of Direct2D support by the operating system. -### SQL Autocommit (43) +For example, if you execute: -**Scope**:Database +```4d + SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) + $mode:=Get database parameter(Direct2D get active status) +``` - **Kept between two** **sessions**: Yes +- On Windows 7 and higher, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 3 (software context). - **Possible values**: 0 (deactivation) or 1 (activation) +- On Windows Vista, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 0 (disabling of Direct2D). -**Description**: Activation or deactivation of the SQL auto-commit mode. By default, the value is 0 (deactivated mode) +- On Windows XP, *$mode* is always set to 0 (not compatible with Direct2D). - The auto-commit mode is used to strengthen the referential integrity of the database. When this mode is active, all *SELECT*, *INSERT*, *UPDATE* and *DELETE* (SIUD) queries are automatically included in ad hoc transactions when they are not already executed within a transaction. This mode can also be set in the Preferences of the database. -### SQL Engine case sensitivity (44) +### Direct2D status (69) -**Scope**: Database +**Scope**: 4D application -Kept between two **sessions**: Yes +**Kept between two sessions**: No -**Possible values**: 0 (case not taken into account) or 1 (case-sensitive) +**Description**: Activation mode of Direct2D under Windows. -**Description**: Activation or deactivation of case-sensitivity for string comparisons carried out by the SQL engine. +**Possible values**: One of the following constants (mode 3 by default): -By default, the value is 1 (case-sensitive): the SQL engine differentiates between upper and lower case and between accented characters when comparing strings (sorts and queries). For example “ABC”= “ABC” but “ABC” # “Abc” and "abc" # "âbc." In certain cases, for example so as to align the functioning of the SQL engine with that of the 4D engine, you may wish for string comparisons to not be case-sensitive (“ABC”=“Abc"="âbc"). +- Direct2D Disabled (0): Direct2D mode is not enabled and the database functions in the previous mode (GDI/GDIPlus). +- Direct2D Hardware (1): Use Direct2D as graphics hardware context for entire 4D application. If this context is not available, use Direct2D graphics software context. +- Direct2D Software (3) (Default mode): Beginning with Windows 7, use Direct2D graphics software context for entire 4D application. -**Warning:* Since this option modifies the database structure file and all processes, for performance reasons it is highly recommended to set it at database startup only.* This option can also be set in the Database settings. +**Warning:* This selector is provided for debugging purposes only. Since several 4D features rely on Direct2D, it must not be disabled in deployed applications. Only the default mode (Direct2D Software) is approved for deployed applications.* -### Client log recording (45) -**Scope**: Remote 4D machine +### HTTP compression level (50) -Kept between two **sessions**: No +**Scope**:4D application -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, attached to file name). +**Kept between two sessions**: No -**Description**: Starts or stops recording of standard requests carried out by the 4D client machine that executed the command (excluding Web requests). By default, the value is 0 (no recording of requests). +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -4D lets you record the log of requests carried out by the client machine. When this mechanism is activated, two files are created on the client machine, in the Logs subfolder of the local folder of the database. They are named 4DRequestsLog\_X.txt and 4DRequestsLog\_ProcessInfo\_X.txt, where X is the sequential number of the log. Once the file 4DRequestsLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file with the same name already exists, it is directly replaced. You can set the starting number for the sequence using the value parameter. -These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. +### HTTP compression threshold (51) -### Query by formula on server (46) +**Scope**:4D application -**Scope**: Current table and process +**Kept between two** **sessions**: No - **Kept between two sessions**: No +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. - **Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) -**Description**: Execution location of [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands for the *table* passed in the parameter. -When using a database in client-server mode, the query "by formula" commands can be executed either on the server or on the client machine: -In databases created with 4D v11 SQL, these commands are executed on the server. In converted databases, these commands are executed on the client machine, as in previous versions of 4D.In converted databases, a specific preference (Application/Compatibility page) can be used to globally modify the execution location of these commands.This difference in execution location influences not only application performance (execution on the server is usually faster) but also programming. In fact, the value of the components of the formula (in particular variables called via a method) differ according to the execution context. You can use this selector to punctually adapt the operation of your application. +### HTTPS Port ID (39) -If you pass 0 in the *value* l’parameter, the execution location of query "by formula" commands will depend on the database configuration: in databases created with 4D v11 SQL, these commands will be executed on the server. In converted databases, they will be executed on the client machine or the server according to the database preferences. Pass 1 or 2 in *value* to "force" the execution of these commands, respectively, on the client or on the server machine. +**Scope**:4D local, 4D Server -Refer to example 2. +**Kept between two sessions**: Yes -**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -### Order by formula on server (47) -**Scope**:Current table and process +### Idle connections timeout (54) - **Kept between two** **sessions**: No +**Scope**:4D application unless value is negative - **Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) +**Kept between two sessions**: No -**Description** : Execution location of [ORDER BY FORMULA](order-by-formula.md) command for the table passed in the parameter. +**Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -When using a database in client-server mode, this command can be executed either on the server or on the client machine. This selector can be used to specify the execution location of this command (server or client). This mode can also be set in the database preferences. For more information, please refer to the description of selector 46, Query By Formula On Server. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. -**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. +On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. +If you pass a positive value in *value*, it applies to all new connections in all the processes. If you pass a negative value, it applies to connections that are open in the current process. If you pass 0, idle connections are not subjected to a timeout. +This parameter must be set on the client side. Usually, you do not need to change this value. -### Auto synchro resources folder (48) -**Scope**:4D remote machine - **Kept between two** **sessions**: No - **Possible values**: 0 (no synchronization), 1 (auto synchronization) or 2 (ask). +### IMAP Log (119) -**Description**: Dynamic synchronization mode for *Resources* folder of 4D client machine that executed the command with that of the server. +**Thread-safe** : Yes -When the contents of the *Resources* folder on the server has been modified or a user has requested synchronization (for example via the resources explorer or following the execution of the [SET DATABASE LOCALIZATION](set-database-localization.md) command), the server notifies the connected client machines. +**Scope**: 4D local, 4D Server -Three synchronization modes are then possible on the client side. The Auto Synchro Resources Folder selector is used to specify the mode to be used by the client machine for the current session: +**Kept between two sessions**: No -0 (default value): no dynamic synchronization (synchronization request is ignored) 1: automatic dynamic synchronization2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (IMAP exchanges not recorded). +**Description**: Starts or stops the recording of exchanges between 4D and the IMAP server, when a transporter object is processed through *IMAP\_transporter.getMail( )* or *IMAP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DIMAPLog\_X.txt, where X is the sequential number of the log. Once the file 4DIMAPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. +For more information on the 4DIMAPLog\_X.txt files, please refer to [*Description of log files*](../Debugging/debugLogFiles.md). -### Query by formula joins (49) -**Scope**:Current process - **Kept between two** **sessions**: No - **Possible values**: 0 (use database configuration), 1 (always use automatic relations) or 2 (use SQL joins if possible). +### Is current database a project (112) -**Description**: Operating mode of the [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands relating to the use of "SQL joins." +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -In databases created starting with version 11.2 of 4D v11 SQL, these commands carry out joins based on the SQL joins model. This mechanism can be used to modify the selection of a table according to a query carried out on another table without these tables being connected by an automatic relation (necessary condition in previous versions of 4D). +**Scope**: 4D application -The QUERY BY FORMULA Joins selector lets you specify the operating mode of the query by formula commands for the current process: +**Description**: Returns 1 if the current database architecture is a project, and 0 otherwise. For more information, please refer to [*Project vs binary database* section on doc.4d.com](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-new-database.300-6750129.en.html#5057971). -0: Uses the current settings of the database (default value). In databases created starting with version 11.2 of 4D v11 SQL, "SQL joins" are always activated for queries by formula. In converted databases, this mechanism is not activated by default for compatibility reasons but can be implemented via a preference.1: Always use automatic relations (= functioning of previous versions of 4D). In this mode, a relation is necessary in order to set the selection of a table according to queries carried out on another table. 4D does not do "SQL joins."2: Use SQL joins if possible (= default operation of databases created in version 11.2 and higher of 4D v11 SQL ). In this mode, 4D establishes "SQL joins" for queries by formula when the formula is suited for it (with two notable exceptions, see the description of the [QUERY BY FORMULA](query-by-formula.md) or [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) command).**Note:** With 4D in remote mode, "SQL joins" can only be used if the formulas are executed on the server (they must have access to the records). To configure where formulas are to be executed, please refer to selectors 46 and 47. -### HTTP compression level (50) +### Is host database a project (113) -**Scope**:4D application +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. - Kept between two **sessions**: No +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Description**: Returns 1 if the host database architecture is a project, and 0 otherwise. For more information, please refer to [*Project vs binary database* section on doc.4d.com](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-new-database.300-6750129.en.html#5057971). -### HTTP compression threshold (51) -**Scope**:4D application +### Is host database writable (117) - **Kept between two** **sessions**: No +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Scope**: 4D application +**Description**: Returns 1 if the host project file/structure file is writable, and 0 if it is read-only. -### Server base process stack size (53) -**Scope**: 4D Server - Kept between two **sessions**: No +### Libldap version (114) - **Possible values**: Positive longint. +**Scope**: Current 4D machine -**Description**: Size of the stack allocated to each preemptive system process on the server, expressed in bytes. The default size is determined by the system. +**Kept between two sessions**: n/a -Preemptive system processes (processes of the 4D client base process type) are loaded to control the main 4D client processes. The size allocated by default to the stack of each preemptive process allows a good ease of execution but may prove to be consequential when very large numbers of processes (several hundred) are created. +**Description**: Returns the version number of the LDAP library in the 4D application on the current machine. (Read only) -For optimization purposes, this size can be reduced considerably if the operations carried out by the database allow for it (for example if the database does not carry out sorts of large quantities of records). Values of 512 or even 256 KB are possible. Be careful, under-sizing the stack is critical and can be harmful to the operation of 4D Server. Setting this parameter should be done with caution and must take the database conditions of use into account (number of records, type of operations, etc.). -In order to be taken into account, this parameter must be executed on the server machine (for example in the *On Server Startup Database Method*). +### Libsasl version (115) -### Idle connections timeout (54) +**Scope**: Current 4D machine -**Scope**:4D application unless value is negative +**Kept between two sessions**: n/a -**Kept between two** **sessions**: No +**Description**: Returns the version number of the SASL library in the 4D application on the current machine. (Read only) -**Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. -On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. -If you pass a positive value in *value*, it applies to all new connections in all the processes. If you pass a negative value, it applies to connections that are open in the current process. If you pass 0, idle connections are not subjected to a timeout. +### Libzip version (120) -This parameter must be set on the client side. Usually, you do not need to change this value. +**Scope:** Current 4D machine +**Kept between two sessions:** n/a +**Description:** Returns the version number of the libzip library in the 4D application on the current machine. (Read only) -### PHP interpreter IP address (55) -**Scope**:4D application - Kept between two **sessions**: No -**Values**: Formatted string of the IPv4 type (for example "127.0.0.1") or IPv6 type (for example "2001:0db8:0000:0000:0000:ff00:0042:8329") +### Log command list (80) -**Description**: IP address used locally by 4D to communicate with the PHP interpreter via FastCGI. By default, the value is "127.0.0.1" (addresses in IPv6 format are supported starting with 4D v16R4). This address must correspond to the machine where 4D is located. This parameter can also be set globally for all the machines via the Database Settings. +**Scope**: 4D application -For more information about the PHP interpreter, please refer to the *Design Reference* manual. +**Kept between two sessions**: No +**Possible values**: String containing a list of 4D command numbers to record (separated by semi-colons) or "all" to record all the commands or "" (empty string) to record none of them or prefixed by "-" to exclude specific commands. +**Description**: List of 4D commands to record in or exclude from the debugging file (see selector 34, Debug Log Recording). By default, all 4D commands are recorded. -### PHP interpreter port (56) +This selector restricts the quantity of information saved in the debugging file by limiting the 4D commands whose execution you want to record or exclude from recording. For example, you can write: -**Scope**:4D application +```4d +//Record only the QUERY and QUERY SELECTION commands +SET DATABASE PARAMETER(Log command list;"277;341") +``` +OR +```4d +//Exclude the SET USER ALIAS and DELAY PROCESS commands from being recorded +SET DATABASE PARAMETER(Log command list;"-1666;-323") +``` - **Kept between two** **sessions**: No -**Values**: Positive long integer type value. By default, the value is 8002\. -**Description**: Number of the TCP port used by the PHP interpreter of 4D. This parameter can also be modified globally for all the machines via the Database Settings. For more information about the PHP interpreter, please refer to the *Design Reference* manual. +### Max concurrent Web processes (18) +**Scope**: 4D local, 4D Server +**Kept between two sessions**: Yes -### SSL cipher list (64) +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Scope**: 4D application -Kept between two **sessions**: No -**Possible values**: Sequence of strings separated by colons. -**Description:** Cipher list used by 4D for the secure protocol. This list modifies the priority of ciphering algorithms implemented by 4D. For example, you can pass the following string in the *value* parameter: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". For a complete description of the syntax for the ciphers list, refer to the *ciphers page of the OpenSSL* *site*. +### Maximum Web requests size (27) -This setting applies to the main Web server (excluding Web server objects), the SQL server, client/server connections, as well as the HTTP client and all the 4D commands that make use of the secure protocol. It is temporary (it is not maintained between sessions). +**Scope**: 4D local, 4D Server -When the cipher list has been modified, you will need to restart the server concerned in order for the new settings to be taken into account. +**Kept between two sessions**: Yes -To reset the cipher list to its default value (stored permanently in the SLI file), call the [SET DATABASE PARAMETER](set-database-parameter.md) command and pass an empty string ("") in the *value* parameter. +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Note:** With the [Get database parameter](get-database-parameter.md) command, the cipher list is returned in the optional *stringValue* parameter and the return parameter is always 0. -### Cache unload minimum size (66) +### Min TLS version (105) -**Scope**: 4D application +**Scope**: 4D Server, 4D Web Server and 4D SQL Server **Kept between two sessions**: No -**Possible values**: Positive longint > 1. - -**Description**: Minimum size of memory to release from the database cache when the engine needs to make space in order to allocate an object to it (value in bytes). - -The purpose of this selector is to reduce the number of times that data is released from the cache in order to obtain better performance. You can vary this setting according to the size of the cache and that of the blocks of data being handled in your database. - -By default, if this selector is not used, 4D unloads at least 10% of the cache when space is needed. - +**Description**: Used to specify the minimum Transport Layer Security (TLS) version, which provides data encryption and authentication between applications and servers. Connection attempts from clients supporting only versions below the minimum will be rejected. The setting is applied globally to the network layer. Once modified, the server must be restarted to use the new value. +**Default value**: TLSv1\_3 -### Direct2D status (69) +**Possible values**: +- TLSv1\_2 (TLS 1.2, introduced in 2008) +- TLSv1\_3 (TLS 1.3, introduced in 2018) -**Scope**: 4D application +**NOTES**: +- The 4D Internet Commands plugin uses a different network layer, therefore this selector will have no impact on its TLS version. +- This setting is ignored for your client server connections if your 4D Server uses the legacy network layer. -**Kept between two sessions**: No -**Description**: Activation mode of Direct2D under Windows. -**Possible values**: One of the following constants (mode 3 by default): -Direct2D Disabled (0): Direct2D mode is not enabled and the database functions in the previous mode (GDI/GDIPlus). +### Number of formulas in cache (92) -Direct2D Hardware (1): Use Direct2D as graphics hardware context for entire 4D application. If this context is not available, use Direct2D graphics software context. +**Scope**: 4D application -Direct2D Software (3) (Default mode): Beginning with Windows 7, use Direct2D graphics software context for entire 4D application. +**Kept between two sessions**: No -**Warning:* This selector is provided for debugging purposes only. Since several 4D features rely on Direct2D, it must not be disabled in deployed applications. Only the default mode (Direct2D Software) is approved for deployed applications.* +**Possible values**: Positive longints +**Default value**: 0 (no cache) +**Description**: Sets or gets the maximum number of formulas to be kept in the cache of formulas, which is used by the [EXECUTE FORMULA](execute-formula.md) command. This limit is applied to all processes, but each process has its own formula cache. Caching formulas accelerates the [EXECUTE FORMULA](execute-formula.md) command execution in compiled mode since each cached formula is tokenized only once in this case. When you change the cache value, existing contents are reset even if the new size is larger than the previous one. Once the maximum number of formulas in the cache is reached, a new executed formula will erase the oldest one in the cache (FIFO mode). This parameter is only taken into account in compiled databases or compiled components. -### Direct2D get active status (74) -**Note**: You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Description**: Returns active implementation of Direct2D under Windows. -**Possible values**: 0, 1, 2, 3, 4 or 5 (see values of selector 69). The value returned depends on the availability of Direct2D, the hardware and the quality of Direct2D support by the operating system. +### OpenSSL version (94) -For example, if you execute: +**Scope**: all 4D machines* - SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) $mode:=Get database parameter(Direct2D get active status) +**Kept between two sessions**: No -- On Windows 7 and higher, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 3 (software context). +**Description**: Returns the version number of the OpenSSL library in use on the machine. (Read only) -- On Windows Vista, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 0 (disabling of Direct2D). -- On Windows XP, *$mode* is always set to 0 (not compatible with Direct2D). +### Order by formula on server (47) -### Diagnostic log recording (79) +**Scope**:Current table and process -**Thread-safe** : Yes +**Kept between two** **sessions**: No -**Scope**: 4D application +**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) -Kept between two **sessions**: No +**Description** : Execution location of [ORDER BY FORMULA](order-by-formula.md) command for the table passed in the parameter. -Possible values: 0 or 1 (0 = do not record, 1 = record) +When using a database in client-server mode, this command can be executed either on the server or on the client machine. This selector can be used to specify the execution location of this command (server or client). This mode can also be set in the database preferences. For more information, please refer to the description of selector 46, Query By Formula On Server. -**Description**: Starts or stops recording of the 4D diagnostic file. By default, the value is 0 (do not record). +**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. -4D can continuously record a set of events related to the internal application operation into a diagnostic file. Information contained in this file is intended for the development of 4D applications and can be analyzed with the help of the 4D tech support (for more information, please refer to the *Description of log files* section on *developer.4d.com*). When you pass 1 in this selector, a diagnostic file is automatically created (or opened) in the database **Logs** folder. The file is named *4DDiagnosticLog\_X*.txt (or *4DDiagnosticLogServer\_X*.txt if generated on the server). Once this file reaches a size of 10 MB, it is closed and a new file is generated, with an incremented sequence number X. -Note that you can include custom information in this file using the [LOG EVENT](log-event.md) command. +### Pause logging (121) -### Log command list (80) +**Thread-safe** : Yes **Scope**: 4D application -Kept between two **sessions**: No - -Possible values: String containing a list of 4D command numbers to record (separated by semi-colons) or "all" to record all the commands or "" (empty string) to record none of them or prefixed by "-" to exclude specific commands. - -**Description**: List of 4D commands to record in or exclude from the debugging file (see selector 34, Debug Log Recording). By default, all 4D commands are recorded. - -This selector restricts the quantity of information saved in the debugging file by limiting the 4D commands whose execution you want to record or exclude from recording. For example, you can write: - - SET DATABASE PARAMETER(Log command list;"277;341") //Record only the QUERY and QUERY SELECTION commands OR SET DATABASE PARAMETER(Log command list;"-1666;-323") //Exclude the SET USER ALIAS and DELAY PROCESS commands from being recorded - - +**Kept between two** **sessions**: No -### Spellchecker (81) +**Possible values**: 0 (resume logs), 1 (pause logs) -**Scope**: 4D application +**Description:** This selector allows to suspend/resume all logging operations started on the application (except ORDA logs). This feature can be useful to temporarily lighten the 4D application tasks or schedule logging operations. - **Kept between two sessions**: No - **Possible values**: 0 (default) = native macOS spellchecker (Hunspell disabled), 1 = Hunspell spellcheck enabled. -**Description**: Enables the Hunspell spellcheck under macOS. By default, the native spellchecker is enabled on this platform. You may prefer to use the Hunspell spellcheck, for example, in order to unify the interface for your cross-platform applications (under Windows, only the Hunspell spellcheck is available). For more information, refer to *Spell checking*. +### PHP interpreter IP address (55) +**Scope**:4D application -### Dates inside objects (85) +**Kept between two sessions**: No -Scope: Current process +**Values**: Formatted string of the IPv4 type (for example "127.0.0.1") or IPv6 type (for example "2001:0db8:0000:0000:0000:ff00:0042:8329") - Kept between two **sessions**: No +**Description**: IP address used locally by 4D to communicate with the PHP interpreter via FastCGI. By default, the value is "127.0.0.1" (addresses in IPv6 format are supported starting with 4D v16R4). This address must correspond to the machine where 4D is located. This parameter can also be set globally for all the machines via the Database Settings. - **Possible values**: String type without time zone (0), String type with time zone (1), Date type (2) (default) +For more information about the PHP interpreter, please refer to the *Design Reference* manual. -**Description**: Defines the way dates are stored within objects, as well as how they will be imported/exported in JSON. -When the selector value is Date type (default value for databases created with 4D v17 and higher), 4D dates are stored with the date type within objects, with respect to the local date settings. When converted to JSON format, date attributes will be converted to strings which do not include a time. (**Note:** this setting can be set by means of the "Use date type instead of ISO date format in objects" option found on the *Compatibility page* of the Database Settings). -Passing String type with time zone in this selector will convert 4D dates into ISO strings and take the local time zone into account. For example, converting the date 23/08/2013 gives you "2013-08-22T22:00:000Z" in JSON format when the operation is performed in France during Daylight Savings Time (GMT+2). This principle conforms to the standard operation of JavaScript. This can be a source of errors when you want to send JSON date values to someone in a different time zone. For example, when you export a table using [Selection to JSON](selection-to-json.md) in France that is meant to be reimported in the US using [JSON TO SELECTION](json-to-selection.md). Since dates are re-interpreted in each time zone, the values stored in the database will be different. In this case, you can modify the conversion mode for dates so that they do not take the time zone into account by passing String type without time zone in this selector. Converting the date 23/08/2013 will then give you "2013-08-23T00:00:00Z" in all cases. +### PHP interpreter port (56) +**Scope**:4D application -### Diagnostic log level (86) +**Kept between two sessions**: No -**Thread-safe** : Yes +**Values**: Positive long integer type value. By default, the value is 8002\. -**Scope:** 4D application +**Description**: Number of the TCP port used by the PHP interpreter of 4D. This parameter can also be modified globally for all the machines via the Database Settings. For more information about the PHP interpreter, please refer to the *Design Reference* manual. -**Kept between two sessions:** No -**Description:** Level(s) of messages to be included in the diagnostic log when enabled (see selector Diagnostic log recording). Each level designates a category of diagnostic messages and automatically includes more important categorie(s). For a description of categories, see *Diagnostic log levels* section on *developer.4d.com*. -**Possible values:** One of the following constants (Log info by default): Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) Log debug: activates ERROR, WARN, INFO, DEBUG Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN Log error: activates ERROR (least detailed level) +### POP3 Log (116) +**Thread-safe** : Yes -### Use legacy network layer (87) +**Scope:** 4D local, 4D Server -**Scope**: 4D in local mode, 4D Server +**Kept between two sessions:** No -**Kept between two sessions**: Yes +**Possible values:** 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (POP3 exchanges not recorded). -**Description:** Sets or gets the current status of the legacy network layer for client/server connections. The legacy network layer is obsolete beginning with 4D v14 R5 and should be replaced progressively in your applications with the *ServerNet* network layer. *ServerNet* will be required in upcoming 4D releases in order to benefit from future network evolutions. For compatibility reasons, the legacy network layer is still supported to allow a smooth transition for existing applications; (it is used by default in applications converted from a release prior to v14 R5). Pass 1 in this parameter to use the legacy network layer (and disable *ServerNet*) for your client/server connections, and pass 0 to disable the legacy network (and use the *ServerNet*). +**Description**: Starts or stops the recording of exchanges between 4D and the POP3 server, when a transporter object is processed through *POP3\_transporter.getMail( )* or *POP3\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DPOP3Log\_X.txt, where X is the sequential number of the log. Once the file 4DPOP3Log has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -This property can also be set by means of the "Use legacy network layer" option found on the *Compatibility page* of the Database Settings (see *Network and Client-Server options*). In this section, you will also find a discussion about migration strategy. We recommend that you activate the *ServerNet* as soon as possible. You will need to restart the application in order for this parameter to be taken into account. +For more information on the 4DPOP3Log\_X.txt files, please refer to the *Description of log files* section. -**Possible values:** 0 or 1 (0 = do not use legacy layer, 1 = use legacy layer) -**Default value:** 0 in databases created with 4D v14 R5 or higher, 1 in databases converted from 4D v14 R4 or earlier. +### Port ID (15) -### SQL Server Port ID (88) +**Scope**: 4D local, 4D Server -**Scope**: 4D local, 4D Server. +**Kept between two sessions**: No -**Kept between two sessions**: Yes +**Description**: TCP port ID used by the 4D Web server with 4D in local mode and 4D Server. The default value, which can be set on the "Web/Configuration" page of the Preferences dialog box, is 80\. You can use the constants of the *TCP Port Numbers* theme for the *value* parameter. -**Description**: Gets or sets the TCP port number used by the integrated SQL server of 4D in local mode or 4D Server. By default, the value is 19812\. When this selector is set, the database setting is updated. You can also set the TCP port number on the "SQL" page of the Database Settings dialog box. +The Port ID selector is useful for 4D Web Servers compiled and merged with 4D Desktop (in which there is no access to the Design mode). For more information about the TCP port ID, refer to the *Web Server Settings* section. -**Possible values**: 0 to 65535. -**Default value**: 19812 +### Query by formula joins (49) -### Circular log limitation (90) +**Scope**:Current process -**Thread-safe** : Yes +**Kept between two** **sessions**: No -**Scope**: 4D local, 4D Server. +**Possible values**: 0 (use database configuration), 1 (always use automatic relations) or 2 (use SQL joins if possible). -**Kept between two sessions**: No +**Description**: Operating mode of the [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands relating to the use of "SQL joins." -**Possible values**: Any integer value, 0 = keep all logs +In databases created starting with version 11.2 of 4D v11 SQL, these commands carry out joins based on the SQL joins model. This mechanism can be used to modify the selection of a table according to a query carried out on another table without these tables being connected by an automatic relation (necessary condition in previous versions of 4D). -**Description**: Maximum number of files to keep in rotation for each type of log. By default, the 50 most recent files are kept. If you pass a value *X*, only the *X* most recent files are kept, with the oldest being erased automatically when a new one is created. This setting applies to all log files, i.e. request logs (selectors 28 and 45), debug log (selector 34), events log (selector 79), Web logs (selectors 29 and 84 of the [WEB SET OPTION](web-set-option.md) command), etc. +The QUERY BY FORMULA Joins selector lets you specify the operating mode of the query by formula commands for the current process: +- 0: Uses the current settings of the database (default value). In databases created starting with version 11.2 of 4D v11 SQL, "SQL joins" are always activated for queries by formula. In converted databases, this mechanism is not activated by default for compatibility reasons but can be implemented via a preference. +- 1: Always use automatic relations (= functioning of previous versions of 4D). In this mode, a relation is necessary in order to set the selection of a table according to queries carried out on another table. 4D does not do "SQL joins." +- 2: Use SQL joins if possible (= default operation of databases created in version 11.2 and higher of 4D v11 SQL ). In this mode, 4D establishes "SQL joins" for queries by formula when the formula is suited for it (with two notable exceptions, see the description of the [QUERY BY FORMULA](query-by-formula.md) or [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) command). +**Note:** With 4D in remote mode, "SQL joins" can only be used if the formulas are executed on the server (they must have access to the records). To configure where formulas are to be executed, please refer to selectors 46 and 47. -### Number of formulas in cache (92) -**Scope**: 4D application -**Kept between two sessions**: No -**Possible values**: Positive longints +### Query by formula on server (46) -**Default value**: 0 (no cache) +**Scope**: Current table and process -**Description**: Sets or gets the maximum number of formulas to be kept in the cache of formulas, which is used by the [EXECUTE FORMULA](execute-formula.md) command. This limit is applied to all processes, but each process has its own formula cache. Caching formulas accelerates the [EXECUTE FORMULA](execute-formula.md) command execution in compiled mode since each cached formula is tokenized only once in this case. When you change the cache value, existing contents are reset even if the new size is larger than the previous one. Once the maximum number of formulas in the cache is reached, a new executed formula will erase the oldest one in the cache (FIFO mode). This parameter is only taken into account in compiled databases or compiled components. +**Kept between two sessions**: No +**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) +**Description**: Execution location of [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands for the *table* passed in the parameter. -### OpenSSL version (94) +When using a database in client-server mode, the query "by formula" commands can be executed either on the server or on the client machine: -**Scope**: all 4D machines* +In databases created with 4D v11 SQL, these commands are executed on the server. In converted databases, these commands are executed on the client machine, as in previous versions of 4D.In converted databases, a specific preference (Application/Compatibility page) can be used to globally modify the execution location of these commands.This difference in execution location influences not only application performance (execution on the server is usually faster) but also programming. In fact, the value of the components of the formula (in particular variables called via a method) differ according to the execution context. You can use this selector to punctually adapt the operation of your application. -* **Kept between two sessions**: No +If you pass 0 in the *value* l’parameter, the execution location of query "by formula" commands will depend on the database configuration: in databases created with 4D v11 SQL, these commands will be executed on the server. In converted databases, they will be executed on the client machine or the server according to the database preferences. Pass 1 or 2 in *value* to "force" the execution of these commands, respectively, on the client or on the server machine. -**Description**: Returns the version number of the OpenSSL library in use on the machine. (Read only) +Refer to example 2. +**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. -### Cache flush periodicity (95) -**Thread-safe** : Yes +### RDP optimization (133) -**Scope**: 4D local, 4D Server +**Scope:** 4D application. -**Kept between two sessions**: No +**Kept between two sessions:** No. -**Possible values**: longint > 1 (seconds) +**Possible values:** `0`: Disabled (default), `1`: Enabled. -**Description**: Gets or sets the current cache flush periodicity, expressed in seconds. Modifying this value overrides the **Flush Cache every X Seconds** option in the [XML DECODE](xml-decode.md) of the Database settings for the session (it is not stored in the Database settings). +**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). @@ -723,247 +806,240 @@ The sleep timeout is applied after a machine running a 4D remote application has -### Tips enabled (101) -**Scope:** 4D application +### Server base process stack size (53) -**Kept between two sessions:** No +**Scope**: 4D Server -**Possible values:** 0 = tips disabled, 1 = tips enabled (default) +**Kept between two sessions**: No -**Description:** Sets or gets the current display status of the tips for the 4D application. By default, tips are enabled. +**Possible values**: Positive longint. - Note that this parameter sets all 4D tips, i.e. form help messages and Design mode editor's tips. +**Description**: Size of the stack allocated to each preemptive system process on the server, expressed in bytes. The default size is determined by the system. +Preemptive system processes (processes of the 4D client base process type) are loaded to control the main 4D client processes. The size allocated by default to the stack of each preemptive process allows a good ease of execution but may prove to be consequential when very large numbers of processes (several hundred) are created. +For optimization purposes, this size can be reduced considerably if the operations carried out by the database allow for it (for example if the database does not carry out sorts of large quantities of records). Values of 512 or even 256 KB are possible. Be careful, under-sizing the stack is critical and can be harmful to the operation of 4D Server. Setting this parameter should be done with caution and must take the database conditions of use into account (number of records, type of operations, etc.). -### Tips delay (102) +In order to be taken into account, this parameter must be executed on the server machine (for example in the *On Server Startup Database Method*). -**Scope:** 4D application -**Kept between two sessions:** No -**Possible values:** longint >= 0 (ticks) -**Description:** Delay before tips are displayed once the mouse cursor has stopped in objects with attached help messages. Value is expressed in ticks (1/60th of a second). Default value is 45 ticks (0.75 seconds). +### SMTP Log (110) +**Thread-safe** : Yes +**Scope**: 4D local, 4D Server* -### Tips duration (103) +**Kept between two sessions**: No -**Scope:** 4D application +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (SMTP exchanges not recorded). -**Kept between two sessions:** No +**Description**: Starts or stops the recording of exchanges between 4D and the SMTP server, when a *transporter* object is processed through *transporter.send( )* or *SMTP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DSMTPLog\_X.txt, where *X* is the sequential number of the log. Once the file 4DSMTPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -**Possible values:** longint >= 60 (ticks) +For more information on the 4DSMTPLog\_X.txt files, please refer to the *Description of log files* section. -**Description:** Maximum display duration for a tip. Value is expressed in ticks (1/60th of a second). Default value is 720 ticks (12 seconds). -### Min TLS version (105) +### Spellchecker (81) -**Scope**: 4D Server, 4D Web Server and 4D SQL Server +**Scope**: 4D application -**Kept between two sessions**: No + **Kept between two sessions**: No -**Description**: Used to specify the minimum Transport Layer Security (TLS) version, which provides data encryption and authentication between applications and servers. Connection attempts from clients supporting only versions below the minimum will be rejected. The setting is applied globally to the network layer. Once modified, the server must be restarted to use the new value. + **Possible values**: 0 (default) = native macOS spellchecker (Hunspell disabled), 1 = Hunspell spellcheck enabled. -**Default value**: TLSv1\_3 +**Description**: Enables the Hunspell spellcheck under macOS. By default, the native spellchecker is enabled on this platform. You may prefer to use the Hunspell spellcheck, for example, in order to unify the interface for your cross-platform applications (under Windows, only the Hunspell spellcheck is available). For more information, refer to *Spell checking*. -**Possible values**: TLSv1\_2 (TLS 1.2, introduced in 2008) TLSv1\_3 (TLS 1.3, introduced in 2018) **NOTES**: -- The 4D Internet Commands plugin uses a different network layer, therefore this selector will have no impact on its TLS version. -- This setting is ignored for your client server connections if your 4D Server uses the legacy network layer. +### SQL Autocommit (43) +**Scope**:Database -### User param value (108) +**Kept between two** **sessions**: Yes -**Scope:** 4D local, 4D Server +**Possible values**: 0 (deactivation) or 1 (activation) -**Kept between two sessions:** No +**Description**: Activation or deactivation of the SQL auto-commit mode. By default, the value is 0 (deactivated mode) -**Possible values**: Any custom string + The auto-commit mode is used to strengthen the referential integrity of the database. When this mode is active, all *SELECT*, *INSERT*, *UPDATE* and *DELETE* (SIUD) queries are automatically included in ad hoc transactions when they are not already executed within a transaction. This mode can also be set in the Preferences of the database. -**Description:** Custom string passed from one session to the next one when the 4D application is restarted. This selector is useful in the context of automated unit tests that require applications to restart with different parameters. -When used with [SET DATABASE PARAMETER](set-database-parameter.md), defines a new value that will be available within the next opened database after 4D is restarted manually or using the [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), or [RESTART 4D](restart-4d.md) commands. When used with [Get database parameter](get-database-parameter.md), gets the currently available user parameter value, defined using a command line (see *Command Line Interface*), the .4DLink file (see *Using a 4DLink file*), or a call to [SET DATABASE PARAMETER](set-database-parameter.md) during the previous session. (\*) If [SET DATABASE PARAMETER](set-database-parameter.md) sets a User param value before a call to [OPEN DATABASE](open-database.md) with a .4DLink file that also contains a user-param xml attribute, 4D takes into account only the parameter provided by [SET DATABASE PARAMETER](set-database-parameter.md). +### SQL Engine case sensitivity (44) -### Times inside objects (109) +**Scope**: Database -Scope: 4D local, 4D Server (all processes) +**Kept between two sessions**: Yes - Kept between two **sessions**: No +**Possible values**: 0 (case not taken into account) or 1 (case-sensitive) - **Possible values**: Times in seconds (0) (default), Times in milliseconds (1) +**Description**: Activation or deactivation of case-sensitivity for string comparisons carried out by the SQL engine. -**Description**: Defines the way time values are converted and stored within object properties and collection elements, as well as how they will be imported/exported in JSON and in Web areas. By default, starting with 4D v17, times are converted and stored as number of seconds in objects. +By default, the value is 1 (case-sensitive): the SQL engine differentiates between upper and lower case and between accented characters when comparing strings (sorts and queries). For example “ABC”= “ABC” but “ABC” # “Abc” and "abc" # "âbc." In certain cases, for example so as to align the functioning of the SQL engine with that of the 4D engine, you may wish for string comparisons to not be case-sensitive (“ABC”=“Abc"="âbc"). -In previous releases, time values were converted and stored as number of milliseconds in those contexts. Using this selector can help you migrating your applications by reverting to previous settings if necessary. +**Warning:* Since this option modifies the database structure file and all processes, for performance reasons it is highly recommended to set it at database startup only.* This option can also be set in the Database settings. -**Note**: ORDA methods and SQL engine ignore this setting, they always assume time values to be numbers of seconds. -### SMTP Log (110) +### SQL Server Port ID (88) -**Thread-safe** : Yes +**Scope**: 4D local, 4D Server. -**Scope**: 4D local, 4D Server* +**Kept between two sessions**: Yes -* **Kept between two sessions**: No +**Description**: Gets or sets the TCP port number used by the integrated SQL server of 4D in local mode or 4D Server. By default, the value is 19812\. When this selector is set, the database setting is updated. You can also set the TCP port number on the "SQL" page of the Database Settings dialog box. - **Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (SMTP exchanges not recorded). +**Possible values**: 0 to 65535. -**Description**: Starts or stops the recording of exchanges between 4D and the SMTP server, when a *transporter* object is processed through *transporter.send( )* or *SMTP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DSMTPLog\_X.txt, where *X* is the sequential number of the log. Once the file 4DSMTPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. +**Default value**: 19812 -For more information on the 4DSMTPLog\_X.txt files, please refer to the *Description of log files* section. -### Current process debug log recording (111) +### SSL cipher list (64) -**Scope:** 4D application +**Scope**: 4D application -**Kept between two sessions:** No +**Kept between two sessions**: No -**Description**: Starts or stops the sequential recording of programming events **for the current process** in a separated log file. This log is similar to the Debug log recording (selector 34) but focuses on the current process only. The log file name includes the letter "p" and the process number: 4DDebugLog\[\_p*N*_*n*].txt, where N is the process unique ID. +**Possible values**: Sequence of strings separated by colons. -For more information about this format and on the use of the *4DDebugLog* file, please refer to *Description of log files* in the Design Reference. +**Description:** Cipher list used by 4D for the secure protocol. This list modifies the priority of ciphering algorithms implemented by 4D. For example, you can pass the following string in the *value* parameter: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". For a complete description of the syntax for the ciphers list, refer to the *ciphers page of the OpenSSL site*. -**Notes:** This selector is provided solely for the purpose of debugging and should be used with care. In particular, it must not put into production since it can have an impact on the application performance. You can use both Debug log recording and Current process debug log recording selectors simultaneously, in which case the current process actions will not be logged in the main log file. +This setting applies to the main Web server (excluding Web server objects), the SQL server, client/server connections, as well as the HTTP client and all the 4D commands that make use of the secure protocol. It is temporary (it is not maintained between sessions). +When the cipher list has been modified, you will need to restart the server concerned in order for the new settings to be taken into account. +To reset the cipher list to its default value (stored permanently in the SLI file), call the [SET DATABASE PARAMETER](set-database-parameter.md) command and pass an empty string ("") in the *value* parameter. -### Is current database a project (112) +**Note:** With the [Get database parameter](get-database-parameter.md) command, the cipher list is returned in the optional *stringValue* parameter and the return parameter is always 0. -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Scope**: 4D application -**Description**: Returns 1 if the current database architecture is a project, and 0 otherwise. For more information, please refer to *Project vs binary database* section. +### Table sequence number (31) +**Scope**:4D application -### Is host database a project (113) + **Kept between two sessions**: Yes -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. + **Possible values**: Any longint value. -**Scope**: 4D application +**Description**: This selector is used to modify or get the current unique number for records of the table passed as parameter. "Current number" means "last number used": if you modify this value using [SET DATABASE PARAMETER](set-database-parameter.md), the next record will be created with a number that consists of the value passed + 1\. This new number is the one returned by the [Sequence number](sequence-number.md) command as well in any field of the table to which the "Autoincrement" property has been assigned in the Structure editor or via SQL. -**Description**: Returns 1 if the host database architecture is a project, and 0 otherwise. For more information, please refer to *Project vs binary database* section. +By default, this unique number is set by 4D and corresponds to the order of record creation. For additional information, refer to the documentation of the [Sequence number](sequence-number.md) command. -### Libldap version (114) -**Scope**: Current 4D machine +### TCPUDP log recording (131) -**Kept between two sessions**: n/a +**Scope:** 4D application. -**Description**: Returns the version number of the LDAP library in the 4D application on the current machine. (Read only) +**Kept between two sessions:** No. +**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -### Libsasl version (115) -**Scope**: Current 4D machine -**Kept between two sessions**: n/a -**Description**: Returns the version number of the SASL library in the 4D application on the current machine. (Read only) +### Times inside objects (109) +**Scope:** 4D local, 4D Server (all processes) +**Kept between two sessions**: No -### POP3 Log (116) +**Possible values**: Times in seconds (0) (default), Times in milliseconds (1) -**Thread-safe** : Yes +**Description**: Defines the way time values are converted and stored within object properties and collection elements, as well as how they will be imported/exported in JSON and in Web areas. By default, starting with 4D v17, times are converted and stored as number of seconds in objects. -**Scope:** 4D local, 4D Server +In previous releases, time values were converted and stored as number of milliseconds in those contexts. Using this selector can help you migrating your applications by reverting to previous settings if necessary. -**Kept between two sessions:** No +**Note**: ORDA methods and SQL engine ignore this setting, they always assume time values to be numbers of seconds. -**Possible values:** 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (POP3 exchanges not recorded). -**Description**: Starts or stops the recording of exchanges between 4D and the POP3 server, when a transporter object is processed through *POP3\_transporter.getMail( )* or *POP3\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DPOP3Log\_X.txt, where X is the sequential number of the log. Once the file 4DPOP3Log has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -For more information on the 4DPOP3Log\_X.txt files, please refer to the *Description of log files* section. +### Tips delay (102) +**Scope:** 4D application -### Is host database writable (117) +**Kept between two sessions:** No -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. +**Possible values:** longint >= 0 (ticks) -**Scope**: 4D application +**Description:** Delay before tips are displayed once the mouse cursor has stopped in objects with attached help messages. Value is expressed in ticks (1/60th of a second). Default value is 45 ticks (0.75 seconds). -**Description**: Returns 1 if the host project file/structure file is writable, and 0 if it is read-only. -### IMAP Log (119) +### Tips duration (103) -**Thread-safe** : Yes +**Scope:** 4D application -**Scope**: 4D local, 4D Server +**Kept between two sessions:** No -**Kept between two sessions**: No +**Possible values:** longint >= 60 (ticks) -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (IMAP exchanges not recorded). +**Description:** Maximum display duration for a tip. Value is expressed in ticks (1/60th of a second). Default value is 720 ticks (12 seconds). -**Description**: Starts or stops the recording of exchanges between 4D and the IMAP server, when a transporter object is processed through *IMAP\_transporter.getMail( )* or *IMAP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DIMAPLog\_X.txt, where X is the sequential number of the log. Once the file 4DIMAPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -For more information on the 4DIMAPLog\_X.txt files, please refer to the *Description of log files* section. +### Tips enabled (101) -### Libzip version (120) +**Scope:** 4D application -**Scope:** Current 4D machine +**Kept between two sessions:** No -**Kept between two sessions:** n/a +**Possible values:** 0 = tips disabled, 1 = tips enabled (default) -**Description:** Returns the version number of the libzip library in the 4D application on the current machine. (Read only) +**Description:** Sets or gets the current display status of the tips for the 4D application. By default, tips are enabled. + Note that this parameter sets all 4D tips, i.e. form help messages and Design mode editor's tips. -### Pause logging (121) -**Thread-safe** : Yes -**Scope**: 4D application +### Use legacy network layer (87) -**Kept between two** **sessions**: No +**Scope**: 4D in local mode, 4D Server -**Possible values**: 0 (resume logs), 1 (pause logs) +**Kept between two sessions**: Yes -**Description:** This selector allows to suspend/resume all logging operations started on the application (except ORDA logs). This feature can be useful to temporarily lighten the 4D application tasks or schedule logging operations. +**Description:** Sets or gets the current status of the legacy network layer for client/server connections. The legacy network layer is obsolete beginning with 4D v14 R5 and should be replaced progressively in your applications with the *ServerNet* network layer. *ServerNet* will be required in upcoming 4D releases in order to benefit from future network evolutions. For compatibility reasons, the legacy network layer is still supported to allow a smooth transition for existing applications; (it is used by default in applications converted from a release prior to v14 R5). Pass 1 in this parameter to use the legacy network layer (and disable *ServerNet*) for your client/server connections, and pass 0 to disable the legacy network (and use the *ServerNet*). +This property can also be set by means of the "Use legacy network layer" option found on the *Compatibility page* of the Database Settings (see *Network and Client-Server options*). In this section, you will also find a discussion about migration strategy. We recommend that you activate the *ServerNet* as soon as possible. You will need to restart the application in order for this parameter to be taken into account. +**Possible values:** 0 or 1 (0 = do not use legacy layer, 1 = use legacy layer) -### TCPUDP log recording (131) +**Default value:** 0 in databases created with 4D v14 R5 or higher, 1 in databases converted from 4D v14 R4 or earlier. -**Possible values:** - `0`: Logging is disabled. - `1`: Logging is enabled. -**Description:** Retrieves the status of the `4DTCPUDPLog.txt` file for logging TCP events and returns whether the `4DTCPUDPLog.txt` log file is currently active or not. +### User param value (108) +**Scope:** 4D local, 4D Server +**Kept between two sessions:** No -### RDP optimization**Scope:** 4D application. +**Possible values**: Any custom string -**Kept between two sessions:** No. +**Description:** Custom string passed from one session to the next one when the 4D application is restarted. This selector is useful in the context of automated unit tests that require applications to restart with different parameters. -**Possible values:** `0`: Disabled (default), `1`: Enabled. +When used with [SET DATABASE PARAMETER](set-database-parameter.md), defines a new value that will be available within the next opened database after 4D is restarted manually or using the [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), or [RESTART 4D](restart-4d.md) commands. When used with [Get database parameter](get-database-parameter.md), gets the currently available user parameter value, defined using a command line (see *Command Line Interface*), the .4DLink file (see *Using a 4DLink file*), or a call to [SET DATABASE PARAMETER](set-database-parameter.md) during the previous session. - **Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). +(\*) If [SET DATABASE PARAMETER](set-database-parameter.md) sets a User param value before a call to [OPEN DATABASE](open-database.md) with a .4DLink file that also contains a user-param xml attribute, 4D takes into account only the parameter provided by [SET DATABASE PARAMETER](set-database-parameter.md). diff --git a/versioned_docs/version-21/commands-legacy/set-database-parameter.md b/versioned_docs/version-21/commands-legacy/set-database-parameter.md index 61a24845e90b76..9cd57b0a22d0ab 100644 --- a/versioned_docs/version-21/commands-legacy/set-database-parameter.md +++ b/versioned_docs/version-21/commands-legacy/set-database-parameter.md @@ -21,6 +21,36 @@ displayed_sidebar: docs The *selector* designates the database parameter to modify. 4D offers predefined constants, which are located in the “*Database Parameters*” theme. The following table lists each constant, describes its scope and indicates whether any changes made are kept between two sessions: +### 4D Remote mode timeout (14) + +**Scope** (legacy network layer only): 4D application if *value* positive + +**Kept between two sessions**: Yes if *value* positive + +**Description**: To be used in very specific cases. Value of the timeout granted by the remote 4D machine to the 4D Server machine. The default timeout value used by 4D in remote mode is set on the "Client-Server/Network options" page of the Database settings dialog box on the remote machine. + +The 4D Remote mode timeout selector is only taken into account if you are using the legacy network. It is ignored when the *ServerNet* layer is activated: this setting is entirely managed by the 4D Server timeout (13) selector. + + + + +### 4D Server log recording (28) + +**Thread-safe** : Yes + +**Scope**: 4D Server, 4D remote* + +* **Kept between two sessions**: No + +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). + +**Description**: Starts or stops the recording of standard requests received by 4D Server (excluding Web requests). By default, the value is 0 (requests not recorded). + +4D Server lets you record each request received by the server machine in a log file. When this mechanism is enabled, two files are created in the Logs folder of the database. They are named *4DRequestsLogServer\_X*.txt and *4DRequestsLog\_ProcessInfoServer\_X*.txt on the server, and *4DRequestsLog\_X*.txt and *4DRequestsLog\_ProcessInfo\_X*.txt on the remote, where X is the sequential number of the log. Once a file has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. + + + + ### 4D Server timeout (13) **Scope**: 4D application if *value* positive @@ -39,41 +69,63 @@ If you pass a **positive** value in the *value*parameter, you set a global and p -### 4D Remote mode timeout (14) -**Scope** (legacy network layer only): 4D application if *value* positive +### Auto synchro resources folder (48) -**Kept between two sessions**: Yes if *value* positive +**Scope**:4D remote machine -**Description**: To be used in very specific cases. Value of the timeout granted by the remote 4D machine to the 4D Server machine. The default timeout value used by 4D in remote mode is set on the "Client-Server/Network options" page of the Database settings dialog box on the remote machine. +**Kept between two** **sessions**: No + +**Possible values**: 0 (no synchronization), 1 (auto synchronization) or 2 (ask). + +**Description**: Dynamic synchronization mode for *Resources* folder of 4D client machine that executed the command with that of the server. + +When the contents of the *Resources* folder on the server has been modified or a user has requested synchronization (for example via the resources explorer or following the execution of the [SET DATABASE LOCALIZATION](set-database-localization.md) command), the server notifies the connected client machines. + +Three synchronization modes are then possible on the client side. The Auto Synchro Resources Folder selector is used to specify the mode to be used by the client machine for the current session: + +- 0 (default value): no dynamic synchronization (synchronization request is ignored) +- 1: automatic dynamic synchronization +- 2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. -The 4D Remote mode timeout selector is only taken into account if you are using the legacy network. It is ignored when the *ServerNet* layer is activated: this setting is entirely managed by the 4D Server timeout (13) selector. -### Port ID (15) + +### Cache flush periodicity (95) + +**Thread-safe** : Yes + **Scope**: 4D local, 4D Server **Kept between two sessions**: No -**Description**: TCP port ID used by the 4D Web server with 4D in local mode and 4D Server. The default value, which can be set on the "Web/Configuration" page of the Preferences dialog box, is 80\. You can use the constants of the *TCP Port Numbers* theme for the *value* parameter. +**Possible values**: longint > 1 (seconds) -The Port ID selector is useful for 4D Web Servers compiled and merged with 4D Desktop (in which there is no access to the Design mode). For more information about the TCP port ID, refer to the *Web Server Settings* section. +**Description**: Gets or sets the current cache flush periodicity, expressed in seconds. Modifying this value overrides the **Flush Cache every X Seconds** option in the [XML DECODE](xml-decode.md) of the Database settings for the session (it is not stored in the Database settings). -### Character set (17) -**Scope**: 4D local, 4D Server +### Cache unload minimum size (66) -**Kept between two sessions**: Yes +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Kept between two sessions**: No +**Possible values**: Positive longint > 1. + +**Description**: Minimum size of memory to release from the database cache when the engine needs to make space in order to allocate an object to it (value in bytes). + +The purpose of this selector is to reduce the number of times that data is released from the cache in order to obtain better performance. You can vary this setting according to the size of the cache and that of the blocks of data being handled in your database. + +By default, if this selector is not used, 4D unloads at least 10% of the cache when space is needed. -### Max concurrent Web processes (18) + + +### Character set (17) **Scope**: 4D local, 4D Server @@ -83,15 +135,19 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De -### Client port ID (22) -**Scope**: All 4D remote machines +### Circular log limitation (90) - **Kept between two** **sessions**: Yes +**Thread-safe** : Yes - **Possible values**: See selector 15 +**Scope**: 4D local, 4D Server. + +**Kept between two sessions**: No + +**Possible values**: Any integer value, 0 = keep all logs + +**Description**: Maximum number of files to keep in rotation for each type of log. By default, the 50 most recent files are kept. If you pass a value *X*, only the *X* most recent files are kept, with the oldest being erased automatically when a new one is created. This setting applies to all log files, i.e. request logs (selectors 28 and 45), debug log (selector 34), events log (selector 79), Web logs (selectors 29 and 84 of the [WEB SET OPTION](web-set-option.md) command), etc. -**Description**: Used to specify this parameter for all the remote 4D machines used as Web servers. The values defined using these selectors are applied to all the remote machines used as Web servers. If you want to define values only for certain remote machines, use the Preferences dialog box of 4D in remote mode. @@ -107,6 +163,41 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De + +### Client HTTPS port ID (40) + +**Scope**:All 4D remote machines + +**Kept between two** **sessions**: Yes + +**Possible values**: 0 to 65535 + +**Description**: TCP port number used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). + +This selector can be used to modify by programming the TCP port used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). + +This selector operates exactly the same way as selector 39; however, it applies to all the 4D remote machines used as Web servers. If you only want to modify the value of certain specific client machines, use the Preferences dialog box of the remote 4D. + + + + +### Client log recording (45) + +**Scope**: Remote 4D machine + +**Kept between two sessions**: No + +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, attached to file name). + +**Description**: Starts or stops recording of standard requests carried out by the 4D client machine that executed the command (excluding Web requests). By default, the value is 0 (no recording of requests). + +4D lets you record the log of requests carried out by the client machine. When this mechanism is activated, two files are created on the client machine, in the Logs subfolder of the local folder of the database. They are named 4DRequestsLog\_X.txt and 4DRequestsLog\_ProcessInfo\_X.txt, where X is the sequential number of the log. Once the file 4DRequestsLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file with the same name already exists, it is directly replaced. You can set the starting number for the sequence using the value parameter. + +These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. + + + + ### Client max concurrent Web proc (25) **Scope**: All 4D remote machines @@ -119,29 +210,36 @@ The Port ID selector is useful for 4D Web Servers compiled and merged with 4D De -### Maximum Web requests size (27) -**Scope**: 4D local, 4D Server +### Client port ID (22) -**Kept between two sessions**: Yes +**Scope**: All 4D remote machines -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. + **Kept between two** **sessions**: Yes + **Possible values**: See selector 15 +**Description**: Used to specify this parameter for all the remote 4D machines used as Web servers. The values defined using these selectors are applied to all the remote machines used as Web servers. If you want to define values only for certain remote machines, use the Preferences dialog box of 4D in remote mode. -### 4D Server log recording (28) -**Thread-safe** : Yes -**Scope**: 4D Server, 4D remote* -* **Kept between two sessions**: No +### Client Server port ID (35) -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). +**Scope**:Database -**Description**: Starts or stops the recording of standard requests received by 4D Server (excluding Web requests). By default, the value is 0 (requests not recorded). +**Kept between two** **sessions**: Yes + +**Possible values**: 0 to 65535 + +**Description**: TCP port number where the 4D Server publishes the database (bound for 4D remote machines). By default, the value is 19813\. + +Customizing this value means that several 4D client-server applications can be used on the same machine with the TCP protocol; in this case, you must indicate a different port number for each application. + +The value is stored in the database structure file. It can be set with 4D in local mode but is only taken into account in client-server configuration. + +When you modify this value, it is necessary to restart the server machine in order for the new value to be taken into account. -4D Server lets you record each request received by the server machine in a log file. When this mechanism is enabled, two files are created in the Logs folder of the database. They are named *4DRequestsLogServer\_X*.txt and *4DRequestsLog\_ProcessInfoServer\_X*.txt on the server, and *4DRequestsLog\_X*.txt and *4DRequestsLog\_ProcessInfo\_X*.txt on the remote, where X is the sequential number of the log. Once a file has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. @@ -159,17 +257,36 @@ The operation of this selector is identical to that of selector 29; however, it -### Table sequence number (31) -**Scope**:4D application +### Current process debug log recording (111) - **Kept between two sessions**: Yes +**Scope:** 4D application - **Possible values**: Any longint value. +**Kept between two sessions:** No -**Description**: This selector is used to modify or get the current unique number for records of the table passed as parameter. "Current number" means "last number used": if you modify this value using [SET DATABASE PARAMETER](set-database-parameter.md), the next record will be created with a number that consists of the value passed + 1\. This new number is the one returned by the [Sequence number](sequence-number.md) command as well in any field of the table to which the "Autoincrement" property has been assigned in the Structure editor or via SQL. +**Description**: Starts or stops the sequential recording of programming events **for the current process** in a separated log file. This log is similar to the Debug log recording (selector 34) but focuses on the current process only. The log file name includes the letter "p" and the process number: 4DDebugLog\[\_p*N*_*n*].txt, where N is the process unique ID. + +For more information about this format and on the use of the *4DDebugLog* file, please refer to *Description of log files* in the Design Reference. + +**Notes:** This selector is provided solely for the purpose of debugging and should be used with care. In particular, it must not put into production since it can have an impact on the application performance. You can use both Debug log recording and Current process debug log recording selectors simultaneously, in which case the current process actions will not be logged in the main log file. + + + + +### Dates inside objects (85) + +**Scope:** Current process + +**Kept between two sessions**: No + + **Possible values**: String type without time zone (0), String type with time zone (1), Date type (2) (default) + +**Description**: Defines the way dates are stored within objects, as well as how they will be imported/exported in JSON. + +When the selector value is Date type (default value for databases created with 4D v17 and higher), 4D dates are stored with the date type within objects, with respect to the local date settings. When converted to JSON format, date attributes will be converted to strings which do not include a time. (**Note:** this setting can be set by means of the "Use date type instead of ISO date format in objects" option found on the *Compatibility page* of the Database Settings). + +Passing String type with time zone in this selector will convert 4D dates into ISO strings and take the local time zone into account. For example, converting the date 23/08/2013 gives you "2013-08-22T22:00:000Z" in JSON format when the operation is performed in France during Daylight Savings Time (GMT+2). This principle conforms to the standard operation of JavaScript. This can be a source of errors when you want to send JSON date values to someone in a different time zone. For example, when you export a table using [Selection to JSON](selection-to-json.md) in France that is meant to be reimported in the US using [JSON TO SELECTION](json-to-selection.md). Since dates are re-interpreted in each time zone, the values stored in the database will be different. In this case, you can modify the conversion mode for dates so that they do not take the time zone into account by passing String type without time zone in this selector. Converting the date 23/08/2013 will then give you "2013-08-23T00:00:00Z" in all cases. -By default, this unique number is set by 4D and corresponds to the order of record creation. For additional information, refer to the documentation of the [Sequence number](sequence-number.md) command. @@ -184,37 +301,29 @@ By default, this unique number is set by 4D and corresponds to the order of reco **Description**: Starts or stops the sequential recording of events occurring at the 4D programming level in the *4DDebugLog\[\_n\].txt* file or *4DDebugLogServer\[\_n\].txt* (where \_n is the segment number of the file and *Server* is added to the file name when generated on the server). Two modes are available: - Standard mode provides a basic view of events and the file is automatically placed in the Logs subfolder of the database, next to the structure file. Execution times are expressed in milliseconds with the "< ms" value displayed when an operation lasts less than one millisecond. - - Tabbed mode provides additional information and uses a more compact, tabbed format in the file. Execution times are expressed in microseconds. **Possible values**: Longint containing a bit field: value = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (value 1) requests to enable the file (note that any other non-null value also enables it as well) - - Bit 1 (value 2) requests call parameters to commands and (interpreted mode only) methods - - Bit 2 (value 4) enables tabbed format. - - Bit 3 (value 8) disables immediate writing of each operation on disk (enabled by default). Immediate writing is slower but more effective, for example for investigating causes of a crash. If you disable this mode, the file contents are generated more quickly. - - Bit 4 (value 16) disables recording of plug-in calls (enabled by default). - - Bit 5 (value 32) disables member function logging. Examples: +```4d SET DATABASE PARAMETER (34;1) // enables standard mode without parameters, with runtimes - SET DATABASE PARAMETER (34;2) // enables standard mode with parameters and runtimes - SET DATABASE PARAMETER (34;2+4) // enables tabbed mode with parameters and runtimes - SET DATABASE PARAMETER (34;0) // disables file +``` For any type of interpreted or compiled 4D application (4D all modes, 4D Server, 4D Volume Desktop), you can avoid having a file record too much information by: - restricting the 4D commands that are examined by using Log command list (selector 80), or - - restricting it to the current process only with Current process debug log recording (selector 111). This will add the letter "p" and the process number to the file name: *4DDebugLog\[\_pn\_n\].txt* or *4DDebugLogServer\[\_pn\_n\].txt* * *For more information about this format and on the use of the *4DDebugLog* file, please refer to the *Description of log files* section.. @@ -227,484 +336,461 @@ For any type of interpreted or compiled 4D application (4D all modes, 4D Server, -### Client Server port ID (35) -**Scope**:Database +### Diagnostic log level (86) -**Kept between two** **sessions**: Yes +**Thread-safe** : Yes -**Possible values**: 0 to 65535 +**Scope:** 4D application -**Description**: TCP port number where the 4D Server publishes the database (bound for 4D remote machines). By default, the value is 19813\. +**Kept between two sessions:** No -Customizing this value means that several 4D client-server applications can be used on the same machine with the TCP protocol; in this case, you must indicate a different port number for each application. +**Description:** Level(s) of messages to be included in the diagnostic log when enabled (see selector Diagnostic log recording). Each level designates a category of diagnostic messages and automatically includes more important categorie(s). For a description of categories, see *Diagnostic log levels* section on *developer.4d.com*. -The value is stored in the database structure file. It can be set with 4D in local mode but is only taken into account in client-server configuration. +**Possible values:** One of the following constants (Log info by default): +- Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) +- Log debug: activates ERROR, WARN, INFO, DEBUG +- Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN +- Log error: activates ERROR (least detailed level) -When you modify this value, it is necessary to restart the server machine in order for the new value to be taken into account. -### HTTPS Port ID (39) +### Diagnostic log recording (79) -**Scope**:4D local, 4D Server +**Thread-safe** : Yes -**Kept between two sessions**: Yes +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Kept between two sessions**: No +Possible values: 0 or 1 (0 = do not record, 1 = record) +**Description**: Starts or stops recording of the 4D diagnostic file. By default, the value is 0 (do not record). -### Client HTTPS port ID (40) +4D can continuously record a set of events related to the internal application operation into a diagnostic file. Information contained in this file is intended for the development of 4D applications and can be analyzed with the help of the 4D tech support (for more information, please refer to the *Description of log files* section on *developer.4d.com*). When you pass 1 in this selector, a diagnostic file is automatically created (or opened) in the database **Logs** folder. The file is named *4DDiagnosticLog\_X*.txt (or *4DDiagnosticLogServer\_X*.txt if generated on the server). Once this file reaches a size of 10 MB, it is closed and a new file is generated, with an incremented sequence number X. -**Scope**:All 4D remote machines +Note that you can include custom information in this file using the [LOG EVENT](log-event.md) command. -**Kept between two** **sessions**: Yes -**Possible values**: 0 to 65535 -**Description**: TCP port number used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). -This selector can be used to modify by programming the TCP port used by the Web servers of the client machines for secure connections via SSL (HTTPS protocol). By default, the value is 443 (standard value). +### Direct2D get active status (74) -This selector operates exactly the same way as selector 39; however, it applies to all the 4D remote machines used as Web servers. If you only want to modify the value of certain specific client machines, use the Preferences dialog box of the remote 4D. +**Note**: You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. +**Description**: Returns active implementation of Direct2D under Windows. +**Possible values**: 0, 1, 2, 3, 4 or 5 (see values of selector 69). The value returned depends on the availability of Direct2D, the hardware and the quality of Direct2D support by the operating system. -### SQL Autocommit (43) +For example, if you execute: -**Scope**:Database +```4d + SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) + $mode:=Get database parameter(Direct2D get active status) +``` -**Kept between two** **sessions**: Yes +- On Windows 7 and higher, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 3 (software context). -**Possible values**: 0 (deactivation) or 1 (activation) +- On Windows Vista, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 0 (disabling of Direct2D). -**Description**: Activation or deactivation of the SQL auto-commit mode. By default, the value is 0 (deactivated mode) +- On Windows XP, *$mode* is always set to 0 (not compatible with Direct2D). - The auto-commit mode is used to strengthen the referential integrity of the database. When this mode is active, all *SELECT*, *INSERT*, *UPDATE* and *DELETE* (SIUD) queries are automatically included in ad hoc transactions when they are not already executed within a transaction. This mode can also be set in the Preferences of the database. -### SQL Engine case sensitivity (44) +### Direct2D status (69) -**Scope**: Database +**Scope**: 4D application -**Kept between two sessions**: Yes +**Kept between two sessions**: No -**Possible values**: 0 (case not taken into account) or 1 (case-sensitive) +**Description**: Activation mode of Direct2D under Windows. -**Description**: Activation or deactivation of case-sensitivity for string comparisons carried out by the SQL engine. +**Possible values**: One of the following constants (mode 3 by default): -By default, the value is 1 (case-sensitive): the SQL engine differentiates between upper and lower case and between accented characters when comparing strings (sorts and queries). For example “ABC”= “ABC” but “ABC” # “Abc” and "abc" # "âbc." In certain cases, for example so as to align the functioning of the SQL engine with that of the 4D engine, you may wish for string comparisons to not be case-sensitive (“ABC”=“Abc"="âbc"). +- Direct2D Disabled (0): Direct2D mode is not enabled and the database functions in the previous mode (GDI/GDIPlus). +- Direct2D Hardware (1): Use Direct2D as graphics hardware context for entire 4D application. If this context is not available, use Direct2D graphics software context. +- Direct2D Software (3) (Default mode): Beginning with Windows 7, use Direct2D graphics software context for entire 4D application. -**Warning:* Since this option modifies the database structure file and all processes, for performance reasons it is highly recommended to set it at database startup only.* This option can also be set in the Database settings. +**Warning:* This selector is provided for debugging purposes only. Since several 4D features rely on Direct2D, it must not be disabled in deployed applications. Only the default mode (Direct2D Software) is approved for deployed applications.* -### Client log recording (45) -**Scope**: Remote 4D machine +### HTTP compression level (50) -**Kept between two sessions**: No +**Scope**:4D application -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, attached to file name). +**Kept between two sessions**: No -**Description**: Starts or stops recording of standard requests carried out by the 4D client machine that executed the command (excluding Web requests). By default, the value is 0 (no recording of requests). +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -4D lets you record the log of requests carried out by the client machine. When this mechanism is activated, two files are created on the client machine, in the Logs subfolder of the local folder of the database. They are named 4DRequestsLog\_X.txt and 4DRequestsLog\_ProcessInfo\_X.txt, where X is the sequential number of the log. Once the file 4DRequestsLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file with the same name already exists, it is directly replaced. You can set the starting number for the sequence using the value parameter. -These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. +### HTTP compression threshold (51) -### Query by formula on server (46) +**Scope**:4D application -**Scope**: Current table and process +**Kept between two** **sessions**: No -**Kept between two sessions**: No +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) -**Description**: Execution location of [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands for the *table* passed in the parameter. -When using a database in client-server mode, the query "by formula" commands can be executed either on the server or on the client machine: -In databases created with 4D v11 SQL, these commands are executed on the server. In converted databases, these commands are executed on the client machine, as in previous versions of 4D.In converted databases, a specific preference (Application/Compatibility page) can be used to globally modify the execution location of these commands.This difference in execution location influences not only application performance (execution on the server is usually faster) but also programming. In fact, the value of the components of the formula (in particular variables called via a method) differ according to the execution context. You can use this selector to punctually adapt the operation of your application. +### HTTPS Port ID (39) -If you pass 0 in the *value* l’parameter, the execution location of query "by formula" commands will depend on the database configuration: in databases created with 4D v11 SQL, these commands will be executed on the server. In converted databases, they will be executed on the client machine or the server according to the database preferences. Pass 1 or 2 in *value* to "force" the execution of these commands, respectively, on the client or on the server machine. +**Scope**:4D local, 4D Server -Refer to example 2. +**Kept between two sessions**: Yes -**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -### Order by formula on server (47) -**Scope**:Current table and process +### Idle connections timeout (54) -**Kept between two** **sessions**: No +**Scope**:4D application unless value is negative -**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) +**Kept between two sessions**: No -**Description** : Execution location of [ORDER BY FORMULA](order-by-formula.md) command for the table passed in the parameter. +**Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -When using a database in client-server mode, this command can be executed either on the server or on the client machine. This selector can be used to specify the execution location of this command (server or client). This mode can also be set in the database preferences. For more information, please refer to the description of selector 46, Query By Formula On Server. +**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. -**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. +On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. +If you pass a positive value in *value*, it applies to all new connections in all the processes. If you pass a negative value, it applies to connections that are open in the current process. If you pass 0, idle connections are not subjected to a timeout. +This parameter must be set on the client side. Usually, you do not need to change this value. -### Auto synchro resources folder (48) -**Scope**:4D remote machine -**Kept between two** **sessions**: No -**Possible values**: 0 (no synchronization), 1 (auto synchronization) or 2 (ask). +### IMAP Log (119) -**Description**: Dynamic synchronization mode for *Resources* folder of 4D client machine that executed the command with that of the server. +**Thread-safe** : Yes -When the contents of the *Resources* folder on the server has been modified or a user has requested synchronization (for example via the resources explorer or following the execution of the [SET DATABASE LOCALIZATION](set-database-localization.md) command), the server notifies the connected client machines. +**Scope**: 4D local, 4D Server -Three synchronization modes are then possible on the client side. The Auto Synchro Resources Folder selector is used to specify the mode to be used by the client machine for the current session: +**Kept between two sessions**: No -0 (default value): no dynamic synchronization (synchronization request is ignored) 1: automatic dynamic synchronization2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (IMAP exchanges not recorded). +**Description**: Starts or stops the recording of exchanges between 4D and the IMAP server, when a transporter object is processed through *IMAP\_transporter.getMail( )* or *IMAP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DIMAPLog\_X.txt, where X is the sequential number of the log. Once the file 4DIMAPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. +For more information on the 4DIMAPLog\_X.txt files, please refer to [Description of log files](../Debugging/debugLogFiles.md). -### Query by formula joins (49) -**Scope**:Current process -**Kept between two** **sessions**: No -**Possible values**: 0 (use database configuration), 1 (always use automatic relations) or 2 (use SQL joins if possible). +### Is current database a project (112) -**Description**: Operating mode of the [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands relating to the use of "SQL joins." +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -In databases created starting with version 11.2 of 4D v11 SQL, these commands carry out joins based on the SQL joins model. This mechanism can be used to modify the selection of a table according to a query carried out on another table without these tables being connected by an automatic relation (necessary condition in previous versions of 4D). +**Scope**: 4D application -The QUERY BY FORMULA Joins selector lets you specify the operating mode of the query by formula commands for the current process: +**Description**: Returns 1 if the current database architecture is a project, and 0 otherwise. For more information, please refer to [*Project vs binary database* section on doc.4d.com](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-new-database.300-6750129.en.html#5057971). -0: Uses the current settings of the database (default value). In databases created starting with version 11.2 of 4D v11 SQL, "SQL joins" are always activated for queries by formula. In converted databases, this mechanism is not activated by default for compatibility reasons but can be implemented via a preference.1: Always use automatic relations (= functioning of previous versions of 4D). In this mode, a relation is necessary in order to set the selection of a table according to queries carried out on another table. 4D does not do "SQL joins."2: Use SQL joins if possible (= default operation of databases created in version 11.2 and higher of 4D v11 SQL ). In this mode, 4D establishes "SQL joins" for queries by formula when the formula is suited for it (with two notable exceptions, see the description of the [QUERY BY FORMULA](query-by-formula.md) or [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) command).**Note:** With 4D in remote mode, "SQL joins" can only be used if the formulas are executed on the server (they must have access to the records). To configure where formulas are to be executed, please refer to selectors 46 and 47. -### HTTP compression level (50) +### Is host database a project (113) -**Scope**:4D application +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Kept between two sessions**: No +**Scope**: 4D application -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Description**: Returns 1 if the host database architecture is a project, and 0 otherwise. For more information, please refer to [*Project vs binary database* section on doc.4d.com](https://doc.4d.com/4Dv20/4D/20.2/Creating-a-new-database.300-6750129.en.html#5057971). -### HTTP compression threshold (51) -**Scope**:4D application +### Is host database writable (117) -**Kept between two** **sessions**: No +**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. +**Scope**: 4D application +**Description**: Returns 1 if the host project file/structure file is writable, and 0 if it is read-only. -### Server base process stack size (53) -**Scope**: 4D Server -**Kept between two sessions**: No +### Libldap version (114) -**Possible values**: Positive longint. +**Scope**: Current 4D machine -**Description**: Size of the stack allocated to each preemptive system process on the server, expressed in bytes. The default size is determined by the system. +**Kept between two sessions**: n/a -Preemptive system processes (processes of the 4D client base process type) are loaded to control the main 4D client processes. The size allocated by default to the stack of each preemptive process allows a good ease of execution but may prove to be consequential when very large numbers of processes (several hundred) are created. +**Description**: Returns the version number of the LDAP library in the 4D application on the current machine. (Read only) -For optimization purposes, this size can be reduced considerably if the operations carried out by the database allow for it (for example if the database does not carry out sorts of large quantities of records). Values of 512 or even 256 KB are possible. Be careful, under-sizing the stack is critical and can be harmful to the operation of 4D Server. Setting this parameter should be done with caution and must take the database conditions of use into account (number of records, type of operations, etc.). -In order to be taken into account, this parameter must be executed on the server machine (for example in the *On Server Startup Database Method*). +### Libsasl version (115) -### Idle connections timeout (54) +**Scope**: Current 4D machine -**Scope**:4D application unless value is negative +**Kept between two sessions**: n/a -**Kept between two sessions**: No +**Description**: Returns the version number of the SASL library in the 4D application on the current machine. (Read only) -**Possible values**: Whole value expressing a duration in seconds. The value can be positive (new connections) or negative (existing connections). By default, the value is 20. -**Description**: Maximum period of inactivity for connections to the 4D database engine, the SQL engine and to the 4D application server (*ServerNet* network layer only, ignored in *QUIC*). When an idle connection reaches this limit, it is automatically put on standby, which freezes the client/server session and closes the network socket. In the server administration window, the state of the user process is indicated as "Postponed". This functioning is completely transparent for the user: as soon as there is new activity on the connection which is on standby, the socket is automatically reopened and the client/server session is restored. -On the one hand, this setting lets you save resources on the server: connections on standby close the socket and free up a process on the server. On the other hand, it lets you avoid losing connections due to the closing of idle sockets by the firewall. For this, the timeout value for idle connections must be lower than that of the firewall in this case. -If you pass a positive value in *value*, it applies to all new connections in all the processes. If you pass a negative value, it applies to connections that are open in the current process. If you pass 0, idle connections are not subjected to a timeout. +### Libzip version (120) -This parameter must be set on the client side. Usually, you do not need to change this value. +**Scope:** Current 4D machine +**Kept between two sessions:** n/a +**Description:** Returns the version number of the libzip library in the 4D application on the current machine. (Read only) -### PHP interpreter IP address (55) -**Scope**:4D application -**Kept between two sessions**: No -**Values**: Formatted string of the IPv4 type (for example "127.0.0.1") or IPv6 type (for example "2001:0db8:0000:0000:0000:ff00:0042:8329") +### Log command list (80) -**Description**: IP address used locally by 4D to communicate with the PHP interpreter via FastCGI. By default, the value is "127.0.0.1" (addresses in IPv6 format are supported starting with 4D v16R4). This address must correspond to the machine where 4D is located. This parameter can also be set globally for all the machines via the Database Settings. +**Scope**: 4D application -For more information about the PHP interpreter, please refer to the *Design Reference* manual. +**Kept between two sessions**: No +**Possible values**: String containing a list of 4D command numbers to record (separated by semi-colons) or "all" to record all the commands or "" (empty string) to record none of them or prefixed by "-" to exclude specific commands. +**Description**: List of 4D commands to record in or exclude from the debugging file (see selector 34, Debug Log Recording). By default, all 4D commands are recorded. -### PHP interpreter port (56) +This selector restricts the quantity of information saved in the debugging file by limiting the 4D commands whose execution you want to record or exclude from recording. For example, you can write: -**Scope**:4D application +```4d +//Record only the QUERY and QUERY SELECTION commands +SET DATABASE PARAMETER(Log command list;"277;341") +``` +OR +```4d +//Exclude the SET USER ALIAS and DELAY PROCESS commands from being recorded +SET DATABASE PARAMETER(Log command list;"-1666;-323") +``` -**Kept between two sessions**: No -**Values**: Positive long integer type value. By default, the value is 8002\. -**Description**: Number of the TCP port used by the PHP interpreter of 4D. This parameter can also be modified globally for all the machines via the Database Settings. For more information about the PHP interpreter, please refer to the *Design Reference* manual. +### Max concurrent Web processes (18) +**Scope**: 4D local, 4D Server +**Kept between two sessions**: Yes -### SSL cipher list (64) +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Scope**: 4D application -**Kept between two sessions**: No -**Possible values**: Sequence of strings separated by colons. -**Description:** Cipher list used by 4D for the secure protocol. This list modifies the priority of ciphering algorithms implemented by 4D. For example, you can pass the following string in the *value* parameter: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". For a complete description of the syntax for the ciphers list, refer to the *ciphers page of the OpenSSL* *site*. +### Maximum Web requests size (27) -This setting applies to the main Web server (excluding Web server objects), the SQL server, client/server connections, as well as the HTTP client and all the 4D commands that make use of the secure protocol. It is temporary (it is not maintained between sessions). +**Scope**: 4D local, 4D Server -When the cipher list has been modified, you will need to restart the server concerned in order for the new settings to be taken into account. +**Kept between two sessions**: Yes -To reset the cipher list to its default value (stored permanently in the SLI file), call the [SET DATABASE PARAMETER](set-database-parameter.md) command and pass an empty string ("") in the *value* parameter. +**Description**: *Constant obsolete (kept for compatibility reasons only).* We now recommend using the [WEB SET OPTION](web-set-option.md) and [WEB GET OPTION](web-get-option.md) commands for configuring the HTTP server. -**Note:** With the [Get database parameter](get-database-parameter.md) command, the cipher list is returned in the optional *stringValue* parameter and the return parameter is always 0. -### Cache unload minimum size (66) +### Min TLS version (105) -**Scope**: 4D application +**Scope**: 4D Server, 4D Web Server and 4D SQL Server **Kept between two sessions**: No -**Possible values**: Positive longint > 1. - -**Description**: Minimum size of memory to release from the database cache when the engine needs to make space in order to allocate an object to it (value in bytes). - -The purpose of this selector is to reduce the number of times that data is released from the cache in order to obtain better performance. You can vary this setting according to the size of the cache and that of the blocks of data being handled in your database. - -By default, if this selector is not used, 4D unloads at least 10% of the cache when space is needed. - +**Description**: Used to specify the minimum Transport Layer Security (TLS) version, which provides data encryption and authentication between applications and servers. Connection attempts from clients supporting only versions below the minimum will be rejected. The setting is applied globally to the network layer. Once modified, the server must be restarted to use the new value. +**Default value**: TLSv1\_3 -### Direct2D status (69) +**Possible values**: +- TLSv1\_2 (TLS 1.2, introduced in 2008) +- TLSv1\_3 (TLS 1.3, introduced in 2018) -**Scope**: 4D application +**NOTES**: +- The 4D Internet Commands plugin uses a different network layer, therefore this selector will have no impact on its TLS version. +- This setting is ignored for your client server connections if your 4D Server uses the legacy network layer. -**Kept between two sessions**: No -**Description**: Activation mode of Direct2D under Windows. -**Possible values**: One of the following constants (mode 3 by default): -Direct2D Disabled (0): Direct2D mode is not enabled and the database functions in the previous mode (GDI/GDIPlus). +### Number of formulas in cache (92) -Direct2D Hardware (1): Use Direct2D as graphics hardware context for entire 4D application. If this context is not available, use Direct2D graphics software context. +**Scope**: 4D application -Direct2D Software (3) (Default mode): Beginning with Windows 7, use Direct2D graphics software context for entire 4D application. +**Kept between two sessions**: No -**Warning:* This selector is provided for debugging purposes only. Since several 4D features rely on Direct2D, it must not be disabled in deployed applications. Only the default mode (Direct2D Software) is approved for deployed applications.* +**Possible values**: Positive longints +**Default value**: 0 (no cache) +**Description**: Sets or gets the maximum number of formulas to be kept in the cache of formulas, which is used by the [EXECUTE FORMULA](execute-formula.md) command. This limit is applied to all processes, but each process has its own formula cache. Caching formulas accelerates the [EXECUTE FORMULA](execute-formula.md) command execution in compiled mode since each cached formula is tokenized only once in this case. When you change the cache value, existing contents are reset even if the new size is larger than the previous one. Once the maximum number of formulas in the cache is reached, a new executed formula will erase the oldest one in the cache (FIFO mode). This parameter is only taken into account in compiled databases or compiled components. -### Direct2D get active status (74) -**Note**: You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Description**: Returns active implementation of Direct2D under Windows. -**Possible values**: 0, 1, 2, 3, 4 or 5 (see values of selector 69). The value returned depends on the availability of Direct2D, the hardware and the quality of Direct2D support by the operating system. +### OpenSSL version (94) -For example, if you execute: +**Scope**: all 4D machines* - SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) $mode:=Get database parameter(Direct2D get active status) +**Kept between two sessions**: No -- On Windows 7 and higher, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 3 (software context). +**Description**: Returns the version number of the OpenSSL library in use on the machine. (Read only) -- On Windows Vista, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 0 (disabling of Direct2D). -- On Windows XP, *$mode* is always set to 0 (not compatible with Direct2D). +### Order by formula on server (47) -### Diagnostic log recording (79) +**Scope**:Current table and process -**Thread-safe** : Yes +**Kept between two** **sessions**: No -**Scope**: 4D application +**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) -**Kept between two sessions**: No +**Description** : Execution location of [ORDER BY FORMULA](order-by-formula.md) command for the table passed in the parameter. -Possible values: 0 or 1 (0 = do not record, 1 = record) +When using a database in client-server mode, this command can be executed either on the server or on the client machine. This selector can be used to specify the execution location of this command (server or client). This mode can also be set in the database preferences. For more information, please refer to the description of selector 46, Query By Formula On Server. -**Description**: Starts or stops recording of the 4D diagnostic file. By default, the value is 0 (do not record). +**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. -4D can continuously record a set of events related to the internal application operation into a diagnostic file. Information contained in this file is intended for the development of 4D applications and can be analyzed with the help of the 4D tech support (for more information, please refer to the *Description of log files* section on *developer.4d.com*). When you pass 1 in this selector, a diagnostic file is automatically created (or opened) in the database **Logs** folder. The file is named *4DDiagnosticLog\_X*.txt (or *4DDiagnosticLogServer\_X*.txt if generated on the server). Once this file reaches a size of 10 MB, it is closed and a new file is generated, with an incremented sequence number X. -Note that you can include custom information in this file using the [LOG EVENT](log-event.md) command. +### Pause logging (121) -### Log command list (80) +**Thread-safe** : Yes **Scope**: 4D application -**Kept between two sessions**: No +**Kept between two** **sessions**: No -**Possible values**: String containing a list of 4D command numbers to record (separated by semi-colons) or "all" to record all the commands or "" (empty string) to record none of them or prefixed by "-" to exclude specific commands. +**Possible values**: 0 (resume logs), 1 (pause logs) -**Description**: List of 4D commands to record in or exclude from the debugging file (see selector 34, Debug Log Recording). By default, all 4D commands are recorded. +**Description:** This selector allows to suspend/resume all logging operations started on the application (except ORDA logs). This feature can be useful to temporarily lighten the 4D application tasks or schedule logging operations. -This selector restricts the quantity of information saved in the debugging file by limiting the 4D commands whose execution you want to record or exclude from recording. For example, you can write: - SET DATABASE PARAMETER(Log command list;"277;341") //Record only the QUERY and QUERY SELECTION commands OR SET DATABASE PARAMETER(Log command list;"-1666;-323") //Exclude the SET USER ALIAS and DELAY PROCESS commands from being recorded +### PHP interpreter IP address (55) -### Spellchecker (81) +**Scope**:4D application -**Scope**: 4D application +**Kept between two sessions**: No - **Kept between two sessions**: No +**Values**: Formatted string of the IPv4 type (for example "127.0.0.1") or IPv6 type (for example "2001:0db8:0000:0000:0000:ff00:0042:8329") - **Possible values**: 0 (default) = native macOS spellchecker (Hunspell disabled), 1 = Hunspell spellcheck enabled. +**Description**: IP address used locally by 4D to communicate with the PHP interpreter via FastCGI. By default, the value is "127.0.0.1" (addresses in IPv6 format are supported starting with 4D v16R4). This address must correspond to the machine where 4D is located. This parameter can also be set globally for all the machines via the Database Settings. -**Description**: Enables the Hunspell spellcheck under macOS. By default, the native spellchecker is enabled on this platform. You may prefer to use the Hunspell spellcheck, for example, in order to unify the interface for your cross-platform applications (under Windows, only the Hunspell spellcheck is available). For more information, refer to *Spell checking*. +For more information about the PHP interpreter, please refer to the *Design Reference* manual. -### Dates inside objects (85) -**Scope:** Current process +### PHP interpreter port (56) -**Kept between two sessions**: No +**Scope**:4D application - **Possible values**: String type without time zone (0), String type with time zone (1), Date type (2) (default) +**Kept between two sessions**: No -**Description**: Defines the way dates are stored within objects, as well as how they will be imported/exported in JSON. +**Values**: Positive long integer type value. By default, the value is 8002\. -When the selector value is Date type (default value for databases created with 4D v17 and higher), 4D dates are stored with the date type within objects, with respect to the local date settings. When converted to JSON format, date attributes will be converted to strings which do not include a time. (**Note:** this setting can be set by means of the "Use date type instead of ISO date format in objects" option found on the *Compatibility page* of the Database Settings). +**Description**: Number of the TCP port used by the PHP interpreter of 4D. This parameter can also be modified globally for all the machines via the Database Settings. For more information about the PHP interpreter, please refer to the *Design Reference* manual. -Passing String type with time zone in this selector will convert 4D dates into ISO strings and take the local time zone into account. For example, converting the date 23/08/2013 gives you "2013-08-22T22:00:000Z" in JSON format when the operation is performed in France during Daylight Savings Time (GMT+2). This principle conforms to the standard operation of JavaScript. This can be a source of errors when you want to send JSON date values to someone in a different time zone. For example, when you export a table using [Selection to JSON](selection-to-json.md) in France that is meant to be reimported in the US using [JSON TO SELECTION](json-to-selection.md). Since dates are re-interpreted in each time zone, the values stored in the database will be different. In this case, you can modify the conversion mode for dates so that they do not take the time zone into account by passing String type without time zone in this selector. Converting the date 23/08/2013 will then give you "2013-08-23T00:00:00Z" in all cases. -### Diagnostic log level (86) +### POP3 Log (116) **Thread-safe** : Yes -**Scope:** 4D application +**Scope:** 4D local, 4D Server **Kept between two sessions:** No -**Description:** Level(s) of messages to be included in the diagnostic log when enabled (see selector Diagnostic log recording). Each level designates a category of diagnostic messages and automatically includes more important categorie(s). For a description of categories, see *Diagnostic log levels* section on *developer.4d.com*. - -**Possible values:** One of the following constants (Log info by default): Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) Log debug: activates ERROR, WARN, INFO, DEBUG Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN Log error: activates ERROR (least detailed level) - - +**Possible values:** 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (POP3 exchanges not recorded). -### Use legacy network layer (87) +**Description**: Starts or stops the recording of exchanges between 4D and the POP3 server, when a transporter object is processed through *POP3\_transporter.getMail( )* or *POP3\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DPOP3Log\_X.txt, where X is the sequential number of the log. Once the file 4DPOP3Log has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -**Scope**: 4D in local mode, 4D Server +For more information on the 4DPOP3Log\_X.txt files, please refer to the *Description of log files* section. -**Kept between two sessions**: Yes -**Description:** Sets or gets the current status of the legacy network layer for client/server connections. The legacy network layer is obsolete beginning with 4D v14 R5 and should be replaced progressively in your applications with the *ServerNet* network layer. *ServerNet* will be required in upcoming 4D releases in order to benefit from future network evolutions. For compatibility reasons, the legacy network layer is still supported to allow a smooth transition for existing applications; (it is used by default in applications converted from a release prior to v14 R5). Pass 1 in this parameter to use the legacy network layer (and disable *ServerNet*) for your client/server connections, and pass 0 to disable the legacy network (and use the *ServerNet*). -This property can also be set by means of the "Use legacy network layer" option found on the *Compatibility page* of the Database Settings (see *Network and Client-Server options*). In this section, you will also find a discussion about migration strategy. We recommend that you activate the *ServerNet* as soon as possible. You will need to restart the application in order for this parameter to be taken into account. -**Possible values:** 0 or 1 (0 = do not use legacy layer, 1 = use legacy layer) +### Port ID (15) -**Default value:** 0 in databases created with 4D v14 R5 or higher, 1 in databases converted from 4D v14 R4 or earlier. +**Scope**: 4D local, 4D Server +**Kept between two sessions**: No +**Description**: TCP port ID used by the 4D Web server with 4D in local mode and 4D Server. The default value, which can be set on the "Web/Configuration" page of the Preferences dialog box, is 80\. You can use the constants of the *TCP Port Numbers* theme for the *value* parameter. -### SQL Server Port ID (88) +The Port ID selector is useful for 4D Web Servers compiled and merged with 4D Desktop (in which there is no access to the Design mode). For more information about the TCP port ID, refer to the *Web Server Settings* section. -**Scope**: 4D local, 4D Server. -**Kept between two sessions**: Yes -**Description**: Gets or sets the TCP port number used by the integrated SQL server of 4D in local mode or 4D Server. By default, the value is 19812\. When this selector is set, the database setting is updated. You can also set the TCP port number on the "SQL" page of the Database Settings dialog box. -**Possible values**: 0 to 65535. +### Query by formula joins (49) -**Default value**: 19812 +**Scope**:Current process +**Kept between two** **sessions**: No +**Possible values**: 0 (use database configuration), 1 (always use automatic relations) or 2 (use SQL joins if possible). -### Circular log limitation (90) +**Description**: Operating mode of the [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands relating to the use of "SQL joins." -**Thread-safe** : Yes +In databases created starting with version 11.2 of 4D v11 SQL, these commands carry out joins based on the SQL joins model. This mechanism can be used to modify the selection of a table according to a query carried out on another table without these tables being connected by an automatic relation (necessary condition in previous versions of 4D). -**Scope**: 4D local, 4D Server. +The QUERY BY FORMULA Joins selector lets you specify the operating mode of the query by formula commands for the current process: -**Kept between two sessions**: No +- 0: Uses the current settings of the database (default value). In databases created starting with version 11.2 of 4D v11 SQL, "SQL joins" are always activated for queries by formula. In converted databases, this mechanism is not activated by default for compatibility reasons but can be implemented via a preference. +- 1: Always use automatic relations (= functioning of previous versions of 4D). In this mode, a relation is necessary in order to set the selection of a table according to queries carried out on another table. 4D does not do "SQL joins." +- 2: Use SQL joins if possible (= default operation of databases created in version 11.2 and higher of 4D v11 SQL ). In this mode, 4D establishes "SQL joins" for queries by formula when the formula is suited for it (with two notable exceptions, see the description of the [QUERY BY FORMULA](query-by-formula.md) or [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) command). -**Possible values**: Any integer value, 0 = keep all logs +**Note:** With 4D in remote mode, "SQL joins" can only be used if the formulas are executed on the server (they must have access to the records). To configure where formulas are to be executed, please refer to selectors 46 and 47. -**Description**: Maximum number of files to keep in rotation for each type of log. By default, the 50 most recent files are kept. If you pass a value *X*, only the *X* most recent files are kept, with the oldest being erased automatically when a new one is created. This setting applies to all log files, i.e. request logs (selectors 28 and 45), debug log (selector 34), events log (selector 79), Web logs (selectors 29 and 84 of the [WEB SET OPTION](web-set-option.md) command), etc. -### Number of formulas in cache (92) +### Query by formula on server (46) -**Scope**: 4D application +**Scope**: Current table and process **Kept between two sessions**: No -**Possible values**: Positive longints - -**Default value**: 0 (no cache) - -**Description**: Sets or gets the maximum number of formulas to be kept in the cache of formulas, which is used by the [EXECUTE FORMULA](execute-formula.md) command. This limit is applied to all processes, but each process has its own formula cache. Caching formulas accelerates the [EXECUTE FORMULA](execute-formula.md) command execution in compiled mode since each cached formula is tokenized only once in this case. When you change the cache value, existing contents are reset even if the new size is larger than the previous one. Once the maximum number of formulas in the cache is reached, a new executed formula will erase the oldest one in the cache (FIFO mode). This parameter is only taken into account in compiled databases or compiled components. - +**Possible values**: 0 (use database configuration), 1 (execute on client) or 2 (execute on server) +**Description**: Execution location of [QUERY BY FORMULA](query-by-formula.md) and [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) commands for the *table* passed in the parameter. -### OpenSSL version (94) +When using a database in client-server mode, the query "by formula" commands can be executed either on the server or on the client machine: -**Scope**: all 4D machines* +In databases created with 4D v11 SQL, these commands are executed on the server. In converted databases, these commands are executed on the client machine, as in previous versions of 4D.In converted databases, a specific preference (Application/Compatibility page) can be used to globally modify the execution location of these commands.This difference in execution location influences not only application performance (execution on the server is usually faster) but also programming. In fact, the value of the components of the formula (in particular variables called via a method) differ according to the execution context. You can use this selector to punctually adapt the operation of your application. -**Kept between two sessions**: No +If you pass 0 in the *value* l’parameter, the execution location of query "by formula" commands will depend on the database configuration: in databases created with 4D v11 SQL, these commands will be executed on the server. In converted databases, they will be executed on the client machine or the server according to the database preferences. Pass 1 or 2 in *value* to "force" the execution of these commands, respectively, on the client or on the server machine. -**Description**: Returns the version number of the OpenSSL library in use on the machine. (Read only) +Refer to example 2. +**Note:** If you want to be able to enable "SQL type" joins (see the QUERY BY FORMULA Joins selector), you must always execute formulas on the server so that they have access to the records. Be careful, in this context, the formula must not contain any calls to a method, otherwise it will automatically be switched to the remote machine. -### Cache flush periodicity (95) -**Thread-safe** : Yes +### RDP optimization (133) -**Scope**: 4D local, 4D Server +**Scope:** 4D application. -**Kept between two sessions**: No +**Kept between two sessions:** No. -**Possible values**: longint > 1 (seconds) +**Possible values:** `0`: Disabled (default), `1`: Enabled. -**Description**: Gets or sets the current cache flush periodicity, expressed in seconds. Modifying this value overrides the **Flush Cache every X Seconds** option in the [XML DECODE](xml-decode.md) of the Database settings for the session (it is not stored in the Database settings). +**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). @@ -722,249 +808,240 @@ The sleep timeout is applied after a machine running a 4D remote application has -### Tips enabled (101) -**Scope:** 4D application +### Server base process stack size (53) -**Kept between two sessions:** No +**Scope**: 4D Server -**Possible values:** 0 = tips disabled, 1 = tips enabled (default) +**Kept between two sessions**: No -**Description:** Sets or gets the current display status of the tips for the 4D application. By default, tips are enabled. +**Possible values**: Positive longint. - Note that this parameter sets all 4D tips, i.e. form help messages and Design mode editor's tips. +**Description**: Size of the stack allocated to each preemptive system process on the server, expressed in bytes. The default size is determined by the system. +Preemptive system processes (processes of the 4D client base process type) are loaded to control the main 4D client processes. The size allocated by default to the stack of each preemptive process allows a good ease of execution but may prove to be consequential when very large numbers of processes (several hundred) are created. +For optimization purposes, this size can be reduced considerably if the operations carried out by the database allow for it (for example if the database does not carry out sorts of large quantities of records). Values of 512 or even 256 KB are possible. Be careful, under-sizing the stack is critical and can be harmful to the operation of 4D Server. Setting this parameter should be done with caution and must take the database conditions of use into account (number of records, type of operations, etc.). -### Tips delay (102) +In order to be taken into account, this parameter must be executed on the server machine (for example in the *On Server Startup Database Method*). -**Scope:** 4D application -**Kept between two sessions:** No -**Possible values:** longint >= 0 (ticks) -**Description:** Delay before tips are displayed once the mouse cursor has stopped in objects with attached help messages. Value is expressed in ticks (1/60th of a second). Default value is 45 ticks (0.75 seconds). +### SMTP Log (110) +**Thread-safe** : Yes +**Scope**: 4D local, 4D Server* -### Tips duration (103) +**Kept between two sessions**: No -**Scope:** 4D application +**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (SMTP exchanges not recorded). -**Kept between two sessions:** No +**Description**: Starts or stops the recording of exchanges between 4D and the SMTP server, when a *transporter* object is processed through *transporter.send( )* or *SMTP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DSMTPLog\_X.txt, where *X* is the sequential number of the log. Once the file 4DSMTPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -**Possible values:** longint >= 60 (ticks) +For more information on the 4DSMTPLog\_X.txt files, please refer to the *Description of log files* section. -**Description:** Maximum display duration for a tip. Value is expressed in ticks (1/60th of a second). Default value is 720 ticks (12 seconds). -### Min TLS version (105) +### Spellchecker (81) -**Scope**: 4D Server, 4D Web Server and 4D SQL Server +**Scope**: 4D application -**Kept between two sessions**: No + **Kept between two sessions**: No -**Description**: Used to specify the minimum Transport Layer Security (TLS) version, which provides data encryption and authentication between applications and servers. Connection attempts from clients supporting only versions below the minimum will be rejected. The setting is applied globally to the network layer. Once modified, the server must be restarted to use the new value. + **Possible values**: 0 (default) = native macOS spellchecker (Hunspell disabled), 1 = Hunspell spellcheck enabled. -**Default value**: TLSv1\_3 +**Description**: Enables the Hunspell spellcheck under macOS. By default, the native spellchecker is enabled on this platform. You may prefer to use the Hunspell spellcheck, for example, in order to unify the interface for your cross-platform applications (under Windows, only the Hunspell spellcheck is available). For more information, refer to *Spell checking*. -**Possible values**: TLSv1\_2 (TLS 1.2, introduced in 2008) TLSv1\_3 (TLS 1.3, introduced in 2018) **NOTES**: -- The 4D Internet Commands plugin uses a different network layer, therefore this selector will have no impact on its TLS version. -- This setting is ignored for your client server connections if your 4D Server uses the legacy network layer. +### SQL Autocommit (43) +**Scope**:Database -### User param value (108) +**Kept between two** **sessions**: Yes -**Scope:** 4D local, 4D Server +**Possible values**: 0 (deactivation) or 1 (activation) -**Kept between two sessions:** No +**Description**: Activation or deactivation of the SQL auto-commit mode. By default, the value is 0 (deactivated mode) -**Possible values**: Any custom string + The auto-commit mode is used to strengthen the referential integrity of the database. When this mode is active, all *SELECT*, *INSERT*, *UPDATE* and *DELETE* (SIUD) queries are automatically included in ad hoc transactions when they are not already executed within a transaction. This mode can also be set in the Preferences of the database. -**Description:** Custom string passed from one session to the next one when the 4D application is restarted. This selector is useful in the context of automated unit tests that require applications to restart with different parameters. -When used with [SET DATABASE PARAMETER](set-database-parameter.md), defines a new value that will be available within the next opened database after 4D is restarted manually or using the [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), or [RESTART 4D](restart-4d.md) commands. When used with [Get database parameter](get-database-parameter.md), gets the currently available user parameter value, defined using a command line (see *Command Line Interface*), the .4DLink file (see *Using a 4DLink file*), or a call to [SET DATABASE PARAMETER](set-database-parameter.md) during the previous session. (\*) If [SET DATABASE PARAMETER](set-database-parameter.md) sets a User param value before a call to [OPEN DATABASE](open-database.md) with a .4DLink file that also contains a user-param xml attribute, 4D takes into account only the parameter provided by [SET DATABASE PARAMETER](set-database-parameter.md). +### SQL Engine case sensitivity (44) -### Times inside objects (109) +**Scope**: Database -**Scope:** 4D local, 4D Server (all processes) +**Kept between two sessions**: Yes -**Kept between two sessions**: No +**Possible values**: 0 (case not taken into account) or 1 (case-sensitive) -**Possible values**: Times in seconds (0) (default), Times in milliseconds (1) +**Description**: Activation or deactivation of case-sensitivity for string comparisons carried out by the SQL engine. -**Description**: Defines the way time values are converted and stored within object properties and collection elements, as well as how they will be imported/exported in JSON and in Web areas. By default, starting with 4D v17, times are converted and stored as number of seconds in objects. +By default, the value is 1 (case-sensitive): the SQL engine differentiates between upper and lower case and between accented characters when comparing strings (sorts and queries). For example “ABC”= “ABC” but “ABC” # “Abc” and "abc" # "âbc." In certain cases, for example so as to align the functioning of the SQL engine with that of the 4D engine, you may wish for string comparisons to not be case-sensitive (“ABC”=“Abc"="âbc"). -In previous releases, time values were converted and stored as number of milliseconds in those contexts. Using this selector can help you migrating your applications by reverting to previous settings if necessary. +**Warning:* Since this option modifies the database structure file and all processes, for performance reasons it is highly recommended to set it at database startup only.* This option can also be set in the Database settings. -**Note**: ORDA methods and SQL engine ignore this setting, they always assume time values to be numbers of seconds. -### SMTP Log (110) +### SQL Server Port ID (88) -**Thread-safe** : Yes +**Scope**: 4D local, 4D Server. -**Scope**: 4D local, 4D Server* +**Kept between two sessions**: Yes -**Kept between two sessions**: No +**Description**: Gets or sets the TCP port number used by the integrated SQL server of 4D in local mode or 4D Server. By default, the value is 19812\. When this selector is set, the database setting is updated. You can also set the TCP port number on the "SQL" page of the Database Settings dialog box. -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (SMTP exchanges not recorded). +**Possible values**: 0 to 65535. -**Description**: Starts or stops the recording of exchanges between 4D and the SMTP server, when a *transporter* object is processed through *transporter.send( )* or *SMTP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DSMTPLog\_X.txt, where *X* is the sequential number of the log. Once the file 4DSMTPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the *value* parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. +**Default value**: 19812 -For more information on the 4DSMTPLog\_X.txt files, please refer to the *Description of log files* section. -### Current process debug log recording (111) +### SSL cipher list (64) -**Scope:** 4D application +**Scope**: 4D application -**Kept between two sessions:** No +**Kept between two sessions**: No -**Description**: Starts or stops the sequential recording of programming events **for the current process** in a separated log file. This log is similar to the Debug log recording (selector 34) but focuses on the current process only. The log file name includes the letter "p" and the process number: 4DDebugLog\[\_p*N*_*n*].txt, where N is the process unique ID. +**Possible values**: Sequence of strings separated by colons. -For more information about this format and on the use of the *4DDebugLog* file, please refer to *Description of log files* in the Design Reference. +**Description:** Cipher list used by 4D for the secure protocol. This list modifies the priority of ciphering algorithms implemented by 4D. For example, you can pass the following string in the *value* parameter: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". For a complete description of the syntax for the ciphers list, refer to the *ciphers page of the OpenSSL* *site*. -**Notes:** This selector is provided solely for the purpose of debugging and should be used with care. In particular, it must not put into production since it can have an impact on the application performance. You can use both Debug log recording and Current process debug log recording selectors simultaneously, in which case the current process actions will not be logged in the main log file. +This setting applies to the main Web server (excluding Web server objects), the SQL server, client/server connections, as well as the HTTP client and all the 4D commands that make use of the secure protocol. It is temporary (it is not maintained between sessions). +When the cipher list has been modified, you will need to restart the server concerned in order for the new settings to be taken into account. +To reset the cipher list to its default value (stored permanently in the SLI file), call the [SET DATABASE PARAMETER](set-database-parameter.md) command and pass an empty string ("") in the *value* parameter. -### Is current database a project (112) +**Note:** With the [Get database parameter](get-database-parameter.md) command, the cipher list is returned in the optional *stringValue* parameter and the return parameter is always 0. -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. -**Scope**: 4D application -**Description**: Returns 1 if the current database architecture is a project, and 0 otherwise. For more information, please refer to *Project vs binary database* section. +### Table sequence number (31) +**Scope**:4D application -### Is host database a project (113) + **Kept between two sessions**: Yes -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. + **Possible values**: Any longint value. -**Scope**: 4D application +**Description**: This selector is used to modify or get the current unique number for records of the table passed as parameter. "Current number" means "last number used": if you modify this value using [SET DATABASE PARAMETER](set-database-parameter.md), the next record will be created with a number that consists of the value passed + 1\. This new number is the one returned by the [Sequence number](sequence-number.md) command as well in any field of the table to which the "Autoincrement" property has been assigned in the Structure editor or via SQL. -**Description**: Returns 1 if the host database architecture is a project, and 0 otherwise. For more information, please refer to *Project vs binary database* section. +By default, this unique number is set by 4D and corresponds to the order of record creation. For additional information, refer to the documentation of the [Sequence number](sequence-number.md) command. -### Libldap version (114) -**Scope**: Current 4D machine +### TCPUDP log recording (131) -**Kept between two sessions**: n/a +**Scope:** 4D application. -**Description**: Returns the version number of the LDAP library in the 4D application on the current machine. (Read only) +**Kept between two sessions:** No. +**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -### Libsasl version (115) -**Scope**: Current 4D machine -**Kept between two sessions**: n/a -**Description**: Returns the version number of the SASL library in the 4D application on the current machine. (Read only) +### Times inside objects (109) +**Scope:** 4D local, 4D Server (all processes) +**Kept between two sessions**: No -### POP3 Log (116) +**Possible values**: Times in seconds (0) (default), Times in milliseconds (1) -**Thread-safe** : Yes +**Description**: Defines the way time values are converted and stored within object properties and collection elements, as well as how they will be imported/exported in JSON and in Web areas. By default, starting with 4D v17, times are converted and stored as number of seconds in objects. -**Scope:** 4D local, 4D Server +In previous releases, time values were converted and stored as number of milliseconds in those contexts. Using this selector can help you migrating your applications by reverting to previous settings if necessary. -**Kept between two sessions:** No +**Note**: ORDA methods and SQL engine ignore this setting, they always assume time values to be numbers of seconds. -**Possible values:** 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (POP3 exchanges not recorded). -**Description**: Starts or stops the recording of exchanges between 4D and the POP3 server, when a transporter object is processed through *POP3\_transporter.getMail( )* or *POP3\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DPOP3Log\_X.txt, where X is the sequential number of the log. Once the file 4DPOP3Log has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -For more information on the 4DPOP3Log\_X.txt files, please refer to the *Description of log files* section. +### Tips delay (102) +**Scope:** 4D application -### Is host database writable (117) +**Kept between two sessions:** No -**Note:** You can only use this selector with the [Get database parameter](get-database-parameter.md) command and its value cannot be set. +**Possible values:** longint >= 0 (ticks) -**Scope**: 4D application +**Description:** Delay before tips are displayed once the mouse cursor has stopped in objects with attached help messages. Value is expressed in ticks (1/60th of a second). Default value is 45 ticks (0.75 seconds). -**Description**: Returns 1 if the host project file/structure file is writable, and 0 if it is read-only. -### IMAP Log (119) +### Tips duration (103) -**Thread-safe** : Yes +**Scope:** 4D application -**Scope**: 4D local, 4D Server +**Kept between two sessions:** No -**Kept between two sessions**: No +**Possible values:** longint >= 60 (ticks) -**Possible values**: 0 or from 1 to X (0 = do not record, 1 to X = sequential number, added to the file name). By default, the value is 0 (IMAP exchanges not recorded). +**Description:** Maximum display duration for a tip. Value is expressed in ticks (1/60th of a second). Default value is 720 ticks (12 seconds). -**Description**: Starts or stops the recording of exchanges between 4D and the IMAP server, when a transporter object is processed through *IMAP\_transporter.getMail( )* or *IMAP\_transporter.checkConnection( )*. By default, the value is 0 (exchanges not recorded). When this mechanism is enabled, a log file is created in the Logs folder of the database. It is named 4DIMAPLog\_X.txt, where X is the sequential number of the log. Once the file 4DIMAPLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file of the same name already exists, it is replaced directly. You can set the starting number of the sequence using the value parameter. By default, all files are kept, but you can control the number of files to keep using the Circular log limitation parameter. -For more information on the 4DIMAPLog\_X.txt files, please refer to the *Description of log files* section. +### Tips enabled (101) -### Libzip version (120) +**Scope:** 4D application -**Scope:** Current 4D machine +**Kept between two sessions:** No -**Kept between two sessions:** n/a +**Possible values:** 0 = tips disabled, 1 = tips enabled (default) -**Description:** Returns the version number of the libzip library in the 4D application on the current machine. (Read only) +**Description:** Sets or gets the current display status of the tips for the 4D application. By default, tips are enabled. + Note that this parameter sets all 4D tips, i.e. form help messages and Design mode editor's tips. -### Pause logging (121) -**Thread-safe** : Yes -**Scope**: 4D application +### Use legacy network layer (87) -**Kept between two** **sessions**: No +**Scope**: 4D in local mode, 4D Server -**Possible values**: 0 (resume logs), 1 (pause logs) +**Kept between two sessions**: Yes -**Description:** This selector allows to suspend/resume all logging operations started on the application (except ORDA logs). This feature can be useful to temporarily lighten the 4D application tasks or schedule logging operations. +**Description:** Sets or gets the current status of the legacy network layer for client/server connections. The legacy network layer is obsolete beginning with 4D v14 R5 and should be replaced progressively in your applications with the *ServerNet* network layer. *ServerNet* will be required in upcoming 4D releases in order to benefit from future network evolutions. For compatibility reasons, the legacy network layer is still supported to allow a smooth transition for existing applications; (it is used by default in applications converted from a release prior to v14 R5). Pass 1 in this parameter to use the legacy network layer (and disable *ServerNet*) for your client/server connections, and pass 0 to disable the legacy network (and use the *ServerNet*). +This property can also be set by means of the "Use legacy network layer" option found on the *Compatibility page* of the Database Settings (see *Network and Client-Server options*). In this section, you will also find a discussion about migration strategy. We recommend that you activate the *ServerNet* as soon as possible. You will need to restart the application in order for this parameter to be taken into account. +**Possible values:** 0 or 1 (0 = do not use legacy layer, 1 = use legacy layer) -### TCPUDP log recording (131) +**Default value:** 0 in databases created with 4D v14 R5 or higher, 1 in databases converted from 4D v14 R4 or earlier. -**Scope:** 4D application. -**Kept between two sessions:** No. -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. +### User param value (108) +**Scope:** 4D local, 4D Server +**Kept between two sessions:** No -### RDP optimization (133) +**Possible values**: Any custom string -**Scope:** 4D application. +**Description:** Custom string passed from one session to the next one when the 4D application is restarted. This selector is useful in the context of automated unit tests that require applications to restart with different parameters. -**Kept between two sessions:** No. +When used with [SET DATABASE PARAMETER](set-database-parameter.md), defines a new value that will be available within the next opened database after 4D is restarted manually or using the [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), or [RESTART 4D](restart-4d.md) commands. When used with [Get database parameter](get-database-parameter.md), gets the currently available user parameter value, defined using a command line (see *Command Line Interface*), the .4DLink file (see *Using a 4DLink file*), or a call to [SET DATABASE PARAMETER](set-database-parameter.md) during the previous session. (\*) If [SET DATABASE PARAMETER](set-database-parameter.md) sets a User param value before a call to [OPEN DATABASE](open-database.md) with a .4DLink file that also contains a user-param xml attribute, 4D takes into account only the parameter provided by [SET DATABASE PARAMETER](set-database-parameter.md). -**Possible values:** `0`: Disabled (default), `1`: Enabled. -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). :::note From 7c7e76c34d19627931c4caee466f3e2c67add291 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 3 Dec 2025 19:29:33 +0100 Subject: [PATCH 69/75] reordered set db param --- .../commands-legacy/get-database-parameter.md | 10 +- .../commands-legacy/get-database-parameter.md | 831 +++++++++--------- .../commands-legacy/set-database-parameter.md | 813 +++++++++-------- .../commands-legacy/get-database-parameter.md | 831 +++++++++--------- .../commands-legacy/set-database-parameter.md | 813 +++++++++-------- .../commands-legacy/get-database-parameter.md | 721 ++++++--------- .../commands-legacy/set-database-parameter.md | 719 ++++++--------- .../commands-legacy/get-database-parameter.md | 721 ++++++--------- .../commands-legacy/set-database-parameter.md | 719 ++++++--------- .../commands-legacy/get-database-parameter.md | 760 ++++++++-------- .../commands-legacy/set-database-parameter.md | 758 ++++++++-------- .../commands-legacy/get-database-parameter.md | 760 ++++++++-------- .../commands-legacy/set-database-parameter.md | 758 ++++++++-------- 13 files changed, 4387 insertions(+), 4827 deletions(-) diff --git a/docs/commands-legacy/get-database-parameter.md b/docs/commands-legacy/get-database-parameter.md index d17f67f25c816c..2a7c402eb8d55a 100644 --- a/docs/commands-legacy/get-database-parameter.md +++ b/docs/commands-legacy/get-database-parameter.md @@ -85,7 +85,9 @@ When the contents of the *Resources* folder on the server has been modified or a Three synchronization modes are then possible on the client side. The Auto Synchro Resources Folder selector is used to specify the mode to be used by the client machine for the current session: -0 (default value): no dynamic synchronization (synchronization request is ignored) 1: automatic dynamic synchronization2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. +- 0 (default value): no dynamic synchronization (synchronization request is ignored) +- 1: automatic dynamic synchronization +- 2: display of a dialog box on the client machines, with the possibility of allowing or refusing synchronization.The synchronization mode can also be set globally in the application Preferences. @@ -191,7 +193,7 @@ This selector operates exactly the same way as selector 39; however, it applies 4D lets you record the log of requests carried out by the client machine. When this mechanism is activated, two files are created on the client machine, in the Logs subfolder of the local folder of the database. They are named 4DRequestsLog\_X.txt and 4DRequestsLog\_ProcessInfo\_X.txt, where X is the sequential number of the log. Once the file 4DRequestsLog has reached a size of 10 MB, it is closed and a new one is generated, with an incremented sequential number. If a file with the same name already exists, it is directly replaced. You can set the starting number for the sequence using the value parameter. -These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to the *Description of log files* section. +These text files store various information concerning each request in a simple tabbed format: time, process number, size of request, processing duration, etc. For more information on the 4DRequestsLog files, please refer to please refer to [*Description of log files*](../Debugging/debugLogFiles.md). @@ -264,7 +266,7 @@ The operation of this selector is identical to that of selector 29; however, it **Description**: Starts or stops the sequential recording of programming events **for the current process** in a separated log file. This log is similar to the Debug log recording (selector 34) but focuses on the current process only. The log file name includes the letter "p" and the process number: 4DDebugLog\[\_p*N*_*n*].txt, where N is the process unique ID. -For more information about this format and on the use of the *4DDebugLog* file, please refer to *Description of log files* in the Design Reference. +For more information about this format and on the use of the *4DDebugLog* file, please refer to please refer to [*Description of log files*](../Debugging/debugLogFiles.md). **Notes:** This selector is provided solely for the purpose of debugging and should be used with care. In particular, it must not put into production since it can have an impact on the application performance. You can use both Debug log recording and Current process debug log recording selectors simultaneously, in which case the current process actions will not be logged in the main log file. @@ -389,9 +391,7 @@ For example, if you execute: ``` - On Windows 7 and higher, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 3 (software context). - - On Windows Vista, *$mode* is set to 1 when the system detects hardware compatible with Direct2D; otherwise, *$mode* is set to 0 (disabling of Direct2D). - - On Windows XP, *$mode* is always set to 0 (not compatible with Direct2D). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md index 67e32715374ec9..65c3017d4d6595 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md @@ -22,6 +22,34 @@ displayed_sidebar: docs El parámetro *selector* designa el parámetro a obtener. 4D ofrece las siguientes constantes predefinidas, en el tema “*Parámetros de la base*”: +### 4D Remote mode timeout (14) + +**Alcance** (antigua capa de red únicamente): aplicación 4D si valor positivo + +**Se conserva entre dos sesiones**: sí si *valor* positivo + +**Descripción**: a utilizar en casos muy específicos. Valor del timeout otorgado por el equipo 4D remoto a la máquina 4D Server. Por defecto, este valor se define en la página "Cliente-Servidor/Configuración" de la caja de diálogo de Preferencias en el equipo remoto. + +El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua capa de red. Con la capa 4D *ServerNet* activada, se ignora: esta configuración es administrada por el selector Timeout 4D Server (13). + + + +### 4D Server log recording (28) + +**Hilo seguro**: sí + +**Alcance**: 4D Server, 4D remoto* + +**Se conserva entre dos sesiones**: no + + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + +**Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). + +4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. + +Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. + ### 4D Server timeout (13) **Alcance**: aplicación 4D si *valor* positivo @@ -40,59 +68,76 @@ Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global -### 4D Remote mode timeout (14) +### Auto synchro resources folder (48) -**Alcance** (antigua capa de red únicamente): aplicación 4D si *valor* positivo +**Alcance**:equipo 4D remoto -**Se conserva entre dos sesiones**: sí si *valor* positivo + **Se conserva entre dos sesiones**: no -**Descripción**: a utilizar en casos muy específicos. Valor del timeout otorgado por el equipo 4D remoto a la máquina 4D Server. Por defecto, este valor se define en la página "Cliente-Servidor/Configuración" de la caja de diálogo de Preferencias en el equipo remoto. + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). -El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua capa de red. Con la capa 4D *ServerNet* activada, se ignora: esta configuración es administrada por el selector Timeout 4D Server (13). +**Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. + +Cuando el contenido de la carpeta *Resources* en el servidor se ha modificado o un usuario ha solicitado la sincronización (por ejemplo vía el explorador de recursos o siguiendo la ejecución del comando [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md "NOTIFY RESOURCES FOLDER MODIFICATION")), el servidor notifica a los equipos cliente conectados. +Tres modos de sincronización son posibles del lado del cliente. El selector Auto Synchro Resources Folder se utiliza para especificar el modo a utilizar por el equipo cliente para la sesión actual: + +0 (valor por defecto): sin sincronización dinámica (la petición de sincronización se ignora) 1: sincronización dinámica automática2: visualización de una caja de diálogo en los equipos clientes, con la posibilidad de efectuar o rechazar la sincronización.El modo de sincronización también puede definirse globalmente en las Preferencias de la aplicación. -### Port ID (15) + +### Cache flush periodicity (95) + +**Hilo seguro**: sí + **Alcance**: 4D local, 4D Server -**Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones:** no + +**Valores posibles:** entero largo > 1 (segundos) + +**Descripción**: obtiene o establece la periodicidad del vaciado de la caché, expresado en segundos. La modificación de este valor prevalece sobre la opción **Vaciar caché cada X segundos** en [XML DECODE](xml-decode.md) de la configuración de la base para la sesión (que no se almacena en las Propiedades de la base). -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, puede definirse en la página "Web/Configuración" de la caja de diálogo de Preferencias es 80\. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. -El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* +### Cache unload minimum size (66) +**Alcance**: aplicación 4D -### Character set (17) +**Se conserva entre dos sesiones**: no -**Alcance:** 4D local, 4D Server** +**Valores posibles**: entero largo positivo > 1. -**Se conserva entre dos sesiones:** sí** +**Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). -**Descripción:** *constante obsoleta (se conserva por compatibilidad únicamente).* Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. +Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D -### Max concurrent Web processes (18) -**Alcance**: 4D local, 4D Server +### Character set (17) + +**Alcance:** 4D local, 4D Server **Se conserva entre dos sesiones**: sí -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -### Client port ID (22) +### Circular log limitation (90) -**Alcance**: todos los equipos 4D remotos +**Hilo seguro**: sí - **Se conserva entre dos sesiones**: sí +**Alcance**: 4D local, 4D Server. - **Valores posibles**: ver selector 15 +**Se conserva entre dos sesiones:** no -**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir valores sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. +**Valores posibles**: todo valor entero, 0 = conservar todos los registros + +**Descripción**: número máximo de archivos a conservar en rotación para cada tipo de registro. Por defecto, todos los archivos se conservan. Si pasa un valor *X*, solo los *X* archivos más recientes se conservan, el más antiguo se borra automáticamente cuando se crea uno nuevo. Esta parametrización se aplica a cada uno de los siguientes archivos de registro: registros de peticiones (selectores 28 y 45), registro de depuración (selector 34), registro de eventos (selector 79), así como el historial de peticiones web (selectores 29 y 84 del comando [WEB SET OPTION](web-set-option.md)), etc. @@ -108,6 +153,38 @@ El selector Port ID se utiliza en el marco de servidores web 4D compilados y fus +### Client HTTPS port ID (40) + +**Alcance**: todos los equipos 4D remotos + + **Se conserva entre dos sesiones**: sí + + **Valores posibles**: 0 a 65535 + +**Descripción**: número de puerto TCP utilizado por los servidores web de los equipos clientes para conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). + +Este selector puede utilizarse para modificar por programación el puerto TCP utilizado por los servidores web de los equipos clientes para las conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). + +Este selector funciona exactamente igual que el selector 39; sin embargo, aplica a todos los equipos 4D remotos utilizados como servidores web. Si quiere modificar el valor de ciertos equipos clientes únicamente, utilice la caja de diálogo de Preferencias de 4D remoto. + + + +### Client log recording (45) + +**Alcance**:equipo 4D remoto + + **Se conserva entre dos sesiones**: no + + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). + +**Descripción**: inicia o detiene la grabación de peticiones estándar efectuadas por el equipo cliente 4D que ejecutó el comando (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). + +4D le permite registrar el historial de peticiones realizadas por el equipo cliente. Cuando este mecanismo se activa, se crean dos archivos en el equipo cliente, en la subcarpeta Logs de la carpeta local de la base. Son llamados 4DRequestsLog\_X y 4DRequestsLog\_ProcessInfo\_X, donde X es el número secuencial del historial. Una vez el archivo 4DRequestsLog alcanza un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio para la secuencia utilizando el parámetro *valor*. + +Estos archivos texto almacenan en formato tabulado simple diferente información relacionada con cada petición: hora, número de proceso, tamaño de la petición, duración del proceso, etc. Esta información es particularmente útil durante la fase de desarrollo de la aplicación o con fines estadísticos. + + + ### Client max concurrent Web proc (25) **Alcance**: todos los equipos 4D remotos @@ -120,30 +197,34 @@ El selector Port ID se utiliza en el marco de servidores web 4D compilados y fus -### Maximum Web requests size (27) +### Client port ID (22) -**Alcance**: 4D local, 4D Server +**Alcance**: todos los equipos 4D remotos -**Se conserva entre dos sesiones**: sí + **Se conserva entre dos sesiones**: sí -**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. + **Valores posibles**: ver selector 15 +**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir valores sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. -### 4D Server log recording (28) -**Hilo seguro**: sí +### Client Server port ID (35) -**Alcance**: 4D Server, 4D remoto* +**Alcance**: base de datos -**Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones**: sí - **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). +**Valores posibles**: 0 a 65535 -**Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). +**Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. + +La personalización de este valor permite utilizar varias aplicaciones 4D cliente-servidor en la misma máquina con el protocolo TCP; en este caso, debe indicar un número de puerto diferente para cada aplicación. + +El valor se guarda en el archivo de estructura de la base. Puede definirse con 4D en modo local pero sólo se tiene en cuenta en configuración cliente servidor. + +Cuando modifica este valor, es necesario reiniciar el equipo servidor para que el nuevo valor sea tenido en cuenta. -4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. -Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. ### Client Web log recording (30) @@ -160,17 +241,33 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, -### Table sequence number (31) +### Current process debug log recording (111) -**Alcance**: aplicación 4D +**Alcance:** Aplicación 4D - **Se conserva entre dos sesiones**: sí +**Se conserva entre dos sesiones:** no - **Valores posibles**: todo valor de tipo entero largo. +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. -**Descripción**: este selector se utiliza para modificar o modificar u obtener el número único actual de los registros de la tabla pasada en parámetro. "Número actual" significa "último número utilizado": si modifica este valor utilizando [SET DATABASE PARAMETER](set-database-parameter.md "SET DATABASE PARAMETER"), el siguiente registro será el valor pasado + 1\. Este nuevo número es el número devuelto por el comando Sequence number [](http://doc.tmp.4d.fr/Database-Parameters/4Dv11.4/ConstantTheme/4870/CMU00244.HTM) como también en todo campo de la tabla a la cual se asigna la propiedad "Autoincrementar" en el editor de estructura o vía SQL. +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. -Por defecto, este número único es definido por 4D y corresponde al orden de creación de los registros. Para información adicional, por favor consulte la documentación del comando [Sequence number](sequence-number.md "Sequence number"). +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. + + + +### Dates inside objects (85) + +**Alcance**: proceso actual + + **Se conserva entre dos sesiones:** no + + **Valores posibles**: Tipo cadena sin zona horaria (0), tipo cadena con zona horaria (1), tipo fecha (2) (por defecto) + +**Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. + +Cuando el valor del selector es Date type (valor predeterminado para las bases creadas con 4D v17 y superior), las fechas 4D se almacenan con el tipo de fecha dentro de los objetos, con respecto a la configuración de fecha local. Cuando se convierte a formato JSON, los atributos de fecha se convertirán en cadenas que no incluyen un tiempo. (**Nota:** esta configuración se puede definir mediante la opción "Utilizar tipo de fecha en lugar del formato de fecha ISO en objetos" que se encuentra en *Página Compatibilidad* de la configuración de la base). + +Si pasa String type with time zone en este selector, convertirá las fechas 4D en cadenas ISO y tendrá en cuenta la zona horaria local. Por ejemplo, la conversión de la fecha 23/08/2013 le da "2013-08-22T22: 00: 000Z" en formato JSON cuando la operación se realiza en Francia durante el horario de verano (GMT+ 2). Este principio se ajusta al funcionamiento estándar de JavaScript. Esto puede ser una fuente de errores cuando desea enviar valores de fecha JSON a alguien en un huso horario diferente. Por ejemplo, cuando exporta una tabla usando [Selection to JSON](selection-to-json.md) en Francia que se debe reimportar en los EE. UU. utilizando [JSON TO SELECTION](json-to-selection.md). Dado que las fechas se vuelven a interpretar en cada zona horaria, los valores almacenados en la base de datos serán diferentes. En este caso, puede modificar el modo de conversión de las fechas para que no tengan en cuenta la zona horaria pasando String type without time zone en este selector. La conversión de la fecha 23/08/2013 le dará "2013-08-23T00: 00: 00Z" en todos los casos. @@ -188,37 +285,30 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr - El modo con pestañas ofrece información adicional y utiliza un formato más compacto con pestañas en el archivo. Los tiempos de ejecución se expresan en microsegundos. -**Valores posibles**: Entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +**Valores posibles**: entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (valor 1) permite activar el archivo (note que cualquier otro valor no nulo también lo activará) - - Bit 1 (valor 2) permite solicitar los parámetros de llamada a los métodos y comandos. - - Bit 2 (valor 4) permite activar el nuevo formato tabulado. - - Bit 3 (valor 8) permite desactivar la escritura inmediata de cada operación en el disco (activado por defecto). La escritura inmediata es menor rápida y más eficaz por ejemplo para buscar las causas de un fallo.Si desactiva este modo, el contenido del archivo será generado más rápidamente. - - Bit 4 (valor 16) desactiva el registro de llamadas de plug-ins (activado por defecto). - - Bit 5 (valor 32) desactiva el registro de las funciones miembros. Ejemplos: +```4d SET DATABASE PARAMETER (34;1) // activa el modo estándar sin los parámetros, con las duraciones - SET DATABASE PARAMETER (34;2) // activa el modo estándar con los parámetros y las duraciones - SET DATABASE PARAMETER (34;2+4) // activa el modo tabulado con los parámetros y las duraciones +SET DATABASE PARAMETER (34;0) // desactiva el archivo +``` -SET DATABASE PARAMETER (34;0) // desactiva el archivo Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: +Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: - restringiendo los comandos 4D que se examinan utilizando Log command list (selector 80), o - - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* - - -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. +*Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. Este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. @@ -228,484 +318,419 @@ Este selector se ofrece únicamente con fines de depuración y debe utilizarse c -### Client Server port ID (35) +### Diagnostic log level (86) -**Alcance**: base de datos +**Hilo seguro**: sí -**Se conserva entre dos sesiones**: sí +**Alcance**: aplicación 4D -**Valores posibles**: 0 a 65535 +**Se conserva entre dos sesiones**: no -**Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. +**Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. -La personalización de este valor permite utilizar varias aplicaciones 4D cliente-servidor en la misma máquina con el protocolo TCP; en este caso, debe indicar un número de puerto diferente para cada aplicación. +**Valores posibles**: una de las siguientes constantes (Log info por defecto): Log trace: activa ERROR, WARN, INFO, DEBUG, TRACE (nivel más detallado) Log debug: activa ERROR, WARN, INFO, DEBUG Log info: activa ERROR, WARN, INFO (por defecto) Log warn: activa ERROR, WARN Log error: activa ERROR (nivel menos detallado) -El valor se guarda en el archivo de estructura de la base. Puede definirse con 4D en modo local pero sólo se tiene en cuenta en configuración cliente servidor. -Cuando modifica este valor, es necesario reiniciar el equipo servidor para que el nuevo valor sea tenido en cuenta. +### Diagnostic log recording (79) +**Hilo seguro**: sí -### HTTPS Port ID (39) +**Alcance**: aplicación 4D -**Alcance**: 4D local, 4D Server +**Se conserva entre dos sesiones**: no -**Se conserva entre dos sesiones**: sí +**Valores posibles**: 0 ó 1 (0 = no guardar, 1 = guardar) -**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). +4D permite guardar de manera continua en un archivo de diagnóstico un conjunto de eventos relativos al funcionamiento interno de la aplicación. La información contenida en este archivo está destinada a la actualización de las aplicaciones 4D y puede ser analizada con ayuda de los servicios técnicos de 4D. Cuando pasa 1 en este selector, el archivo de diagnóstico, llamado *NomBase.txt*, se crea automáticamente (o abre) en la carpeta **Logs** de la base. Una vez el archivo alcance un tamaño de 10 MB, se cierra y se genera un nuevo archivo *NomBase\_N.txt*, con un número secuencial N incrementado. +Note que es posible incluir la información personalizada en este archivo con ayuda del comando [LOG EVENT](log-event.md). -### Client HTTPS port ID (40) -**Alcance**: todos los equipos 4D remotos - **Se conserva entre dos sesiones**: sí +### Direct2D get active status (74) - **Valores posibles**: 0 a 65535 +**Nota**: sólo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md "Get database parameter") y su valor no puede definirse. -**Descripción**: número de puerto TCP utilizado por los servidores web de los equipos clientes para conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). +**Descripción**: devuelve la implementación activa de Direct2D bajo Windows. -Este selector puede utilizarse para modificar por programación el puerto TCP utilizado por los servidores web de los equipos clientes para las conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). +**Valores posibles**: 0, 1, 2, 3, 4 o 5 (ver los valores del selector 69). El valor devuelto depende de la disponibilidad de Direct2D, del hardware y de la calidad Direct2D soportado por el sistema operativo. -Este selector funciona exactamente igual que el selector 39; sin embargo, aplica a todos los equipos 4D remotos utilizados como servidores web. Si quiere modificar el valor de ciertos equipos clientes únicamente, utilice la caja de diálogo de Preferencias de 4D remoto. +Por ejemplo, si ejecuta: +```4d +SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) +$mode:=Get database parameter(Direct2D get active status) +``` +- En Windows 7 y superiores, $mode vale 1 cuando el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode valdrá 3 (contexto software). +- En Windows Vista, $mode valdrá 1 si el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode toma el valor 0 (desactivando Direct2D). +- En Windows XP, $mode siempre valdrá 0 (no compatible con Direct2D). -### SQL Autocommit (43) -**Alcance**:base de datos - **Se conserva entre dos sesiones**: sí +### Direct2D status (69) - **Posibles valores**: 0 (desactivación) o 1 (activación) +**Alcance**: aplicación 4D -**Descripción**: activación o desactivación del modo SQL auto-commit. Por defecto, el valor es 0 (modo desactivado) +**Se conserva entre dos sesiones**: no - El modo auto-commit permite reforzar la integridad referencial de la base. Cuando este modo está activo, las peticiones *SELECT*, INSERT, UPDATE y *DELETE* (SIUD) se incluyen automáticamente en las transacciones cuando no se han ejecutado dentro de una transacción. Este modo igualmente puede definirse en las Preferencias de la base. +**Descripción**: modo de activación de Direct2D bajo Windows. +**Valores posibles**: una de las siguientes constantes (modo 3 por defecto): +- Direct2D Disabled (0): el modo Direct2D no está habilitado y la base de datos funciona en el modo anterior (GDI/GDIPlus). +- Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos para toda la aplicación 4D. Si este contexto no está disponible, use el contexto del software de gráficos Direct2D. +- Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. -### SQL Engine case sensitivity (44) +***Advertencia*: este selector se ofrece solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* -**Alcance**: base de datos - **Se conserva entre dos sesiones**: sí - **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) +### HTTP compression level (50) -**Descripción**: activación o desactivación de la sensibilidad a mayúsculas y minúsculas para comparaciones de cadenas efectuadas por el motor SQL. +**Alcance**: aplicación 4D -Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). +**Se conserva entre dos sesiones**: no -**Atención:* como esta opción Modifica el archivo de estructura de la base de datos y todos los procesos. Por motivos de rendimiento, se recomienda encarecidamente configurarlo solo al iniciar la base de datos.* Esta opción también se puede configurar en los ajustes de la base de datos. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -### Client log recording (45) +### HTTP compression threshold (51) -**Alcance**: equipo 4D remoto +**Alcance**: aplicación 4D - Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -**Descripción**: inicia o detiene la grabación de peticiones estándar efectuadas por el equipo cliente 4D que ejecutó el comando (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). -4D le permite registrar el historial de peticiones realizadas por el equipo cliente. Cuando este mecanismo se activa, se crean dos archivos en el equipo cliente, en la subcarpeta Logs de la carpeta local de la base. Son llamados 4DRequestsLog\_X y 4DRequestsLog\_ProcessInfo\_X, donde X es el número secuencial del historial. Una vez el archivo 4DRequestsLog alcanza un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio para la secuencia utilizando el parámetro *valor*. -Estos archivos texto almacenan en formato tabulado simple diferente información relacionada con cada petición: hora, número de proceso, tamaño de la petición, duración del proceso, etc. Esta información es particularmente útil durante la fase de desarrollo de la aplicación o con fines estadísticos. +### HTTPS Port ID (39) +**Alcance**: 4D local, 4D Server +**Se conserva entre dos sesiones**: sí -### Query by formula on server (46) +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -**Alcance**: tabla y procesos actuales - **Se conserva entre dos sesiones**: no - **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) +### Idle connections timeout (54) -**Descripción**: ubicación de la ejecución de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") para la *tabla* pasada en parámetro. +**Alcance**: aplicación 4D a menos que valor sea negativo -Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda "por fórmula" pueden ejecutarse en el servidor o en el equipo cliente: +**Se conserva entre dos sesiones:** no -en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. +**Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. +**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. -Consulte el ejemplo 2. - -**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. - - - -### Order by formula on server (47) - -**Alcance**: tabla y procesos actuales - - **Se conserva entre dos sesiones**: no - - **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) - -**Descripción**: ubicación de la ejecución del comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") para la tabla pasada en parámetro. - -Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. - -**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. - - - -### Auto synchro resources folder (48) - -**Alcance**: equipo 4D remoto - - **Se conserva entre dos sesiones**: no +Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. - **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). +Si pasa un valor positivo en *valor*, se aplicará a todas las nuevas conexiones en todos los procesos. Si pasa un valor negativo, se aplicará a las conexiones que se abran en el proceso actual. Si pasa 0, las conexiones inactivas no serán sometidas a un timeout. -**Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. +Este parámetro puede definirse del lado del cliente. Por lo general, no necesita cambiar este valor. -Cuando el contenido de la carpeta *Resources* en el servidor se ha modificado o un usuario ha solicitado la sincronización (por ejemplo vía el explorador de recursos o siguiendo la ejecución del comando [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md "NOTIFY RESOURCES FOLDER MODIFICATION")), el servidor notifica a los equipos cliente conectados. -Tres modos de sincronización son posibles del lado del cliente. El selector Auto Synchro Resources Folder se utiliza para especificar el modo a utilizar por el equipo cliente para la sesión actual: -0 (valor por defecto): sin sincronización dinámica (la petición de sincronización se ignora) 1: sincronización dinámica automática2: visualización de una caja de diálogo en los equipos clientes, con la posibilidad de efectuar o rechazar la sincronización.El modo de sincronización también puede definirse globalmente en las Preferencias de la aplicación. +### IMAP Log (119) +**Hilo seguro**: sí +**Alcance**: 4D local, 4D Server -### Query by formula joins (49) +**Se conserva entre dos sesiones**: no -**Alcance**: proceso actual +**Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). - Se conserva entre dos **sesiones**: no +**Descripción**: inicia o detiene la grabación de los intercambios entre 4D y el servidor IMAP, cuando se procesa un objeto transportador a través de *IMAP\_transporter.getMail( )* o *IMAP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando se activa este mecanismo, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DIMAPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DIMAPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se sustituye directamente. Se puede definir el número inicial de la secuencia mediante el parámetro valor. Por defecto, se conservan todos los archivos, pero puede controlar el número de archivos a conservar utilizando el parámetro Circular log limitation. - **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). +Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. -**Descripción**: modo de funcionamiento de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") relativos al uso de "uniones SQL." -En las bases de datos creadas a partir de la versión 11.2 de 4D v11 SQL, estos comandos efectúan uniones basados en el modelo de uniones SQL. Este mecanismo permite modificar la selección de una tabla en función de una búsqueda efectuada en otra tabla sin que las tablas estén conectadas por una relación automática (condición necesaria en las versiones anteriores de 4D). -El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de los comandos de búsqueda por fórmula para el proceso actual: +### Is current database a project (112) -0: Utilizar los parámetros actuales de la base (valor por defecto). En bases creadas a partir de la versión 11.2 de 4D v11 SQL, las "uniones SQL" siempre se activan para las búsquedas por fórmula. En bases de datos convertidas, este mecanismo no se activa por defecto por razones de compatibilidad pero puede implementarse vía una preferencia.1: Siempre utilizar relaciones automáticas (= funcionamiento de versiones anteriores de 4D). En este modo, una relación es necesaria para definir la selección de una tabla en función de búsquedas efectuadas en otra tabla. 4D no efectúa más "uniones SQL."2: Utilizar las uniones SQL si es posible (= funcionamiento o defecto de las bases creadas en versión 11.2 y superiores de 4D v11 SQL). En este modo, 4D establece "uniones SQL" para las búsquedas por fórmula cuando la fórmula se ajusta para ello (con dos excepciones, ver la descripción del comando [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") o [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")).**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Alcance**: aplicación 4D +**Descripción**: devuelve 1 si la arquitectura de la base actual es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. -### HTTP compression level (50) -**Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +### Is host database a project (113) -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Alcance**: aplicación 4D +**Descripción**: devuelve 1 si la arquitectura de la base local es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. -### HTTP compression threshold (51) -**Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +### Is host database writable (117) -**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Nota**: solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Alcance**: aplicación 4D +**Descripción**: devuelve 1 si el archivo estructura/archivo proyecto local es editable y 0 si es de solo lectura. -### Server base process stack size (53) -**Alcance**: 4D Server - Se conserva entre dos **sesiones**: no +### Libldap version (114) - **Valores posibles**: entero largo positivo. +**Alcance**: máquina 4D actual -**Descripción**: tamaño de la pila asignada a cada proceso del sistema preferente en el servidor, expresado en bytes. El tamaño por defecto es determinado por el sistema. +**Se conserva entre dos sesiones**: no -Los procesos sistema preferente (procesos de tipo Proceso base 4D client) se cargan para controlar los procesos cliente 4D principales. El tamaño asignado por defecto a la pila de cada proceso preferente da facilidad de ejecución pero puede resultar consecuente cuando se crea un gran número de procesos (varios cientos). +**Descripción**: devuelve el número de versión de la librería LDAP en la aplicación 4D en la máquina actual. (Solo lectura) -Por razones de optimización, este tamaño puede reducirse considerablemente si las operaciones efectuadas por la base lo permiten (por ejemplo si la base no efectúa ordenaciones de grandes cantidades de registros). Son posibles valores de 512 o incluso 256 KB. Sea cuidadoso, subdimensionar la pila es critico y puede afectar la operación de 4D Server. La definición de este parámetro debe hacerse con precaución y tener en cuenta las condiciones de uso de la base (número de registros, tipo de operaciones, etc.). -Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo servidor (por ejemplo en el *Método base On Server Startup*). +### Libsasl version (115) +**Alcance**: máquina 4D actual -### Idle connections timeout (54) +**Se conserva entre dos sesiones**: no -**Alcance**: aplicación 4D a menos que valor sea negativo +**Descripción**: devuelve el número de versión de la librería SASL en la aplicación 4D en la máquina actual. (Solo lectura) -**Se conserva entre dos sesiones:** no -**Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -**Descripción**: máximo periodo de inactividad para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. +### Libzip version (120) -Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. +**Alcance**: máquina 4D actual -Si pasa un valor positivo en *valor*, se aplicará a todas las nuevas conexiones en todos los procesos. Si pasa un valor negativo, se aplicará a las conexiones que se abran en el proceso actual. Si pasa 0, las conexiones inactivas no serán sometidas a un timeout. +**Se conserva entre dos sesiones**: n/a -Este parámetro puede definirse del lado del cliente. Por lo general, no necesita cambiar este valor. +**Descripción**: devuelve el número de versión de la librería libzip en la aplicación 4D en la máquina actual. (Sólo lectura) -### PHP interpreter IP address (55) +### Log command list (80) **Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no - -**Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). - -**Descripción**: dirección IP utilizada localmente por 4D para comunicarse con el intérprete PHP vía FastCGI. Por defecto, el valor es "127.0.0.1". Esta dirección debe corresponder a la máquina donde en encuentra 4D. Este parámetro también puede definirse globalmente para todas las máquinas vía las Propiedades de la base. - -Para mayor información sobre el intérprete PHP, por favor consulte el manual de *Diseño*. - - +**Se conserva entre dos sesiones**: no -### PHP interpreter port (56) +**Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. -**Alcance**: aplicación 4D +**Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. - **Se conserva entre dos sesiones**: no +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: -**Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. +```4d + SET DATABASE PARAMETER(Log command list;"277;341") //Graba solo los comandos QUERY y QUERY SELECTION + SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluye los comandos SET USER ALIAS y DELAY PROCESS de ser grabados +``` -**Descripción**: número de puerto TCP utilizado o por el intérprete PHP de 4D. Este parámetro también puede modificarse globalmente para todos los equipos vía las Propiedades de la base. Para mayor información sobre el intérprete PHP, consulte el manual de *Diseño*. +### Max concurrent Web processes (18) +**Alcance**: 4D local, 4D Server -### SSL cipher list (64) +**Se conserva entre dos sesiones**: sí -**Alcance**: Aplicación 4D +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -Se conserva entre dos sesiones: No -**Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. +### Maximum Web requests size (27) -Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). +**Alcance**: 4D local, 4D Server -Cuando la lista de cifrado se modifica, debe reiniciar el servidor correspondiente para que los nuevos parámetros sean tenidos en cuenta. +**Se conserva entre dos sesiones**: sí -Para reinicializar la lista de cifrado a su valor por defecto (guardado permanentemente en el archivo SLI), llame al comando [SET DATABASE PARAMETER](set-database-parameter.md) y pase una cadena vacía ("") en el parámetro *valor*. +**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -**Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. +### Min TLS version (105) -### Cache unload minimum size (66) +**Alcance**: 4D Server, 4D Web Server y 4D SQL Server -**Alcance**: aplicación 4D +**Conservar entre dos sesiones**: no -**Se conserva entre dos sesiones**: no +**Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. -**Valores posibles**: Entero largo positivo > 1. +**Valor por defecto**: TLSv1\_3 -**Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). +**Valores posibles**: +- TLSv1\_2 (TLS 1.2, introducido en 2008) +- TLSv1\_3 (TLS 1.3, introducido en 2018) -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. +**NOTAS**: -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio. +- El plugin 4D Internet Commands utiliza una capa de red diferente, por lo que este selector no tendrá ningún impacto en su versión TLS. +- Se ignorarán los intentos de aplicar TLS a la capa de red heredada. -### Direct2D status (69) +### Number of formulas in cache (92) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: no - -**Descripción**: modo de activación de Direct2D bajo Windows. - -**Valores posibles**: una de las siguientes constantes (modo 3 por defecto): - -Direct2D Disabled (0): el modo Direct2D no está habilitado y la base de datos funciona en el modo anterior (GDI/GDIPlus). - -Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos para toda la aplicación 4D. Si este contexto no está disponible, use el contexto del software de gráficos Direct2D. - -Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. - -***Advertencia* : este selector se proporciona solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* - +**Se conserva entre dos sesiones:** no +**Valores posibles**: enteros largos positivos -### Direct2D get active status (74) +**Valor por defecto**: 0 (sin caché) -**Nota**: sólo puede utilizar este selector con el comando Get database parameter y su valor no puede definirse. +**Descripción**: establece u obtiene el número máximo de fórmulas a conservar en la memoria caché de fórmulas, que es utilizado por el comando [EXECUTE FORMULA](execute-formula.md). Este límite se aplica a todos los procesos, pero cada proceso tiene su propia caché de fórmulas. Ubicar las fórmulas en la caché acelera la ejecución del comando [EXECUTE FORMULA](execute-formula.md) en modo compilado, ya que cada fórmula en caché se tokeniza sólo una vez en este caso.Cuando se cambia el valor de la memoria caché, el contenido existente se restablecen incluso si el nuevo tamaño es más grande que el anterior. Una vez se alcanza el número máximo de fórmulas en la memoria caché, una nueva fórmula ejecutada borrará a la más antigua de la memoria caché (modo FIFO). Este parámetro sólo se tiene en cuenta en las bases o componentes compilados. -**Descripción**: devuelve la implementación activa de Direct2D bajo Windows. -**Valores posibles**: 0, 1, 2, 3, 4 o 5 (ver los valores del selector 69). El valor devuelto depende de la disponibilidad de Direct2D, del hardware y de la calidad Direct2D soportado por el sistema operativo. -Por ejemplo, si ejecuta: - -  SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) +### OpenSSL version (94) -- En Windows 7 y superiores, $mode vale 1 cuando el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode valdrá 3 (contexto software). +**Alcance**: todas las máquinas 4D -- En Windows Vista, $mode valdrá 1 si el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode toma el valor 0 (desactivando Direct2D). +**Se conserva entre dos sesiones**: no -- En Windows XP, $mode siempre valdrá 0 (no compatible con Direct2D). +**Descripción**: devuelve el número de versión de la librería OpenSSL que se utiliza en la máquina. (Solo lectura) -### Diagnostic log recording (79) +### Order by formula on server (47) -**Hilo seguro**: sí +**Alcance**: tabla y procesos actuales -**Alcance**: Aplicación 4D + **Se conserva entre dos sesiones**: no -**Se conserva entre dos sesiones**: No + **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) -**Valores posibles**: 0 ó 1 (0 = no guardar,1 = guardar) +**Descripción**: ubicación de la ejecución del comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") para la tabla pasada en parámetro. -**Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). +Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. -4D permite guardar de manera continua en un archivo de diagnóstico un conjunto de eventos relativos al funcionamiento interno de la aplicación. La información contenida en este archivo está destinada a la actualización de las aplicaciones 4D y puede ser analizada con ayuda de los servicios técnicos de 4D. Cuando pasa 1 en este selector, el archivo de diagnóstico, llamado *NomBase.txt*, se crea automáticamente (o abre) en la carpeta **Logs** de la base. Una vez el archivo alcance un tamaño de 10 MB, se cierra y se genera un nuevo archivo *NomBase\_N.txt*, con un número secuencial N incrementado. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -Note que es posible incluir la información personalizada en este archivo con ayuda del comando [LOG EVENT](log-event.md). +### Pause logging (121) -### Log command list (80) +**Hilo seguro**: sí **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: no +**Se mantiene entre dos sesiones**: no -**Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. +**Valores posibles**: 0 (reanudar historial), 1 (pausar historial) -**Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. +Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. -Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: - SET DATABASE PARAMETER(Log command list;"277;341") //Grabar solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluir SET USER ALIAS y DELAY PROCESS commands from being recorded - - -### Spellchecker (81) +### PHP interpreter IP address (55) **Alcance**: Aplicación 4D - **Se conserva entre dos sesiones**: No - - **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. +**Se conserva entre dos sesiones**: no -**Descripción**: permite activar el corrector ortográfico Hunspell bajo macOS. Por defecto, en esta plataforma el corrector nativo está activo. Puede preferir utilizar el corrector Hunspell, por ejemplo, para unificar la interfaz de sus aplicaciones multiplataformas (bajo Windows, sólo el corrector Hunspell está disponible). Para mayor información, consulte *Corrección ortográfica*. +**Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). +**Descripción**: dirección IP utilizada localmente por 4D para comunicarse con el intérprete PHP vía FastCGI. Por defecto, el valor es "127.0.0.1". Esta dirección debe corresponder a la máquina donde en encuentra 4D. Este parámetro también puede definirse globalmente para todas las máquinas vía las Propiedades de la base. +Para mayor información sobre el intérprete PHP, por favor consulte el manual de *Diseño*. -### Dates inside objects (85) -**Alcance**: proceso actual - **Se conserva entre dos sesiones**: no +### PHP interpreter port (56) - **Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) +**Alcance**: aplicación 4D -**Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. + **Se conserva entre dos sesiones**: no -Cuando el valor del selector es Date type (valor predeterminado para las bases creadas con 4D v17 y superior), las fechas 4D se almacenan con el tipo de fecha dentro de los objetos, con respecto a la configuración de fecha local. Cuando se convierte a formato JSON, los atributos de fecha se convertirán en cadenas que no incluyen un tiempo. (**Nota:** esta configuración se puede definir mediante la opción "Utilizar tipo de fecha en lugar del formato de fecha ISO en objetos" que se encuentra en *Página Compatibilidad* de la configuración de la base). +**Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. -Si pasa String type with time zone en este selector, convertirá las fechas 4D en cadenas ISO y tendrá en cuenta la zona horaria local. Por ejemplo, la conversión de la fecha 23/08/2013 le da "2013-08-22T22: 00: 000Z" en formato JSON cuando la operación se realiza en Francia durante el horario de verano (GMT+ 2). Este principio se ajusta al funcionamiento estándar de JavaScript. Esto puede ser una fuente de errores cuando desea enviar valores de fecha JSON a alguien en un huso horario diferente. Por ejemplo, cuando exporta una tabla usando [Selection to JSON](selection-to-json.md) en Francia que se debe reimportar en los EE. UU. utilizando [JSON TO SELECTION](json-to-selection.md). Dado que las fechas se vuelven a interpretar en cada zona horaria, los valores almacenados en la base de datos serán diferentes. En este caso, puede modificar el modo de conversión de las fechas para que no tengan en cuenta la zona horaria pasando String type without time zone en este selector. La conversión de la fecha 23/08/2013 le dará "2013-08-23T00: 00: 00Z" en todos los casos. +**Descripción**: número de puerto TCP utilizado o por el intérprete PHP de 4D. Este parámetro también puede modificarse globalmente para todos los equipos vía las Propiedades de la base. Para mayor información sobre el intérprete PHP, consulte el manual de *Diseño*. -### Diagnostic log level (86) +### POP3 Log (116) **Hilo seguro**: sí -**Alcance**: aplicación 4D +**Alcance:** 4D local, 4D Server **Se conserva entre dos sesiones**: no -**Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. - -**Valores posibles**: una de las siguientes constantes (Log info por defecto): Log trace: activa ERROR, WARN, INFO, DEBUG, TRACE (nivel más detallado) Log debug: activa ERROR, WARN, INFO, DEBUG Log info: activa ERROR, WARN, INFO (por defecto) Log warn: activa ERROR, WARN Log error: activa ERROR (nivel menos detallado) - - - -### Use legacy network layer (87) - -**Alcance:** 4D en modo local, 4D Server** - -**Se conserva entre dos sesiones:** sí** - - **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). - -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). - -**Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) - -**Valor por defecto:** 0 en bases de datos creadas con 4D v14 R5 o superior, 1 en bases de datos convertidas de 4D v14 R4 o anteriores. - +**Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. -### SQL Server Port ID (88) +Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. -**Alcance**: 4D modo local y 4D Server. -**Se conserva entre dos sesiones:** sí** -**Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. +### Port ID (15) -**Valores posibles:** 0 a 65535. +**Alcance**: 4D local, 4D Server -**Valor por defecto:** 19812 +**Se conserva entre dos sesiones**: no +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, que puede ser definido en la página "Web/Configuración" de la caja de diálogo Preferencias, es 80. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. +El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* -### Circular log limitation (90) -**Hilo seguro**: sí -**Alcance**: 4D local, 4D Server. +### Query by formula joins (49) -**Se conserva entre dos sesiones:** no +**Alcance**: proceso actual -**Valores posibles**: todo valor entero, 0 = conservar todos los registros + **Se conserva entre dos sesiones**: no -**Descripción**: número máximo de archivos a conservar en rotación para cada tipo de registro. Por defecto, todos los archivos se conservan. Si pasa un valor *X*, solo los *X* archivos más recientes se conservan, el más antiguo se borra automáticamente cuando se crea uno nuevo. Esta parametrización se aplica a cada uno de los siguientes archivos de registro: registros de peticiones (selectores 28 y 45), registro de depuración (selector 34), registro de eventos (selector 79), así como el historial de peticiones web (selectores 29 y 84 del comando [WEB SET OPTION](web-set-option.md)), etc. + **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). +**Descripción**: modo de funcionamiento de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") relativos al uso de "uniones SQL." +En las bases de datos creadas a partir de la versión 11.2 de 4D v11 SQL, estos comandos efectúan uniones basados en el modelo de uniones SQL. Este mecanismo permite modificar la selección de una tabla en función de una búsqueda efectuada en otra tabla sin que las tablas estén conectadas por una relación automática (condición necesaria en las versiones anteriores de 4D). -### Number of formulas in cache (92) +El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de los comandos de búsqueda por fórmula para el proceso actual: -**Alcance**: aplicación 4D +- 0: Utilizar los parámetros actuales de la base (valor por defecto). En bases creadas a partir de la versión 11.2 de 4D v11 SQL, las "uniones SQL" siempre se activan para las búsquedas por fórmula. En bases de datos convertidas, este mecanismo no se activa por defecto por razones de compatibilidad pero puede implementarse vía una preferencia. +- 1: Siempre utilizar relaciones automáticas (= funcionamiento de versiones anteriores de 4D). En este modo, una relación es necesaria para definir la selección de una tabla en función de búsquedas efectuadas en otra tabla. 4D no efectúa más "uniones SQL."2: Utilizar las uniones SQL si es posible (= funcionamiento o defecto de las bases creadas en versión 11. +- 2 y superiores de 4D v11 SQL). En este modo, 4D establece "uniones SQL" para las búsquedas por fórmula cuando la fórmula se ajusta para ello (con dos excepciones, ver la descripción del comando [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") o [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")).**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -**Se conserva entre dos sesiones:** no -**Valores posibles**: enteros largos positivos -**Valor por defecto**: 0 (sin caché) +### Query by formula on server (46) -**Descripción**: establece u obtiene el número máximo de fórmulas a conservar en la memoria caché de fórmulas, que es utilizado por el comando [EXECUTE FORMULA](execute-formula.md). Este límite se aplica a todos los procesos, pero cada proceso tiene su propia caché de fórmulas. Ubicar las fórmulas en la caché acelera la ejecución del comando [EXECUTE FORMULA](execute-formula.md) en modo compilado, ya que cada fórmula en caché se tokeniza sólo una vez en este caso.Cuando se cambia el valor de la memoria caché, el contenido existente se restablecen incluso si el nuevo tamaño es más grande que el anterior. Una vez se alcanza el número máximo de fórmulas en la memoria caché, una nueva fórmula ejecutada borrará a la más antigua de la memoria caché (modo FIFO). Este parámetro sólo se tiene en cuenta en las bases o componentes compilados. +**Alcance**: tabla y procesos actuales + **Se conserva entre dos sesiones**: no + **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) -### OpenSSL version (94) +**Descripción**: ubicación de la ejecución de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") para la *tabla* pasada en parámetro. -**Alcance**: todas las máquinas 4D +Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda "por fórmula" pueden ejecutarse en el servidor o en el equipo cliente: -**Se conserva entre dos sesiones**: no +en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -**Descripción**: devuelve el número de versión de la librería OpenSSL que se utiliza en la máquina. (Solo lectura) +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. +Consulte el ejemplo 2. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -### Cache flush periodicity (95) -**Hilo seguro**: sí +### RDP optimization (133) -**Alcance**: 4D local, 4D Server +**Alcance:** aplicación 4D -**Se conserva entre dos sesiones:** no +**Se mantiene entre dos sesiones**: no -**Valores posibles:** entero largo > 1 (segundos) +**Valores posibles:** `0`: activado (por defecto), `1`: desactivado. -**Descripción**: obtiene o establece la periodicidad del vaciado de la caché, expresado en segundos. La modificación de este valor prevalece sobre la opción **Vaciar caché cada X segundos** en [XML DECODE](xml-decode.md) de la configuración de la base para la sesión (que no se almacena en las Propiedades de la base). +**Descripción:** activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). @@ -723,249 +748,223 @@ El tiempo de espera de la conexión remota se aplica después de que una máquin -### Tips enabled (101) - -**Alcance**: aplicación 4D - -**Se conserva entre dos sesiones**: no - -**Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) - -**Descripción**: define u obtiene el estado de visualización actual de los consejos para la aplicación 4D. De forma predeterminada, las sugerencias están activadas. - -Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los mensajes de ayuda de formulario y las sugerencias del editor de modo Diseño. - +### Server base process stack size (53) +**Alcance**: 4D Server -### Tips delay (102) + **Se conserva entre dos sesiones**: no -**Alcance**: aplicación 4D + **Valores posibles**: entero largo positivo. -**Se conserva entre dos sesiones**: No +**Descripción**: tamaño de la pila asignada a cada proceso del sistema preferente en el servidor, expresado en bytes. El tamaño por defecto es determinado por el sistema. -**Valores posibles**: entero largo >= 0 (tics) +Los procesos sistema preferente (procesos de tipo Proceso base 4D client) se cargan para controlar los procesos cliente 4D principales. El tamaño asignado por defecto a la pila de cada proceso preferente da facilidad de ejecución pero puede resultar consecuente cuando se crea un gran número de procesos (varios cientos). -**Descripción**: retraso antes de que se muestren las sugerencias una vez que el cursor del ratón se haya detenido en objetos con mensajes de ayuda adjuntos. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 45 tics (0.75 segundos). +Por razones de optimización, este tamaño puede reducirse considerablemente si las operaciones efectuadas por la base lo permiten (por ejemplo si la base no efectúa ordenaciones de grandes cantidades de registros). Son posibles valores de 512 o incluso 256 KB. Sea cuidadoso, subdimensionar la pila es critico y puede afectar la operación de 4D Server. La definición de este parámetro debe hacerse con precaución y tener en cuenta las condiciones de uso de la base (número de registros, tipo de operaciones, etc.). +Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo servidor (por ejemplo en el *Método base On Server Startup*). -### Tips duration (103) -**Alcance**: aplicación 4D +### SMTP Log (110) -**Se conserva entre dos sesiones**: No +**Hilo seguro**: sí -**Valores posibles**: entero largo >= 60 (tics) +**Alcance**: 4D local, 4D Server* -**Descripción**: duración máxima de visualización de una sugerencia. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 720 tics (12 segundos). +* **Se conserva entre dos sesiones**: no + **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor SMTP, cuando un objeto *transportador* se procesa a través de *transporter.send( )* o *SMTP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DSMTPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DSMTPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. De forma predeterminada, todos los archivos se conservan, pero puede controlar la cantidad de archivos a seguir utilizando el parámetro Circular log limitation. -### Min TLS version (105) +Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. -**Alcance**: 4D Server, 4D Web Server y 4D SQL Server -**Conservar entre dos sesiones**: No -**Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. +### Spellchecker (81) -**Valor por defecto**: TLSv1\_3 +**Alcance**: aplicación 4D -**Valores posibles**: TLSv1\_2 (TLS 1.2, introducido en 2008) TLSv1\_3 (TLS 1.3, introducido en 2018) **NOTAS**: + **Se conserva entre dos sesiones**: no -- El plugin 4D Internet Commands utiliza una capa de red diferente, por lo que este selector no tendrá ningún impacto en su versión TLS. + **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. -- Se ignorarán los intentos de aplicar TLS a la capa de red heredada. +**Descripción**: permite activar el corrector ortográfico Hunspell bajo macOS. Por defecto, en esta plataforma el corrector nativo está activo. Puede preferir utilizar el corrector Hunspell, por ejemplo, para unificar la interfaz de sus aplicaciones multiplataformas (bajo Windows, sólo el corrector Hunspell está disponible). Para mayor información, consulte *Corrección ortográfica*. -### User param value (108) +### SQL Autocommit (43) -**Alcance**: 4D local, 4D Server +**Alcance**: base de datos -**Se conserva entre dos sesiones**: no + **Se conserva entre dos sesiones**: sí -**Valores posibles**: toda cadena personalizada + **Posibles valores**: 0 (desactivación) o 1 (activación) -**Descripción:** cadena personalizada pasada de una sesión a la siguiente cuando se reinicia la aplicación 4D. Este selector es útil en el contexto de pruebas unitarias automatizadas que requieren que las aplicaciones se reinicien con diferentes parámetros. +**Descripción**: activación o desactivación del modo SQL auto-commit. Por defecto, el valor es 0 (modo desactivado) -Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), define un nuevo valor que estará disponible en la próxima base de datos abierta después de que 4D se reinicie manualmente o utilizando los comandos [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), o [RESTART 4D](restart-4d.md). Cuando se utiliza con [Get database parameter](get-database-parameter.md), obtiene el valor del parámetro de usuario actualmente disponible, definido mediante una línea de comando (ver *Interfaz de línea de comando*), el archivo .4DLink (ver *Usar un archivo 4DLink*), o una llamada a [SET DATABASE PARAMETER](set-database-parameter.md) durante la sesión anterior. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) define un User param value antes de una llamada a [OPEN DATABASE](open-database.md) con un archivo .4DLink que también contiene un atributo xml user-param, 4D 4D tiene en cuenta solo el parámetro ofrecido por [SET DATABASE PARAMETER](set-database-parameter.md). + El modo auto-commit permite reforzar la integridad referencial de la base. Cuando este modo está activo, las peticiones *SELECT*, INSERT, UPDATE y *DELETE* (SIUD) se incluyen automáticamente en las transacciones cuando no se han ejecutado dentro de una transacción. Este modo igualmente puede definirse en las Preferencias de la base. -### Times inside objects (109) +### SQL Engine case sensitivity (44) -Alcance: 4D local, 4D Server (todos los procesos) +**Alcance**: base de datos - Se conserva entre dos **sesiones**: No + **Se conserva entre dos sesiones**: sí - **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) + **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) -**Descripción**: define la forma en que los valores de tipo hora se convierten y almacenan dentro de las propiedades de los objetos y los elementos de la colección, así como la forma en que se importan/exportan en JSON y en las áreas web. Por defecto, a partir de 4D v17, las horas se convierten y almacenan en número de segundos en los objetos. +**Descripción**: activación o desactivación de la sensibilidad a mayúsculas y minúsculas para comparaciones de cadenas efectuadas por el motor SQL. -En versiones anteriores, los valores de tiempo se convertían y almacenaban como cantidad de milisegundos en esos contextos. Usar este selector puede ayudarlo a migrar sus aplicaciones volviendo a la configuración anterior si es necesario. +Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). -**Nota**: los métodos ORDA y el motor SQL ignoran esta configuración, siempre suponen que los valores de tiempo son números de segundos. +Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subform-container.md) de las Preferencias de la base. -### SMTP Log (110) +### SQL Server Port ID (88) -**Hilo seguro**: sí +**Alcance**: 4D modo local y 4D Server. -**Alcance**: 4D local, 4D Server* +: Sí -* **Se conserva entre dos sesiones**: no +**Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. - **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). +**Valores posibles:** 0 a 65535. -**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor SMTP, cuando un objeto *transportador* se procesa a través de *transporter.send( )* o *SMTP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DSMTPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DSMTPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. De forma predeterminada, todos los archivos se conservan, pero puede controlar la cantidad de archivos a seguir utilizando el parámetro Circular log limitation. +**Valor por defecto:** 19812 -Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. +### SSL cipher list (64) -### Current process debug log recording (111) +**Alcance**: Aplicación 4D -**Alcance:** Aplicación 4D +Se conserva entre dos sesiones: No -**Se conserva entre dos sesiones:** No +**Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. +Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. -**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. +Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). +Cuando la lista de cifrado se modifica, debe reiniciar el servidor correspondiente para que los nuevos parámetros sean tenidos en cuenta. +Para reinicializar la lista de cifrado a su valor por defecto (guardado permanentemente en el archivo SLI), llame al comando [SET DATABASE PARAMETER](set-database-parameter.md) y pase una cadena vacía ("") en el parámetro *valor*. -### Is current database a project (112) +**Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. -**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +### Table sequence number (31) **Alcance**: aplicación 4D -**Descripción**: devuelve 1 si la arquitectura de la base actual es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. - - + **Se conserva entre dos sesiones**: sí -### Is host database a project (113) + **Valores posibles**: todo valor de tipo entero largo. -**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Descripción**: este selector se utiliza para modificar o modificar u obtener el número único actual de los registros de la tabla pasada en parámetro. "Número actual" significa "último número utilizado": si modifica este valor utilizando SET DATABASE PARAMETER, el siguiente registro será el valor pasado + 1\. Este nuevo número es el número devuelto por el comando Sequence number [](http://doc.tmp.4d.fr/Database-Parameters/4Dv11.4/ConstantTheme/4870/CMU00244.HTM) como también en todo campo de la tabla a la cual se asigna la propiedad "Autoincrementar" en el editor de estructura o vía SQL. -**Alcance**: aplicación 4D +Por defecto, este número único es definido por 4D y corresponde al orden de creación de los registros. Para información adicional, por favor consulte la documentación del comando [Sequence number](sequence-number.md "Sequence number"). -**Descripción**: devuelve 1 si la arquitectura de la base local es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. +### TCPUDP log recording (131) -### Libldap version (114) +**Alcance:** aplicación 4D -**Alcance**: máquina 4D actual +**Se mantiene entre dos sesiones**: no -**Se conserva entre dos sesiones**: no +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. -**Descripción**: devuelve el número de versión de la librería LDAP en la aplicación 4D en la máquina actual. (Solo lectura) +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para registrar eventos TCP. -### Libsasl version (115) +### Times inside objects (109) -**Alcance**: máquina 4D actual +**Alcance**: 4D local, 4D Server (todos los procesos) -**Se conserva entre dos sesiones**: no + **Se conserva entre dos sesiones**: no -**Descripción**: devuelve el número de versión de la librería SASL en la aplicación 4D en la máquina actual. (Solo lectura) + **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) +**Descripción**: define la forma en que los valores de tipo hora se convierten y almacenan dentro de las propiedades de los objetos y los elementos de la colección, así como la forma en que se importan/exportan en JSON y en las áreas web. Por defecto, a partir de 4D v17, las horas se convierten y almacenan en número de segundos en los objetos. +En versiones anteriores, los valores de tiempo se convertían y almacenaban como cantidad de milisegundos en esos contextos. Usar este selector puede ayudarlo a migrar sus aplicaciones volviendo a la configuración anterior si es necesario. -### POP3 Log (116) +**Nota**: los métodos ORDA y el motor SQL ignoran esta configuración, siempre suponen que los valores de tiempo son números de segundos. -**Hilo seguro**: sí -**Alcance:** 4D local, 4D Server -**Se conserva entre dos sesiones**: no +### Tips delay (102) -**Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). +**Alcance**: aplicación 4D -**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. +**Se conserva entre dos sesiones**: No -Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. +**Valores posibles**: entero largo >= 0 (tics) +**Descripción**: retraso antes de que se muestren las sugerencias una vez que el cursor del ratón se haya detenido en objetos con mensajes de ayuda adjuntos. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 45 tics (0.75 segundos). -### Is host database writable (117) -**Nota**: solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +### Tips duration (103) **Alcance**: aplicación 4D -**Descripción**: devuelve 1 si el archivo estructura/archivo proyecto local es editable y 0 si es de solo lectura. - - - -### IMAP Log (119) - -**Hilo seguro**: sí - -**Alcance**: 4D local, 4D Server - **Se conserva entre dos sesiones**: No -**Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). - -**Descripción**: inicia o detiene la grabación de los intercambios entre 4D y el servidor IMAP, cuando se procesa un objeto transportador a través de *IMAP\_transporter.getMail( )* o *IMAP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando se activa este mecanismo, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DIMAPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DIMAPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se sustituye directamente. Se puede definir el número inicial de la secuencia mediante el parámetro valor. Por defecto, se conservan todos los archivos, pero puede controlar el número de archivos a conservar utilizando el parámetro Circular log limitation. - -Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. - +**Valores posibles**: entero largo >= 60 (tics) +**Descripción**: duración máxima de visualización de una sugerencia. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 720 tics (12 segundos). -### Libzip version (120) -**Alcance**: máquina 4D actual -**Se conserva entre dos sesiones**: n/a - -**Descripción**: devuelve el número de versión de la librería libzip en la aplicación 4D en la máquina actual. (Sólo lectura) +### Tips enabled (101) +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Pause logging (121) +**Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) -**Hilo seguro**: sí +**Descripción**: define u obtiene el estado de visualización actual de los consejos para la aplicación 4D. De forma predeterminada, las sugerencias están activadas. -**Alcance**: aplicación 4D +Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los mensajes de ayuda de formulario y las sugerencias del editor de modo Diseño. -**Se mantiene entre dos sesiones**: no -**Valores posibles**: 0 (reanudar historial), 1 (pausar historial) -Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. +### Use legacy network layer (87) +**Alcance:** 4D en modo local, 4D Server** +**Se conserva entre dos sesiones:** sí -### TCPUDP log recording (131) +**Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -**Alcance**: aplicación 4D +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). -**Se mantiene entre dos sesiones**: no +**Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) -**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. +**Valor por defecto:** 0 en bases de datos creadas con 4D v14 R5 o superior, 1 en bases de datos convertidas de 4D v14 R4 o anteriores. -**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para los eventos logging TCP. +### User param value (108) -### RDP optimization +**Alcance**: 4D local, 4D Server -**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -**Se mantiene entre dos sesiones**: no +**Valores posibles**: toda cadena personalizada -**Valores posibles:** `0`: Disabled (default), `1`: Enabled. +**Descripción:** cadena personalizada pasada de una sesión a la siguiente cuando se reinicia la aplicación 4D. Este selector es útil en el contexto de pruebas unitarias automatizadas que requieren que las aplicaciones se reinicien con diferentes parámetros. -**Descripción:** Activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). +Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), define un nuevo valor que estará disponible en la próxima base de datos abierta después de que 4D se reinicie manualmente o utilizando los comandos [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), o [RESTART 4D](restart-4d.md). Cuando se utiliza con [Get database parameter](get-database-parameter.md), obtiene el valor del parámetro de usuario actualmente disponible, definido mediante una línea de comando (ver *Interfaz de línea de comando*), el archivo .4DLink (ver *Usar un archivo 4DLink*), o una llamada a [SET DATABASE PARAMETER](set-database-parameter.md) durante la sesión anterior. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) define un User param value antes de una llamada a [OPEN DATABASE](open-database.md) con un archivo .4DLink que también contiene un atributo xml user-param, 4D 4D tiene en cuenta solo el parámetro ofrecido por [SET DATABASE PARAMETER](set-database-parameter.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md index b2223dee64a5c1..e266448f1d160a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md @@ -21,6 +21,34 @@ displayed_sidebar: docs El *selector* designa el parámetro a modificar. 4D ofrece constantes predefinidas, las cuales se ubican en el tema *Parámetros de la base*. La siguiente tabla lista cada constante, describe su alcance e indica si los cambios realizados se conservan entre dos sesiones: +### 4D Remote mode timeout (14) + +**Alcance** (antigua capa de red únicamente): aplicación 4D si valor positivo + +**Se conserva entre dos sesiones**: sí si *valor* positivo + +**Descripción**: a utilizar en casos muy específicos. Valor del timeout otorgado por el equipo 4D remoto a la máquina 4D Server. Por defecto, este valor se define en la página "Cliente-Servidor/Configuración" de la caja de diálogo de Preferencias en el equipo remoto. + +El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua capa de red. Con la capa 4D *ServerNet* activada, se ignora: esta configuración es administrada por el selector Timeout 4D Server (13). + + + +### 4D Server log recording (28) + +**Hilo seguro**: sí + +**Alcance**: 4D Server, 4D remoto* + +**Se conserva entre dos sesiones**: no + + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + +**Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). + +4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. + +Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. + ### 4D Server timeout (13) **Alcance**: aplicación 4D si *valor* positivo @@ -39,27 +67,52 @@ Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global -### 4D Remote mode timeout (14) +### Auto synchro resources folder (48) -**Alcance** (antigua capa de red únicamente): aplicación 4D si valor positivo +**Alcance**:equipo 4D remoto -**Se conserva entre dos sesiones**: sí si *valor* positivo + **Se conserva entre dos sesiones**: no -**Descripción**: a utilizar en casos muy específicos. Valor del timeout otorgado por el equipo 4D remoto a la máquina 4D Server. Por defecto, este valor se define en la página "Cliente-Servidor/Configuración" de la caja de diálogo de Preferencias en el equipo remoto. + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). -El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua capa de red. Con la capa 4D *ServerNet* activada, se ignora: esta configuración es administrada por el selector Timeout 4D Server (13). +**Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. + +Cuando el contenido de la carpeta *Resources* en el servidor se ha modificado o un usuario ha solicitado la sincronización (por ejemplo vía el explorador de recursos o siguiendo la ejecución del comando [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md "NOTIFY RESOURCES FOLDER MODIFICATION")), el servidor notifica a los equipos cliente conectados. +Tres modos de sincronización son posibles del lado del cliente. El selector Auto Synchro Resources Folder se utiliza para especificar el modo a utilizar por el equipo cliente para la sesión actual: + +0 (valor por defecto): sin sincronización dinámica (la petición de sincronización se ignora) 1: sincronización dinámica automática2: visualización de una caja de diálogo en los equipos clientes, con la posibilidad de efectuar o rechazar la sincronización.El modo de sincronización también puede definirse globalmente en las Preferencias de la aplicación. -### Port ID (15) + +### Cache flush periodicity (95) + +**Hilo seguro**: sí + **Alcance**: 4D local, 4D Server +**Se conserva entre dos sesiones:** no + +**Valores posibles:** entero largo > 1 (segundos) + +**Descripción**: obtiene o establece la periodicidad del vaciado de la caché, expresado en segundos. La modificación de este valor prevalece sobre la opción **Vaciar caché cada X segundos** en [XML DECODE](xml-decode.md) de la configuración de la base para la sesión (que no se almacena en las Propiedades de la base). + + + +### Cache unload minimum size (66) + +**Alcance**: aplicación 4D + **Se conserva entre dos sesiones**: no -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, que puede ser definido en la página "Web/Configuración" de la caja de diálogo Preferencias, es 80. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. +**Valores posibles**: entero largo positivo > 1. -El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* +**Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). + +El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. + +Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D @@ -73,37 +126,61 @@ El selector Port ID se utiliza en el marco de servidores web 4D compilados y fus -### Max concurrent Web processes (18) +### Circular log limitation (90) -**Alcance**: 4D local, 4D Server +**Hilo seguro**: sí -**Se conserva entre dos sesiones**: sí +**Alcance**: 4D local, 4D Server. -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Se conserva entre dos sesiones:** no +**Valores posibles**: todo valor entero, 0 = conservar todos los registros +**Descripción**: número máximo de archivos a conservar en rotación para cada tipo de registro. Por defecto, todos los archivos se conservan. Si pasa un valor *X*, solo los *X* archivos más recientes se conservan, el más antiguo se borra automáticamente cuando se crea uno nuevo. Esta parametrización se aplica a cada uno de los siguientes archivos de registro: registros de peticiones (selectores 28 y 45), registro de depuración (selector 34), registro de eventos (selector 79), así como el historial de peticiones web (selectores 29 y 84 del comando [WEB SET OPTION](web-set-option.md)), etc. -### Client port ID (22) + + +### Client character set (24) **Alcance**: todos los equipos 4D remotos **Se conserva entre dos sesiones**: sí - **Valores posibles**: ver selector 15 + **Valores posibles**: ver selector 17 -**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir valores sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. +**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir los valores sólo para algunos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. -### Client character set (24) +### Client HTTPS port ID (40) **Alcance**: todos los equipos 4D remotos **Se conserva entre dos sesiones**: sí - **Valores posibles**: ver selector 17 + **Valores posibles**: 0 a 65535 -**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir los valores sólo para algunos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. +**Descripción**: número de puerto TCP utilizado por los servidores web de los equipos clientes para conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). + +Este selector puede utilizarse para modificar por programación el puerto TCP utilizado por los servidores web de los equipos clientes para las conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). + +Este selector funciona exactamente igual que el selector 39; sin embargo, aplica a todos los equipos 4D remotos utilizados como servidores web. Si quiere modificar el valor de ciertos equipos clientes únicamente, utilice la caja de diálogo de Preferencias de 4D remoto. + + + +### Client log recording (45) + +**Alcance**:equipo 4D remoto + + **Se conserva entre dos sesiones**: no + + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). + +**Descripción**: inicia o detiene la grabación de peticiones estándar efectuadas por el equipo cliente 4D que ejecutó el comando (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). + +4D le permite registrar el historial de peticiones realizadas por el equipo cliente. Cuando este mecanismo se activa, se crean dos archivos en el equipo cliente, en la subcarpeta Logs de la carpeta local de la base. Son llamados 4DRequestsLog\_X y 4DRequestsLog\_ProcessInfo\_X, donde X es el número secuencial del historial. Una vez el archivo 4DRequestsLog alcanza un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio para la secuencia utilizando el parámetro *valor*. + +Estos archivos texto almacenan en formato tabulado simple diferente información relacionada con cada petición: hora, número de proceso, tamaño de la petición, duración del proceso, etc. Esta información es particularmente útil durante la fase de desarrollo de la aplicación o con fines estadísticos. @@ -119,31 +196,35 @@ El selector Port ID se utiliza en el marco de servidores web 4D compilados y fus -### Maximum Web requests size (27) +### Client port ID (22) -**Alcance**: 4D local, 4D Server +**Alcance**: todos los equipos 4D remotos -**Se conserva entre dos sesiones**: sí + **Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. + **Valores posibles**: ver selector 15 +**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir valores sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. -### 4D Server log recording (28) -**Hilo seguro**: sí +### Client Server port ID (35) -**Alcance**: 4D Server, 4D remoto* +**Alcance**: base de datos -**Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones**: sí - **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). +**Valores posibles**: 0 a 65535 -**Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). +**Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. + +La personalización de este valor permite utilizar varias aplicaciones 4D cliente-servidor en la misma máquina con el protocolo TCP; en este caso, debe indicar un número de puerto diferente para cada aplicación. + +El valor se guarda en el archivo de estructura de la base. Puede definirse con 4D en modo local pero sólo se tiene en cuenta en configuración cliente servidor. + +Cuando modifica este valor, es necesario reiniciar el equipo servidor para que el nuevo valor sea tenido en cuenta. -4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. -Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. ### Client Web log recording (30) @@ -159,17 +240,33 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, -### Table sequence number (31) +### Current process debug log recording (111) -**Alcance**: aplicación 4D +**Alcance:** Aplicación 4D - **Se conserva entre dos sesiones**: sí +**Se conserva entre dos sesiones:** no - **Valores posibles**: todo valor de tipo entero largo. +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. -**Descripción**: este selector se utiliza para modificar o modificar u obtener el número único actual de los registros de la tabla pasada en parámetro. "Número actual" significa "último número utilizado": si modifica este valor utilizando SET DATABASE PARAMETER, el siguiente registro será el valor pasado + 1\. Este nuevo número es el número devuelto por el comando Sequence number [](http://doc.tmp.4d.fr/Database-Parameters/4Dv11.4/ConstantTheme/4870/CMU00244.HTM) como también en todo campo de la tabla a la cual se asigna la propiedad "Autoincrementar" en el editor de estructura o vía SQL. +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. -Por defecto, este número único es definido por 4D y corresponde al orden de creación de los registros. Para información adicional, por favor consulte la documentación del comando [Sequence number](sequence-number.md "Sequence number"). +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. + + + +### Dates inside objects (85) + +**Alcance**: proceso actual + + **Se conserva entre dos sesiones:** no + + **Valores posibles**: Tipo cadena sin zona horaria (0), tipo cadena con zona horaria (1), tipo fecha (2) (por defecto) + +**Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. + +Cuando el valor del selector es Date type (valor predeterminado para las bases creadas con 4D v17 y superior), las fechas 4D se almacenan con el tipo de fecha dentro de los objetos, con respecto a la configuración de fecha local. Cuando se convierte a formato JSON, los atributos de fecha se convertirán en cadenas que no incluyen un tiempo. (**Nota:** esta configuración se puede definir mediante la opción "Utilizar tipo de fecha en lugar del formato de fecha ISO en objetos" que se encuentra en *Página Compatibilidad* de la configuración de la base). + +Si pasa String type with time zone en este selector, convertirá las fechas 4D en cadenas ISO y tendrá en cuenta la zona horaria local. Por ejemplo, la conversión de la fecha 23/08/2013 le da "2013-08-22T22: 00: 000Z" en formato JSON cuando la operación se realiza en Francia durante el horario de verano (GMT+ 2). Este principio se ajusta al funcionamiento estándar de JavaScript. Esto puede ser una fuente de errores cuando desea enviar valores de fecha JSON a alguien en un huso horario diferente. Por ejemplo, cuando exporta una tabla usando [Selection to JSON](selection-to-json.md) en Francia que se debe reimportar en los EE. UU. utilizando [JSON TO SELECTION](json-to-selection.md). Dado que las fechas se vuelven a interpretar en cada zona horaria, los valores almacenados en la base de datos serán diferentes. En este caso, puede modificar el modo de conversión de las fechas para que no tengan en cuenta la zona horaria pasando String type without time zone en este selector. La conversión de la fecha 23/08/2013 le dará "2013-08-23T00: 00: 00Z" en todos los casos. @@ -190,31 +287,24 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr **Valores posibles**: entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (valor 1) permite activar el archivo (note que cualquier otro valor no nulo también lo activará) - - Bit 1 (valor 2) permite solicitar los parámetros de llamada a los métodos y comandos. - - Bit 2 (valor 4) permite activar el nuevo formato tabulado. - - Bit 3 (valor 8) permite desactivar la escritura inmediata de cada operación en el disco (activado por defecto). La escritura inmediata es menor rápida y más eficaz por ejemplo para buscar las causas de un fallo.Si desactiva este modo, el contenido del archivo será generado más rápidamente. - - Bit 4 (valor 16) desactiva el registro de llamadas de plug-ins (activado por defecto). - - Bit 5 (valor 32) desactiva el registro de las funciones miembros. Ejemplos: +```4d SET DATABASE PARAMETER (34;1) // activa el modo estándar sin los parámetros, con las duraciones - SET DATABASE PARAMETER (34;2) // activa el modo estándar con los parámetros y las duraciones - SET DATABASE PARAMETER (34;2+4) // activa el modo tabulado con los parámetros y las duraciones - SET DATABASE PARAMETER (34;0) // desactiva el archivo +``` Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: - restringiendo los comandos 4D que se examinan utilizando Log command list (selector 80), o - - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* *Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. @@ -227,568 +317,569 @@ Este selector se ofrece únicamente con fines de depuración y debe utilizarse c -### Client Server port ID (35) +### Diagnostic log level (86) -**Alcance**: base de datos +**Hilo seguro**: sí -**Se conserva entre dos sesiones**: sí +**Alcance**: aplicación 4D -**Valores posibles**: 0 a 65535 +**Se conserva entre dos sesiones**: no -**Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. +**Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. -La personalización de este valor permite utilizar varias aplicaciones 4D cliente-servidor en la misma máquina con el protocolo TCP; en este caso, debe indicar un número de puerto diferente para cada aplicación. +**Valores posibles**: una de las siguientes constantes (Log info por defecto): Log trace: activa ERROR, WARN, INFO, DEBUG, TRACE (nivel más detallado) Log debug: activa ERROR, WARN, INFO, DEBUG Log info: activa ERROR, WARN, INFO (por defecto) Log warn: activa ERROR, WARN Log error: activa ERROR (nivel menos detallado) -El valor se guarda en el archivo de estructura de la base. Puede definirse con 4D en modo local pero sólo se tiene en cuenta en configuración cliente servidor. -Cuando modifica este valor, es necesario reiniciar el equipo servidor para que el nuevo valor sea tenido en cuenta. +### Diagnostic log recording (79) +**Hilo seguro**: sí -### HTTPS Port ID (39) +**Alcance**: aplicación 4D -**Alcance**: 4D local, 4D Server +**Se conserva entre dos sesiones**: no -**Se conserva entre dos sesiones**: sí +**Valores posibles**: 0 ó 1 (0 = no guardar, 1 = guardar) -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). +4D permite guardar de manera continua en un archivo de diagnóstico un conjunto de eventos relativos al funcionamiento interno de la aplicación. La información contenida en este archivo está destinada a la actualización de las aplicaciones 4D y puede ser analizada con ayuda de los servicios técnicos de 4D. Cuando pasa 1 en este selector, el archivo de diagnóstico, llamado *NomBase.txt*, se crea automáticamente (o abre) en la carpeta **Logs** de la base. Una vez el archivo alcance un tamaño de 10 MB, se cierra y se genera un nuevo archivo *NomBase\_N.txt*, con un número secuencial N incrementado. +Note que es posible incluir la información personalizada en este archivo con ayuda del comando [LOG EVENT](log-event.md). -### Client HTTPS port ID (40) -**Alcance**: todos los equipos 4D remotos - **Se conserva entre dos sesiones**: sí +### Direct2D get active status (74) - **Valores posibles**: 0 a 65535 +**Nota**: sólo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md "Get database parameter") y su valor no puede definirse. -**Descripción**: número de puerto TCP utilizado por los servidores web de los equipos clientes para conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). +**Descripción**: devuelve la implementación activa de Direct2D bajo Windows. -Este selector puede utilizarse para modificar por programación el puerto TCP utilizado por los servidores web de los equipos clientes para las conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). +**Valores posibles**: 0, 1, 2, 3, 4 o 5 (ver los valores del selector 69). El valor devuelto depende de la disponibilidad de Direct2D, del hardware y de la calidad Direct2D soportado por el sistema operativo. -Este selector funciona exactamente igual que el selector 39; sin embargo, aplica a todos los equipos 4D remotos utilizados como servidores web. Si quiere modificar el valor de ciertos equipos clientes únicamente, utilice la caja de diálogo de Preferencias de 4D remoto. +Por ejemplo, si ejecuta: +```4d +SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) +$mode:=Get database parameter(Direct2D get active status) +``` +- En Windows 7 y superiores, $mode vale 1 cuando el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode valdrá 3 (contexto software). +- En Windows Vista, $mode valdrá 1 si el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode toma el valor 0 (desactivando Direct2D). +- En Windows XP, $mode siempre valdrá 0 (no compatible con Direct2D). -### SQL Autocommit (43) -**Alcance**: base de datos - **Se conserva entre dos sesiones**: sí +### Direct2D status (69) - **Posibles valores**: 0 (desactivación) o 1 (activación) +**Alcance**: aplicación 4D -**Descripción**: activación o desactivación del modo SQL auto-commit. Por defecto, el valor es 0 (modo desactivado) +**Se conserva entre dos sesiones**: no - El modo auto-commit permite reforzar la integridad referencial de la base. Cuando este modo está activo, las peticiones *SELECT*, INSERT, UPDATE y *DELETE* (SIUD) se incluyen automáticamente en las transacciones cuando no se han ejecutado dentro de una transacción. Este modo igualmente puede definirse en las Preferencias de la base. +**Descripción**: modo de activación de Direct2D bajo Windows. +**Valores posibles**: una de las siguientes constantes (modo 3 por defecto): +- Direct2D Disabled (0): el modo Direct2D no está habilitado y la base de datos funciona en el modo anterior (GDI/GDIPlus). +- Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos para toda la aplicación 4D. Si este contexto no está disponible, use el contexto del software de gráficos Direct2D. +- Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. -### SQL Engine case sensitivity (44) +***Advertencia*: este selector se ofrece solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* -**Alcance**: base de datos - **Se conserva entre dos sesiones**: sí - **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) +### HTTP compression level (50) -**Descripción**: activación o desactivación de la sensibilidad a mayúsculas y minúsculas para comparaciones de cadenas efectuadas por el motor SQL. +**Alcance**: aplicación 4D -Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). +**Se conserva entre dos sesiones**: no -Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subform-container.md) de las Preferencias de la base. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -### Client log recording (45) +### HTTP compression threshold (51) -**Alcance**:equipo 4D remoto +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -**Descripción**: inicia o detiene la grabación de peticiones estándar efectuadas por el equipo cliente 4D que ejecutó el comando (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). -4D le permite registrar el historial de peticiones realizadas por el equipo cliente. Cuando este mecanismo se activa, se crean dos archivos en el equipo cliente, en la subcarpeta Logs de la carpeta local de la base. Son llamados 4DRequestsLog\_X y 4DRequestsLog\_ProcessInfo\_X, donde X es el número secuencial del historial. Una vez el archivo 4DRequestsLog alcanza un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio para la secuencia utilizando el parámetro *valor*. - -Estos archivos texto almacenan en formato tabulado simple diferente información relacionada con cada petición: hora, número de proceso, tamaño de la petición, duración del proceso, etc. Esta información es particularmente útil durante la fase de desarrollo de la aplicación o con fines estadísticos. +### HTTPS Port ID (39) +**Alcance**: 4D local, 4D Server -### Query by formula on server (46) +**Se conserva entre dos sesiones**: sí -**Alcance**: tabla y procesos actuales +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. - **Se conserva entre dos sesiones**: no - **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) -**Descripción**: ubicación de la ejecución de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") para la *tabla* pasada en parámetro. +### Idle connections timeout (54) -Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda "por fórmula" pueden ejecutarse en el servidor o en el equipo cliente: +**Alcance**: aplicación 4D a menos que valor sea negativo -en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. +**Se conserva entre dos sesiones:** no -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. +**Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -Consulte el ejemplo 2. +**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. -**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. +Si pasa un valor positivo en *valor*, se aplicará a todas las nuevas conexiones en todos los procesos. Si pasa un valor negativo, se aplicará a las conexiones que se abran en el proceso actual. Si pasa 0, las conexiones inactivas no serán sometidas a un timeout. +Este parámetro puede definirse del lado del cliente. Por lo general, no necesita cambiar este valor. -### Order by formula on server (47) -**Alcance**: tabla y procesos actuales - **Se conserva entre dos sesiones**: no +### IMAP Log (119) - **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) +**Hilo seguro**: sí -**Descripción**: ubicación de la ejecución del comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") para la tabla pasada en parámetro. +**Alcance**: 4D local, 4D Server -Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. +**Se conserva entre dos sesiones**: no -**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). +**Descripción**: inicia o detiene la grabación de los intercambios entre 4D y el servidor IMAP, cuando se procesa un objeto transportador a través de *IMAP\_transporter.getMail( )* o *IMAP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando se activa este mecanismo, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DIMAPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DIMAPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se sustituye directamente. Se puede definir el número inicial de la secuencia mediante el parámetro valor. Por defecto, se conservan todos los archivos, pero puede controlar el número de archivos a conservar utilizando el parámetro Circular log limitation. +Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. -### Auto synchro resources folder (48) -**Alcance**:equipo 4D remoto - **Se conserva entre dos sesiones**: no +### Is current database a project (112) - **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). +**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. -**Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. +**Alcance**: aplicación 4D -Cuando el contenido de la carpeta *Resources* en el servidor se ha modificado o un usuario ha solicitado la sincronización (por ejemplo vía el explorador de recursos o siguiendo la ejecución del comando [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md "NOTIFY RESOURCES FOLDER MODIFICATION")), el servidor notifica a los equipos cliente conectados. +**Descripción**: devuelve 1 si la arquitectura de la base actual es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. -Tres modos de sincronización son posibles del lado del cliente. El selector Auto Synchro Resources Folder se utiliza para especificar el modo a utilizar por el equipo cliente para la sesión actual: -0 (valor por defecto): sin sincronización dinámica (la petición de sincronización se ignora) 1: sincronización dinámica automática2: visualización de una caja de diálogo en los equipos clientes, con la posibilidad de efectuar o rechazar la sincronización.El modo de sincronización también puede definirse globalmente en las Preferencias de la aplicación. +### Is host database a project (113) +**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. -### Query by formula joins (49) +**Alcance**: aplicación 4D -**Alcance**: proceso actual +**Descripción**: devuelve 1 si la arquitectura de la base local es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. - **Se conserva entre dos sesiones**: no - **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). -**Descripción**: modo de funcionamiento de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") relativos al uso de "uniones SQL." +### Is host database writable (117) -En las bases de datos creadas a partir de la versión 11.2 de 4D v11 SQL, estos comandos efectúan uniones basados en el modelo de uniones SQL. Este mecanismo permite modificar la selección de una tabla en función de una búsqueda efectuada en otra tabla sin que las tablas estén conectadas por una relación automática (condición necesaria en las versiones anteriores de 4D). +**Nota**: solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. -El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de los comandos de búsqueda por fórmula para el proceso actual: +**Alcance**: aplicación 4D -0: Utilizar los parámetros actuales de la base (valor por defecto). En bases creadas a partir de la versión 11.2 de 4D v11 SQL, las "uniones SQL" siempre se activan para las búsquedas por fórmula. En bases de datos convertidas, este mecanismo no se activa por defecto por razones de compatibilidad pero puede implementarse vía una preferencia.1: Siempre utilizar relaciones automáticas (= funcionamiento de versiones anteriores de 4D). En este modo, una relación es necesaria para definir la selección de una tabla en función de búsquedas efectuadas en otra tabla. 4D no efectúa más "uniones SQL."2: Utilizar las uniones SQL si es posible (= funcionamiento o defecto de las bases creadas en versión 11.2 y superiores de 4D v11 SQL). En este modo, 4D establece "uniones SQL" para las búsquedas por fórmula cuando la fórmula se ajusta para ello (con dos excepciones, ver la descripción del comando [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") o [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")).**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Descripción**: devuelve 1 si el archivo estructura/archivo proyecto local es editable y 0 si es de solo lectura. -### HTTP compression level (50) +### Libldap version (114) -**Alcance**: aplicación 4D +**Alcance**: máquina 4D actual **Se conserva entre dos sesiones**: no -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: devuelve el número de versión de la librería LDAP en la aplicación 4D en la máquina actual. (Solo lectura) -### HTTP compression threshold (51) +### Libsasl version (115) -**Alcance**: aplicación 4D +**Alcance**: máquina 4D actual **Se conserva entre dos sesiones**: no -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. - +**Descripción**: devuelve el número de versión de la librería SASL en la aplicación 4D en la máquina actual. (Solo lectura) -### Server base process stack size (53) -**Alcance**: 4D Server +### Libzip version (120) - **Se conserva entre dos sesiones**: no +**Alcance**: máquina 4D actual - **Valores posibles**: entero largo positivo. +**Se conserva entre dos sesiones**: n/a -**Descripción**: tamaño de la pila asignada a cada proceso del sistema preferente en el servidor, expresado en bytes. El tamaño por defecto es determinado por el sistema. +**Descripción**: devuelve el número de versión de la librería libzip en la aplicación 4D en la máquina actual. (Sólo lectura) -Los procesos sistema preferente (procesos de tipo Proceso base 4D client) se cargan para controlar los procesos cliente 4D principales. El tamaño asignado por defecto a la pila de cada proceso preferente da facilidad de ejecución pero puede resultar consecuente cuando se crea un gran número de procesos (varios cientos). -Por razones de optimización, este tamaño puede reducirse considerablemente si las operaciones efectuadas por la base lo permiten (por ejemplo si la base no efectúa ordenaciones de grandes cantidades de registros). Son posibles valores de 512 o incluso 256 KB. Sea cuidadoso, subdimensionar la pila es critico y puede afectar la operación de 4D Server. La definición de este parámetro debe hacerse con precaución y tener en cuenta las condiciones de uso de la base (número de registros, tipo de operaciones, etc.). -Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo servidor (por ejemplo en el *Método base On Server Startup*). +### Log command list (80) +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Idle connections timeout (54) +**Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. -**Alcance**: aplicación 4D a menos que valor sea negativo +**Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. -**Se conserva entre dos sesiones:** no +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: -**Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. +```4d + SET DATABASE PARAMETER(Log command list;"277;341") //Graba solo los comandos QUERY y QUERY SELECTION + SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluye los comandos SET USER ALIAS y DELAY PROCESS de ser grabados +``` -**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. -Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. +### Max concurrent Web processes (18) -Si pasa un valor positivo en *valor*, se aplicará a todas las nuevas conexiones en todos los procesos. Si pasa un valor negativo, se aplicará a las conexiones que se abran en el proceso actual. Si pasa 0, las conexiones inactivas no serán sometidas a un timeout. +**Alcance**: 4D local, 4D Server -Este parámetro puede definirse del lado del cliente. Por lo general, no necesita cambiar este valor. +**Se conserva entre dos sesiones**: sí +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -### PHP interpreter IP address (55) -**Alcance**: Aplicación 4D +### Maximum Web requests size (27) -**Se conserva entre dos sesiones**: no +**Alcance**: 4D local, 4D Server -**Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). +**Se conserva entre dos sesiones**: sí -**Descripción**: dirección IP utilizada localmente por 4D para comunicarse con el intérprete PHP vía FastCGI. Por defecto, el valor es "127.0.0.1". Esta dirección debe corresponder a la máquina donde en encuentra 4D. Este parámetro también puede definirse globalmente para todas las máquinas vía las Propiedades de la base. +**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -Para mayor información sobre el intérprete PHP, por favor consulte el manual de *Diseño*. +### Min TLS version (105) -### PHP interpreter port (56) +**Alcance**: 4D Server, 4D Web Server y 4D SQL Server -**Alcance**: aplicación 4D +**Conservar entre dos sesiones**: no - **Se conserva entre dos sesiones**: no +**Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. -**Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. +**Valor por defecto**: TLSv1\_3 -**Descripción**: número de puerto TCP utilizado o por el intérprete PHP de 4D. Este parámetro también puede modificarse globalmente para todos los equipos vía las Propiedades de la base. Para mayor información sobre el intérprete PHP, consulte el manual de *Diseño*. +**Valores posibles**: +- TLSv1\_2 (TLS 1.2, introducido en 2008) +- TLSv1\_3 (TLS 1.3, introducido en 2018) +**NOTAS**: +- El plugin 4D Internet Commands utiliza una capa de red diferente, por lo que este selector no tendrá ningún impacto en su versión TLS. +- Se ignorarán los intentos de aplicar TLS a la capa de red heredada. -### SSL cipher list (64) -**Alcance**: Aplicación 4D -Se conserva entre dos sesiones: No +### Number of formulas in cache (92) -**Valores posibles**: secuencia de cadenas separadas por dos puntos. +**Alcance**: aplicación 4D -**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". +**Se conserva entre dos sesiones:** no -Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. +**Valores posibles**: enteros largos positivos -Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). +**Valor por defecto**: 0 (sin caché) -Cuando la lista de cifrado se modifica, debe reiniciar el servidor correspondiente para que los nuevos parámetros sean tenidos en cuenta. +**Descripción**: establece u obtiene el número máximo de fórmulas a conservar en la memoria caché de fórmulas, que es utilizado por el comando [EXECUTE FORMULA](execute-formula.md). Este límite se aplica a todos los procesos, pero cada proceso tiene su propia caché de fórmulas. Ubicar las fórmulas en la caché acelera la ejecución del comando [EXECUTE FORMULA](execute-formula.md) en modo compilado, ya que cada fórmula en caché se tokeniza sólo una vez en este caso.Cuando se cambia el valor de la memoria caché, el contenido existente se restablecen incluso si el nuevo tamaño es más grande que el anterior. Una vez se alcanza el número máximo de fórmulas en la memoria caché, una nueva fórmula ejecutada borrará a la más antigua de la memoria caché (modo FIFO). Este parámetro sólo se tiene en cuenta en las bases o componentes compilados. -Para reinicializar la lista de cifrado a su valor por defecto (guardado permanentemente en el archivo SLI), llame al comando [SET DATABASE PARAMETER](set-database-parameter.md) y pase una cadena vacía ("") en el parámetro *valor*. -**Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. -### Cache unload minimum size (66) +### OpenSSL version (94) -**Alcance**: aplicación 4D +**Alcance**: todas las máquinas 4D **Se conserva entre dos sesiones**: no -**Valores posibles**: entero largo positivo > 1. - -**Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). +**Descripción**: devuelve el número de versión de la librería OpenSSL que se utiliza en la máquina. (Solo lectura) -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D +### Order by formula on server (47) +**Alcance**: tabla y procesos actuales -### Direct2D status (69) + **Se conserva entre dos sesiones**: no -**Alcance**: aplicación 4D + **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) -**Se conserva entre dos sesiones**: no +**Descripción**: ubicación de la ejecución del comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") para la tabla pasada en parámetro. -**Descripción**: modo de activación de Direct2D bajo Windows. +Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. -**Valores posibles**: una de las siguientes constantes (modo 3 por defecto): +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -Direct2D Disabled (0): el modo Direct2D no está habilitado y la base de datos funciona en el modo anterior (GDI/GDIPlus). -Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos para toda la aplicación 4D. Si este contexto no está disponible, use el contexto del software de gráficos Direct2D. -Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. +### Pause logging (121) -***Advertencia*: este selector se ofrece solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* +**Hilo seguro**: sí +**Alcance**: aplicación 4D +**Se mantiene entre dos sesiones**: no -### Direct2D get active status (74) +**Valores posibles**: 0 (reanudar historial), 1 (pausar historial) -**Nota**: sólo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md "Get database parameter") y su valor no puede definirse. +Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. -**Descripción**: devuelve la implementación activa de Direct2D bajo Windows. -**Valores posibles**: 0, 1, 2, 3, 4 o 5 (ver los valores del selector 69). El valor devuelto depende de la disponibilidad de Direct2D, del hardware y de la calidad Direct2D soportado por el sistema operativo. -Por ejemplo, si ejecuta: +### PHP interpreter IP address (55) -  SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) +**Alcance**: Aplicación 4D -- En Windows 7 y superiores, $mode vale 1 cuando el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode valdrá 3 (contexto software). +**Se conserva entre dos sesiones**: no -- En Windows Vista, $mode valdrá 1 si el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode toma el valor 0 (desactivando Direct2D). +**Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). -- En Windows XP, $mode siempre valdrá 0 (no compatible con Direct2D). +**Descripción**: dirección IP utilizada localmente por 4D para comunicarse con el intérprete PHP vía FastCGI. Por defecto, el valor es "127.0.0.1". Esta dirección debe corresponder a la máquina donde en encuentra 4D. Este parámetro también puede definirse globalmente para todas las máquinas vía las Propiedades de la base. +Para mayor información sobre el intérprete PHP, por favor consulte el manual de *Diseño*. -### Diagnostic log recording (79) -**Hilo seguro**: sí +### PHP interpreter port (56) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: no - -**Valores posibles**: 0 ó 1 (0 = no guardar, 1 = guardar) + **Se conserva entre dos sesiones**: no -**Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). +**Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. -4D permite guardar de manera continua en un archivo de diagnóstico un conjunto de eventos relativos al funcionamiento interno de la aplicación. La información contenida en este archivo está destinada a la actualización de las aplicaciones 4D y puede ser analizada con ayuda de los servicios técnicos de 4D. Cuando pasa 1 en este selector, el archivo de diagnóstico, llamado *NomBase.txt*, se crea automáticamente (o abre) en la carpeta **Logs** de la base. Una vez el archivo alcance un tamaño de 10 MB, se cierra y se genera un nuevo archivo *NomBase\_N.txt*, con un número secuencial N incrementado. +**Descripción**: número de puerto TCP utilizado o por el intérprete PHP de 4D. Este parámetro también puede modificarse globalmente para todos los equipos vía las Propiedades de la base. Para mayor información sobre el intérprete PHP, consulte el manual de *Diseño*. -Note que es posible incluir la información personalizada en este archivo con ayuda del comando [LOG EVENT](log-event.md). +### POP3 Log (116) -### Log command list (80) +**Hilo seguro**: sí -**Alcance**: aplicación 4D +**Alcance:** 4D local, 4D Server **Se conserva entre dos sesiones**: no -**Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. +**Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -**Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. -Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: +Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. - SET DATABASE PARAMETER(Log command list;"277;341") //Graba solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluye los comandos SET USER ALIAS y DELAY PROCESS de ser grabados - -### Spellchecker (81) +### Port ID (15) -**Alcance**: aplicación 4D +**Alcance**: 4D local, 4D Server - **Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, que puede ser definido en la página "Web/Configuración" de la caja de diálogo Preferencias, es 80. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. -**Descripción**: permite activar el corrector ortográfico Hunspell bajo macOS. Por defecto, en esta plataforma el corrector nativo está activo. Puede preferir utilizar el corrector Hunspell, por ejemplo, para unificar la interfaz de sus aplicaciones multiplataformas (bajo Windows, sólo el corrector Hunspell está disponible). Para mayor información, consulte *Corrección ortográfica*. +El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* -### Dates inside objects (85) +### Query by formula joins (49) **Alcance**: proceso actual - **Se conserva entre dos sesiones:** no + **Se conserva entre dos sesiones**: no - **Valores posibles**: Tipo cadena sin zona horaria (0), tipo cadena con zona horaria (1), tipo fecha (2) (por defecto) + **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). -**Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. +**Descripción**: modo de funcionamiento de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") relativos al uso de "uniones SQL." -Cuando el valor del selector es Date type (valor predeterminado para las bases creadas con 4D v17 y superior), las fechas 4D se almacenan con el tipo de fecha dentro de los objetos, con respecto a la configuración de fecha local. Cuando se convierte a formato JSON, los atributos de fecha se convertirán en cadenas que no incluyen un tiempo. (**Nota:** esta configuración se puede definir mediante la opción "Utilizar tipo de fecha en lugar del formato de fecha ISO en objetos" que se encuentra en *Página Compatibilidad* de la configuración de la base). +En las bases de datos creadas a partir de la versión 11.2 de 4D v11 SQL, estos comandos efectúan uniones basados en el modelo de uniones SQL. Este mecanismo permite modificar la selección de una tabla en función de una búsqueda efectuada en otra tabla sin que las tablas estén conectadas por una relación automática (condición necesaria en las versiones anteriores de 4D). -Si pasa String type with time zone en este selector, convertirá las fechas 4D en cadenas ISO y tendrá en cuenta la zona horaria local. Por ejemplo, la conversión de la fecha 23/08/2013 le da "2013-08-22T22: 00: 000Z" en formato JSON cuando la operación se realiza en Francia durante el horario de verano (GMT+ 2). Este principio se ajusta al funcionamiento estándar de JavaScript. Esto puede ser una fuente de errores cuando desea enviar valores de fecha JSON a alguien en un huso horario diferente. Por ejemplo, cuando exporta una tabla usando [Selection to JSON](selection-to-json.md) en Francia que se debe reimportar en los EE. UU. utilizando [JSON TO SELECTION](json-to-selection.md). Dado que las fechas se vuelven a interpretar en cada zona horaria, los valores almacenados en la base de datos serán diferentes. En este caso, puede modificar el modo de conversión de las fechas para que no tengan en cuenta la zona horaria pasando String type without time zone en este selector. La conversión de la fecha 23/08/2013 le dará "2013-08-23T00: 00: 00Z" en todos los casos. +El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de los comandos de búsqueda por fórmula para el proceso actual: +- 0: Utilizar los parámetros actuales de la base (valor por defecto). En bases creadas a partir de la versión 11.2 de 4D v11 SQL, las "uniones SQL" siempre se activan para las búsquedas por fórmula. En bases de datos convertidas, este mecanismo no se activa por defecto por razones de compatibilidad pero puede implementarse vía una preferencia. +- 1: Siempre utilizar relaciones automáticas (= funcionamiento de versiones anteriores de 4D). En este modo, una relación es necesaria para definir la selección de una tabla en función de búsquedas efectuadas en otra tabla. 4D no efectúa más "uniones SQL."2: Utilizar las uniones SQL si es posible (= funcionamiento o defecto de las bases creadas en versión 11. +- 2 y superiores de 4D v11 SQL). En este modo, 4D establece "uniones SQL" para las búsquedas por fórmula cuando la fórmula se ajusta para ello (con dos excepciones, ver la descripción del comando [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") o [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")).**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -### Diagnostic log level (86) -**Hilo seguro**: sí +### Query by formula on server (46) -**Alcance**: aplicación 4D +**Alcance**: tabla y procesos actuales -**Se conserva entre dos sesiones**: no + **Se conserva entre dos sesiones**: no -**Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. + **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) -**Valores posibles**: una de las siguientes constantes (Log info por defecto): Log trace: activa ERROR, WARN, INFO, DEBUG, TRACE (nivel más detallado) Log debug: activa ERROR, WARN, INFO, DEBUG Log info: activa ERROR, WARN, INFO (por defecto) Log warn: activa ERROR, WARN Log error: activa ERROR (nivel menos detallado) +**Descripción**: ubicación de la ejecución de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") para la *tabla* pasada en parámetro. +Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda "por fórmula" pueden ejecutarse en el servidor o en el equipo cliente: +en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -### Use legacy network layer (87) +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. -**Alcance:** 4D en modo local, 4D Server** +Consulte el ejemplo 2. -**Se conserva entre dos sesiones:** sí +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -**Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). -**Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) +### RDP optimization (133) -**Valor por defecto:** 0 en bases de datos creadas con 4D v14 R5 o superior, 1 en bases de datos convertidas de 4D v14 R4 o anteriores. +**Alcance:** aplicación 4D +**Se mantiene entre dos sesiones**: no +**Valores posibles:** `0`: activado (por defecto), `1`: desactivado. -### SQL Server Port ID (88) +**Descripción:** activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). -**Alcance**: 4D modo local y 4D Server. -: Sí -**Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. +### Remote connection sleep timeout (98) -**Valores posibles:** 0 a 65535. +**Alcance**: aplicación 4D Server -**Valor por defecto:** 19812 +**Se mantiene entre dos sesiones**: no +**Valores posibles**: entero largo positivo +**Descripción**: tiempo de espera actual de la conexión remota en segundos. Por defecto, el valor es 172800 (48 horas). -### Circular log limitation (90) +El tiempo de espera de la conexión remota se aplica después de que una máquina que ejecuta una aplicación remota 4D haya pasado al modo de reposo. En este caso, su sesión es mantenida por 4D Server (ver la descripción de la funcionalidad ). 4D Server verifica cada 5 minutos si algún 4D remoto en reposo ha superado el tiempo de espera de reposo, en cuyo caso se abandona. Por lo tanto, el máximo tiempo de espera permitido es *el tiempo de espera actual* \+ 300\. En algunos casos, es posible que desee modificar el tiempo de espera, por ejemplo para liberar los registros/licencias bloqueados más rápidamente. -**Hilo seguro**: sí -**Alcance**: 4D local, 4D Server. -**Se conserva entre dos sesiones:** no +### Server base process stack size (53) -**Valores posibles**: todo valor entero, 0 = conservar todos los registros +**Alcance**: 4D Server -**Descripción**: número máximo de archivos a conservar en rotación para cada tipo de registro. Por defecto, todos los archivos se conservan. Si pasa un valor *X*, solo los *X* archivos más recientes se conservan, el más antiguo se borra automáticamente cuando se crea uno nuevo. Esta parametrización se aplica a cada uno de los siguientes archivos de registro: registros de peticiones (selectores 28 y 45), registro de depuración (selector 34), registro de eventos (selector 79), así como el historial de peticiones web (selectores 29 y 84 del comando [WEB SET OPTION](web-set-option.md)), etc. + **Se conserva entre dos sesiones**: no + **Valores posibles**: entero largo positivo. +**Descripción**: tamaño de la pila asignada a cada proceso del sistema preferente en el servidor, expresado en bytes. El tamaño por defecto es determinado por el sistema. -### Number of formulas in cache (92) +Los procesos sistema preferente (procesos de tipo Proceso base 4D client) se cargan para controlar los procesos cliente 4D principales. El tamaño asignado por defecto a la pila de cada proceso preferente da facilidad de ejecución pero puede resultar consecuente cuando se crea un gran número de procesos (varios cientos). -**Alcance**: aplicación 4D +Por razones de optimización, este tamaño puede reducirse considerablemente si las operaciones efectuadas por la base lo permiten (por ejemplo si la base no efectúa ordenaciones de grandes cantidades de registros). Son posibles valores de 512 o incluso 256 KB. Sea cuidadoso, subdimensionar la pila es critico y puede afectar la operación de 4D Server. La definición de este parámetro debe hacerse con precaución y tener en cuenta las condiciones de uso de la base (número de registros, tipo de operaciones, etc.). -**Se conserva entre dos sesiones:** no +Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo servidor (por ejemplo en el *Método base On Server Startup*). -**Valores posibles**: enteros largos positivos -**Valor por defecto**: 0 (sin caché) -**Descripción**: establece u obtiene el número máximo de fórmulas a conservar en la memoria caché de fórmulas, que es utilizado por el comando [EXECUTE FORMULA](execute-formula.md). Este límite se aplica a todos los procesos, pero cada proceso tiene su propia caché de fórmulas. Ubicar las fórmulas en la caché acelera la ejecución del comando [EXECUTE FORMULA](execute-formula.md) en modo compilado, ya que cada fórmula en caché se tokeniza sólo una vez en este caso.Cuando se cambia el valor de la memoria caché, el contenido existente se restablecen incluso si el nuevo tamaño es más grande que el anterior. Una vez se alcanza el número máximo de fórmulas en la memoria caché, una nueva fórmula ejecutada borrará a la más antigua de la memoria caché (modo FIFO). Este parámetro sólo se tiene en cuenta en las bases o componentes compilados. +### SMTP Log (110) +**Hilo seguro**: sí +**Alcance**: 4D local, 4D Server* -### OpenSSL version (94) +* **Se conserva entre dos sesiones**: no -**Alcance**: todas las máquinas 4D + **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). -**Se conserva entre dos sesiones**: no +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor SMTP, cuando un objeto *transportador* se procesa a través de *transporter.send( )* o *SMTP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DSMTPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DSMTPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. De forma predeterminada, todos los archivos se conservan, pero puede controlar la cantidad de archivos a seguir utilizando el parámetro Circular log limitation. -**Descripción**: devuelve el número de versión de la librería OpenSSL que se utiliza en la máquina. (Solo lectura) +Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. -### Cache flush periodicity (95) +### Spellchecker (81) -**Hilo seguro**: sí +**Alcance**: aplicación 4D + **Se conserva entre dos sesiones**: no -**Alcance**: 4D local, 4D Server + **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. -**Se conserva entre dos sesiones:** no +**Descripción**: permite activar el corrector ortográfico Hunspell bajo macOS. Por defecto, en esta plataforma el corrector nativo está activo. Puede preferir utilizar el corrector Hunspell, por ejemplo, para unificar la interfaz de sus aplicaciones multiplataformas (bajo Windows, sólo el corrector Hunspell está disponible). Para mayor información, consulte *Corrección ortográfica*. -**Valores posibles:** entero largo > 1 (segundos) -**Descripción**: obtiene o establece la periodicidad del vaciado de la caché, expresado en segundos. La modificación de este valor prevalece sobre la opción **Vaciar caché cada X segundos** en [XML DECODE](xml-decode.md) de la configuración de la base para la sesión (que no se almacena en las Propiedades de la base). +### SQL Autocommit (43) +**Alcance**: base de datos -### Remote connection sleep timeout (98) + **Se conserva entre dos sesiones**: sí -**Alcance**: aplicación 4D Server + **Posibles valores**: 0 (desactivación) o 1 (activación) -**Se mantiene entre dos sesiones**: no +**Descripción**: activación o desactivación del modo SQL auto-commit. Por defecto, el valor es 0 (modo desactivado) -**Valores posibles**: entero largo positivo + El modo auto-commit permite reforzar la integridad referencial de la base. Cuando este modo está activo, las peticiones *SELECT*, INSERT, UPDATE y *DELETE* (SIUD) se incluyen automáticamente en las transacciones cuando no se han ejecutado dentro de una transacción. Este modo igualmente puede definirse en las Preferencias de la base. -**Descripción**: tiempo de espera actual de la conexión remota en segundos. Por defecto, el valor es 172800 (48 horas). -El tiempo de espera de la conexión remota se aplica después de que una máquina que ejecuta una aplicación remota 4D haya pasado al modo de reposo. En este caso, su sesión es mantenida por 4D Server (ver la descripción de la funcionalidad ). 4D Server verifica cada 5 minutos si algún 4D remoto en reposo ha superado el tiempo de espera de reposo, en cuyo caso se abandona. Por lo tanto, el máximo tiempo de espera permitido es *el tiempo de espera actual* \+ 300\. En algunos casos, es posible que desee modificar el tiempo de espera, por ejemplo para liberar los registros/licencias bloqueados más rápidamente. +### SQL Engine case sensitivity (44) +**Alcance**: base de datos -### Tips enabled (101) + **Se conserva entre dos sesiones**: sí -**Alcance**: aplicación 4D + **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) -**Se conserva entre dos sesiones**: no +**Descripción**: activación o desactivación de la sensibilidad a mayúsculas y minúsculas para comparaciones de cadenas efectuadas por el motor SQL. -**Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) +Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). -**Descripción**: define u obtiene el estado de visualización actual de los consejos para la aplicación 4D. De forma predeterminada, las sugerencias están activadas. +Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subform-container.md) de las Preferencias de la base. -Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los mensajes de ayuda de formulario y las sugerencias del editor de modo Diseño. +### SQL Server Port ID (88) -### Tips delay (102) +**Alcance**: 4D modo local y 4D Server. -**Alcance**: aplicación 4D +: Sí -**Se conserva entre dos sesiones**: No +**Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. -**Valores posibles**: entero largo >= 0 (tics) +**Valores posibles:** 0 a 65535. -**Descripción**: retraso antes de que se muestren las sugerencias una vez que el cursor del ratón se haya detenido en objetos con mensajes de ayuda adjuntos. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 45 tics (0.75 segundos). +**Valor por defecto:** 19812 -### Tips duration (103) +### SSL cipher list (64) -**Alcance**: aplicación 4D +**Alcance**: Aplicación 4D -**Se conserva entre dos sesiones**: No +Se conserva entre dos sesiones: No -**Valores posibles**: entero largo >= 60 (tics) +**Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Descripción**: duración máxima de visualización de una sugerencia. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 720 tics (12 segundos). +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". +Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. +Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). -### Min TLS version (105) +Cuando la lista de cifrado se modifica, debe reiniciar el servidor correspondiente para que los nuevos parámetros sean tenidos en cuenta. -**Alcance**: 4D Server, 4D Web Server y 4D SQL Server +Para reinicializar la lista de cifrado a su valor por defecto (guardado permanentemente en el archivo SLI), llame al comando [SET DATABASE PARAMETER](set-database-parameter.md) y pase una cadena vacía ("") en el parámetro *valor*. -**Conservar entre dos sesiones**: no +**Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. -**Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. +### Table sequence number (31) -**Valor por defecto**: TLSv1\_3 +**Alcance**: aplicación 4D -**Valores posibles**: TLSv1\_2 (TLS 1.2, introducido en 2008) TLSv1\_3 (TLS 1.3, introducido en 2018) **NOTAS**: + **Se conserva entre dos sesiones**: sí -- El plugin 4D Internet Commands utiliza una capa de red diferente, por lo que este selector no tendrá ningún impacto en su versión TLS. + **Valores posibles**: todo valor de tipo entero largo. -- Se ignorarán los intentos de aplicar TLS a la capa de red heredada. +**Descripción**: este selector se utiliza para modificar o modificar u obtener el número único actual de los registros de la tabla pasada en parámetro. "Número actual" significa "último número utilizado": si modifica este valor utilizando SET DATABASE PARAMETER, el siguiente registro será el valor pasado + 1\. Este nuevo número es el número devuelto por el comando Sequence number [](http://doc.tmp.4d.fr/Database-Parameters/4Dv11.4/ConstantTheme/4870/CMU00244.HTM) como también en todo campo de la tabla a la cual se asigna la propiedad "Autoincrementar" en el editor de estructura o vía SQL. +Por defecto, este número único es definido por 4D y corresponde al orden de creación de los registros. Para información adicional, por favor consulte la documentación del comando [Sequence number](sequence-number.md "Sequence number"). -### User param value (108) -**Alcance**: 4D local, 4D Server +### TCPUDP log recording (131) -**Se conserva entre dos sesiones**: no +**Alcance:** aplicación 4D -**Valores posibles**: toda cadena personalizada +**Se mantiene entre dos sesiones**: no -**Descripción:** cadena personalizada pasada de una sesión a la siguiente cuando se reinicia la aplicación 4D. Este selector es útil en el contexto de pruebas unitarias automatizadas que requieren que las aplicaciones se reinicien con diferentes parámetros. +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. -Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), define un nuevo valor que estará disponible en la próxima base de datos abierta después de que 4D se reinicie manualmente o utilizando los comandos [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), o [RESTART 4D](restart-4d.md). Cuando se utiliza con [Get database parameter](get-database-parameter.md), obtiene el valor del parámetro de usuario actualmente disponible, definido mediante una línea de comando (ver *Interfaz de línea de comando*), el archivo .4DLink (ver *Usar un archivo 4DLink*), o una llamada a [SET DATABASE PARAMETER](set-database-parameter.md) durante la sesión anterior. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) define un User param value antes de una llamada a [OPEN DATABASE](open-database.md) con un archivo .4DLink que también contiene un atributo xml user-param, 4D 4D tiene en cuenta solo el parámetro ofrecido por [SET DATABASE PARAMETER](set-database-parameter.md). +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para registrar eventos TCP. @@ -808,163 +899,71 @@ En versiones anteriores, los valores de tiempo se convertían y almacenaban como -### SMTP Log (110) - -**Hilo seguro**: sí - -**Alcance**: 4D local, 4D Server* - -* **Se conserva entre dos sesiones**: no - - **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). - -**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor SMTP, cuando un objeto *transportador* se procesa a través de *transporter.send( )* o *SMTP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DSMTPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DSMTPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. De forma predeterminada, todos los archivos se conservan, pero puede controlar la cantidad de archivos a seguir utilizando el parámetro Circular log limitation. - -Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. - - - -### Current process debug log recording (111) - -**Alcance:** Aplicación 4D - -**Se conserva entre dos sesiones:** no - -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. - -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. - -**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. - - - -### Is current database a project (112) - -**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +### Tips delay (102) **Alcance**: aplicación 4D -**Descripción**: devuelve 1 si la arquitectura de la base actual es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. - - - -### Is host database a project (113) +**Se conserva entre dos sesiones**: No -**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Valores posibles**: entero largo >= 0 (tics) -**Alcance**: aplicación 4D +**Descripción**: retraso antes de que se muestren las sugerencias una vez que el cursor del ratón se haya detenido en objetos con mensajes de ayuda adjuntos. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 45 tics (0.75 segundos). -**Descripción**: devuelve 1 si la arquitectura de la base local es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. +### Tips duration (103) -### Libldap version (114) +**Alcance**: aplicación 4D -**Alcance**: máquina 4D actual +**Se conserva entre dos sesiones**: No -**Se conserva entre dos sesiones**: no +**Valores posibles**: entero largo >= 60 (tics) -**Descripción**: devuelve el número de versión de la librería LDAP en la aplicación 4D en la máquina actual. (Solo lectura) +**Descripción**: duración máxima de visualización de una sugerencia. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 720 tics (12 segundos). -### Libsasl version (115) +### Tips enabled (101) -**Alcance**: máquina 4D actual +**Alcance**: aplicación 4D **Se conserva entre dos sesiones**: no -**Descripción**: devuelve el número de versión de la librería SASL en la aplicación 4D en la máquina actual. (Solo lectura) - - - -### POP3 Log (116) - -**Hilo seguro**: sí +**Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) -**Alcance:** 4D local, 4D Server +**Descripción**: define u obtiene el estado de visualización actual de los consejos para la aplicación 4D. De forma predeterminada, las sugerencias están activadas. -**Se conserva entre dos sesiones**: no +Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los mensajes de ayuda de formulario y las sugerencias del editor de modo Diseño. -**Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. - -Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. +### Use legacy network layer (87) +**Alcance:** 4D en modo local, 4D Server** -### Is host database writable (117) +**Se conserva entre dos sesiones:** sí -**Nota**: solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -**Alcance**: aplicación 4D +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). -**Descripción**: devuelve 1 si el archivo estructura/archivo proyecto local es editable y 0 si es de solo lectura. +**Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) +**Valor por defecto:** 0 en bases de datos creadas con 4D v14 R5 o superior, 1 en bases de datos convertidas de 4D v14 R4 o anteriores. -### IMAP Log (119) -**Hilo seguro**: sí +### User param value (108) **Alcance**: 4D local, 4D Server **Se conserva entre dos sesiones**: no -**Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). - -**Descripción**: inicia o detiene la grabación de los intercambios entre 4D y el servidor IMAP, cuando se procesa un objeto transportador a través de *IMAP\_transporter.getMail( )* o *IMAP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando se activa este mecanismo, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DIMAPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DIMAPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se sustituye directamente. Se puede definir el número inicial de la secuencia mediante el parámetro valor. Por defecto, se conservan todos los archivos, pero puede controlar el número de archivos a conservar utilizando el parámetro Circular log limitation. - -Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. - - - -### Libzip version (120) - -**Alcance**: máquina 4D actual - -**Se conserva entre dos sesiones**: n/a - -**Descripción**: devuelve el número de versión de la librería libzip en la aplicación 4D en la máquina actual. (Sólo lectura) - - - -### Pause logging (121) - -**Hilo seguro**: sí - -**Alcance**: aplicación 4D - -**Se mantiene entre dos sesiones**: no - -**Valores posibles**: 0 (reanudar historial), 1 (pausar historial) - -Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. - - - -### TCPUDP log recording (131) - -**Alcance:** aplicación 4D - -**Se mantiene entre dos sesiones**: no - -**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. - -**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para registrar eventos TCP. - - - -### RDP optimization (133) - -**Alcance:** aplicación 4D - -**Se mantiene entre dos sesiones**: no +**Valores posibles**: toda cadena personalizada -**Valores posibles:** `0`: activado (por defecto), `1`: desactivado. +**Descripción:** cadena personalizada pasada de una sesión a la siguiente cuando se reinicia la aplicación 4D. Este selector es útil en el contexto de pruebas unitarias automatizadas que requieren que las aplicaciones se reinicien con diferentes parámetros. -**Descripción:** activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). +Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), define un nuevo valor que estará disponible en la próxima base de datos abierta después de que 4D se reinicie manualmente o utilizando los comandos [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), o [RESTART 4D](restart-4d.md). Cuando se utiliza con [Get database parameter](get-database-parameter.md), obtiene el valor del parámetro de usuario actualmente disponible, definido mediante una línea de comando (ver *Interfaz de línea de comando*), el archivo .4DLink (ver *Usar un archivo 4DLink*), o una llamada a [SET DATABASE PARAMETER](set-database-parameter.md) durante la sesión anterior. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) define un User param value antes de una llamada a [OPEN DATABASE](open-database.md) con un archivo .4DLink que también contiene un atributo xml user-param, 4D 4D tiene en cuenta solo el parámetro ofrecido por [SET DATABASE PARAMETER](set-database-parameter.md). :::nota diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md index 67e32715374ec9..65c3017d4d6595 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md @@ -22,6 +22,34 @@ displayed_sidebar: docs El parámetro *selector* designa el parámetro a obtener. 4D ofrece las siguientes constantes predefinidas, en el tema “*Parámetros de la base*”: +### 4D Remote mode timeout (14) + +**Alcance** (antigua capa de red únicamente): aplicación 4D si valor positivo + +**Se conserva entre dos sesiones**: sí si *valor* positivo + +**Descripción**: a utilizar en casos muy específicos. Valor del timeout otorgado por el equipo 4D remoto a la máquina 4D Server. Por defecto, este valor se define en la página "Cliente-Servidor/Configuración" de la caja de diálogo de Preferencias en el equipo remoto. + +El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua capa de red. Con la capa 4D *ServerNet* activada, se ignora: esta configuración es administrada por el selector Timeout 4D Server (13). + + + +### 4D Server log recording (28) + +**Hilo seguro**: sí + +**Alcance**: 4D Server, 4D remoto* + +**Se conserva entre dos sesiones**: no + + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + +**Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). + +4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. + +Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. + ### 4D Server timeout (13) **Alcance**: aplicación 4D si *valor* positivo @@ -40,59 +68,76 @@ Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global -### 4D Remote mode timeout (14) +### Auto synchro resources folder (48) -**Alcance** (antigua capa de red únicamente): aplicación 4D si *valor* positivo +**Alcance**:equipo 4D remoto -**Se conserva entre dos sesiones**: sí si *valor* positivo + **Se conserva entre dos sesiones**: no -**Descripción**: a utilizar en casos muy específicos. Valor del timeout otorgado por el equipo 4D remoto a la máquina 4D Server. Por defecto, este valor se define en la página "Cliente-Servidor/Configuración" de la caja de diálogo de Preferencias en el equipo remoto. + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). -El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua capa de red. Con la capa 4D *ServerNet* activada, se ignora: esta configuración es administrada por el selector Timeout 4D Server (13). +**Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. + +Cuando el contenido de la carpeta *Resources* en el servidor se ha modificado o un usuario ha solicitado la sincronización (por ejemplo vía el explorador de recursos o siguiendo la ejecución del comando [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md "NOTIFY RESOURCES FOLDER MODIFICATION")), el servidor notifica a los equipos cliente conectados. +Tres modos de sincronización son posibles del lado del cliente. El selector Auto Synchro Resources Folder se utiliza para especificar el modo a utilizar por el equipo cliente para la sesión actual: + +0 (valor por defecto): sin sincronización dinámica (la petición de sincronización se ignora) 1: sincronización dinámica automática2: visualización de una caja de diálogo en los equipos clientes, con la posibilidad de efectuar o rechazar la sincronización.El modo de sincronización también puede definirse globalmente en las Preferencias de la aplicación. -### Port ID (15) + +### Cache flush periodicity (95) + +**Hilo seguro**: sí + **Alcance**: 4D local, 4D Server -**Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones:** no + +**Valores posibles:** entero largo > 1 (segundos) + +**Descripción**: obtiene o establece la periodicidad del vaciado de la caché, expresado en segundos. La modificación de este valor prevalece sobre la opción **Vaciar caché cada X segundos** en [XML DECODE](xml-decode.md) de la configuración de la base para la sesión (que no se almacena en las Propiedades de la base). -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, puede definirse en la página "Web/Configuración" de la caja de diálogo de Preferencias es 80\. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. -El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* +### Cache unload minimum size (66) +**Alcance**: aplicación 4D -### Character set (17) +**Se conserva entre dos sesiones**: no -**Alcance:** 4D local, 4D Server** +**Valores posibles**: entero largo positivo > 1. -**Se conserva entre dos sesiones:** sí** +**Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). -**Descripción:** *constante obsoleta (se conserva por compatibilidad únicamente).* Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. +Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D -### Max concurrent Web processes (18) -**Alcance**: 4D local, 4D Server +### Character set (17) + +**Alcance:** 4D local, 4D Server **Se conserva entre dos sesiones**: sí -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción:** constante obsoleta (se conserva por compatibilidad únicamente). Ahora recomendamos utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -### Client port ID (22) +### Circular log limitation (90) -**Alcance**: todos los equipos 4D remotos +**Hilo seguro**: sí - **Se conserva entre dos sesiones**: sí +**Alcance**: 4D local, 4D Server. - **Valores posibles**: ver selector 15 +**Se conserva entre dos sesiones:** no -**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir valores sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. +**Valores posibles**: todo valor entero, 0 = conservar todos los registros + +**Descripción**: número máximo de archivos a conservar en rotación para cada tipo de registro. Por defecto, todos los archivos se conservan. Si pasa un valor *X*, solo los *X* archivos más recientes se conservan, el más antiguo se borra automáticamente cuando se crea uno nuevo. Esta parametrización se aplica a cada uno de los siguientes archivos de registro: registros de peticiones (selectores 28 y 45), registro de depuración (selector 34), registro de eventos (selector 79), así como el historial de peticiones web (selectores 29 y 84 del comando [WEB SET OPTION](web-set-option.md)), etc. @@ -108,6 +153,38 @@ El selector Port ID se utiliza en el marco de servidores web 4D compilados y fus +### Client HTTPS port ID (40) + +**Alcance**: todos los equipos 4D remotos + + **Se conserva entre dos sesiones**: sí + + **Valores posibles**: 0 a 65535 + +**Descripción**: número de puerto TCP utilizado por los servidores web de los equipos clientes para conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). + +Este selector puede utilizarse para modificar por programación el puerto TCP utilizado por los servidores web de los equipos clientes para las conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). + +Este selector funciona exactamente igual que el selector 39; sin embargo, aplica a todos los equipos 4D remotos utilizados como servidores web. Si quiere modificar el valor de ciertos equipos clientes únicamente, utilice la caja de diálogo de Preferencias de 4D remoto. + + + +### Client log recording (45) + +**Alcance**:equipo 4D remoto + + **Se conserva entre dos sesiones**: no + + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). + +**Descripción**: inicia o detiene la grabación de peticiones estándar efectuadas por el equipo cliente 4D que ejecutó el comando (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). + +4D le permite registrar el historial de peticiones realizadas por el equipo cliente. Cuando este mecanismo se activa, se crean dos archivos en el equipo cliente, en la subcarpeta Logs de la carpeta local de la base. Son llamados 4DRequestsLog\_X y 4DRequestsLog\_ProcessInfo\_X, donde X es el número secuencial del historial. Una vez el archivo 4DRequestsLog alcanza un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio para la secuencia utilizando el parámetro *valor*. + +Estos archivos texto almacenan en formato tabulado simple diferente información relacionada con cada petición: hora, número de proceso, tamaño de la petición, duración del proceso, etc. Esta información es particularmente útil durante la fase de desarrollo de la aplicación o con fines estadísticos. + + + ### Client max concurrent Web proc (25) **Alcance**: todos los equipos 4D remotos @@ -120,30 +197,34 @@ El selector Port ID se utiliza en el marco de servidores web 4D compilados y fus -### Maximum Web requests size (27) +### Client port ID (22) -**Alcance**: 4D local, 4D Server +**Alcance**: todos los equipos 4D remotos -**Se conserva entre dos sesiones**: sí + **Se conserva entre dos sesiones**: sí -**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. + **Valores posibles**: ver selector 15 +**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir valores sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. -### 4D Server log recording (28) -**Hilo seguro**: sí +### Client Server port ID (35) -**Alcance**: 4D Server, 4D remoto* +**Alcance**: base de datos -**Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones**: sí - **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). +**Valores posibles**: 0 a 65535 -**Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). +**Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. + +La personalización de este valor permite utilizar varias aplicaciones 4D cliente-servidor en la misma máquina con el protocolo TCP; en este caso, debe indicar un número de puerto diferente para cada aplicación. + +El valor se guarda en el archivo de estructura de la base. Puede definirse con 4D en modo local pero sólo se tiene en cuenta en configuración cliente servidor. + +Cuando modifica este valor, es necesario reiniciar el equipo servidor para que el nuevo valor sea tenido en cuenta. -4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. -Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. ### Client Web log recording (30) @@ -160,17 +241,33 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, -### Table sequence number (31) +### Current process debug log recording (111) -**Alcance**: aplicación 4D +**Alcance:** Aplicación 4D - **Se conserva entre dos sesiones**: sí +**Se conserva entre dos sesiones:** no - **Valores posibles**: todo valor de tipo entero largo. +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. -**Descripción**: este selector se utiliza para modificar o modificar u obtener el número único actual de los registros de la tabla pasada en parámetro. "Número actual" significa "último número utilizado": si modifica este valor utilizando [SET DATABASE PARAMETER](set-database-parameter.md "SET DATABASE PARAMETER"), el siguiente registro será el valor pasado + 1\. Este nuevo número es el número devuelto por el comando Sequence number [](http://doc.tmp.4d.fr/Database-Parameters/4Dv11.4/ConstantTheme/4870/CMU00244.HTM) como también en todo campo de la tabla a la cual se asigna la propiedad "Autoincrementar" en el editor de estructura o vía SQL. +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. -Por defecto, este número único es definido por 4D y corresponde al orden de creación de los registros. Para información adicional, por favor consulte la documentación del comando [Sequence number](sequence-number.md "Sequence number"). +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. + + + +### Dates inside objects (85) + +**Alcance**: proceso actual + + **Se conserva entre dos sesiones:** no + + **Valores posibles**: Tipo cadena sin zona horaria (0), tipo cadena con zona horaria (1), tipo fecha (2) (por defecto) + +**Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. + +Cuando el valor del selector es Date type (valor predeterminado para las bases creadas con 4D v17 y superior), las fechas 4D se almacenan con el tipo de fecha dentro de los objetos, con respecto a la configuración de fecha local. Cuando se convierte a formato JSON, los atributos de fecha se convertirán en cadenas que no incluyen un tiempo. (**Nota:** esta configuración se puede definir mediante la opción "Utilizar tipo de fecha en lugar del formato de fecha ISO en objetos" que se encuentra en *Página Compatibilidad* de la configuración de la base). + +Si pasa String type with time zone en este selector, convertirá las fechas 4D en cadenas ISO y tendrá en cuenta la zona horaria local. Por ejemplo, la conversión de la fecha 23/08/2013 le da "2013-08-22T22: 00: 000Z" en formato JSON cuando la operación se realiza en Francia durante el horario de verano (GMT+ 2). Este principio se ajusta al funcionamiento estándar de JavaScript. Esto puede ser una fuente de errores cuando desea enviar valores de fecha JSON a alguien en un huso horario diferente. Por ejemplo, cuando exporta una tabla usando [Selection to JSON](selection-to-json.md) en Francia que se debe reimportar en los EE. UU. utilizando [JSON TO SELECTION](json-to-selection.md). Dado que las fechas se vuelven a interpretar en cada zona horaria, los valores almacenados en la base de datos serán diferentes. En este caso, puede modificar el modo de conversión de las fechas para que no tengan en cuenta la zona horaria pasando String type without time zone en este selector. La conversión de la fecha 23/08/2013 le dará "2013-08-23T00: 00: 00Z" en todos los casos. @@ -188,37 +285,30 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr - El modo con pestañas ofrece información adicional y utiliza un formato más compacto con pestañas en el archivo. Los tiempos de ejecución se expresan en microsegundos. -**Valores posibles**: Entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +**Valores posibles**: entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (valor 1) permite activar el archivo (note que cualquier otro valor no nulo también lo activará) - - Bit 1 (valor 2) permite solicitar los parámetros de llamada a los métodos y comandos. - - Bit 2 (valor 4) permite activar el nuevo formato tabulado. - - Bit 3 (valor 8) permite desactivar la escritura inmediata de cada operación en el disco (activado por defecto). La escritura inmediata es menor rápida y más eficaz por ejemplo para buscar las causas de un fallo.Si desactiva este modo, el contenido del archivo será generado más rápidamente. - - Bit 4 (valor 16) desactiva el registro de llamadas de plug-ins (activado por defecto). - - Bit 5 (valor 32) desactiva el registro de las funciones miembros. Ejemplos: +```4d SET DATABASE PARAMETER (34;1) // activa el modo estándar sin los parámetros, con las duraciones - SET DATABASE PARAMETER (34;2) // activa el modo estándar con los parámetros y las duraciones - SET DATABASE PARAMETER (34;2+4) // activa el modo tabulado con los parámetros y las duraciones +SET DATABASE PARAMETER (34;0) // desactiva el archivo +``` -SET DATABASE PARAMETER (34;0) // desactiva el archivo Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: +Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: - restringiendo los comandos 4D que se examinan utilizando Log command list (selector 80), o - - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* - - -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. +*Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. Este selector se ofrece únicamente con fines de depuración y debe utilizarse con cuidado, ya que puede afectar al rendimiento de la aplicación. @@ -228,484 +318,419 @@ Este selector se ofrece únicamente con fines de depuración y debe utilizarse c -### Client Server port ID (35) +### Diagnostic log level (86) -**Alcance**: base de datos +**Hilo seguro**: sí -**Se conserva entre dos sesiones**: sí +**Alcance**: aplicación 4D -**Valores posibles**: 0 a 65535 +**Se conserva entre dos sesiones**: no -**Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. +**Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. -La personalización de este valor permite utilizar varias aplicaciones 4D cliente-servidor en la misma máquina con el protocolo TCP; en este caso, debe indicar un número de puerto diferente para cada aplicación. +**Valores posibles**: una de las siguientes constantes (Log info por defecto): Log trace: activa ERROR, WARN, INFO, DEBUG, TRACE (nivel más detallado) Log debug: activa ERROR, WARN, INFO, DEBUG Log info: activa ERROR, WARN, INFO (por defecto) Log warn: activa ERROR, WARN Log error: activa ERROR (nivel menos detallado) -El valor se guarda en el archivo de estructura de la base. Puede definirse con 4D en modo local pero sólo se tiene en cuenta en configuración cliente servidor. -Cuando modifica este valor, es necesario reiniciar el equipo servidor para que el nuevo valor sea tenido en cuenta. +### Diagnostic log recording (79) +**Hilo seguro**: sí -### HTTPS Port ID (39) +**Alcance**: aplicación 4D -**Alcance**: 4D local, 4D Server +**Se conserva entre dos sesiones**: no -**Se conserva entre dos sesiones**: sí +**Valores posibles**: 0 ó 1 (0 = no guardar, 1 = guardar) -**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). +4D permite guardar de manera continua en un archivo de diagnóstico un conjunto de eventos relativos al funcionamiento interno de la aplicación. La información contenida en este archivo está destinada a la actualización de las aplicaciones 4D y puede ser analizada con ayuda de los servicios técnicos de 4D. Cuando pasa 1 en este selector, el archivo de diagnóstico, llamado *NomBase.txt*, se crea automáticamente (o abre) en la carpeta **Logs** de la base. Una vez el archivo alcance un tamaño de 10 MB, se cierra y se genera un nuevo archivo *NomBase\_N.txt*, con un número secuencial N incrementado. +Note que es posible incluir la información personalizada en este archivo con ayuda del comando [LOG EVENT](log-event.md). -### Client HTTPS port ID (40) -**Alcance**: todos los equipos 4D remotos - **Se conserva entre dos sesiones**: sí +### Direct2D get active status (74) - **Valores posibles**: 0 a 65535 +**Nota**: sólo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md "Get database parameter") y su valor no puede definirse. -**Descripción**: número de puerto TCP utilizado por los servidores web de los equipos clientes para conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). +**Descripción**: devuelve la implementación activa de Direct2D bajo Windows. -Este selector puede utilizarse para modificar por programación el puerto TCP utilizado por los servidores web de los equipos clientes para las conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). +**Valores posibles**: 0, 1, 2, 3, 4 o 5 (ver los valores del selector 69). El valor devuelto depende de la disponibilidad de Direct2D, del hardware y de la calidad Direct2D soportado por el sistema operativo. -Este selector funciona exactamente igual que el selector 39; sin embargo, aplica a todos los equipos 4D remotos utilizados como servidores web. Si quiere modificar el valor de ciertos equipos clientes únicamente, utilice la caja de diálogo de Preferencias de 4D remoto. +Por ejemplo, si ejecuta: +```4d +SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) +$mode:=Get database parameter(Direct2D get active status) +``` +- En Windows 7 y superiores, $mode vale 1 cuando el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode valdrá 3 (contexto software). +- En Windows Vista, $mode valdrá 1 si el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode toma el valor 0 (desactivando Direct2D). +- En Windows XP, $mode siempre valdrá 0 (no compatible con Direct2D). -### SQL Autocommit (43) -**Alcance**:base de datos - **Se conserva entre dos sesiones**: sí +### Direct2D status (69) - **Posibles valores**: 0 (desactivación) o 1 (activación) +**Alcance**: aplicación 4D -**Descripción**: activación o desactivación del modo SQL auto-commit. Por defecto, el valor es 0 (modo desactivado) +**Se conserva entre dos sesiones**: no - El modo auto-commit permite reforzar la integridad referencial de la base. Cuando este modo está activo, las peticiones *SELECT*, INSERT, UPDATE y *DELETE* (SIUD) se incluyen automáticamente en las transacciones cuando no se han ejecutado dentro de una transacción. Este modo igualmente puede definirse en las Preferencias de la base. +**Descripción**: modo de activación de Direct2D bajo Windows. +**Valores posibles**: una de las siguientes constantes (modo 3 por defecto): +- Direct2D Disabled (0): el modo Direct2D no está habilitado y la base de datos funciona en el modo anterior (GDI/GDIPlus). +- Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos para toda la aplicación 4D. Si este contexto no está disponible, use el contexto del software de gráficos Direct2D. +- Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. -### SQL Engine case sensitivity (44) +***Advertencia*: este selector se ofrece solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* -**Alcance**: base de datos - **Se conserva entre dos sesiones**: sí - **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) +### HTTP compression level (50) -**Descripción**: activación o desactivación de la sensibilidad a mayúsculas y minúsculas para comparaciones de cadenas efectuadas por el motor SQL. +**Alcance**: aplicación 4D -Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). +**Se conserva entre dos sesiones**: no -**Atención:* como esta opción Modifica el archivo de estructura de la base de datos y todos los procesos. Por motivos de rendimiento, se recomienda encarecidamente configurarlo solo al iniciar la base de datos.* Esta opción también se puede configurar en los ajustes de la base de datos. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -### Client log recording (45) +### HTTP compression threshold (51) -**Alcance**: equipo 4D remoto +**Alcance**: aplicación 4D - Se conserva entre dos **sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -**Descripción**: inicia o detiene la grabación de peticiones estándar efectuadas por el equipo cliente 4D que ejecutó el comando (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). -4D le permite registrar el historial de peticiones realizadas por el equipo cliente. Cuando este mecanismo se activa, se crean dos archivos en el equipo cliente, en la subcarpeta Logs de la carpeta local de la base. Son llamados 4DRequestsLog\_X y 4DRequestsLog\_ProcessInfo\_X, donde X es el número secuencial del historial. Una vez el archivo 4DRequestsLog alcanza un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio para la secuencia utilizando el parámetro *valor*. -Estos archivos texto almacenan en formato tabulado simple diferente información relacionada con cada petición: hora, número de proceso, tamaño de la petición, duración del proceso, etc. Esta información es particularmente útil durante la fase de desarrollo de la aplicación o con fines estadísticos. +### HTTPS Port ID (39) +**Alcance**: 4D local, 4D Server +**Se conserva entre dos sesiones**: sí -### Query by formula on server (46) +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -**Alcance**: tabla y procesos actuales - **Se conserva entre dos sesiones**: no - **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) +### Idle connections timeout (54) -**Descripción**: ubicación de la ejecución de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") para la *tabla* pasada en parámetro. +**Alcance**: aplicación 4D a menos que valor sea negativo -Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda "por fórmula" pueden ejecutarse en el servidor o en el equipo cliente: +**Se conserva entre dos sesiones:** no -en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. +**Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. +**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. -Consulte el ejemplo 2. - -**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. - - - -### Order by formula on server (47) - -**Alcance**: tabla y procesos actuales - - **Se conserva entre dos sesiones**: no - - **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) - -**Descripción**: ubicación de la ejecución del comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") para la tabla pasada en parámetro. - -Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. - -**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. - - - -### Auto synchro resources folder (48) - -**Alcance**: equipo 4D remoto - - **Se conserva entre dos sesiones**: no +Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. - **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). +Si pasa un valor positivo en *valor*, se aplicará a todas las nuevas conexiones en todos los procesos. Si pasa un valor negativo, se aplicará a las conexiones que se abran en el proceso actual. Si pasa 0, las conexiones inactivas no serán sometidas a un timeout. -**Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. +Este parámetro puede definirse del lado del cliente. Por lo general, no necesita cambiar este valor. -Cuando el contenido de la carpeta *Resources* en el servidor se ha modificado o un usuario ha solicitado la sincronización (por ejemplo vía el explorador de recursos o siguiendo la ejecución del comando [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md "NOTIFY RESOURCES FOLDER MODIFICATION")), el servidor notifica a los equipos cliente conectados. -Tres modos de sincronización son posibles del lado del cliente. El selector Auto Synchro Resources Folder se utiliza para especificar el modo a utilizar por el equipo cliente para la sesión actual: -0 (valor por defecto): sin sincronización dinámica (la petición de sincronización se ignora) 1: sincronización dinámica automática2: visualización de una caja de diálogo en los equipos clientes, con la posibilidad de efectuar o rechazar la sincronización.El modo de sincronización también puede definirse globalmente en las Preferencias de la aplicación. +### IMAP Log (119) +**Hilo seguro**: sí +**Alcance**: 4D local, 4D Server -### Query by formula joins (49) +**Se conserva entre dos sesiones**: no -**Alcance**: proceso actual +**Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). - Se conserva entre dos **sesiones**: no +**Descripción**: inicia o detiene la grabación de los intercambios entre 4D y el servidor IMAP, cuando se procesa un objeto transportador a través de *IMAP\_transporter.getMail( )* o *IMAP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando se activa este mecanismo, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DIMAPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DIMAPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se sustituye directamente. Se puede definir el número inicial de la secuencia mediante el parámetro valor. Por defecto, se conservan todos los archivos, pero puede controlar el número de archivos a conservar utilizando el parámetro Circular log limitation. - **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). +Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. -**Descripción**: modo de funcionamiento de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") relativos al uso de "uniones SQL." -En las bases de datos creadas a partir de la versión 11.2 de 4D v11 SQL, estos comandos efectúan uniones basados en el modelo de uniones SQL. Este mecanismo permite modificar la selección de una tabla en función de una búsqueda efectuada en otra tabla sin que las tablas estén conectadas por una relación automática (condición necesaria en las versiones anteriores de 4D). -El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de los comandos de búsqueda por fórmula para el proceso actual: +### Is current database a project (112) -0: Utilizar los parámetros actuales de la base (valor por defecto). En bases creadas a partir de la versión 11.2 de 4D v11 SQL, las "uniones SQL" siempre se activan para las búsquedas por fórmula. En bases de datos convertidas, este mecanismo no se activa por defecto por razones de compatibilidad pero puede implementarse vía una preferencia.1: Siempre utilizar relaciones automáticas (= funcionamiento de versiones anteriores de 4D). En este modo, una relación es necesaria para definir la selección de una tabla en función de búsquedas efectuadas en otra tabla. 4D no efectúa más "uniones SQL."2: Utilizar las uniones SQL si es posible (= funcionamiento o defecto de las bases creadas en versión 11.2 y superiores de 4D v11 SQL). En este modo, 4D establece "uniones SQL" para las búsquedas por fórmula cuando la fórmula se ajusta para ello (con dos excepciones, ver la descripción del comando [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") o [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")).**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Alcance**: aplicación 4D +**Descripción**: devuelve 1 si la arquitectura de la base actual es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. -### HTTP compression level (50) -**Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +### Is host database a project (113) -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Alcance**: aplicación 4D +**Descripción**: devuelve 1 si la arquitectura de la base local es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. -### HTTP compression threshold (51) -**Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no +### Is host database writable (117) -**Descripción**: *Constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Nota**: solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Alcance**: aplicación 4D +**Descripción**: devuelve 1 si el archivo estructura/archivo proyecto local es editable y 0 si es de solo lectura. -### Server base process stack size (53) -**Alcance**: 4D Server - Se conserva entre dos **sesiones**: no +### Libldap version (114) - **Valores posibles**: entero largo positivo. +**Alcance**: máquina 4D actual -**Descripción**: tamaño de la pila asignada a cada proceso del sistema preferente en el servidor, expresado en bytes. El tamaño por defecto es determinado por el sistema. +**Se conserva entre dos sesiones**: no -Los procesos sistema preferente (procesos de tipo Proceso base 4D client) se cargan para controlar los procesos cliente 4D principales. El tamaño asignado por defecto a la pila de cada proceso preferente da facilidad de ejecución pero puede resultar consecuente cuando se crea un gran número de procesos (varios cientos). +**Descripción**: devuelve el número de versión de la librería LDAP en la aplicación 4D en la máquina actual. (Solo lectura) -Por razones de optimización, este tamaño puede reducirse considerablemente si las operaciones efectuadas por la base lo permiten (por ejemplo si la base no efectúa ordenaciones de grandes cantidades de registros). Son posibles valores de 512 o incluso 256 KB. Sea cuidadoso, subdimensionar la pila es critico y puede afectar la operación de 4D Server. La definición de este parámetro debe hacerse con precaución y tener en cuenta las condiciones de uso de la base (número de registros, tipo de operaciones, etc.). -Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo servidor (por ejemplo en el *Método base On Server Startup*). +### Libsasl version (115) +**Alcance**: máquina 4D actual -### Idle connections timeout (54) +**Se conserva entre dos sesiones**: no -**Alcance**: aplicación 4D a menos que valor sea negativo +**Descripción**: devuelve el número de versión de la librería SASL en la aplicación 4D en la máquina actual. (Solo lectura) -**Se conserva entre dos sesiones:** no -**Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -**Descripción**: máximo periodo de inactividad para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. +### Libzip version (120) -Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. +**Alcance**: máquina 4D actual -Si pasa un valor positivo en *valor*, se aplicará a todas las nuevas conexiones en todos los procesos. Si pasa un valor negativo, se aplicará a las conexiones que se abran en el proceso actual. Si pasa 0, las conexiones inactivas no serán sometidas a un timeout. +**Se conserva entre dos sesiones**: n/a -Este parámetro puede definirse del lado del cliente. Por lo general, no necesita cambiar este valor. +**Descripción**: devuelve el número de versión de la librería libzip en la aplicación 4D en la máquina actual. (Sólo lectura) -### PHP interpreter IP address (55) +### Log command list (80) **Alcance**: aplicación 4D -Se conserva entre dos **sesiones**: no - -**Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). - -**Descripción**: dirección IP utilizada localmente por 4D para comunicarse con el intérprete PHP vía FastCGI. Por defecto, el valor es "127.0.0.1". Esta dirección debe corresponder a la máquina donde en encuentra 4D. Este parámetro también puede definirse globalmente para todas las máquinas vía las Propiedades de la base. - -Para mayor información sobre el intérprete PHP, por favor consulte el manual de *Diseño*. - - +**Se conserva entre dos sesiones**: no -### PHP interpreter port (56) +**Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. -**Alcance**: aplicación 4D +**Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. - **Se conserva entre dos sesiones**: no +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: -**Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. +```4d + SET DATABASE PARAMETER(Log command list;"277;341") //Graba solo los comandos QUERY y QUERY SELECTION + SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluye los comandos SET USER ALIAS y DELAY PROCESS de ser grabados +``` -**Descripción**: número de puerto TCP utilizado o por el intérprete PHP de 4D. Este parámetro también puede modificarse globalmente para todos los equipos vía las Propiedades de la base. Para mayor información sobre el intérprete PHP, consulte el manual de *Diseño*. +### Max concurrent Web processes (18) +**Alcance**: 4D local, 4D Server -### SSL cipher list (64) +**Se conserva entre dos sesiones**: sí -**Alcance**: Aplicación 4D +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -Se conserva entre dos sesiones: No -**Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. +### Maximum Web requests size (27) -Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). +**Alcance**: 4D local, 4D Server -Cuando la lista de cifrado se modifica, debe reiniciar el servidor correspondiente para que los nuevos parámetros sean tenidos en cuenta. +**Se conserva entre dos sesiones**: sí -Para reinicializar la lista de cifrado a su valor por defecto (guardado permanentemente en el archivo SLI), llame al comando [SET DATABASE PARAMETER](set-database-parameter.md) y pase una cadena vacía ("") en el parámetro *valor*. +**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -**Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. +### Min TLS version (105) -### Cache unload minimum size (66) +**Alcance**: 4D Server, 4D Web Server y 4D SQL Server -**Alcance**: aplicación 4D +**Conservar entre dos sesiones**: no -**Se conserva entre dos sesiones**: no +**Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. -**Valores posibles**: Entero largo positivo > 1. +**Valor por defecto**: TLSv1\_3 -**Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). +**Valores posibles**: +- TLSv1\_2 (TLS 1.2, introducido en 2008) +- TLSv1\_3 (TLS 1.3, introducido en 2018) -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. +**NOTAS**: -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio. +- El plugin 4D Internet Commands utiliza una capa de red diferente, por lo que este selector no tendrá ningún impacto en su versión TLS. +- Se ignorarán los intentos de aplicar TLS a la capa de red heredada. -### Direct2D status (69) +### Number of formulas in cache (92) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: no - -**Descripción**: modo de activación de Direct2D bajo Windows. - -**Valores posibles**: una de las siguientes constantes (modo 3 por defecto): - -Direct2D Disabled (0): el modo Direct2D no está habilitado y la base de datos funciona en el modo anterior (GDI/GDIPlus). - -Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos para toda la aplicación 4D. Si este contexto no está disponible, use el contexto del software de gráficos Direct2D. - -Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. - -***Advertencia* : este selector se proporciona solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* - +**Se conserva entre dos sesiones:** no +**Valores posibles**: enteros largos positivos -### Direct2D get active status (74) +**Valor por defecto**: 0 (sin caché) -**Nota**: sólo puede utilizar este selector con el comando Get database parameter y su valor no puede definirse. +**Descripción**: establece u obtiene el número máximo de fórmulas a conservar en la memoria caché de fórmulas, que es utilizado por el comando [EXECUTE FORMULA](execute-formula.md). Este límite se aplica a todos los procesos, pero cada proceso tiene su propia caché de fórmulas. Ubicar las fórmulas en la caché acelera la ejecución del comando [EXECUTE FORMULA](execute-formula.md) en modo compilado, ya que cada fórmula en caché se tokeniza sólo una vez en este caso.Cuando se cambia el valor de la memoria caché, el contenido existente se restablecen incluso si el nuevo tamaño es más grande que el anterior. Una vez se alcanza el número máximo de fórmulas en la memoria caché, una nueva fórmula ejecutada borrará a la más antigua de la memoria caché (modo FIFO). Este parámetro sólo se tiene en cuenta en las bases o componentes compilados. -**Descripción**: devuelve la implementación activa de Direct2D bajo Windows. -**Valores posibles**: 0, 1, 2, 3, 4 o 5 (ver los valores del selector 69). El valor devuelto depende de la disponibilidad de Direct2D, del hardware y de la calidad Direct2D soportado por el sistema operativo. -Por ejemplo, si ejecuta: - -  SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) +### OpenSSL version (94) -- En Windows 7 y superiores, $mode vale 1 cuando el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode valdrá 3 (contexto software). +**Alcance**: todas las máquinas 4D -- En Windows Vista, $mode valdrá 1 si el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode toma el valor 0 (desactivando Direct2D). +**Se conserva entre dos sesiones**: no -- En Windows XP, $mode siempre valdrá 0 (no compatible con Direct2D). +**Descripción**: devuelve el número de versión de la librería OpenSSL que se utiliza en la máquina. (Solo lectura) -### Diagnostic log recording (79) +### Order by formula on server (47) -**Hilo seguro**: sí +**Alcance**: tabla y procesos actuales -**Alcance**: Aplicación 4D + **Se conserva entre dos sesiones**: no -**Se conserva entre dos sesiones**: No + **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) -**Valores posibles**: 0 ó 1 (0 = no guardar,1 = guardar) +**Descripción**: ubicación de la ejecución del comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") para la tabla pasada en parámetro. -**Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). +Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. -4D permite guardar de manera continua en un archivo de diagnóstico un conjunto de eventos relativos al funcionamiento interno de la aplicación. La información contenida en este archivo está destinada a la actualización de las aplicaciones 4D y puede ser analizada con ayuda de los servicios técnicos de 4D. Cuando pasa 1 en este selector, el archivo de diagnóstico, llamado *NomBase.txt*, se crea automáticamente (o abre) en la carpeta **Logs** de la base. Una vez el archivo alcance un tamaño de 10 MB, se cierra y se genera un nuevo archivo *NomBase\_N.txt*, con un número secuencial N incrementado. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -Note que es posible incluir la información personalizada en este archivo con ayuda del comando [LOG EVENT](log-event.md). +### Pause logging (121) -### Log command list (80) +**Hilo seguro**: sí **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: no +**Se mantiene entre dos sesiones**: no -**Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. +**Valores posibles**: 0 (reanudar historial), 1 (pausar historial) -**Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. +Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. -Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: - SET DATABASE PARAMETER(Log command list;"277;341") //Grabar solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluir SET USER ALIAS y DELAY PROCESS commands from being recorded - - -### Spellchecker (81) +### PHP interpreter IP address (55) **Alcance**: Aplicación 4D - **Se conserva entre dos sesiones**: No - - **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. +**Se conserva entre dos sesiones**: no -**Descripción**: permite activar el corrector ortográfico Hunspell bajo macOS. Por defecto, en esta plataforma el corrector nativo está activo. Puede preferir utilizar el corrector Hunspell, por ejemplo, para unificar la interfaz de sus aplicaciones multiplataformas (bajo Windows, sólo el corrector Hunspell está disponible). Para mayor información, consulte *Corrección ortográfica*. +**Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). +**Descripción**: dirección IP utilizada localmente por 4D para comunicarse con el intérprete PHP vía FastCGI. Por defecto, el valor es "127.0.0.1". Esta dirección debe corresponder a la máquina donde en encuentra 4D. Este parámetro también puede definirse globalmente para todas las máquinas vía las Propiedades de la base. +Para mayor información sobre el intérprete PHP, por favor consulte el manual de *Diseño*. -### Dates inside objects (85) -**Alcance**: proceso actual - **Se conserva entre dos sesiones**: no +### PHP interpreter port (56) - **Valores posibles**: String type without time zone (0), String type with time zone (1), Date type (2) (por defecto) +**Alcance**: aplicación 4D -**Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. + **Se conserva entre dos sesiones**: no -Cuando el valor del selector es Date type (valor predeterminado para las bases creadas con 4D v17 y superior), las fechas 4D se almacenan con el tipo de fecha dentro de los objetos, con respecto a la configuración de fecha local. Cuando se convierte a formato JSON, los atributos de fecha se convertirán en cadenas que no incluyen un tiempo. (**Nota:** esta configuración se puede definir mediante la opción "Utilizar tipo de fecha en lugar del formato de fecha ISO en objetos" que se encuentra en *Página Compatibilidad* de la configuración de la base). +**Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. -Si pasa String type with time zone en este selector, convertirá las fechas 4D en cadenas ISO y tendrá en cuenta la zona horaria local. Por ejemplo, la conversión de la fecha 23/08/2013 le da "2013-08-22T22: 00: 000Z" en formato JSON cuando la operación se realiza en Francia durante el horario de verano (GMT+ 2). Este principio se ajusta al funcionamiento estándar de JavaScript. Esto puede ser una fuente de errores cuando desea enviar valores de fecha JSON a alguien en un huso horario diferente. Por ejemplo, cuando exporta una tabla usando [Selection to JSON](selection-to-json.md) en Francia que se debe reimportar en los EE. UU. utilizando [JSON TO SELECTION](json-to-selection.md). Dado que las fechas se vuelven a interpretar en cada zona horaria, los valores almacenados en la base de datos serán diferentes. En este caso, puede modificar el modo de conversión de las fechas para que no tengan en cuenta la zona horaria pasando String type without time zone en este selector. La conversión de la fecha 23/08/2013 le dará "2013-08-23T00: 00: 00Z" en todos los casos. +**Descripción**: número de puerto TCP utilizado o por el intérprete PHP de 4D. Este parámetro también puede modificarse globalmente para todos los equipos vía las Propiedades de la base. Para mayor información sobre el intérprete PHP, consulte el manual de *Diseño*. -### Diagnostic log level (86) +### POP3 Log (116) **Hilo seguro**: sí -**Alcance**: aplicación 4D +**Alcance:** 4D local, 4D Server **Se conserva entre dos sesiones**: no -**Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. - -**Valores posibles**: una de las siguientes constantes (Log info por defecto): Log trace: activa ERROR, WARN, INFO, DEBUG, TRACE (nivel más detallado) Log debug: activa ERROR, WARN, INFO, DEBUG Log info: activa ERROR, WARN, INFO (por defecto) Log warn: activa ERROR, WARN Log error: activa ERROR (nivel menos detallado) - - - -### Use legacy network layer (87) - -**Alcance:** 4D en modo local, 4D Server** - -**Se conserva entre dos sesiones:** sí** - - **Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). - -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). - -**Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) - -**Valor por defecto:** 0 en bases de datos creadas con 4D v14 R5 o superior, 1 en bases de datos convertidas de 4D v14 R4 o anteriores. - +**Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. -### SQL Server Port ID (88) +Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. -**Alcance**: 4D modo local y 4D Server. -**Se conserva entre dos sesiones:** sí** -**Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. +### Port ID (15) -**Valores posibles:** 0 a 65535. +**Alcance**: 4D local, 4D Server -**Valor por defecto:** 19812 +**Se conserva entre dos sesiones**: no +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, que puede ser definido en la página "Web/Configuración" de la caja de diálogo Preferencias, es 80. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. +El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* -### Circular log limitation (90) -**Hilo seguro**: sí -**Alcance**: 4D local, 4D Server. +### Query by formula joins (49) -**Se conserva entre dos sesiones:** no +**Alcance**: proceso actual -**Valores posibles**: todo valor entero, 0 = conservar todos los registros + **Se conserva entre dos sesiones**: no -**Descripción**: número máximo de archivos a conservar en rotación para cada tipo de registro. Por defecto, todos los archivos se conservan. Si pasa un valor *X*, solo los *X* archivos más recientes se conservan, el más antiguo se borra automáticamente cuando se crea uno nuevo. Esta parametrización se aplica a cada uno de los siguientes archivos de registro: registros de peticiones (selectores 28 y 45), registro de depuración (selector 34), registro de eventos (selector 79), así como el historial de peticiones web (selectores 29 y 84 del comando [WEB SET OPTION](web-set-option.md)), etc. + **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). +**Descripción**: modo de funcionamiento de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") relativos al uso de "uniones SQL." +En las bases de datos creadas a partir de la versión 11.2 de 4D v11 SQL, estos comandos efectúan uniones basados en el modelo de uniones SQL. Este mecanismo permite modificar la selección de una tabla en función de una búsqueda efectuada en otra tabla sin que las tablas estén conectadas por una relación automática (condición necesaria en las versiones anteriores de 4D). -### Number of formulas in cache (92) +El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de los comandos de búsqueda por fórmula para el proceso actual: -**Alcance**: aplicación 4D +- 0: Utilizar los parámetros actuales de la base (valor por defecto). En bases creadas a partir de la versión 11.2 de 4D v11 SQL, las "uniones SQL" siempre se activan para las búsquedas por fórmula. En bases de datos convertidas, este mecanismo no se activa por defecto por razones de compatibilidad pero puede implementarse vía una preferencia. +- 1: Siempre utilizar relaciones automáticas (= funcionamiento de versiones anteriores de 4D). En este modo, una relación es necesaria para definir la selección de una tabla en función de búsquedas efectuadas en otra tabla. 4D no efectúa más "uniones SQL."2: Utilizar las uniones SQL si es posible (= funcionamiento o defecto de las bases creadas en versión 11. +- 2 y superiores de 4D v11 SQL). En este modo, 4D establece "uniones SQL" para las búsquedas por fórmula cuando la fórmula se ajusta para ello (con dos excepciones, ver la descripción del comando [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") o [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")).**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -**Se conserva entre dos sesiones:** no -**Valores posibles**: enteros largos positivos -**Valor por defecto**: 0 (sin caché) +### Query by formula on server (46) -**Descripción**: establece u obtiene el número máximo de fórmulas a conservar en la memoria caché de fórmulas, que es utilizado por el comando [EXECUTE FORMULA](execute-formula.md). Este límite se aplica a todos los procesos, pero cada proceso tiene su propia caché de fórmulas. Ubicar las fórmulas en la caché acelera la ejecución del comando [EXECUTE FORMULA](execute-formula.md) en modo compilado, ya que cada fórmula en caché se tokeniza sólo una vez en este caso.Cuando se cambia el valor de la memoria caché, el contenido existente se restablecen incluso si el nuevo tamaño es más grande que el anterior. Una vez se alcanza el número máximo de fórmulas en la memoria caché, una nueva fórmula ejecutada borrará a la más antigua de la memoria caché (modo FIFO). Este parámetro sólo se tiene en cuenta en las bases o componentes compilados. +**Alcance**: tabla y procesos actuales + **Se conserva entre dos sesiones**: no + **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) -### OpenSSL version (94) +**Descripción**: ubicación de la ejecución de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") para la *tabla* pasada en parámetro. -**Alcance**: todas las máquinas 4D +Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda "por fórmula" pueden ejecutarse en el servidor o en el equipo cliente: -**Se conserva entre dos sesiones**: no +en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -**Descripción**: devuelve el número de versión de la librería OpenSSL que se utiliza en la máquina. (Solo lectura) +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. +Consulte el ejemplo 2. +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -### Cache flush periodicity (95) -**Hilo seguro**: sí +### RDP optimization (133) -**Alcance**: 4D local, 4D Server +**Alcance:** aplicación 4D -**Se conserva entre dos sesiones:** no +**Se mantiene entre dos sesiones**: no -**Valores posibles:** entero largo > 1 (segundos) +**Valores posibles:** `0`: activado (por defecto), `1`: desactivado. -**Descripción**: obtiene o establece la periodicidad del vaciado de la caché, expresado en segundos. La modificación de este valor prevalece sobre la opción **Vaciar caché cada X segundos** en [XML DECODE](xml-decode.md) de la configuración de la base para la sesión (que no se almacena en las Propiedades de la base). +**Descripción:** activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). @@ -723,249 +748,223 @@ El tiempo de espera de la conexión remota se aplica después de que una máquin -### Tips enabled (101) - -**Alcance**: aplicación 4D - -**Se conserva entre dos sesiones**: no - -**Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) - -**Descripción**: define u obtiene el estado de visualización actual de los consejos para la aplicación 4D. De forma predeterminada, las sugerencias están activadas. - -Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los mensajes de ayuda de formulario y las sugerencias del editor de modo Diseño. - +### Server base process stack size (53) +**Alcance**: 4D Server -### Tips delay (102) + **Se conserva entre dos sesiones**: no -**Alcance**: aplicación 4D + **Valores posibles**: entero largo positivo. -**Se conserva entre dos sesiones**: No +**Descripción**: tamaño de la pila asignada a cada proceso del sistema preferente en el servidor, expresado en bytes. El tamaño por defecto es determinado por el sistema. -**Valores posibles**: entero largo >= 0 (tics) +Los procesos sistema preferente (procesos de tipo Proceso base 4D client) se cargan para controlar los procesos cliente 4D principales. El tamaño asignado por defecto a la pila de cada proceso preferente da facilidad de ejecución pero puede resultar consecuente cuando se crea un gran número de procesos (varios cientos). -**Descripción**: retraso antes de que se muestren las sugerencias una vez que el cursor del ratón se haya detenido en objetos con mensajes de ayuda adjuntos. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 45 tics (0.75 segundos). +Por razones de optimización, este tamaño puede reducirse considerablemente si las operaciones efectuadas por la base lo permiten (por ejemplo si la base no efectúa ordenaciones de grandes cantidades de registros). Son posibles valores de 512 o incluso 256 KB. Sea cuidadoso, subdimensionar la pila es critico y puede afectar la operación de 4D Server. La definición de este parámetro debe hacerse con precaución y tener en cuenta las condiciones de uso de la base (número de registros, tipo de operaciones, etc.). +Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo servidor (por ejemplo en el *Método base On Server Startup*). -### Tips duration (103) -**Alcance**: aplicación 4D +### SMTP Log (110) -**Se conserva entre dos sesiones**: No +**Hilo seguro**: sí -**Valores posibles**: entero largo >= 60 (tics) +**Alcance**: 4D local, 4D Server* -**Descripción**: duración máxima de visualización de una sugerencia. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 720 tics (12 segundos). +* **Se conserva entre dos sesiones**: no + **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor SMTP, cuando un objeto *transportador* se procesa a través de *transporter.send( )* o *SMTP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DSMTPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DSMTPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. De forma predeterminada, todos los archivos se conservan, pero puede controlar la cantidad de archivos a seguir utilizando el parámetro Circular log limitation. -### Min TLS version (105) +Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. -**Alcance**: 4D Server, 4D Web Server y 4D SQL Server -**Conservar entre dos sesiones**: No -**Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. +### Spellchecker (81) -**Valor por defecto**: TLSv1\_3 +**Alcance**: aplicación 4D -**Valores posibles**: TLSv1\_2 (TLS 1.2, introducido en 2008) TLSv1\_3 (TLS 1.3, introducido en 2018) **NOTAS**: + **Se conserva entre dos sesiones**: no -- El plugin 4D Internet Commands utiliza una capa de red diferente, por lo que este selector no tendrá ningún impacto en su versión TLS. + **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. -- Se ignorarán los intentos de aplicar TLS a la capa de red heredada. +**Descripción**: permite activar el corrector ortográfico Hunspell bajo macOS. Por defecto, en esta plataforma el corrector nativo está activo. Puede preferir utilizar el corrector Hunspell, por ejemplo, para unificar la interfaz de sus aplicaciones multiplataformas (bajo Windows, sólo el corrector Hunspell está disponible). Para mayor información, consulte *Corrección ortográfica*. -### User param value (108) +### SQL Autocommit (43) -**Alcance**: 4D local, 4D Server +**Alcance**: base de datos -**Se conserva entre dos sesiones**: no + **Se conserva entre dos sesiones**: sí -**Valores posibles**: toda cadena personalizada + **Posibles valores**: 0 (desactivación) o 1 (activación) -**Descripción:** cadena personalizada pasada de una sesión a la siguiente cuando se reinicia la aplicación 4D. Este selector es útil en el contexto de pruebas unitarias automatizadas que requieren que las aplicaciones se reinicien con diferentes parámetros. +**Descripción**: activación o desactivación del modo SQL auto-commit. Por defecto, el valor es 0 (modo desactivado) -Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), define un nuevo valor que estará disponible en la próxima base de datos abierta después de que 4D se reinicie manualmente o utilizando los comandos [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), o [RESTART 4D](restart-4d.md). Cuando se utiliza con [Get database parameter](get-database-parameter.md), obtiene el valor del parámetro de usuario actualmente disponible, definido mediante una línea de comando (ver *Interfaz de línea de comando*), el archivo .4DLink (ver *Usar un archivo 4DLink*), o una llamada a [SET DATABASE PARAMETER](set-database-parameter.md) durante la sesión anterior. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) define un User param value antes de una llamada a [OPEN DATABASE](open-database.md) con un archivo .4DLink que también contiene un atributo xml user-param, 4D 4D tiene en cuenta solo el parámetro ofrecido por [SET DATABASE PARAMETER](set-database-parameter.md). + El modo auto-commit permite reforzar la integridad referencial de la base. Cuando este modo está activo, las peticiones *SELECT*, INSERT, UPDATE y *DELETE* (SIUD) se incluyen automáticamente en las transacciones cuando no se han ejecutado dentro de una transacción. Este modo igualmente puede definirse en las Preferencias de la base. -### Times inside objects (109) +### SQL Engine case sensitivity (44) -Alcance: 4D local, 4D Server (todos los procesos) +**Alcance**: base de datos - Se conserva entre dos **sesiones**: No + **Se conserva entre dos sesiones**: sí - **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) + **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) -**Descripción**: define la forma en que los valores de tipo hora se convierten y almacenan dentro de las propiedades de los objetos y los elementos de la colección, así como la forma en que se importan/exportan en JSON y en las áreas web. Por defecto, a partir de 4D v17, las horas se convierten y almacenan en número de segundos en los objetos. +**Descripción**: activación o desactivación de la sensibilidad a mayúsculas y minúsculas para comparaciones de cadenas efectuadas por el motor SQL. -En versiones anteriores, los valores de tiempo se convertían y almacenaban como cantidad de milisegundos en esos contextos. Usar este selector puede ayudarlo a migrar sus aplicaciones volviendo a la configuración anterior si es necesario. +Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). -**Nota**: los métodos ORDA y el motor SQL ignoran esta configuración, siempre suponen que los valores de tiempo son números de segundos. +Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subform-container.md) de las Preferencias de la base. -### SMTP Log (110) +### SQL Server Port ID (88) -**Hilo seguro**: sí +**Alcance**: 4D modo local y 4D Server. -**Alcance**: 4D local, 4D Server* +: Sí -* **Se conserva entre dos sesiones**: no +**Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. - **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). +**Valores posibles:** 0 a 65535. -**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor SMTP, cuando un objeto *transportador* se procesa a través de *transporter.send( )* o *SMTP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DSMTPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DSMTPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. De forma predeterminada, todos los archivos se conservan, pero puede controlar la cantidad de archivos a seguir utilizando el parámetro Circular log limitation. +**Valor por defecto:** 19812 -Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. +### SSL cipher list (64) -### Current process debug log recording (111) +**Alcance**: Aplicación 4D -**Alcance:** Aplicación 4D +Se conserva entre dos sesiones: No -**Se conserva entre dos sesiones:** No +**Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. +Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. -**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. +Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). +Cuando la lista de cifrado se modifica, debe reiniciar el servidor correspondiente para que los nuevos parámetros sean tenidos en cuenta. +Para reinicializar la lista de cifrado a su valor por defecto (guardado permanentemente en el archivo SLI), llame al comando [SET DATABASE PARAMETER](set-database-parameter.md) y pase una cadena vacía ("") en el parámetro *valor*. -### Is current database a project (112) +**Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. -**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +### Table sequence number (31) **Alcance**: aplicación 4D -**Descripción**: devuelve 1 si la arquitectura de la base actual es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. - - + **Se conserva entre dos sesiones**: sí -### Is host database a project (113) + **Valores posibles**: todo valor de tipo entero largo. -**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Descripción**: este selector se utiliza para modificar o modificar u obtener el número único actual de los registros de la tabla pasada en parámetro. "Número actual" significa "último número utilizado": si modifica este valor utilizando SET DATABASE PARAMETER, el siguiente registro será el valor pasado + 1\. Este nuevo número es el número devuelto por el comando Sequence number [](http://doc.tmp.4d.fr/Database-Parameters/4Dv11.4/ConstantTheme/4870/CMU00244.HTM) como también en todo campo de la tabla a la cual se asigna la propiedad "Autoincrementar" en el editor de estructura o vía SQL. -**Alcance**: aplicación 4D +Por defecto, este número único es definido por 4D y corresponde al orden de creación de los registros. Para información adicional, por favor consulte la documentación del comando [Sequence number](sequence-number.md "Sequence number"). -**Descripción**: devuelve 1 si la arquitectura de la base local es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. +### TCPUDP log recording (131) -### Libldap version (114) +**Alcance:** aplicación 4D -**Alcance**: máquina 4D actual +**Se mantiene entre dos sesiones**: no -**Se conserva entre dos sesiones**: no +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. -**Descripción**: devuelve el número de versión de la librería LDAP en la aplicación 4D en la máquina actual. (Solo lectura) +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para registrar eventos TCP. -### Libsasl version (115) +### Times inside objects (109) -**Alcance**: máquina 4D actual +**Alcance**: 4D local, 4D Server (todos los procesos) -**Se conserva entre dos sesiones**: no + **Se conserva entre dos sesiones**: no -**Descripción**: devuelve el número de versión de la librería SASL en la aplicación 4D en la máquina actual. (Solo lectura) + **Valores posibles**: Times in seconds (0) (predeterminado), Times in milliseconds (1) +**Descripción**: define la forma en que los valores de tipo hora se convierten y almacenan dentro de las propiedades de los objetos y los elementos de la colección, así como la forma en que se importan/exportan en JSON y en las áreas web. Por defecto, a partir de 4D v17, las horas se convierten y almacenan en número de segundos en los objetos. +En versiones anteriores, los valores de tiempo se convertían y almacenaban como cantidad de milisegundos en esos contextos. Usar este selector puede ayudarlo a migrar sus aplicaciones volviendo a la configuración anterior si es necesario. -### POP3 Log (116) +**Nota**: los métodos ORDA y el motor SQL ignoran esta configuración, siempre suponen que los valores de tiempo son números de segundos. -**Hilo seguro**: sí -**Alcance:** 4D local, 4D Server -**Se conserva entre dos sesiones**: no +### Tips delay (102) -**Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). +**Alcance**: aplicación 4D -**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. +**Se conserva entre dos sesiones**: No -Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. +**Valores posibles**: entero largo >= 0 (tics) +**Descripción**: retraso antes de que se muestren las sugerencias una vez que el cursor del ratón se haya detenido en objetos con mensajes de ayuda adjuntos. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 45 tics (0.75 segundos). -### Is host database writable (117) -**Nota**: solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +### Tips duration (103) **Alcance**: aplicación 4D -**Descripción**: devuelve 1 si el archivo estructura/archivo proyecto local es editable y 0 si es de solo lectura. - - - -### IMAP Log (119) - -**Hilo seguro**: sí - -**Alcance**: 4D local, 4D Server - **Se conserva entre dos sesiones**: No -**Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). - -**Descripción**: inicia o detiene la grabación de los intercambios entre 4D y el servidor IMAP, cuando se procesa un objeto transportador a través de *IMAP\_transporter.getMail( )* o *IMAP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando se activa este mecanismo, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DIMAPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DIMAPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se sustituye directamente. Se puede definir el número inicial de la secuencia mediante el parámetro valor. Por defecto, se conservan todos los archivos, pero puede controlar el número de archivos a conservar utilizando el parámetro Circular log limitation. - -Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. - +**Valores posibles**: entero largo >= 60 (tics) +**Descripción**: duración máxima de visualización de una sugerencia. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 720 tics (12 segundos). -### Libzip version (120) -**Alcance**: máquina 4D actual -**Se conserva entre dos sesiones**: n/a - -**Descripción**: devuelve el número de versión de la librería libzip en la aplicación 4D en la máquina actual. (Sólo lectura) +### Tips enabled (101) +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Pause logging (121) +**Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) -**Hilo seguro**: sí +**Descripción**: define u obtiene el estado de visualización actual de los consejos para la aplicación 4D. De forma predeterminada, las sugerencias están activadas. -**Alcance**: aplicación 4D +Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los mensajes de ayuda de formulario y las sugerencias del editor de modo Diseño. -**Se mantiene entre dos sesiones**: no -**Valores posibles**: 0 (reanudar historial), 1 (pausar historial) -Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. +### Use legacy network layer (87) +**Alcance:** 4D en modo local, 4D Server** +**Se conserva entre dos sesiones:** sí -### TCPUDP log recording (131) +**Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -**Alcance**: aplicación 4D +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). -**Se mantiene entre dos sesiones**: no +**Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) -**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. +**Valor por defecto:** 0 en bases de datos creadas con 4D v14 R5 o superior, 1 en bases de datos convertidas de 4D v14 R4 o anteriores. -**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para los eventos logging TCP. +### User param value (108) -### RDP optimization +**Alcance**: 4D local, 4D Server -**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -**Se mantiene entre dos sesiones**: no +**Valores posibles**: toda cadena personalizada -**Valores posibles:** `0`: Disabled (default), `1`: Enabled. +**Descripción:** cadena personalizada pasada de una sesión a la siguiente cuando se reinicia la aplicación 4D. Este selector es útil en el contexto de pruebas unitarias automatizadas que requieren que las aplicaciones se reinicien con diferentes parámetros. -**Descripción:** Activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). +Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), define un nuevo valor que estará disponible en la próxima base de datos abierta después de que 4D se reinicie manualmente o utilizando los comandos [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), o [RESTART 4D](restart-4d.md). Cuando se utiliza con [Get database parameter](get-database-parameter.md), obtiene el valor del parámetro de usuario actualmente disponible, definido mediante una línea de comando (ver *Interfaz de línea de comando*), el archivo .4DLink (ver *Usar un archivo 4DLink*), o una llamada a [SET DATABASE PARAMETER](set-database-parameter.md) durante la sesión anterior. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) define un User param value antes de una llamada a [OPEN DATABASE](open-database.md) con un archivo .4DLink que también contiene un atributo xml user-param, 4D 4D tiene en cuenta solo el parámetro ofrecido por [SET DATABASE PARAMETER](set-database-parameter.md). diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md index b2223dee64a5c1..e266448f1d160a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md @@ -21,6 +21,34 @@ displayed_sidebar: docs El *selector* designa el parámetro a modificar. 4D ofrece constantes predefinidas, las cuales se ubican en el tema *Parámetros de la base*. La siguiente tabla lista cada constante, describe su alcance e indica si los cambios realizados se conservan entre dos sesiones: +### 4D Remote mode timeout (14) + +**Alcance** (antigua capa de red únicamente): aplicación 4D si valor positivo + +**Se conserva entre dos sesiones**: sí si *valor* positivo + +**Descripción**: a utilizar en casos muy específicos. Valor del timeout otorgado por el equipo 4D remoto a la máquina 4D Server. Por defecto, este valor se define en la página "Cliente-Servidor/Configuración" de la caja de diálogo de Preferencias en el equipo remoto. + +El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua capa de red. Con la capa 4D *ServerNet* activada, se ignora: esta configuración es administrada por el selector Timeout 4D Server (13). + + + +### 4D Server log recording (28) + +**Hilo seguro**: sí + +**Alcance**: 4D Server, 4D remoto* + +**Se conserva entre dos sesiones**: no + + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). + +**Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). + +4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. + +Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. + ### 4D Server timeout (13) **Alcance**: aplicación 4D si *valor* positivo @@ -39,27 +67,52 @@ Si pasa un valor **positivo** en el parámetro *valor*, define un timeout global -### 4D Remote mode timeout (14) +### Auto synchro resources folder (48) -**Alcance** (antigua capa de red únicamente): aplicación 4D si valor positivo +**Alcance**:equipo 4D remoto -**Se conserva entre dos sesiones**: sí si *valor* positivo + **Se conserva entre dos sesiones**: no -**Descripción**: a utilizar en casos muy específicos. Valor del timeout otorgado por el equipo 4D remoto a la máquina 4D Server. Por defecto, este valor se define en la página "Cliente-Servidor/Configuración" de la caja de diálogo de Preferencias en el equipo remoto. + **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). -El selector Timeout 4D mode distant no se tiene en cuenta si utiliza la antigua capa de red. Con la capa 4D *ServerNet* activada, se ignora: esta configuración es administrada por el selector Timeout 4D Server (13). +**Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. + +Cuando el contenido de la carpeta *Resources* en el servidor se ha modificado o un usuario ha solicitado la sincronización (por ejemplo vía el explorador de recursos o siguiendo la ejecución del comando [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md "NOTIFY RESOURCES FOLDER MODIFICATION")), el servidor notifica a los equipos cliente conectados. +Tres modos de sincronización son posibles del lado del cliente. El selector Auto Synchro Resources Folder se utiliza para especificar el modo a utilizar por el equipo cliente para la sesión actual: + +0 (valor por defecto): sin sincronización dinámica (la petición de sincronización se ignora) 1: sincronización dinámica automática2: visualización de una caja de diálogo en los equipos clientes, con la posibilidad de efectuar o rechazar la sincronización.El modo de sincronización también puede definirse globalmente en las Preferencias de la aplicación. -### Port ID (15) + +### Cache flush periodicity (95) + +**Hilo seguro**: sí + **Alcance**: 4D local, 4D Server +**Se conserva entre dos sesiones:** no + +**Valores posibles:** entero largo > 1 (segundos) + +**Descripción**: obtiene o establece la periodicidad del vaciado de la caché, expresado en segundos. La modificación de este valor prevalece sobre la opción **Vaciar caché cada X segundos** en [XML DECODE](xml-decode.md) de la configuración de la base para la sesión (que no se almacena en las Propiedades de la base). + + + +### Cache unload minimum size (66) + +**Alcance**: aplicación 4D + **Se conserva entre dos sesiones**: no -**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, que puede ser definido en la página "Web/Configuración" de la caja de diálogo Preferencias, es 80. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. +**Valores posibles**: entero largo positivo > 1. -El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* +**Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). + +El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. + +Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D @@ -73,37 +126,61 @@ El selector Port ID se utiliza en el marco de servidores web 4D compilados y fus -### Max concurrent Web processes (18) +### Circular log limitation (90) -**Alcance**: 4D local, 4D Server +**Hilo seguro**: sí -**Se conserva entre dos sesiones**: sí +**Alcance**: 4D local, 4D Server. -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Se conserva entre dos sesiones:** no +**Valores posibles**: todo valor entero, 0 = conservar todos los registros +**Descripción**: número máximo de archivos a conservar en rotación para cada tipo de registro. Por defecto, todos los archivos se conservan. Si pasa un valor *X*, solo los *X* archivos más recientes se conservan, el más antiguo se borra automáticamente cuando se crea uno nuevo. Esta parametrización se aplica a cada uno de los siguientes archivos de registro: registros de peticiones (selectores 28 y 45), registro de depuración (selector 34), registro de eventos (selector 79), así como el historial de peticiones web (selectores 29 y 84 del comando [WEB SET OPTION](web-set-option.md)), etc. -### Client port ID (22) + + +### Client character set (24) **Alcance**: todos los equipos 4D remotos **Se conserva entre dos sesiones**: sí - **Valores posibles**: ver selector 15 + **Valores posibles**: ver selector 17 -**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir valores sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. +**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir los valores sólo para algunos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. -### Client character set (24) +### Client HTTPS port ID (40) **Alcance**: todos los equipos 4D remotos **Se conserva entre dos sesiones**: sí - **Valores posibles**: ver selector 17 + **Valores posibles**: 0 a 65535 -**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir los valores sólo para algunos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. +**Descripción**: número de puerto TCP utilizado por los servidores web de los equipos clientes para conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). + +Este selector puede utilizarse para modificar por programación el puerto TCP utilizado por los servidores web de los equipos clientes para las conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). + +Este selector funciona exactamente igual que el selector 39; sin embargo, aplica a todos los equipos 4D remotos utilizados como servidores web. Si quiere modificar el valor de ciertos equipos clientes únicamente, utilice la caja de diálogo de Preferencias de 4D remoto. + + + +### Client log recording (45) + +**Alcance**:equipo 4D remoto + + **Se conserva entre dos sesiones**: no + + **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). + +**Descripción**: inicia o detiene la grabación de peticiones estándar efectuadas por el equipo cliente 4D que ejecutó el comando (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). + +4D le permite registrar el historial de peticiones realizadas por el equipo cliente. Cuando este mecanismo se activa, se crean dos archivos en el equipo cliente, en la subcarpeta Logs de la carpeta local de la base. Son llamados 4DRequestsLog\_X y 4DRequestsLog\_ProcessInfo\_X, donde X es el número secuencial del historial. Una vez el archivo 4DRequestsLog alcanza un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio para la secuencia utilizando el parámetro *valor*. + +Estos archivos texto almacenan en formato tabulado simple diferente información relacionada con cada petición: hora, número de proceso, tamaño de la petición, duración del proceso, etc. Esta información es particularmente útil durante la fase de desarrollo de la aplicación o con fines estadísticos. @@ -119,31 +196,35 @@ El selector Port ID se utiliza en el marco de servidores web 4D compilados y fus -### Maximum Web requests size (27) +### Client port ID (22) -**Alcance**: 4D local, 4D Server +**Alcance**: todos los equipos 4D remotos -**Se conserva entre dos sesiones**: sí + **Se conserva entre dos sesiones**: sí -**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. + **Valores posibles**: ver selector 15 +**Descripción**: permite especificar este parámetro para todos los equipos 4D remotos utilizados como servidores web. Los valores definidos utilizando estos selectores se aplican a todos los equipos remotos utilizados como servidores web. Si quiere definir valores sólo para ciertos equipos remotos, utilice la caja de diálogo de Preferencias de 4D en modo remoto. -### 4D Server log recording (28) -**Hilo seguro**: sí +### Client Server port ID (35) -**Alcance**: 4D Server, 4D remoto* +**Alcance**: base de datos -**Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones**: sí - **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). +**Valores posibles**: 0 a 65535 -**Descripción**: inicia o detiene la grabación de las peticiones estándar recibidas por 4D Server (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). +**Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. + +La personalización de este valor permite utilizar varias aplicaciones 4D cliente-servidor en la misma máquina con el protocolo TCP; en este caso, debe indicar un número de puerto diferente para cada aplicación. + +El valor se guarda en el archivo de estructura de la base. Puede definirse con 4D en modo local pero sólo se tiene en cuenta en configuración cliente servidor. + +Cuando modifica este valor, es necesario reiniciar el equipo servidor para que el nuevo valor sea tenido en cuenta. -4D Server le permite grabar cada petición recibida por el equipo servidor en un archivo de historial. Cuando este mecanismo está activo, el archivo de historial se crea junto al archivo de estructura de la base. Su nombre es "4DRequestsLog\_X," donde X es el número secuencial del historial. Una vez el archivo alcanza un tamaño de 10 MB, se cierra y se genera un nuevo archivo, con un número secuencial incrementado. Si existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. -Este archivo texto almacena en formato tabulado simple diferente información sobre cada petición: hora, número de proceso, usuario, tamaño de la petición, duración del proceso, etc. Esta información puede ser útil particularmente durante la fase de afinamiento de la aplicación o con fines estadísticos. Por ejemplo puede importarse, en un software de hoja de cálculo para procesarse. ### Client Web log recording (30) @@ -159,17 +240,33 @@ El funcionamiento de este selector es idéntico al del selector 29; sin embargo, -### Table sequence number (31) +### Current process debug log recording (111) -**Alcance**: aplicación 4D +**Alcance:** Aplicación 4D - **Se conserva entre dos sesiones**: sí +**Se conserva entre dos sesiones:** no - **Valores posibles**: todo valor de tipo entero largo. +**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. -**Descripción**: este selector se utiliza para modificar o modificar u obtener el número único actual de los registros de la tabla pasada en parámetro. "Número actual" significa "último número utilizado": si modifica este valor utilizando SET DATABASE PARAMETER, el siguiente registro será el valor pasado + 1\. Este nuevo número es el número devuelto por el comando Sequence number [](http://doc.tmp.4d.fr/Database-Parameters/4Dv11.4/ConstantTheme/4870/CMU00244.HTM) como también en todo campo de la tabla a la cual se asigna la propiedad "Autoincrementar" en el editor de estructura o vía SQL. +Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. -Por defecto, este número único es definido por 4D y corresponde al orden de creación de los registros. Para información adicional, por favor consulte la documentación del comando [Sequence number](sequence-number.md "Sequence number"). +**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. + + + +### Dates inside objects (85) + +**Alcance**: proceso actual + + **Se conserva entre dos sesiones:** no + + **Valores posibles**: Tipo cadena sin zona horaria (0), tipo cadena con zona horaria (1), tipo fecha (2) (por defecto) + +**Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. + +Cuando el valor del selector es Date type (valor predeterminado para las bases creadas con 4D v17 y superior), las fechas 4D se almacenan con el tipo de fecha dentro de los objetos, con respecto a la configuración de fecha local. Cuando se convierte a formato JSON, los atributos de fecha se convertirán en cadenas que no incluyen un tiempo. (**Nota:** esta configuración se puede definir mediante la opción "Utilizar tipo de fecha en lugar del formato de fecha ISO en objetos" que se encuentra en *Página Compatibilidad* de la configuración de la base). + +Si pasa String type with time zone en este selector, convertirá las fechas 4D en cadenas ISO y tendrá en cuenta la zona horaria local. Por ejemplo, la conversión de la fecha 23/08/2013 le da "2013-08-22T22: 00: 000Z" en formato JSON cuando la operación se realiza en Francia durante el horario de verano (GMT+ 2). Este principio se ajusta al funcionamiento estándar de JavaScript. Esto puede ser una fuente de errores cuando desea enviar valores de fecha JSON a alguien en un huso horario diferente. Por ejemplo, cuando exporta una tabla usando [Selection to JSON](selection-to-json.md) en Francia que se debe reimportar en los EE. UU. utilizando [JSON TO SELECTION](json-to-selection.md). Dado que las fechas se vuelven a interpretar en cada zona horaria, los valores almacenados en la base de datos serán diferentes. En este caso, puede modificar el modo de conversión de las fechas para que no tengan en cuenta la zona horaria pasando String type without time zone en este selector. La conversión de la fecha 23/08/2013 le dará "2013-08-23T00: 00: 00Z" en todos los casos. @@ -190,31 +287,24 @@ Por defecto, este número único es definido por 4D y corresponde al orden de cr **Valores posibles**: entero largo contiene un campo de bits: valor = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). - Bit 0 (valor 1) permite activar el archivo (note que cualquier otro valor no nulo también lo activará) - - Bit 1 (valor 2) permite solicitar los parámetros de llamada a los métodos y comandos. - - Bit 2 (valor 4) permite activar el nuevo formato tabulado. - - Bit 3 (valor 8) permite desactivar la escritura inmediata de cada operación en el disco (activado por defecto). La escritura inmediata es menor rápida y más eficaz por ejemplo para buscar las causas de un fallo.Si desactiva este modo, el contenido del archivo será generado más rápidamente. - - Bit 4 (valor 16) desactiva el registro de llamadas de plug-ins (activado por defecto). - - Bit 5 (valor 32) desactiva el registro de las funciones miembros. Ejemplos: +```4d SET DATABASE PARAMETER (34;1) // activa el modo estándar sin los parámetros, con las duraciones - SET DATABASE PARAMETER (34;2) // activa el modo estándar con los parámetros y las duraciones - SET DATABASE PARAMETER (34;2+4) // activa el modo tabulado con los parámetros y las duraciones - SET DATABASE PARAMETER (34;0) // desactiva el archivo +``` Para todo tipo de aplicación 4D interpretada o compilada (4D todos los modos, 4D Server, 4D Volume Desktop), puede evitar que un archivo registre demasiada información: - restringiendo los comandos 4D que se examinan utilizando Log command list (selector 80), o - - restringiéndolo sólo al proceso actual con Current process debug log recording (selector 111). Esto añadirá la letra "p" y el número de proceso al nombre del archivo: *4DDebugLog\[\_pn\_n\].txt* o *4DDebugLogServer\[\_pn\_n\].txt* *Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte la sección *Descripción de archivos de historial*. @@ -227,568 +317,569 @@ Este selector se ofrece únicamente con fines de depuración y debe utilizarse c -### Client Server port ID (35) +### Diagnostic log level (86) -**Alcance**: base de datos +**Hilo seguro**: sí -**Se conserva entre dos sesiones**: sí +**Alcance**: aplicación 4D -**Valores posibles**: 0 a 65535 +**Se conserva entre dos sesiones**: no -**Descripción**: número de puerto TCP donde el servidor 4D publica la base de datos (para conexión remota 4D). Por defecto, el valor es 19813\. +**Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. -La personalización de este valor permite utilizar varias aplicaciones 4D cliente-servidor en la misma máquina con el protocolo TCP; en este caso, debe indicar un número de puerto diferente para cada aplicación. +**Valores posibles**: una de las siguientes constantes (Log info por defecto): Log trace: activa ERROR, WARN, INFO, DEBUG, TRACE (nivel más detallado) Log debug: activa ERROR, WARN, INFO, DEBUG Log info: activa ERROR, WARN, INFO (por defecto) Log warn: activa ERROR, WARN Log error: activa ERROR (nivel menos detallado) -El valor se guarda en el archivo de estructura de la base. Puede definirse con 4D en modo local pero sólo se tiene en cuenta en configuración cliente servidor. -Cuando modifica este valor, es necesario reiniciar el equipo servidor para que el nuevo valor sea tenido en cuenta. +### Diagnostic log recording (79) +**Hilo seguro**: sí -### HTTPS Port ID (39) +**Alcance**: aplicación 4D -**Alcance**: 4D local, 4D Server +**Se conserva entre dos sesiones**: no -**Se conserva entre dos sesiones**: sí +**Valores posibles**: 0 ó 1 (0 = no guardar, 1 = guardar) -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). +4D permite guardar de manera continua en un archivo de diagnóstico un conjunto de eventos relativos al funcionamiento interno de la aplicación. La información contenida en este archivo está destinada a la actualización de las aplicaciones 4D y puede ser analizada con ayuda de los servicios técnicos de 4D. Cuando pasa 1 en este selector, el archivo de diagnóstico, llamado *NomBase.txt*, se crea automáticamente (o abre) en la carpeta **Logs** de la base. Una vez el archivo alcance un tamaño de 10 MB, se cierra y se genera un nuevo archivo *NomBase\_N.txt*, con un número secuencial N incrementado. +Note que es posible incluir la información personalizada en este archivo con ayuda del comando [LOG EVENT](log-event.md). -### Client HTTPS port ID (40) -**Alcance**: todos los equipos 4D remotos - **Se conserva entre dos sesiones**: sí +### Direct2D get active status (74) - **Valores posibles**: 0 a 65535 +**Nota**: sólo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md "Get database parameter") y su valor no puede definirse. -**Descripción**: número de puerto TCP utilizado por los servidores web de los equipos clientes para conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). +**Descripción**: devuelve la implementación activa de Direct2D bajo Windows. -Este selector puede utilizarse para modificar por programación el puerto TCP utilizado por los servidores web de los equipos clientes para las conexiones seguras vía SSL (protocolo HTTPS). Por defecto, el valor es 443 (valor estándar). +**Valores posibles**: 0, 1, 2, 3, 4 o 5 (ver los valores del selector 69). El valor devuelto depende de la disponibilidad de Direct2D, del hardware y de la calidad Direct2D soportado por el sistema operativo. -Este selector funciona exactamente igual que el selector 39; sin embargo, aplica a todos los equipos 4D remotos utilizados como servidores web. Si quiere modificar el valor de ciertos equipos clientes únicamente, utilice la caja de diálogo de Preferencias de 4D remoto. +Por ejemplo, si ejecuta: +```4d +SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware) +$mode:=Get database parameter(Direct2D get active status) +``` +- En Windows 7 y superiores, $mode vale 1 cuando el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode valdrá 3 (contexto software). +- En Windows Vista, $mode valdrá 1 si el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode toma el valor 0 (desactivando Direct2D). +- En Windows XP, $mode siempre valdrá 0 (no compatible con Direct2D). -### SQL Autocommit (43) -**Alcance**: base de datos - **Se conserva entre dos sesiones**: sí +### Direct2D status (69) - **Posibles valores**: 0 (desactivación) o 1 (activación) +**Alcance**: aplicación 4D -**Descripción**: activación o desactivación del modo SQL auto-commit. Por defecto, el valor es 0 (modo desactivado) +**Se conserva entre dos sesiones**: no - El modo auto-commit permite reforzar la integridad referencial de la base. Cuando este modo está activo, las peticiones *SELECT*, INSERT, UPDATE y *DELETE* (SIUD) se incluyen automáticamente en las transacciones cuando no se han ejecutado dentro de una transacción. Este modo igualmente puede definirse en las Preferencias de la base. +**Descripción**: modo de activación de Direct2D bajo Windows. +**Valores posibles**: una de las siguientes constantes (modo 3 por defecto): +- Direct2D Disabled (0): el modo Direct2D no está habilitado y la base de datos funciona en el modo anterior (GDI/GDIPlus). +- Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos para toda la aplicación 4D. Si este contexto no está disponible, use el contexto del software de gráficos Direct2D. +- Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. -### SQL Engine case sensitivity (44) +***Advertencia*: este selector se ofrece solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* -**Alcance**: base de datos - **Se conserva entre dos sesiones**: sí - **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) +### HTTP compression level (50) -**Descripción**: activación o desactivación de la sensibilidad a mayúsculas y minúsculas para comparaciones de cadenas efectuadas por el motor SQL. +**Alcance**: aplicación 4D -Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). +**Se conserva entre dos sesiones**: no -Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subform-container.md) de las Preferencias de la base. +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -### Client log recording (45) +### HTTP compression threshold (51) -**Alcance**:equipo 4D remoto +**Alcance**: aplicación 4D - **Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores posibles**: 0 ó de 1 a X (0 = no grabar, 1 a X = número secuencial, asociado al nombre del archivo). +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -**Descripción**: inicia o detiene la grabación de peticiones estándar efectuadas por el equipo cliente 4D que ejecutó el comando (excluyendo las peticiones web). Por defecto, el valor es 0 (no se graban las peticiones). -4D le permite registrar el historial de peticiones realizadas por el equipo cliente. Cuando este mecanismo se activa, se crean dos archivos en el equipo cliente, en la subcarpeta Logs de la carpeta local de la base. Son llamados 4DRequestsLog\_X y 4DRequestsLog\_ProcessInfo\_X, donde X es el número secuencial del historial. Una vez el archivo 4DRequestsLog alcanza un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio para la secuencia utilizando el parámetro *valor*. - -Estos archivos texto almacenan en formato tabulado simple diferente información relacionada con cada petición: hora, número de proceso, tamaño de la petición, duración del proceso, etc. Esta información es particularmente útil durante la fase de desarrollo de la aplicación o con fines estadísticos. +### HTTPS Port ID (39) +**Alcance**: 4D local, 4D Server -### Query by formula on server (46) +**Se conserva entre dos sesiones**: sí -**Alcance**: tabla y procesos actuales +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. - **Se conserva entre dos sesiones**: no - **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) -**Descripción**: ubicación de la ejecución de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") para la *tabla* pasada en parámetro. +### Idle connections timeout (54) -Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda "por fórmula" pueden ejecutarse en el servidor o en el equipo cliente: +**Alcance**: aplicación 4D a menos que valor sea negativo -en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. +**Se conserva entre dos sesiones:** no -Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. +**Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. -Consulte el ejemplo 2. +**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. -**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. +Si pasa un valor positivo en *valor*, se aplicará a todas las nuevas conexiones en todos los procesos. Si pasa un valor negativo, se aplicará a las conexiones que se abran en el proceso actual. Si pasa 0, las conexiones inactivas no serán sometidas a un timeout. +Este parámetro puede definirse del lado del cliente. Por lo general, no necesita cambiar este valor. -### Order by formula on server (47) -**Alcance**: tabla y procesos actuales - **Se conserva entre dos sesiones**: no +### IMAP Log (119) - **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) +**Hilo seguro**: sí -**Descripción**: ubicación de la ejecución del comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") para la tabla pasada en parámetro. +**Alcance**: 4D local, 4D Server -Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. +**Se conserva entre dos sesiones**: no -**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). +**Descripción**: inicia o detiene la grabación de los intercambios entre 4D y el servidor IMAP, cuando se procesa un objeto transportador a través de *IMAP\_transporter.getMail( )* o *IMAP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando se activa este mecanismo, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DIMAPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DIMAPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se sustituye directamente. Se puede definir el número inicial de la secuencia mediante el parámetro valor. Por defecto, se conservan todos los archivos, pero puede controlar el número de archivos a conservar utilizando el parámetro Circular log limitation. +Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. -### Auto synchro resources folder (48) -**Alcance**:equipo 4D remoto - **Se conserva entre dos sesiones**: no +### Is current database a project (112) - **Valores posibles**: 0 (sin sincronización), 1 (auto sincronización) ó 2 (preguntar). +**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. -**Descripción**: modo de sincronización dinámico de la carpeta *Resources* del equipo cliente 4D que ejecuta el comando con el servidor. +**Alcance**: aplicación 4D -Cuando el contenido de la carpeta *Resources* en el servidor se ha modificado o un usuario ha solicitado la sincronización (por ejemplo vía el explorador de recursos o siguiendo la ejecución del comando [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md "NOTIFY RESOURCES FOLDER MODIFICATION")), el servidor notifica a los equipos cliente conectados. +**Descripción**: devuelve 1 si la arquitectura de la base actual es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. -Tres modos de sincronización son posibles del lado del cliente. El selector Auto Synchro Resources Folder se utiliza para especificar el modo a utilizar por el equipo cliente para la sesión actual: -0 (valor por defecto): sin sincronización dinámica (la petición de sincronización se ignora) 1: sincronización dinámica automática2: visualización de una caja de diálogo en los equipos clientes, con la posibilidad de efectuar o rechazar la sincronización.El modo de sincronización también puede definirse globalmente en las Preferencias de la aplicación. +### Is host database a project (113) +**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. -### Query by formula joins (49) +**Alcance**: aplicación 4D -**Alcance**: proceso actual +**Descripción**: devuelve 1 si la arquitectura de la base local es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. - **Se conserva entre dos sesiones**: no - **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). -**Descripción**: modo de funcionamiento de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") relativos al uso de "uniones SQL." +### Is host database writable (117) -En las bases de datos creadas a partir de la versión 11.2 de 4D v11 SQL, estos comandos efectúan uniones basados en el modelo de uniones SQL. Este mecanismo permite modificar la selección de una tabla en función de una búsqueda efectuada en otra tabla sin que las tablas estén conectadas por una relación automática (condición necesaria en las versiones anteriores de 4D). +**Nota**: solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. -El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de los comandos de búsqueda por fórmula para el proceso actual: +**Alcance**: aplicación 4D -0: Utilizar los parámetros actuales de la base (valor por defecto). En bases creadas a partir de la versión 11.2 de 4D v11 SQL, las "uniones SQL" siempre se activan para las búsquedas por fórmula. En bases de datos convertidas, este mecanismo no se activa por defecto por razones de compatibilidad pero puede implementarse vía una preferencia.1: Siempre utilizar relaciones automáticas (= funcionamiento de versiones anteriores de 4D). En este modo, una relación es necesaria para definir la selección de una tabla en función de búsquedas efectuadas en otra tabla. 4D no efectúa más "uniones SQL."2: Utilizar las uniones SQL si es posible (= funcionamiento o defecto de las bases creadas en versión 11.2 y superiores de 4D v11 SQL). En este modo, 4D establece "uniones SQL" para las búsquedas por fórmula cuando la fórmula se ajusta para ello (con dos excepciones, ver la descripción del comando [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") o [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")).**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. +**Descripción**: devuelve 1 si el archivo estructura/archivo proyecto local es editable y 0 si es de solo lectura. -### HTTP compression level (50) +### Libldap version (114) -**Alcance**: aplicación 4D +**Alcance**: máquina 4D actual **Se conserva entre dos sesiones**: no -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. +**Descripción**: devuelve el número de versión de la librería LDAP en la aplicación 4D en la máquina actual. (Solo lectura) -### HTTP compression threshold (51) +### Libsasl version (115) -**Alcance**: aplicación 4D +**Alcance**: máquina 4D actual **Se conserva entre dos sesiones**: no -**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. - +**Descripción**: devuelve el número de versión de la librería SASL en la aplicación 4D en la máquina actual. (Solo lectura) -### Server base process stack size (53) -**Alcance**: 4D Server +### Libzip version (120) - **Se conserva entre dos sesiones**: no +**Alcance**: máquina 4D actual - **Valores posibles**: entero largo positivo. +**Se conserva entre dos sesiones**: n/a -**Descripción**: tamaño de la pila asignada a cada proceso del sistema preferente en el servidor, expresado en bytes. El tamaño por defecto es determinado por el sistema. +**Descripción**: devuelve el número de versión de la librería libzip en la aplicación 4D en la máquina actual. (Sólo lectura) -Los procesos sistema preferente (procesos de tipo Proceso base 4D client) se cargan para controlar los procesos cliente 4D principales. El tamaño asignado por defecto a la pila de cada proceso preferente da facilidad de ejecución pero puede resultar consecuente cuando se crea un gran número de procesos (varios cientos). -Por razones de optimización, este tamaño puede reducirse considerablemente si las operaciones efectuadas por la base lo permiten (por ejemplo si la base no efectúa ordenaciones de grandes cantidades de registros). Son posibles valores de 512 o incluso 256 KB. Sea cuidadoso, subdimensionar la pila es critico y puede afectar la operación de 4D Server. La definición de este parámetro debe hacerse con precaución y tener en cuenta las condiciones de uso de la base (número de registros, tipo de operaciones, etc.). -Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo servidor (por ejemplo en el *Método base On Server Startup*). +### Log command list (80) +**Alcance**: aplicación 4D +**Se conserva entre dos sesiones**: no -### Idle connections timeout (54) +**Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. -**Alcance**: aplicación 4D a menos que valor sea negativo +**Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. -**Se conserva entre dos sesiones:** no +Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: -**Valores posibles:** valor entero que expresa una duración en segundos. El valor puede ser positivo (nuevas conexiones) o negativo (conexiones existentes). Por defecto, el valor es 20. +```4d + SET DATABASE PARAMETER(Log command list;"277;341") //Graba solo los comandos QUERY y QUERY SELECTION + SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluye los comandos SET USER ALIAS y DELAY PROCESS de ser grabados +``` -**Descripción**: máximo periodo de inactividad (timeout) para conexiones al motor de la base 4D, el motor SQL y el servidor de aplicaciones 4D (capa de red *ServerNet* únicamente, ignorado en *QUIC*). Cuando una conexión inactiva alcanza este límite, se pone en espera automáticamente, lo cual congela la sesión cliente/servidor y cierra el socket de red. En la ventana de administración del servidor, el estado del proceso del usuario se indica como "Postponed". Este funcionamiento es totalmente transparente para el usuario: tan pronto como hay una nueva actividad en la conexión que está en espera, el socket se reabre automáticamente y la sesión cliente/servidor se restaura. -Este parámetro permite, por una parte, economizar los recursos en el servidor: las conexiones en espera cierran el socket y liberan un proceso en el servidor. Por otra parte, esto le permite evitar pérdida de conexiones por el cierre de sockets por parte del firewall. Por esta razón, el valor del timeout para conexiones inactivas deber ser menor que el del firewall en este caso. +### Max concurrent Web processes (18) -Si pasa un valor positivo en *valor*, se aplicará a todas las nuevas conexiones en todos los procesos. Si pasa un valor negativo, se aplicará a las conexiones que se abran en el proceso actual. Si pasa 0, las conexiones inactivas no serán sometidas a un timeout. +**Alcance**: 4D local, 4D Server -Este parámetro puede definirse del lado del cliente. Por lo general, no necesita cambiar este valor. +**Se conserva entre dos sesiones**: sí +**Descripción**: *constante obsoleta (se conserva por compatibilidad únicamente).* Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -### PHP interpreter IP address (55) -**Alcance**: Aplicación 4D +### Maximum Web requests size (27) -**Se conserva entre dos sesiones**: no +**Alcance**: 4D local, 4D Server -**Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). +**Se conserva entre dos sesiones**: sí -**Descripción**: dirección IP utilizada localmente por 4D para comunicarse con el intérprete PHP vía FastCGI. Por defecto, el valor es "127.0.0.1". Esta dirección debe corresponder a la máquina donde en encuentra 4D. Este parámetro también puede definirse globalmente para todas las máquinas vía las Propiedades de la base. +**Descripción**: Constante obsoleta (se conserva por compatibilidad únicamente). Se recomienda utilizar los comandos [WEB SET OPTION](web-set-option.md) y [WEB GET OPTION](web-get-option.md) para la configuración del servidor HTTP. -Para mayor información sobre el intérprete PHP, por favor consulte el manual de *Diseño*. +### Min TLS version (105) -### PHP interpreter port (56) +**Alcance**: 4D Server, 4D Web Server y 4D SQL Server -**Alcance**: aplicación 4D +**Conservar entre dos sesiones**: no - **Se conserva entre dos sesiones**: no +**Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. -**Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. +**Valor por defecto**: TLSv1\_3 -**Descripción**: número de puerto TCP utilizado o por el intérprete PHP de 4D. Este parámetro también puede modificarse globalmente para todos los equipos vía las Propiedades de la base. Para mayor información sobre el intérprete PHP, consulte el manual de *Diseño*. +**Valores posibles**: +- TLSv1\_2 (TLS 1.2, introducido en 2008) +- TLSv1\_3 (TLS 1.3, introducido en 2018) +**NOTAS**: +- El plugin 4D Internet Commands utiliza una capa de red diferente, por lo que este selector no tendrá ningún impacto en su versión TLS. +- Se ignorarán los intentos de aplicar TLS a la capa de red heredada. -### SSL cipher list (64) -**Alcance**: Aplicación 4D -Se conserva entre dos sesiones: No +### Number of formulas in cache (92) -**Valores posibles**: secuencia de cadenas separadas por dos puntos. +**Alcance**: aplicación 4D -**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". +**Se conserva entre dos sesiones:** no -Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. +**Valores posibles**: enteros largos positivos -Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). +**Valor por defecto**: 0 (sin caché) -Cuando la lista de cifrado se modifica, debe reiniciar el servidor correspondiente para que los nuevos parámetros sean tenidos en cuenta. +**Descripción**: establece u obtiene el número máximo de fórmulas a conservar en la memoria caché de fórmulas, que es utilizado por el comando [EXECUTE FORMULA](execute-formula.md). Este límite se aplica a todos los procesos, pero cada proceso tiene su propia caché de fórmulas. Ubicar las fórmulas en la caché acelera la ejecución del comando [EXECUTE FORMULA](execute-formula.md) en modo compilado, ya que cada fórmula en caché se tokeniza sólo una vez en este caso.Cuando se cambia el valor de la memoria caché, el contenido existente se restablecen incluso si el nuevo tamaño es más grande que el anterior. Una vez se alcanza el número máximo de fórmulas en la memoria caché, una nueva fórmula ejecutada borrará a la más antigua de la memoria caché (modo FIFO). Este parámetro sólo se tiene en cuenta en las bases o componentes compilados. -Para reinicializar la lista de cifrado a su valor por defecto (guardado permanentemente en el archivo SLI), llame al comando [SET DATABASE PARAMETER](set-database-parameter.md) y pase una cadena vacía ("") en el parámetro *valor*. -**Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. -### Cache unload minimum size (66) +### OpenSSL version (94) -**Alcance**: aplicación 4D +**Alcance**: todas las máquinas 4D **Se conserva entre dos sesiones**: no -**Valores posibles**: entero largo positivo > 1. - -**Descripción**: tamaño mínimo de memoria a liberar del caché de la base de datos cuando el motor necesita hacer espacio para ubicar un objeto (valor en bytes). +**Descripción**: devuelve el número de versión de la librería OpenSSL que se utiliza en la máquina. (Solo lectura) -El propósito de este selector es reducir el número de liberaciones de datos de la caché con el fin de obtener un mejor rendimiento. Puede hacer variar este parámetro en función del tamaño de la caché y del de los bloques de datos manipulados en su base. -Por defecto, si este selector no se utiliza, 4D descarga mínimo 10% de la caché en caso de que se necesite espacio.Alcance: Aplicación 4D +### Order by formula on server (47) +**Alcance**: tabla y procesos actuales -### Direct2D status (69) + **Se conserva entre dos sesiones**: no -**Alcance**: aplicación 4D + **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en el cliente) o 2 (ejecutar en el servidor) -**Se conserva entre dos sesiones**: no +**Descripción**: ubicación de la ejecución del comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") para la tabla pasada en parámetro. -**Descripción**: modo de activación de Direct2D bajo Windows. +Al utilizar una base en modo cliente-servidor, el comando [ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA") puede ejecutarse bien sea en el equipo servidor o en el cliente. Este selector puede utilizarse para especificar la ubicación de la ejecución de este comando (servidor o cliente). Este modo también puede definirse en las preferencias de la base. Para mayor información, consulte la descripción del selector 46, Query By Formula On Server. -**Valores posibles**: una de las siguientes constantes (modo 3 por defecto): +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -Direct2D Disabled (0): el modo Direct2D no está habilitado y la base de datos funciona en el modo anterior (GDI/GDIPlus). -Direct2D Hardware (1): utilice Direct2D como contexto de hardware de gráficos para toda la aplicación 4D. Si este contexto no está disponible, use el contexto del software de gráficos Direct2D. -Direct2D Software (3) (modo predeterminado): a partir de Windows 7, utilice el contexto del software de gráficos Direct2D para toda la aplicación 4D. +### Pause logging (121) -***Advertencia*: este selector se ofrece solo para fines de depuración. Dado que varias funciones 4D se basan en Direct2D, no se debe desactivar en las aplicaciones implementadas. Solo el modo predeterminado (Direct2D Software)* **está aprobado para las aplicaciones desplegadas.* +**Hilo seguro**: sí +**Alcance**: aplicación 4D +**Se mantiene entre dos sesiones**: no -### Direct2D get active status (74) +**Valores posibles**: 0 (reanudar historial), 1 (pausar historial) -**Nota**: sólo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md "Get database parameter") y su valor no puede definirse. +Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. -**Descripción**: devuelve la implementación activa de Direct2D bajo Windows. -**Valores posibles**: 0, 1, 2, 3, 4 o 5 (ver los valores del selector 69). El valor devuelto depende de la disponibilidad de Direct2D, del hardware y de la calidad Direct2D soportado por el sistema operativo. -Por ejemplo, si ejecuta: +### PHP interpreter IP address (55) -  SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) +**Alcance**: Aplicación 4D -- En Windows 7 y superiores, $mode vale 1 cuando el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode valdrá 3 (contexto software). +**Se conserva entre dos sesiones**: no -- En Windows Vista, $mode valdrá 1 si el sistema detecta un hardware compatible con Direct2D; de lo contrario, $mode toma el valor 0 (desactivando Direct2D). +**Valores**: cadena formateada del tipo "nnn.nnn.nnn.nnn" (por ejemplo "127.0.0.1"). -- En Windows XP, $mode siempre valdrá 0 (no compatible con Direct2D). +**Descripción**: dirección IP utilizada localmente por 4D para comunicarse con el intérprete PHP vía FastCGI. Por defecto, el valor es "127.0.0.1". Esta dirección debe corresponder a la máquina donde en encuentra 4D. Este parámetro también puede definirse globalmente para todas las máquinas vía las Propiedades de la base. +Para mayor información sobre el intérprete PHP, por favor consulte el manual de *Diseño*. -### Diagnostic log recording (79) -**Hilo seguro**: sí +### PHP interpreter port (56) **Alcance**: aplicación 4D -**Se conserva entre dos sesiones**: no - -**Valores posibles**: 0 ó 1 (0 = no guardar, 1 = guardar) + **Se conserva entre dos sesiones**: no -**Descripción**: inicio o detención del registro del archivo de diagnóstico de 4D. Por defecto, el valor es 0 (no guarda). +**Valores**: valor de tipo entero largo positivo. Por defecto, el valor es 8002\. -4D permite guardar de manera continua en un archivo de diagnóstico un conjunto de eventos relativos al funcionamiento interno de la aplicación. La información contenida en este archivo está destinada a la actualización de las aplicaciones 4D y puede ser analizada con ayuda de los servicios técnicos de 4D. Cuando pasa 1 en este selector, el archivo de diagnóstico, llamado *NomBase.txt*, se crea automáticamente (o abre) en la carpeta **Logs** de la base. Una vez el archivo alcance un tamaño de 10 MB, se cierra y se genera un nuevo archivo *NomBase\_N.txt*, con un número secuencial N incrementado. +**Descripción**: número de puerto TCP utilizado o por el intérprete PHP de 4D. Este parámetro también puede modificarse globalmente para todos los equipos vía las Propiedades de la base. Para mayor información sobre el intérprete PHP, consulte el manual de *Diseño*. -Note que es posible incluir la información personalizada en este archivo con ayuda del comando [LOG EVENT](log-event.md). +### POP3 Log (116) -### Log command list (80) +**Hilo seguro**: sí -**Alcance**: aplicación 4D +**Alcance:** 4D local, 4D Server **Se conserva entre dos sesiones**: no -**Valores posibles**: cadena que contiene la lista de números de los comandos 4D a guardar (separados por dos puntos), "all" para guardar todos los comandos o "" (cadena vacía) para no guardar ninguno. +**Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -**Descripción**: la lista de comandos 4D a guardar en el archivo de depuración (ver el selector 34, Debug Log Recording). Por defecto, se guardan todos los comandos 4D. +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. -Este selector restringe la cantidad de información guardada en el archivo de depuración limitando los comandos 4D cuya ejecución desea registrar o excluir del registro. Por ejemplo, puede escribir: +Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. - SET DATABASE PARAMETER(Log command list;"277;341") //Graba solo los comandos QUERY y QUERY SELECTION O SET DATABASE PARAMETER(Log command list;"-1666;-323") //Excluye los comandos SET USER ALIAS y DELAY PROCESS de ser grabados - -### Spellchecker (81) +### Port ID (15) -**Alcance**: aplicación 4D +**Alcance**: 4D local, 4D Server - **Se conserva entre dos sesiones**: no +**Se conserva entre dos sesiones**: no - **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. +**Descripción**: Command SET DATABASE Número de puerto TCP utilizado por el servidor web 4D con 4D en modo local y 4D Server. El valor por defecto, que puede ser definido en la página "Web/Configuración" de la caja de diálogo Preferencias, es 80. Puede utilizar las constantes del tema *Números de puerto TCP* para el parámetro *valor*. -**Descripción**: permite activar el corrector ortográfico Hunspell bajo macOS. Por defecto, en esta plataforma el corrector nativo está activo. Puede preferir utilizar el corrector Hunspell, por ejemplo, para unificar la interfaz de sus aplicaciones multiplataformas (bajo Windows, sólo el corrector Hunspell está disponible). Para mayor información, consulte *Corrección ortográfica*. +El selector Port ID se utiliza en el marco de servidores web 4D compilados y fusionados con 4D Desktop (sin acceso al modo Diseño). Para mayor información sobre el número de puerto TCP, consulte la sección *Parámetros del servidor web* -### Dates inside objects (85) +### Query by formula joins (49) **Alcance**: proceso actual - **Se conserva entre dos sesiones:** no + **Se conserva entre dos sesiones**: no - **Valores posibles**: Tipo cadena sin zona horaria (0), tipo cadena con zona horaria (1), tipo fecha (2) (por defecto) + **Valores posibles**: 0 (utilizar configuración de la base), 1 (siempre utilizar relaciones automáticas) o 2 (utilizar las uniones SQL si es posible). -**Descripción**: define la forma en que se almacenan las fechas dentro de los objetos, así como también cómo se importan / exportan en JSON. +**Descripción**: modo de funcionamiento de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") relativos al uso de "uniones SQL." -Cuando el valor del selector es Date type (valor predeterminado para las bases creadas con 4D v17 y superior), las fechas 4D se almacenan con el tipo de fecha dentro de los objetos, con respecto a la configuración de fecha local. Cuando se convierte a formato JSON, los atributos de fecha se convertirán en cadenas que no incluyen un tiempo. (**Nota:** esta configuración se puede definir mediante la opción "Utilizar tipo de fecha en lugar del formato de fecha ISO en objetos" que se encuentra en *Página Compatibilidad* de la configuración de la base). +En las bases de datos creadas a partir de la versión 11.2 de 4D v11 SQL, estos comandos efectúan uniones basados en el modelo de uniones SQL. Este mecanismo permite modificar la selección de una tabla en función de una búsqueda efectuada en otra tabla sin que las tablas estén conectadas por una relación automática (condición necesaria en las versiones anteriores de 4D). -Si pasa String type with time zone en este selector, convertirá las fechas 4D en cadenas ISO y tendrá en cuenta la zona horaria local. Por ejemplo, la conversión de la fecha 23/08/2013 le da "2013-08-22T22: 00: 000Z" en formato JSON cuando la operación se realiza en Francia durante el horario de verano (GMT+ 2). Este principio se ajusta al funcionamiento estándar de JavaScript. Esto puede ser una fuente de errores cuando desea enviar valores de fecha JSON a alguien en un huso horario diferente. Por ejemplo, cuando exporta una tabla usando [Selection to JSON](selection-to-json.md) en Francia que se debe reimportar en los EE. UU. utilizando [JSON TO SELECTION](json-to-selection.md). Dado que las fechas se vuelven a interpretar en cada zona horaria, los valores almacenados en la base de datos serán diferentes. En este caso, puede modificar el modo de conversión de las fechas para que no tengan en cuenta la zona horaria pasando String type without time zone en este selector. La conversión de la fecha 23/08/2013 le dará "2013-08-23T00: 00: 00Z" en todos los casos. +El selector QUERY BY FORMULA Joins permite definir el modo de funcionamiento de los comandos de búsqueda por fórmula para el proceso actual: +- 0: Utilizar los parámetros actuales de la base (valor por defecto). En bases creadas a partir de la versión 11.2 de 4D v11 SQL, las "uniones SQL" siempre se activan para las búsquedas por fórmula. En bases de datos convertidas, este mecanismo no se activa por defecto por razones de compatibilidad pero puede implementarse vía una preferencia. +- 1: Siempre utilizar relaciones automáticas (= funcionamiento de versiones anteriores de 4D). En este modo, una relación es necesaria para definir la selección de una tabla en función de búsquedas efectuadas en otra tabla. 4D no efectúa más "uniones SQL."2: Utilizar las uniones SQL si es posible (= funcionamiento o defecto de las bases creadas en versión 11. +- 2 y superiores de 4D v11 SQL). En este modo, 4D establece "uniones SQL" para las búsquedas por fórmula cuando la fórmula se ajusta para ello (con dos excepciones, ver la descripción del comando [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") o [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")).**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -### Diagnostic log level (86) -**Hilo seguro**: sí +### Query by formula on server (46) -**Alcance**: aplicación 4D +**Alcance**: tabla y procesos actuales -**Se conserva entre dos sesiones**: no + **Se conserva entre dos sesiones**: no -**Descripción**: nivel(es) de los mensajes que se incluirán en el registro de diagnóstico cuando esté habilitado (ver selector Diagnostic log recording). Cada nivel designa una categoría de mensajes de diagnóstico e incluye automáticamente las categorías más importantes. Para una descripción de las categorías, consulte la sección *Niveles de registro de diagnóstico* en *developer.4d.com*. + **Valores posibles**: 0 (utilizar la configuración de la base), 1 (ejecutar en cliente) o 2 (ejecutar en servidor) -**Valores posibles**: una de las siguientes constantes (Log info por defecto): Log trace: activa ERROR, WARN, INFO, DEBUG, TRACE (nivel más detallado) Log debug: activa ERROR, WARN, INFO, DEBUG Log info: activa ERROR, WARN, INFO (por defecto) Log warn: activa ERROR, WARN Log error: activa ERROR (nivel menos detallado) +**Descripción**: ubicación de la ejecución de los comandos [QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA") y [QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") para la *tabla* pasada en parámetro. +Cuando se utiliza una base en modo cliente-servidor, los comandos de búsqueda "por fórmula" pueden ejecutarse en el servidor o en el equipo cliente: +en bases creadas con 4D v11 SQL, estos comandos se ejecutan en el servidor.en bases convertidas, estos comandos se ejecutan en el equipo cliente, como en las versiones anteriores de 4D.en las bases convertidas, una preferencia específica permite modificar globalmente la ubicación de ejecución de estos comandos.Esta diferencia en ubicación de ejecución influye no sólo en el rendimiento de la aplicación (la ejecución en el servidor es generalmente más rápida) sino también en la programación. En efecto, el valor de los componentes de la fórmula (en particular las variables llamadas vía un método) varía de acuerdo al contexto de ejecución. Puede utilizar este selector para adaptar puntualmente el funcionamiento de su aplicación. -### Use legacy network layer (87) +Si pasa 0 en el parámetro *valor*, la ubicación de ejecución de los comandos de búsqueda "por fórmula" dependerá de la configuración de la base: en bases creadas con 4D v11 SQL, estos comandos se ejecutarán en el servidor. En bases convertidas, se ejecutarán en el equipo cliente o en el servidor en función de las preferencias de la base. Pase 1 ó 2 en *valor* para "forzar" la ejecución de estos comandos respectivamente en el equipo cliente o en el servidor. -**Alcance:** 4D en modo local, 4D Server** +Consulte el ejemplo 2. -**Se conserva entre dos sesiones:** sí +**Nota:** si quiere activar las uniones "tipo SQL" (consulte el selector QUERY BY FORMULA Joins selector), siempre debe ejecutar las fórmulas en el servidor de manera que tengan acceso a los registros. Atención, en este contexto, la fórmula no debe contener llamadas a un método, de lo contrario pasará automáticamente al equipo remoto. -**Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). -**Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) +### RDP optimization (133) -**Valor por defecto:** 0 en bases de datos creadas con 4D v14 R5 o superior, 1 en bases de datos convertidas de 4D v14 R4 o anteriores. +**Alcance:** aplicación 4D +**Se mantiene entre dos sesiones**: no +**Valores posibles:** `0`: activado (por defecto), `1`: desactivado. -### SQL Server Port ID (88) +**Descripción:** activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). -**Alcance**: 4D modo local y 4D Server. -: Sí -**Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. +### Remote connection sleep timeout (98) -**Valores posibles:** 0 a 65535. +**Alcance**: aplicación 4D Server -**Valor por defecto:** 19812 +**Se mantiene entre dos sesiones**: no +**Valores posibles**: entero largo positivo +**Descripción**: tiempo de espera actual de la conexión remota en segundos. Por defecto, el valor es 172800 (48 horas). -### Circular log limitation (90) +El tiempo de espera de la conexión remota se aplica después de que una máquina que ejecuta una aplicación remota 4D haya pasado al modo de reposo. En este caso, su sesión es mantenida por 4D Server (ver la descripción de la funcionalidad ). 4D Server verifica cada 5 minutos si algún 4D remoto en reposo ha superado el tiempo de espera de reposo, en cuyo caso se abandona. Por lo tanto, el máximo tiempo de espera permitido es *el tiempo de espera actual* \+ 300\. En algunos casos, es posible que desee modificar el tiempo de espera, por ejemplo para liberar los registros/licencias bloqueados más rápidamente. -**Hilo seguro**: sí -**Alcance**: 4D local, 4D Server. -**Se conserva entre dos sesiones:** no +### Server base process stack size (53) -**Valores posibles**: todo valor entero, 0 = conservar todos los registros +**Alcance**: 4D Server -**Descripción**: número máximo de archivos a conservar en rotación para cada tipo de registro. Por defecto, todos los archivos se conservan. Si pasa un valor *X*, solo los *X* archivos más recientes se conservan, el más antiguo se borra automáticamente cuando se crea uno nuevo. Esta parametrización se aplica a cada uno de los siguientes archivos de registro: registros de peticiones (selectores 28 y 45), registro de depuración (selector 34), registro de eventos (selector 79), así como el historial de peticiones web (selectores 29 y 84 del comando [WEB SET OPTION](web-set-option.md)), etc. + **Se conserva entre dos sesiones**: no + **Valores posibles**: entero largo positivo. +**Descripción**: tamaño de la pila asignada a cada proceso del sistema preferente en el servidor, expresado en bytes. El tamaño por defecto es determinado por el sistema. -### Number of formulas in cache (92) +Los procesos sistema preferente (procesos de tipo Proceso base 4D client) se cargan para controlar los procesos cliente 4D principales. El tamaño asignado por defecto a la pila de cada proceso preferente da facilidad de ejecución pero puede resultar consecuente cuando se crea un gran número de procesos (varios cientos). -**Alcance**: aplicación 4D +Por razones de optimización, este tamaño puede reducirse considerablemente si las operaciones efectuadas por la base lo permiten (por ejemplo si la base no efectúa ordenaciones de grandes cantidades de registros). Son posibles valores de 512 o incluso 256 KB. Sea cuidadoso, subdimensionar la pila es critico y puede afectar la operación de 4D Server. La definición de este parámetro debe hacerse con precaución y tener en cuenta las condiciones de uso de la base (número de registros, tipo de operaciones, etc.). -**Se conserva entre dos sesiones:** no +Para que sea tenido en cuenta, este parámetro debe ejecutarse en el equipo servidor (por ejemplo en el *Método base On Server Startup*). -**Valores posibles**: enteros largos positivos -**Valor por defecto**: 0 (sin caché) -**Descripción**: establece u obtiene el número máximo de fórmulas a conservar en la memoria caché de fórmulas, que es utilizado por el comando [EXECUTE FORMULA](execute-formula.md). Este límite se aplica a todos los procesos, pero cada proceso tiene su propia caché de fórmulas. Ubicar las fórmulas en la caché acelera la ejecución del comando [EXECUTE FORMULA](execute-formula.md) en modo compilado, ya que cada fórmula en caché se tokeniza sólo una vez en este caso.Cuando se cambia el valor de la memoria caché, el contenido existente se restablecen incluso si el nuevo tamaño es más grande que el anterior. Una vez se alcanza el número máximo de fórmulas en la memoria caché, una nueva fórmula ejecutada borrará a la más antigua de la memoria caché (modo FIFO). Este parámetro sólo se tiene en cuenta en las bases o componentes compilados. +### SMTP Log (110) +**Hilo seguro**: sí +**Alcance**: 4D local, 4D Server* -### OpenSSL version (94) +* **Se conserva entre dos sesiones**: no -**Alcance**: todas las máquinas 4D + **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). -**Se conserva entre dos sesiones**: no +**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor SMTP, cuando un objeto *transportador* se procesa a través de *transporter.send( )* o *SMTP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DSMTPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DSMTPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. De forma predeterminada, todos los archivos se conservan, pero puede controlar la cantidad de archivos a seguir utilizando el parámetro Circular log limitation. -**Descripción**: devuelve el número de versión de la librería OpenSSL que se utiliza en la máquina. (Solo lectura) +Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. -### Cache flush periodicity (95) +### Spellchecker (81) -**Hilo seguro**: sí +**Alcance**: aplicación 4D + **Se conserva entre dos sesiones**: no -**Alcance**: 4D local, 4D Server + **Valores posibles**: 0 (por defecto) = corrector macOS nativo (Hunspell desactivado), 1 = corrector Hunspell activo. -**Se conserva entre dos sesiones:** no +**Descripción**: permite activar el corrector ortográfico Hunspell bajo macOS. Por defecto, en esta plataforma el corrector nativo está activo. Puede preferir utilizar el corrector Hunspell, por ejemplo, para unificar la interfaz de sus aplicaciones multiplataformas (bajo Windows, sólo el corrector Hunspell está disponible). Para mayor información, consulte *Corrección ortográfica*. -**Valores posibles:** entero largo > 1 (segundos) -**Descripción**: obtiene o establece la periodicidad del vaciado de la caché, expresado en segundos. La modificación de este valor prevalece sobre la opción **Vaciar caché cada X segundos** en [XML DECODE](xml-decode.md) de la configuración de la base para la sesión (que no se almacena en las Propiedades de la base). +### SQL Autocommit (43) +**Alcance**: base de datos -### Remote connection sleep timeout (98) + **Se conserva entre dos sesiones**: sí -**Alcance**: aplicación 4D Server + **Posibles valores**: 0 (desactivación) o 1 (activación) -**Se mantiene entre dos sesiones**: no +**Descripción**: activación o desactivación del modo SQL auto-commit. Por defecto, el valor es 0 (modo desactivado) -**Valores posibles**: entero largo positivo + El modo auto-commit permite reforzar la integridad referencial de la base. Cuando este modo está activo, las peticiones *SELECT*, INSERT, UPDATE y *DELETE* (SIUD) se incluyen automáticamente en las transacciones cuando no se han ejecutado dentro de una transacción. Este modo igualmente puede definirse en las Preferencias de la base. -**Descripción**: tiempo de espera actual de la conexión remota en segundos. Por defecto, el valor es 172800 (48 horas). -El tiempo de espera de la conexión remota se aplica después de que una máquina que ejecuta una aplicación remota 4D haya pasado al modo de reposo. En este caso, su sesión es mantenida por 4D Server (ver la descripción de la funcionalidad ). 4D Server verifica cada 5 minutos si algún 4D remoto en reposo ha superado el tiempo de espera de reposo, en cuyo caso se abandona. Por lo tanto, el máximo tiempo de espera permitido es *el tiempo de espera actual* \+ 300\. En algunos casos, es posible que desee modificar el tiempo de espera, por ejemplo para liberar los registros/licencias bloqueados más rápidamente. +### SQL Engine case sensitivity (44) +**Alcance**: base de datos -### Tips enabled (101) + **Se conserva entre dos sesiones**: sí -**Alcance**: aplicación 4D + **Valores posibles**: 0 (no se tienen en cuenta las mayúsculas y minúsculas) ó 1 (sensible a las mayúsculas y minúsculas) -**Se conserva entre dos sesiones**: no +**Descripción**: activación o desactivación de la sensibilidad a mayúsculas y minúsculas para comparaciones de cadenas efectuadas por el motor SQL. -**Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) +Por defecto, el valor es 1 (sensible a las mayúsculas y minúsculas): el motor SQL diferencia entre mayúsculas y minúsculas y entre caracteres acentuados al comparar cadenas (ordenaciones y búsquedas). Por ejemplo “ABC”= “ABC” pero “ABC” # “Abc.” En algunos casos, por ejemplo para alinear el funcionamiento del motor SQL con el del motor 4D, podría querer que las comparaciones de cadenas no tengan en cuenta las mayúsculas y minúsculas (“ABC”=“Abc”). -**Descripción**: define u obtiene el estado de visualización actual de los consejos para la aplicación 4D. De forma predeterminada, las sugerencias están activadas. +Esta opción también puede definirse en la [CALL SUBFORM CONTAINER](call-subform-container.md) de las Preferencias de la base. -Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los mensajes de ayuda de formulario y las sugerencias del editor de modo Diseño. +### SQL Server Port ID (88) -### Tips delay (102) +**Alcance**: 4D modo local y 4D Server. -**Alcance**: aplicación 4D +: Sí -**Se conserva entre dos sesiones**: No +**Descripción**: permite leer o definir el número del puerto TCP utilizado por el servidor SQL integrado de 4D en modo local o 4D Server. Por defecto, el valor es 19812\. Cuando se define este selector, la configuración de la base se actualiza. También puede definir el número del puerto TCP en la página "SQL" de la caja de diálogo de Propiedades de la base. -**Valores posibles**: entero largo >= 0 (tics) +**Valores posibles:** 0 a 65535. -**Descripción**: retraso antes de que se muestren las sugerencias una vez que el cursor del ratón se haya detenido en objetos con mensajes de ayuda adjuntos. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 45 tics (0.75 segundos). +**Valor por defecto:** 19812 -### Tips duration (103) +### SSL cipher list (64) -**Alcance**: aplicación 4D +**Alcance**: Aplicación 4D -**Se conserva entre dos sesiones**: No +Se conserva entre dos sesiones: No -**Valores posibles**: entero largo >= 60 (tics) +**Valores posibles**: secuencia de cadenas separadas por dos puntos. -**Descripción**: duración máxima de visualización de una sugerencia. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 720 tics (12 segundos). +**Descripción:** lista de cifrado (*cipher list*) utilizada por 4D para el protocolo seguro. Esta lista modifica la prioridad de los algoritmos de cifrado implementados por 4D. Por ejemplo, puede pasar la siguiente cadena en el parámetro *valor*: "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". +Para una descripción completa de la sintaxis para la lista cifrada, consulte la *página de cifrado del sitio OpenSSL*. +Esta configuración se aplica al servidor web principal (excluyendo los objetos del servidor web), al servidor SQL, a las conexiones cliente/servidor, así como al cliente HTTP y a todos los comandos 4D que hacen uso del protocolo seguro. Es temporal (no se mantiene entre sesiones). -### Min TLS version (105) +Cuando la lista de cifrado se modifica, debe reiniciar el servidor correspondiente para que los nuevos parámetros sean tenidos en cuenta. -**Alcance**: 4D Server, 4D Web Server y 4D SQL Server +Para reinicializar la lista de cifrado a su valor por defecto (guardado permanentemente en el archivo SLI), llame al comando [SET DATABASE PARAMETER](set-database-parameter.md) y pase una cadena vacía ("") en el parámetro *valor*. -**Conservar entre dos sesiones**: no +**Nota:** con el comando [Get database parameter](get-database-parameter.md), la lista de cifrado se devuelve en el parámetro opcional *valorAlfa* y el parámetro de retorno es siempre 0. -**Descripción**: se utiliza para especificar el nivel TLS (Transport Layer Security), que ofrece cifrado y autenticación de datos entre aplicaciones y servidores. Se rechazarán los intentos de conexión de clientes que sólo soporten versiones inferiores a la mínima. La configuración se aplica globalmente a la capa de red. Una vez modificado, el servidor debe reiniciarse para utilizar el nuevo valor. +### Table sequence number (31) -**Valor por defecto**: TLSv1\_3 +**Alcance**: aplicación 4D -**Valores posibles**: TLSv1\_2 (TLS 1.2, introducido en 2008) TLSv1\_3 (TLS 1.3, introducido en 2018) **NOTAS**: + **Se conserva entre dos sesiones**: sí -- El plugin 4D Internet Commands utiliza una capa de red diferente, por lo que este selector no tendrá ningún impacto en su versión TLS. + **Valores posibles**: todo valor de tipo entero largo. -- Se ignorarán los intentos de aplicar TLS a la capa de red heredada. +**Descripción**: este selector se utiliza para modificar o modificar u obtener el número único actual de los registros de la tabla pasada en parámetro. "Número actual" significa "último número utilizado": si modifica este valor utilizando SET DATABASE PARAMETER, el siguiente registro será el valor pasado + 1\. Este nuevo número es el número devuelto por el comando Sequence number [](http://doc.tmp.4d.fr/Database-Parameters/4Dv11.4/ConstantTheme/4870/CMU00244.HTM) como también en todo campo de la tabla a la cual se asigna la propiedad "Autoincrementar" en el editor de estructura o vía SQL. +Por defecto, este número único es definido por 4D y corresponde al orden de creación de los registros. Para información adicional, por favor consulte la documentación del comando [Sequence number](sequence-number.md "Sequence number"). -### User param value (108) -**Alcance**: 4D local, 4D Server +### TCPUDP log recording (131) -**Se conserva entre dos sesiones**: no +**Alcance:** aplicación 4D -**Valores posibles**: toda cadena personalizada +**Se mantiene entre dos sesiones**: no -**Descripción:** cadena personalizada pasada de una sesión a la siguiente cuando se reinicia la aplicación 4D. Este selector es útil en el contexto de pruebas unitarias automatizadas que requieren que las aplicaciones se reinicien con diferentes parámetros. +**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. -Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), define un nuevo valor que estará disponible en la próxima base de datos abierta después de que 4D se reinicie manualmente o utilizando los comandos [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), o [RESTART 4D](restart-4d.md). Cuando se utiliza con [Get database parameter](get-database-parameter.md), obtiene el valor del parámetro de usuario actualmente disponible, definido mediante una línea de comando (ver *Interfaz de línea de comando*), el archivo .4DLink (ver *Usar un archivo 4DLink*), o una llamada a [SET DATABASE PARAMETER](set-database-parameter.md) durante la sesión anterior. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) define un User param value antes de una llamada a [OPEN DATABASE](open-database.md) con un archivo .4DLink que también contiene un atributo xml user-param, 4D 4D tiene en cuenta solo el parámetro ofrecido por [SET DATABASE PARAMETER](set-database-parameter.md). +**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para registrar eventos TCP. @@ -808,163 +899,71 @@ En versiones anteriores, los valores de tiempo se convertían y almacenaban como -### SMTP Log (110) - -**Hilo seguro**: sí - -**Alcance**: 4D local, 4D Server* - -* **Se conserva entre dos sesiones**: no - - **Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, agregado al nombre del archivo). De forma predeterminada, el valor es 0 (intercambios SMTP no registrados). - -**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor SMTP, cuando un objeto *transportador* se procesa a través de *transporter.send( )* o *SMTP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DSMTPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DSMTPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede definir el número de inicio de la secuencia utilizando el parámetro *valor*. De forma predeterminada, todos los archivos se conservan, pero puede controlar la cantidad de archivos a seguir utilizando el parámetro Circular log limitation. - -Para obtener más información sobre los archivos 4DSMTPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. - - - -### Current process debug log recording (111) - -**Alcance:** Aplicación 4D - -**Se conserva entre dos sesiones:** no - -**Descripción**: inicia o detiene el registro secuencial de eventos de programación **del proceso actual** en un archivo de historial separado. Este historial es similar al Debug log recording (selector 34) pero se enfoca solo en el proceso actual. El nombre del archivo de historial incluye la letra "p" y el número del proceso: 4DDebugLog\[\_p*N*_*n*].txt, donde N es el ID único del proceso. - -Para más información sobre este formato y sobre el uso del archivo *4DDebugLog*, consulte *Descripción de archivos de historial* en el Modo Diseño. - -**Notas:** Este selector se proporciona únicamente con el fin de depurar y debe utilizarse con cuidado. En particular, no debe ponerse en producción, ya que puede tener un impacto en el rendimiento de la aplicación. Puede utilizarar ambos selectores Debug log recording y Current process debug log recording simultáneamente, en cuyo caso las acciones del proceso actual no se registrarán en el archivo de historial principal. - - - -### Is current database a project (112) - -**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +### Tips delay (102) **Alcance**: aplicación 4D -**Descripción**: devuelve 1 si la arquitectura de la base actual es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. - - - -### Is host database a project (113) +**Se conserva entre dos sesiones**: No -**Nota:** solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Valores posibles**: entero largo >= 0 (tics) -**Alcance**: aplicación 4D +**Descripción**: retraso antes de que se muestren las sugerencias una vez que el cursor del ratón se haya detenido en objetos con mensajes de ayuda adjuntos. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 45 tics (0.75 segundos). -**Descripción**: devuelve 1 si la arquitectura de la base local es un proyecto y 0 en caso contrario. Para más información, consulte la sección *Base proyecto vs base binaria*. +### Tips duration (103) -### Libldap version (114) +**Alcance**: aplicación 4D -**Alcance**: máquina 4D actual +**Se conserva entre dos sesiones**: No -**Se conserva entre dos sesiones**: no +**Valores posibles**: entero largo >= 60 (tics) -**Descripción**: devuelve el número de versión de la librería LDAP en la aplicación 4D en la máquina actual. (Solo lectura) +**Descripción**: duración máxima de visualización de una sugerencia. El valor se expresa en tics (1/60 de segundo). El valor predeterminado es 720 tics (12 segundos). -### Libsasl version (115) +### Tips enabled (101) -**Alcance**: máquina 4D actual +**Alcance**: aplicación 4D **Se conserva entre dos sesiones**: no -**Descripción**: devuelve el número de versión de la librería SASL en la aplicación 4D en la máquina actual. (Solo lectura) - - - -### POP3 Log (116) - -**Hilo seguro**: sí +**Valores posibles**: 0 = consejos desactivados, 1 = consejos activados (predeterminado) -**Alcance:** 4D local, 4D Server +**Descripción**: define u obtiene el estado de visualización actual de los consejos para la aplicación 4D. De forma predeterminada, las sugerencias están activadas. -**Se conserva entre dos sesiones**: no +Tenga en cuenta que este parámetro define todos los consejos 4D, es decir, los mensajes de ayuda de formulario y las sugerencias del editor de modo Diseño. -**Valores posibles:** 0 o de 1 a X (0 = no registrar, 1 a X = número secuencial, agregado al nombre del archivo). Por defecto, el valor es 0 (intercambios POP3 no registrados). -**Descripción**: inicia o detiene la grabación de intercambios entre 4D y el servidor POP3, cuando un objeto transportador se procesa a través de *POP3\_transporter.getMail( )* o *POP3\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando este mecanismo está habilitado, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DPOP3Log\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DPOP3Log ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se reemplaza directamente. Puede establecer el número inicial de la secuencia utilizando el parámetro valor. De manera predeterminada, todos los archivos se mantienen, pero puede controlar la cantidad de archivos que se deben seguir utilizando el parámetro Circular log limitation. - -Para más información sobre los archivos 4DPOP3Log\_X.txt, consulte la sección *Descripción de archivos de historial*. +### Use legacy network layer (87) +**Alcance:** 4D en modo local, 4D Server** -### Is host database writable (117) +**Se conserva entre dos sesiones:** sí -**Nota**: solo puede utilizar este selector con el comando [Get database parameter](get-database-parameter.md) y su valor no se puede definir. +**Descripción:** fija u obtiene el estado actual de la capa de red antigua para las conexiones cliente/servidor. La capa de red antigua es obsoleta a partir de 4D v14 R5 y debe ser reemplazada progresivamente en sus aplicaciones por la capa de red *ServerNet*. *ServerNet* será requerida en próximas versiones 4D con el fin de beneficiarse de las futuras evoluciones de la red. Por razones de compatibilidad, la capa de red antigua aún se soporta para permitir una transición sin problemas para las aplicaciones existentes; (se usa por defecto en aplicaciones convertidas de una versión anterior a v14 R5). Pase 1 en este parámetro para utilizar la capa de red antigua (y desactivar *ServerNet*) para las conexiones cliente/servidor, y pase 0 para deshabilitar la red antigua (y utilizar *ServerNet*). -**Alcance**: aplicación 4D +Esta propiedad también se puede definir mediante la opción "Usar capa de red antigua " que se encuentran en *Página Compatibilidad* de las Propiedades de la base (ver *Opciones red y cliente-servidor*). En esta sección, también puede encontrar una discusión sobre la estrategia de migración. Le recomendamos que active *ServerNet* tan pronto como sea posible. Deberá reiniciar la aplicación para que este parámetro sea tenido en cuenta. No está disponible en 4D Server v14 R5 64-bit versión para macOS, que sólo soporta el *ServetNet*; (siempre devuelve 0). -**Descripción**: devuelve 1 si el archivo estructura/archivo proyecto local es editable y 0 si es de solo lectura. +**Valores posibles:** 0 o 1 (0 = no utilizan capa de red antigua, 1 = uso capa de red antigua) +**Valor por defecto:** 0 en bases de datos creadas con 4D v14 R5 o superior, 1 en bases de datos convertidas de 4D v14 R4 o anteriores. -### IMAP Log (119) -**Hilo seguro**: sí +### User param value (108) **Alcance**: 4D local, 4D Server **Se conserva entre dos sesiones**: no -**Valores posibles**: 0 o de 1 a X (0 = no grabar, 1 a X = número secuencial, añadido al nombre del archivo). Por defecto, el valor es 0 (los intercambios IMAP no se registran). - -**Descripción**: inicia o detiene la grabación de los intercambios entre 4D y el servidor IMAP, cuando se procesa un objeto transportador a través de *IMAP\_transporter.getMail( )* o *IMAP\_transporter.checkConnection( )*. Por defecto, el valor es 0 (intercambios no registrados). Cuando se activa este mecanismo, se crea un archivo de registro en la carpeta Logs de la base. Se llama 4DIMAPLog\_X.txt, donde X es el número secuencial del registro. Una vez que el archivo 4DIMAPLog ha alcanzado un tamaño de 10 MB, se cierra y se genera uno nuevo, con un número secuencial incrementado. Si ya existe un archivo con el mismo nombre, se sustituye directamente. Se puede definir el número inicial de la secuencia mediante el parámetro valor. Por defecto, se conservan todos los archivos, pero puede controlar el número de archivos a conservar utilizando el parámetro Circular log limitation. - -Para más información sobre los archivos 4DIMAPLog\_X.txt, consulte la sección *Descripción de archivos de historial*. - - - -### Libzip version (120) - -**Alcance**: máquina 4D actual - -**Se conserva entre dos sesiones**: n/a - -**Descripción**: devuelve el número de versión de la librería libzip en la aplicación 4D en la máquina actual. (Sólo lectura) - - - -### Pause logging (121) - -**Hilo seguro**: sí - -**Alcance**: aplicación 4D - -**Se mantiene entre dos sesiones**: no - -**Valores posibles**: 0 (reanudar historial), 1 (pausar historial) - -Este selector permite suspender/reanudar todas las operaciones de registro iniciadas en la aplicación (excepto los registros ORDA). Esta función puede ser útil para aligerar temporalmente las tareas de la aplicación 4D o programar las operaciones de registro. - - - -### TCPUDP log recording (131) - -**Alcance:** aplicación 4D - -**Se mantiene entre dos sesiones**: no - -**Valores posibles:** `0`: Logging desactivado (por defecto), `1`: Logging activado. - -**Descripción:** activa o desactiva el archivo `4DTCPUDPLog.txt` para registrar eventos TCP. - - - -### RDP optimization (133) - -**Alcance:** aplicación 4D - -**Se mantiene entre dos sesiones**: no +**Valores posibles**: toda cadena personalizada -**Valores posibles:** `0`: activado (por defecto), `1`: desactivado. +**Descripción:** cadena personalizada pasada de una sesión a la siguiente cuando se reinicia la aplicación 4D. Este selector es útil en el contexto de pruebas unitarias automatizadas que requieren que las aplicaciones se reinicien con diferentes parámetros. -**Descripción:** activa o desactiva las optimizaciones para RDP (Protocolo de escritorio remoto). Cuando está activado, optimiza en particular el uso del portapapeles compartido en las conexiones RDP, que de otro modo pueden provocar problemas de congelación. Tenga en cuenta que este selector desactiva la compatibilidad en el portapapeles para imágenes codificadas como URI de datos en texto sin formato (solo afecta a las imágenes que se sueltan o se copian explícitamente como texto desde un navegador). +Cuando se utiliza con [SET DATABASE PARAMETER](set-database-parameter.md), define un nuevo valor que estará disponible en la próxima base de datos abierta después de que 4D se reinicie manualmente o utilizando los comandos [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), o [RESTART 4D](restart-4d.md). Cuando se utiliza con [Get database parameter](get-database-parameter.md), obtiene el valor del parámetro de usuario actualmente disponible, definido mediante una línea de comando (ver *Interfaz de línea de comando*), el archivo .4DLink (ver *Usar un archivo 4DLink*), o una llamada a [SET DATABASE PARAMETER](set-database-parameter.md) durante la sesión anterior. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) define un User param value antes de una llamada a [OPEN DATABASE](open-database.md) con un archivo .4DLink que también contiene un atributo xml user-param, 4D 4D tiene en cuenta solo el parámetro ofrecido por [SET DATABASE PARAMETER](set-database-parameter.md). :::nota diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md index 408256a6f92ce3..e8375316d3a77b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md @@ -22,26 +22,6 @@ displayed_sidebar: docs Le paramètre *sélecteur* désigne le paramètre à lire. 4D vous propose les constantes prédéfinies suivantes, placées dans le thème *Paramètres de la base* : -### 4D Server timeout (13) - -**Portée** : Application 4D si *valeur* positive - -**Conservé entre deux sessions** : Oui si *valeur* positive - -**Valeurs possibles** : 0 -> 32 767 - -**Description** : Valeur du délai avant déconnexion (timeout) accordé par 4D Server aux postes clients. - -Par défaut, cette valeur est définie dans la page “Client-Serveur/Options réseau” des Propriétés de la base, sur le poste serveur. - -Le timeout serveur définit la période maximale de non-réponse du client "autorisée", par exemple s'il effectue une opération bloquante. A l'issue de cette période, 4D Server déconnecte le client. Le sélecteur 4D Server timeout vous permet de fixer un nouveau timeout, exprimé en minutes. Cette possibilité permet en particulier d’augmenter la valeur du timeout avant l’exécution sur le poste client d’une opération bloquante de longue durée, risquant d’entraîner une déconnexion ; par exemple, l’impression d’un grand nombre de pages. - -Vous disposez en outre de deux possibilités : - -effectuer une modification globale et permanente : la nouvelle valeur s’applique à tous les process et est stockée dans les préférences de l’application (équivaut à une modification de la valeur dans la boîte de dialogue des Préférences). Pour cela, passez une valeur **positive** dans le paramètre *valeur*.effectuer une modification restreinte et temporaire : la nouvelle valeur ne s’applique qu’au process appelant (les autres process conservant la valeur d’origine), et est abandonnée dès que le serveur reçoit un signe d’activité du poste client — par exemple, dès que l’opération est terminée. Cette possibilité est utile pour gérer les opérations longues initiées par des plug-ins. Pour cela, passez une valeur **négative** dans le paramètre *valeur*. Pour définir une connexion “Ouverte en permanence”, passez 0 dans *valeur*. Reportez-vous à l’exemple 1. - - - ### 4D Remote mode timeout (14) **Portée** (ancienne couche réseau uniquement) : Application 4D si *valeur* positive @@ -54,85 +34,6 @@ Le sélecteur 4D Remote mode timeout n'est pris en compte que si vous utilisez l -### Port ID (15) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Non - -**Description** : Numéro du port TCP utilisé par le serveur Web 4D avec 4D en mode local et 4D Server. Par défaut, la valeur est 80\. - -Le numéro de port TCP est défini dans la page “Web/Configuration” de la boîte de dialogue des Propriétés de la base. Vous pouvez utiliser les constantes du thème *Numéros de port TCP* pour le paramètre *valeur*. - -Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fusionnés avec 4D Desktop (pas d’accès au mode Développement). Pour plus d’informations sur le numéro de port TCP, reportez-vous à la section *Paramétrages du serveur Web*. - - - -### Character set (17) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Oui - -**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Max concurrent Web processes (18) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Oui - -**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Client port ID (22) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 15 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Client character set (24) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 17 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Client max concurrent Web proc (25) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 18 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Maximum Web requests size (27) - -**Portée** : 4D local, 4D Server - - **Conservé** **entre deux sessions** : Oui - - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - ### 4D Server log recording (28) @@ -150,153 +51,131 @@ Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fu -### Client Web log recording (30) - -**Portée** :Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : 0 = Ne pas enregistrer (défaut), 1 = Enregistrer au format CLF, 2 = Enregistrer au format DLF, 3 = Enregistrer au format ELF, 4 = Enregistrer au format WLF. - -**Description** : Démarrage ou arrêt de l’enregistrement des requêtes Web reçues par les serveurs Web de tous les postes clients. Par défaut, la valeur est 0 (pas d’enregistrement des requêtes). - -Le fonctionnement de ce sélecteur est identique à celui du sélecteur 29 ; il s’applique toutefois à tous les postes 4D clients utilisés en tant que serveurs Web. Le fichier “logweb.txt” est dans ce cas automatiquement placé dans le sous-dossier Logs du dossier base 4D client (dossier de cache). Si vous souhaitez définir des valeurs pour certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - +### 4D Server timeout (13) -### Table sequence number (31) +**Portée** : Application 4D si *valeur* positive -**Portée** :Application 4D +**Conservé entre deux sessions** : Oui si *valeur* positive - **Conservé** **entre deux sessions** : Oui +**Valeurs possibles** : 0 -> 32 767 - **Valeurs possibles** : Toute valeur de type entier long. +**Description** : Valeur du délai avant déconnexion (timeout) accordé par 4D Server aux postes clients. -**Description** : Ce sélecteur permet de modifier ou de lire le numéro unique courant des enregistrements de la table passée en paramètre. “Numéro courant” signifie “dernier numéro utilisé” : si vous modifiez cette valeur à l’aide de [SET DATABASE PARAMETER](set-database-parameter.md), le prochain enregistrement sera créé avec comme numéro la valeur passée + 1\. Ce nouveau numéro est, lui, retourné par la commande [Sequence number](sequence-number.md) ainsi que dans tout champ de la table auquel la propriété "Incrémentation auto" a été affectée en Structure ou via le SQL. +Par défaut, cette valeur est définie dans la page “Client-Serveur/Options réseau” des Propriétés de la base, sur le poste serveur. -Par défaut, le numéro unique est défini par 4D et correspond à l’ordre de création des enregistrements. +Le timeout serveur définit la période maximale de non-réponse du client "autorisée", par exemple s'il effectue une opération bloquante. A l'issue de cette période, 4D Server déconnecte le client. Le sélecteur 4D Server timeout vous permet de fixer un nouveau timeout, exprimé en minutes. Cette possibilité permet en particulier d’augmenter la valeur du timeout avant l’exécution sur le poste client d’une opération bloquante de longue durée, risquant d’entraîner une déconnexion ; par exemple, l’impression d’un grand nombre de pages. -Pour des informations supplémentaires, reportez-vous à la documentation de la commande [Sequence number](sequence-number.md). +Vous disposez en outre de deux possibilités : +effectuer une modification globale et permanente : la nouvelle valeur s’applique à tous les process et est stockée dans les préférences de l’application (équivaut à une modification de la valeur dans la boîte de dialogue des Préférences). Pour cela, passez une valeur **positive** dans le paramètre *valeur*.effectuer une modification restreinte et temporaire : la nouvelle valeur ne s’applique qu’au process appelant (les autres process conservant la valeur d’origine), et est abandonnée dès que le serveur reçoit un signe d’activité du poste client — par exemple, dès que l’opération est terminée. Cette possibilité est utile pour gérer les opérations longues initiées par des plug-ins. Pour cela, passez une valeur **négative** dans le paramètre *valeur*. Pour définir une connexion “Ouverte en permanence”, passez 0 dans *valeur*. Reportez-vous à l’exemple 1. -### Debug log recording (34) -**Thread-safe** : Yes -**Portée** : Application 4D +### Auto synchro resources folder (48) -**Conservé** **entre deux sessions** : Non +**Portée** :Poste 4D distant -**Description** : Démarrage ou arrêt de l’enregistrement séquentiel des événements de programmation de 4D dans le fichier *4DDebugLogServer* *\[\_pN\_n\].txt* (où \_n est le numéro de segment du fichier). + **Conservé** **entre deux sessions** : Non -Deux modes sont possibles : + **Valeurs possibles** : 0 (pas de synchronisation), 1 (synchronisation auto) ou 2 (demander). -- Le mode standard propose une vue basique des événements et le fichier est automatiquement placé dans le sous-dossier Logs de la base, à côté du fichier de structure. Les durées d'exécution sont exprimées en millisecondes avec la valeur "< ms" qui s'affiche lorsqu'une opération dure moins d'une milliseconde. +**Description** : Mode de synchronisation dynamique du dossier *Resources* du poste client 4D ayant exécuté la commande avec celui du serveur. -- Le mode tabulé fournit des informations supplémentaires et utilise un format tabulé plus compact dans le fichier. Les durées d'exécution sont exprimées en millisecondes. **Valeurs possibles** : Entier long contenant un champ de bits (bit field) : valeur = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +Lorsque le contenu du dossier *Resources* sur le serveur a été modifié ou qu’une demande de synchronisation a été émise (via l’explorateur de ressources ou suite à l'exécution de la commande [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md)), le serveur notifie les clients connectés. -- Le bit 0 (valeur 1) permet de demander à activer le fichier (à noter que toute autre valeur non nulle l’activera également) +Trois modes de synchronisation sont alors possibles côté client. Le sélecteur Auto synchro resources folder vous permet de définir le mode à utiliser pour le poste client et la session courante : -- Le bit 1 (valeur 2) permet de demander les paramètres d’appel aux commandes et (mode interprété uniquement) aux méthodes. +0 (valeur par défaut) : pas de synchronisation dynamique (la demande de synchronisation est ignorée) 1 : synchronisation dynamique automatique2 : affichage d’une boîte de dialogue sur les postes clients, avec possibilité d’effectuer ou de refuser la synchronisation.Le mode de synchronisation peut également être défini globalement dans les Propriétés de la base. -- Le bit 2 (valeur 4) permet d’activer le format tabulé. -- Le bit 3 (valeur 8) permet de désactiver l’écriture immédiate de chaque opération sur disque (activée par défaut). L’écriture immédiate est moins rapide mais plus efficace par exemple pour rechercher les causes d’un plantage. Si vous désactivez ce mode, le fichier sera généré plus rapidement. -- Le bit 4 (valeur 16) permet de désactiver l’enregistrement des appels de plug-ins (activé par défaut). -- Le bit 5 (valeur 32) permet de désactiver l'enregistrement des fonctions membres. +### Cache flush periodicity (95) -Exemples : +**Thread-safe** : Yes -FIXER PARAMETRE BASE(34;1) // active le mode standard sans les paramètres, avec les durées -FIXER PARAMETRE BASE(34;2) // active le mode standard avec les paramètres et les durées +Portée : 4D local, 4D Server -FIXER PARAMETRE BASE(34;2+4) // active le mode tabulé avec les paramètres et les durées +**Conservé entre deux sessions** : Non -FIXER PARAMETRE BASE(34;0) // désactive le fichier +**Valeurs possibles** : entier long > 1 (secondes) -Dans tout type d'application 4D (4D tous modes, 4D Server, 4D Volume Desktop), en interprété ou en compilé, vous pouvez éviter que le fichier n’enregistre une trop grande quantité d’informations : +**Description** : Permet de lire ou de fixer la valeur courante de périodicité de l'écriture du cache de données sur le disque, exprimée en secondes. Si elle est modifiée, cette valeur remplace la valeur définie par l'option **Ecriture cache toutes les secondes/minutes** dans la [XML DECODE](xml-decode.md) des Propriétés de la base durant la session courante (elle n'est pas stockée dans les Propriétés de la base). -- en restreignant les commandes 4D examinées à l'aide de Log command list (sélecteur 80), ou -- en le restreignant au process courant uniquement à l'aide de Current process debug log recording (sélecteur 111). Cela ajoutera la lettre "p" et le numéro de process au nom du fichier : *4DDebugLog* *\[\_pN\_n\].txt ou* *4DDebugLogServer\[\_pn\_n\].txt.* Pour plus d’informations sur le format et l’exploitation du fichier 4DDebugLog, veuillez consulter la *Description des fichiers d'historique* dans le Manuel Développement. -**Note :** Ce sélecteur est proposé uniquement à des fins de débogage et doit être utilisé avec précaution car il peut entraîner une dégradation des performances de l'application. +### Cache unload minimum size (66) +**Portée** : Application 4D -### Client Server port ID (35) +**Conservé entre deux sessions** : Non -**Portée** :Base de données +**Valeurs possibles** : Entier long positif > 1. - **Conservé** **entre deux sessions** : Oui +**Description** : Taille minimum de mémoire à libérer du cache de la base de données lorsque le moteur a besoin d’y faire de la place pour y allouer un objet (valeur en octets). - **Valeurs possibles** : 0 à 65535 +Ce sélecteur a pour but de permettre de réduire le nombre de libérations de données du cache afin d’obtenir des gains de performances. Vous pouvez faire varier ce paramétrage en fonction de la taille du cache et de celle des blocs de données manipulées dans votre base. -**Description** : Numéro de port TCP sur lequel 4D Server publie la base de données (à destination des postes 4D distants). Par défaut, la valeur est 19813\. +Par défaut, si ce sélecteur n’est pas utilisé, 4D décharge au minimum 10 % du cache en cas de besoin de place. -La personnalisation de cette valeur permet d’utiliser plusieurs applications 4D client-serveur sur la même machine avec le protocole TCP ; dans ce cas, vous devez spécifier un numéro de port différent pour chaque application. -La valeur est stockée dans le fichier de structure de la base. Elle peut être définie avec 4D en mode local mais n’est prise en compte qu’en configuration client-serveur. -Lorsque vous modifiez cette valeur, il est nécessaire de redémarrer le poste serveur afin que la nouvelle valeur soit prise en compte. +### Character set (17) +**Portée** : 4D local, 4D Server -### HTTPS Port ID (39) +**Conservé entre deux sessions** : Oui -**Portée** :4D local, 4D Server +**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - **Conservé** **entre deux sessions** : Oui - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. +### Circular log limitation (90) -### Client HTTPS port ID (40) +**Thread-safe** : Yes -**Portée** :Tous postes 4D distants +**Portée** : 4D local, 4D Server. - **Conservé** **entre deux sessions** : Oui +**Conservé entre deux sessions** : Non - **Valeurs possibles** : 0 à 65535 +**Valeurs possibles** : Toute valeur entière, 0 = conserver tous les journaux -**Description** : Numéro du port TCP utilisé par les serveurs Web des postes clients pour les connexions sécurisées via SSL (protocole HTTPS). Par défaut, la valeur est 443 (valeur standard). +**Description** : Nombre maximum de fichiers à conserver par roulement pour chaque type de journal. Par défaut, les 50 fichiers les plus récents sont conservés. Si vous passez une valeur N, seuls les N fichiers les plus récents seront conservés, le plus ancien étant automatiquement effacé à la création d'un nouveau. Ce paramétrage s'applique à tous les fichiers journaux, notamment le journal des requêtes (sélecteurs 28 et 45), le journal de débogage (sélecteur 34), le journal des événements (sélecteur 79), l'historique des requêtes Web (sélecteurs 29 et 84 de la commande [WEB SET OPTION](web-set-option.md)), etc. -Le fonctionnement de ce sélecteur est identique à celui du sélecteur 39 ; il s’applique toutefois à tous les postes 4D distants utilisés en tant que serveurs Web. Si vous souhaitez modifier la valeur de certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D distant. -### SQL Autocommit (43) +### Client character set (24) -**Portée** :Base de données +**Portée** : Tous postes 4D distants **Conservé** **entre deux sessions** : Oui - **Valeurs possibles** : 0 (désactivation) ou 1 (activation) + **Valeurs possibles** : Voir sélecteur 17 -**Description** : Activation ou désactivation du mode SQL auto-commit. Par défaut, la valeur est 0 (mode désactivé) +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Le mode auto-commit permet de renforcer l'intégrité référentielle de la base. Lorsque ce mode est actif, les requêtes *SELECT*, *INSERT*, *UPDATE*, *DELETE* (SIUD) sont automatiquement incluses dans des transactions lorsqu'elles sont exécutées en-dehors de toute transaction. Ce mode peut également être défini dans les préférences de la base. -### SQL Engine case sensitivity (44) +### Client HTTPS port ID (40) -**Portée** : Base de données +**Portée** :Tous postes 4D distants -**Conservé** **entre deux sessions** : Oui + **Conservé** **entre deux sessions** : Oui -**Valeurs possibles** : 0 (casse non prise en compte) ou 1 (casse prise en compte) + **Valeurs possibles** : 0 à 65535 -**Description** : Activation ou désactivation de la prise en compte de la casse des caractères pour les comparaisons de chaînes effectuées par le moteur SQL. +**Description** : Numéro du port TCP utilisé par les serveurs Web des postes clients pour les connexions sécurisées via SSL (protocole HTTPS). Par défaut, la valeur est 443 (valeur standard). -Par défaut, la valeur est 1 (casse prise en compte) : le moteur SQL établit une différence entre les majuscules et les minuscules ainsi qu'entre les caractères accentués lors des comparaisons de chaînes (tris et recherches). Par exemple "ABC" = "ABC" mais "ABC" # "Abc" et "abc" # "âbc" . Dans certains cas, par exemple pour aligner le fonctionnement du moteur SQL sur celui du moteur 4D, vous pourrez souhaiter que les comparaisons de chaînes ne tiennent pas compte de la casse ("ABC"="Abc"="âbc"). +Le fonctionnement de ce sélecteur est identique à celui du sélecteur 39 ; il s’applique toutefois à tous les postes 4D distants utilisés en tant que serveurs Web. Si vous souhaitez modifier la valeur de certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D distant. -**Attention :** *Étant donné que cette option modifie le fichier de structure de la base de données et tous les process, il est fortement recommandé,* *pour des raisons de performances,* *de la définir uniquement au démarrage de la base de données.* Cette option peut également être définie dans la [CALL SUBFORM CONTAINER](call-subform-container.md) des Propriétés de la base. @@ -316,215 +195,173 @@ Ces fichiers texte stockent dans un format tabulé simple diverses informations -### Query by formula on server (46) - -**Portée** :Table et process courants - **Conservé** **entre deux sessions** : Non +### Client max concurrent Web proc (25) - **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) +**Portée** : Tous postes 4D distants -**Description** : Emplacement de l’exécution des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) pour la *table* passée en paramètre. + **Conservé** **entre deux sessions** : Oui -Dans le cadre de l’exploitation d’une base en client-serveur, les commandes de recherche "par formule" peuvent exécutées soit sur le serveur soit sur le client : + **Valeurs possibles** : Voir sélecteur 18 -dans les bases de données créées à partir de 4D v11 SQL, ces commandes sont exécutées sur le serveur. dans les bases de données converties, ces commandes sont exécutées sur le client, comme dans les versions précédentes de 4D.dans les bases de données converties, une préférence spécifique permet de modifier globalement le lieu d’exécution de ces commandes.Cette différence de lieu d’exécution influe sur les performances de l’application (l’exécution sur le serveur est généralement plus rapide) mais également sur la programmation. En effet, la valeur des composantes de la formule (notamment les variables appelées via une méthode) diffère suivant le contexte d’exécution. Vous pouvez utiliser ce sélecteur pour adapter ponctuellement le fonctionnement de votre application. +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Si vous passez 0 dans le paramètre *valeur*, l’emplacement d’exécution des commandes de recherche "par formule" dépendra de la configuration de la base : dans les bases créées avec 4D v11 SQL, les commandes seront exécutées sur le serveur. Dans les bases converties, elles seront exécutées sur le client ou le serveur en fonction des préférences de la base. Passez 1 ou 2 dans *valeur* pour "forcer" l’exécution des commandes respectivement sur le client ou sur le serveur. -Reportez-vous à l'exemple 2. -**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. +### Client port ID (22) +**Portée** : Tous postes 4D distants -### Order by formula on server (47) + **Conservé** **entre deux sessions** : Oui -**Portée** :Table et process courants + **Valeurs possibles** : Voir sélecteur 15 - **Conservé** **entre deux sessions** : Non +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -**Description** : Emplacement de l’exécution de la commande [ORDER BY FORMULA](order-by-formula.md) pour la table passée en paramètre. -Dans le cadre de l’exploitation d’une base en client-serveur, la commande [ORDER BY FORMULA](order-by-formula.md) peut être exécutée soit sur le serveur soit sur le client. Ce sélecteur permet de définir l’emplacement de l’exécution de cette commande (serveur ou client). Ce mode peut également être défini dans les préférences de la base. Pour plus d’informations, reportez-vous à la description du sélecteur 46, Query by formula on server. - -**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. +### Client Server port ID (35) +**Portée** :Base de données -### Auto synchro resources folder (48) + **Conservé** **entre deux sessions** : Oui -**Portée** :Poste 4D distant + **Valeurs possibles** : 0 à 65535 - **Conservé** **entre deux sessions** : Non +**Description** : Numéro de port TCP sur lequel 4D Server publie la base de données (à destination des postes 4D distants). Par défaut, la valeur est 19813\. - **Valeurs possibles** : 0 (pas de synchronisation), 1 (synchronisation auto) ou 2 (demander). +La personnalisation de cette valeur permet d’utiliser plusieurs applications 4D client-serveur sur la même machine avec le protocole TCP ; dans ce cas, vous devez spécifier un numéro de port différent pour chaque application. -**Description** : Mode de synchronisation dynamique du dossier *Resources* du poste client 4D ayant exécuté la commande avec celui du serveur. +La valeur est stockée dans le fichier de structure de la base. Elle peut être définie avec 4D en mode local mais n’est prise en compte qu’en configuration client-serveur. -Lorsque le contenu du dossier *Resources* sur le serveur a été modifié ou qu’une demande de synchronisation a été émise (via l’explorateur de ressources ou suite à l'exécution de la commande [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md)), le serveur notifie les clients connectés. +Lorsque vous modifiez cette valeur, il est nécessaire de redémarrer le poste serveur afin que la nouvelle valeur soit prise en compte. -Trois modes de synchronisation sont alors possibles côté client. Le sélecteur Auto synchro resources folder vous permet de définir le mode à utiliser pour le poste client et la session courante : -0 (valeur par défaut) : pas de synchronisation dynamique (la demande de synchronisation est ignorée) 1 : synchronisation dynamique automatique2 : affichage d’une boîte de dialogue sur les postes clients, avec possibilité d’effectuer ou de refuser la synchronisation.Le mode de synchronisation peut également être défini globalement dans les Propriétés de la base. +### Client Web log recording (30) -### Query by formula joins (49) +**Portée** :Tous postes 4D distants -**Portée** :Process courant + **Conservé** **entre deux sessions** : Oui - **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 = Ne pas enregistrer (défaut), 1 = Enregistrer au format CLF, 2 = Enregistrer au format DLF, 3 = Enregistrer au format ELF, 4 = Enregistrer au format WLF. - **Valeurs possibles** : 0 (utiliser paramétrages de la base), 1 (toujours utiliser les liens auto) ou 2 (utiliser les jointures SQL si possible). +**Description** : Démarrage ou arrêt de l’enregistrement des requêtes Web reçues par les serveurs Web de tous les postes clients. Par défaut, la valeur est 0 (pas d’enregistrement des requêtes). -**Description** : Mode de fonctionnement des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) relatif à l’utilisation de "jointures SQL". +Le fonctionnement de ce sélecteur est identique à celui du sélecteur 29 ; il s’applique toutefois à tous les postes 4D clients utilisés en tant que serveurs Web. Le fichier “logweb.txt” est dans ce cas automatiquement placé dans le sous-dossier Logs du dossier base 4D client (dossier de cache). Si vous souhaitez définir des valeurs pour certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, ces commandes effectuent des jointures sur le modèle des jointures SQL. Ce mécanisme permet de modifier la sélection d’une table en fonction d’une recherche effectuée sur une autre table sans que les tables soient reliées par un lien automatique (condition nécessaire dans les versions précédentes de 4D). -Le sélecteur Query by formula joins vous permet de définir le mode de fonctionnement des commandes de recherche par formule pour le process courant : -0 : utiliser les paramètres courants de la base (valeur par défaut). Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, les "jointures SQL" sont toujours activées pour les recherches par formule. Dans les bases de données converties, ce mécanisme est inactivé par défaut pour des raisons des compatibilité mais peut être mis en oeuvre via une préférence.1 : toujours utiliser les liens auto (= fonctionnement des versions précédentes de 4D). Dans ce mode, un lien est nécessaire pour définir la sélection d’une table en fonction de recherches effectuées dans une autre table. 4D n’effectue pas de "jointures SQL".2 : utiliser les jointures SQL si possible (= fonctionnement par défaut des bases créées en version 11.2 et suivantes de 4D v11 SQL). Dans ce mode, 4D établit des "jointures SQL" pour les recherches par formule lorsque la formule s’y prête (à deux exceptions près, voir la description de la commande commandes [QUERY BY FORMULA](query-by-formula.md) ou [QUERY SELECTION BY FORMULA](query-selection-by-formula.md). **Note :** Avec 4D en mode distant, les "jointures SQL" ne peuvent être utilisées que si les formules sont exécutées sur le serveur (elles doivent avoir accès aux enregistrements). Pour configurer le lieu d'exécution des formules, reportez-vous aux sélecteurs 46 et 47. +### Current process debug log recording (111) +**Portée :** Application 4D -### HTTP compression level (50) +**Conservé entre deux sessions :** Non -**Portée** : Application 4D +**Description** : Démarrage ou arrêt de l'enregistrement séquentiel des événements de programmation **du process courant** dans un fichier d'historique séparé. Cet historique est semblable à Debug log recording (sélecteur 34) mais il ne porte que sur le process courant. Le nom du fichier d'historique inclut la lettre "p" et le numéro du process : 4DDebugLog\[\_p*N*_*n*].txt, où N est l'ID unique du process. Pour plus d'informations sur ce format et sur l'utilisation du fichier *4DDebugLog*, veuillez consulter la *Description des fichiers d'historique* dans le Mode Développement. - **Conservé** **entre deux sessions** : Non +**Notes :** Ce sélecteur est fourni uniquement à des fins de débogage et doit être utilisé avec précaution. Plus particulièrement, il ne doit pas être utilisé en production, étant donné qu'il peut avoir une incidence sur les performances de l'application. Vous pouvez utiliser simultanément les sélecteurs Debug log recording et Current process debug log recording, auquel cas les actions liées au process courant ne seront pas enregistrées dans le fichier d'historique principal. - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### HTTP compression threshold (51) +### Dates inside objects (85) -**Portée** : Application 4D +**Portée** : Process courant **Conservé** **entre deux sessions** : Non - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Server base process stack size (53) - -**Portée** : 4D Server + **Valeurs possibles** : String type without time zone (0), String type with time zone (1), Date type (2) (défaut) - **Conservé** **entre deux sessions** : Non +**Description** : Définit la manière dont les dates sont stockées dans les objets, ainsi que leur traitement en cas d'importation/exportation en JSON. - **Valeurs possibles** : Entier long positif. +Lorsque ce sélecteur vaut Date type (valeur par défaut dans les bases créées à compter de 4D v17), les dates 4D sont stockées avec le type date dans les objets, en tenant compte des paramétrages de date locaux. Lorsqu'ils sont exportés au format JSON, les attributs date seront convertis en chaînes qui ne contiennent pas l'heure (**Note :** ce paramétrage peut être défini au niveau des paramètres de la base via l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la *Page Compatibilité*). -**Description** : Taille de la pile allouée à chaque process système préemptif sur le serveur, exprimée en octets. La taille par défaut est déterminée par le système. +Si vous passez String type with time zone dans ce sélecteur, les dates 4D seront converties en chaînes ISO en tenant compte du fuseau horaire local. Par exemple, la conversion de la date !23/08/2013! donne "2013-08-22T22:00:00Z" au format JSON lorsque l’opération est effectuée en France en été (GMT+2). Ce principe est conforme au fonctionnement standard de JavaScript. Ce fonctionnement peut être source d’erreurs si vous souhaitez envoyer des valeurs de date en JSON à une personne qui se trouve dans un autre fuseau horaire. C’est le cas par exemple pour l’exportation d’une table avec [Selection to JSON](selection-to-json.md) en France destiné à être réimporté aux USA avec [JSON TO SELECTION](json-to-selection.md). Par défaut, les dates étant réinterprétées dans chaque fuseau horaire, les valeurs stockées dans la base seront différentes. Dans ce cas, vous pouvez modifier le mode de conversion des dates afin qu’il ne tienne pas compte du fuseau horaire en passant String type without time zone dans ce sélecteur. La conversion de la date !23/08/2013! donnera alors "2013-08-23T00:00:00Z" dans tous les cas. -Les process système préemptifs (process de type Process base 4D client) sont chargés de contrôler les process clients 4D principaux. La taille allouée par défaut à la pile de chaque process préemptif permet un bon confort d’exécution mais peut s’avérer conséquente lorsque de très nombreux process (plusieurs centaines) sont créés. -A des fins d’optimisation, cette taille peut être diminuée sensiblement si les opérations effectuées par la base s'y prêtent (par exemple si la base n’effectue pas de tris sur de grosses quantités d’enregistrements). Des valeurs de 512 voire de 256 Ko sont possibles. Attention, le sous-dimensionnement de la pile est critique et peut nuire au fonctionnement de 4D Server. Le réglage de ce paramètre est à effectuer avec précaution et doit tenir compte des conditions d’utilisation de la base (nombre d’enregistrements, types d’opérations, etc.). Pour être pris en compte, ce paramétrage doit être exécuté sur le poste serveur (par exemple dans la méthode base Sur démarrage serveur). +### Debug log recording (34) -### Idle connections timeout (54) +**Thread-safe** : Yes -**Portée** : Application 4D sauf si valeur négative +**Portée** : Application 4D **Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. +**Description** : Démarrage ou arrêt de l’enregistrement séquentiel des événements de programmation de 4D dans le fichier *4DDebugLogServer* *\[\_pN\_n\].txt* (où \_n est le numéro de segment du fichier). -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +Deux modes sont possibles : -Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. +- Le mode standard propose une vue basique des événements et le fichier est automatiquement placé dans le sous-dossier Logs de la base, à côté du fichier de structure. Les durées d'exécution sont exprimées en millisecondes avec la valeur "< ms" qui s'affiche lorsqu'une opération dure moins d'une milliseconde. -Si vous passez une valeur positive dans *valeur*, elle s'applique à toutes les nouvelles connexions dans tous les process. Si vous passez une valeur négative, elle s’applique aux connexions ouvertes dans le process courant. Si vous passez 0, les connexions inactives ne sont pas soumises à un timeout. +- Le mode tabulé fournit des informations supplémentaires et utilise un format tabulé plus compact dans le fichier. Les durées d'exécution sont exprimées en millisecondes. **Valeurs possibles** : Entier long contenant un champ de bits (bit field) : valeur = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +- Le bit 0 (valeur 1) permet de demander à activer le fichier (à noter que toute autre valeur non nulle l’activera également) +- Le bit 1 (valeur 2) permet de demander les paramètres d’appel aux commandes et (mode interprété uniquement) aux méthodes. +- Le bit 2 (valeur 4) permet d’activer le format tabulé. +- Le bit 3 (valeur 8) permet de désactiver l’écriture immédiate de chaque opération sur disque (activée par défaut). L’écriture immédiate est moins rapide mais plus efficace par exemple pour rechercher les causes d’un plantage. Si vous désactivez ce mode, le fichier sera généré plus rapidement. +- Le bit 4 (valeur 16) permet de désactiver l’enregistrement des appels de plug-ins (activé par défaut). +- Le bit 5 (valeur 32) permet de désactiver l'enregistrement des fonctions membres. -Ce paramètre doit être défini côté client. Généralement, vous n'aurez pas besoin de modifier cette valeur. +Exemples : +```4d +SET DATABASE PARAMETER(34;1) // active le mode standard sans les paramètres, avec les durées +SET DATABASE PARAMETER(34;2) // active le mode standard avec les paramètres et les durées +SET DATABASE PARAMETER(34;2+4) // active le mode tabulé avec les paramètres et les durées +SET DATABASE PARAMETER(34;0) // désactive le fichier +``` +Dans tout type d'application 4D (4D tous modes, 4D Server, 4D Volume Desktop), en interprété ou en compilé, vous pouvez éviter que le fichier n’enregistre une trop grande quantité d’informations : -### PHP interpreter IP address (55) +- en restreignant les commandes 4D examinées à l'aide de Log command list (sélecteur 80), ou +- en le restreignant au process courant uniquement à l'aide de Current process debug log recording (sélecteur 111). Cela ajoutera la lettre "p" et le numéro de process au nom du fichier : *4DDebugLog* *\[\_pN\_n\].txt ou* *4DDebugLogServer\[\_pn\_n\].txt.* Pour plus d’informations sur le format et l’exploitation du fichier 4DDebugLog, veuillez consulter la *Description des fichiers d'historique* dans le Manuel Développement. -**Portée** :Application 4D +**Note :** Ce sélecteur est proposé uniquement à des fins de débogage et doit être utilisé avec précaution car il peut entraîner une dégradation des performances de l'application. - **Conservé** **entre deux sessions** : Non -**Valeurs** : Chaîne formatée en IPv4 (par exemple "127.0.0.1") ou en IPv6 (par exemple "2001:0db8:0000:0000:0000:ff00:0042:8329") -**Description** : Adresse IP utilisée localement par 4D pour communiquer avec l’interpéteur PHP via fastcgi. Par défaut, la valeur est "127.0.0.1" (les adresses au format IPv6 sont prises en charge à compter de 4D v16R4).. Cette adresse doit correspondre à la machine sur laquelle se trouve 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. -Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. +### Diagnostic log level (86) +**Thread-safe** : Yes +**Portée :** Application 4D -### PHP interpreter port (56) +**Conservé entre deux sessions :** Non -**Portée** :Application 4D +**Description :** Niveau(x) de messages à inclure dans le journal de diagnostic lorsqu'il est activé (voir le sélecteur Diagnostic log recording). Chaque niveau désigne une catégorie de messages de diagnostic et inclut automatiquement la ou les catégories plus importantes. Pour une description des catégories, consultez la section *Log niveau diagnostic* sur le site *developer.4d.com*. - **Conservé** **entre deux sessions** : Non +**Valeurs possibles** **:** L'une des constantes suivantes (Log info par défaut): +- Log trace: active ERROR, WARN, INFO, DEBUG, TRACE (niveau le plus détaillé) +- Log debug: active ERROR, WARN, INFO, DEBUG +- Log info: active ERROR, WARN, INFO (par défaut) +- Log warn: active ERROR, WARN Log error: active ERROR (niveau le moins détaillé) -**Valeurs** : Valeur de type entier long positif. Par défaut, la valeur est 8002\. -**Description** : Numéro du port TCP utilisé par l’interpréteur PHP de 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. +### Diagnostic log recording (79) -### SSL cipher list (64) +**Thread-safe** : Yes **Portée** : Application 4D -**Conservé entre deux sessions** : Non - -**Valeurs possibles** : Suite de chaînes séparées par des deux-points. - -**Description :** Liste de chiffrement (*cipher list*) utilisée par 4D pour le protocole sécurisé. Cette liste permet de modifier la priorité des algorithmes de chiffrement mis en oeuvre par 4D. - -Par exemple, vous pouvez passer la chaîne suivante dans le paramètre *valeur* : "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Pour une description complète de la syntaxe de la liste de chiffrement, reportez-vous à la *page ciphers sur le site de OpenSSL*. - -Ce paramétrage s'applique au principal serveur Web (à l'exclusion des objets Web server), au serveur SQL, aux connexions client/serveur ainsi qu'au client HTTP et aux commandes 4D faisant appel au protocole sécurisé. Ce paramétrage est temporaire (il n'est pas maintenu entre les sessions). - -Lorsque la liste de chiffrement a été modifiée, vous devez redémarrer le serveur concerné pour que le nouveau paramétrage soit pris en compte. - -Pour réinitialiser la liste de chiffrement à sa valeur par défaut (stockée en dur dans le fichier SLI), appelez la commande [SET DATABASE PARAMETER](set-database-parameter.md) et passez une chaîne vide ("") dans le paramètre *valeur*. - -**Note :** Avec la commande [Get database parameter](get-database-parameter.md), la liste de chiffrement est retournée dans le paramètre optionnel *valeurAlpha* et le paramètre de retour vaut toujours 0. - - - -### Cache unload minimum size (66) - -**Portée** : Application 4D - -**Conservé entre deux sessions** : Non - -**Valeurs possibles** : Entier long positif > 1. - -**Description** : Taille minimum de mémoire à libérer du cache de la base de données lorsque le moteur a besoin d’y faire de la place pour y allouer un objet (valeur en octets). - -Ce sélecteur a pour but de permettre de réduire le nombre de libérations de données du cache afin d’obtenir des gains de performances. Vous pouvez faire varier ce paramétrage en fonction de la taille du cache et de celle des blocs de données manipulées dans votre base. - -Par défaut, si ce sélecteur n’est pas utilisé, 4D décharge au minimum 10 % du cache en cas de besoin de place. - - - -### Direct2D status (69) - -**Portée**: Application 4D - -**Conservé entre deux sessions** : Non - -**Description** : Mode d’activation de l’implémentation de Direct2D sous Windows. +**Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Une des constantes suivantes (mode 3 par défaut) : +**Valeurs possibles** : 0 ou 1 (0 = ne pas enregistrer, 1 = enregistrer) -Direct2D disabled (0) : le mode Direct2D n’est pas activé, la base fonctionne dans le mode précédent (GDI/GDIPlus). +**Description** : Démarrage ou arrêt de l’enregistrement du fichier de diagnostic de 4D. Par défaut, la valeur est 0 (pas d’enregistrement). -Direct2D hardware (1) : utilisation de Direct2D en contexte graphique matériel dans toute l’application 4D. Si ce contexte n’est pas disponible, utilisation du contexte graphique Direct2D logiciel. +4D vous permet d’enregistrer de manière continue dans un fichier de diagnostic un ensemble d’événements relatifs au fonctionnement interne de l’application. Les informations contenues dans ce fichier sont destinées à la mise au point des applications 4D et pourront être analysées avec l’aide des services techniques de 4D (pour plus d'informations, reportez-vous à la section *Description des fichiers d'historique* sur *developer.4d.com*). Lorsque vous passez 1 dans ce sélecteur, un fichier de diagnostic est automatiquement créé (ou ouvert) dans le dossier **Logs** de la base. Le fichier est nommé *4DDiagnosticLog\_N*.txt (ou *4DDiagnosticLogServer\_N.*txt s'il est généré sur le serveur). Une fois que le fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel N incrémenté. -Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation de Direct2D en contexte graphique logiciel dans toute l’application 4D. +A noter qu’il est possible d’inclure des informations personnalisées dans ce fichier à l’aide de la commande [LOG EVENT](log-event.md). -**Attention :* Ce sélecteur est fourni uniquement à des fins de débogage. Etant donné que plusieurs fonctionnalités de 4D dépendent de Direct2D, il ne doit pas être désactivé dans les applications déployées. Seul le mode par défaut (Direct2D software) est approuvé pour les applications déployées.* @@ -537,221 +374,214 @@ Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation d **Valeurs possibles** : 0, 1, 2, 3, 4 ou 5 (cf. valeurs du sélecteur 69). La valeur retournée dépend de la disponibilité de Direct2D, du matériel et de la qualité de la prise en charge de Direct2D par le système d’exploitation. Par exemple, si vous exécutez : - +```4d  SET DATABASE PARAMETER(;Direct2D Hardware)  $mode:=Get database parameter() +``` - sur Windows 7 et suivants, *$mode* vaudra 1 si le système détecte un matériel compatible Direct2D, sinon *$mode* vaudra 3 (contexte logiciel). - - sur Windows Vista, *$mode* vaudra 1 si le système détecte un matériel compatible Direct2D, sinon *$mode* vaudra 0 (désactivation de Direct2D). - - sur Windows XP, *$mode* vaudra toujours 0 (incompatibilité avec Direct2D). -### Diagnostic log recording (79) -**Thread-safe** : Yes +### Direct2D status (69) -**Portée** : Application 4D +**Portée**: Application 4D -**Conservé** **entre deux sessions** : Non +**Conservé entre deux sessions** : Non -**Valeurs possibles** : 0 ou 1 (0 = ne pas enregistrer, 1 = enregistrer) +**Description** : Mode d’activation de l’implémentation de Direct2D sous Windows. -**Description** : Démarrage ou arrêt de l’enregistrement du fichier de diagnostic de 4D. Par défaut, la valeur est 0 (pas d’enregistrement). +**Valeurs possibles** : Une des constantes suivantes (mode 3 par défaut) : -4D vous permet d’enregistrer de manière continue dans un fichier de diagnostic un ensemble d’événements relatifs au fonctionnement interne de l’application. Les informations contenues dans ce fichier sont destinées à la mise au point des applications 4D et pourront être analysées avec l’aide des services techniques de 4D (pour plus d'informations, reportez-vous à la section *Description des fichiers d'historique* sur *developer.4d.com*). Lorsque vous passez 1 dans ce sélecteur, un fichier de diagnostic est automatiquement créé (ou ouvert) dans le dossier **Logs** de la base. Le fichier est nommé *4DDiagnosticLog\_N*.txt (ou *4DDiagnosticLogServer\_N.*txt s'il est généré sur le serveur). Une fois que le fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel N incrémenté. +Direct2D disabled (0) : le mode Direct2D n’est pas activé, la base fonctionne dans le mode précédent (GDI/GDIPlus). -A noter qu’il est possible d’inclure des informations personnalisées dans ce fichier à l’aide de la commande [LOG EVENT](log-event.md). +Direct2D hardware (1) : utilisation de Direct2D en contexte graphique matériel dans toute l’application 4D. Si ce contexte n’est pas disponible, utilisation du contexte graphique Direct2D logiciel. +Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation de Direct2D en contexte graphique logiciel dans toute l’application 4D. +**Attention :* Ce sélecteur est fourni uniquement à des fins de débogage. Etant donné que plusieurs fonctionnalités de 4D dépendent de Direct2D, il ne doit pas être désactivé dans les applications déployées. Seul le mode par défaut (Direct2D software) est approuvé pour les applications déployées.* -### Log command list (80) -**Portée** : Application 4D -**Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Chaîne contenant la liste des numéros des commandes 4D à enregistrer (séparées par des points-virgules), ou "all" pour enregistrer toutes les commande, ou "" (chaîne vide) pour n’enregistrer aucune commande, ou le préfixe "-" pour exclure des commandes spécifiques. +### HTTP compression level (50) -**Description** : Liste des commandes 4D à enregistrer dans le fichier de débogage ou à exclure du fichier de débogage (cf. sélecteur 34, Debug log recording). Par défaut, toutes les commandes 4D sont enregistrées. Ce sélecteur vous permet de restreindre la quantité d’informations stockées dans le fichier de débogage en limitant les commandes 4D dont vous souhaitez enregistrer l’exécution ou bien que vous souhaitez exclure de l'enregistrement. Par exemple, vous pouvez écrire :  SET DATABASE PARAMETER(Log command list;"277;341") //enregistrer uniquement les commandes CHERCHER et CHERCHER DANS SELECTION  OU  SET DATABASE PARAMETER(Log command list;"-1666;-323") //exclure les commandes FIXER ALIAS UTILISATEUR et ENDORMIR PROCESS de l'enregistrement +**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Spellchecker (81) -**Portée** : Application 4D - **Conservé** **entre deux sessions** : Non - **Valeurs possibles** : 0 (défaut) = correcteur macOS (Hunspell désactivé), 1 = correcteur Hunspell actif. +### HTTP compression threshold (51) -**Description** : Permet d’activer le correcteur orthographique Hunspell sous macOS. Par défaut, sur cette plate-forme le correcteur natif est activé. Vous pouvez souhaiter utiliser le correcteur Hunspell par exemple pour unifier l’interface de vos applications multiplates-formes (sous Windows, seul le correcteur Hunspell est disponible). Pour plus d’informations, reportez-vous à la page *Correction orthographique*. +**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Dates inside objects (85) -**Portée** : Process courant - **Conservé** **entre deux sessions** : Non - **Valeurs possibles** : String type without time zone (0), String type with time zone (1), Date type (2) (défaut) +### HTTPS Port ID (39) -**Description** : Définit la manière dont les dates sont stockées dans les objets, ainsi que leur traitement en cas d'importation/exportation en JSON. +**Portée** :4D local, 4D Server -Lorsque ce sélecteur vaut Date type (valeur par défaut dans les bases créées à compter de 4D v17), les dates 4D sont stockées avec le type date dans les objets, en tenant compte des paramétrages de date locaux. Lorsqu'ils sont exportés au format JSON, les attributs date seront convertis en chaînes qui ne contiennent pas l'heure (**Note :** ce paramétrage peut être défini au niveau des paramètres de la base via l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la *Page Compatibilité*). + **Conservé** **entre deux sessions** : Oui -Si vous passez String type with time zone dans ce sélecteur, les dates 4D seront converties en chaînes ISO en tenant compte du fuseau horaire local. Par exemple, la conversion de la date !23/08/2013! donne "2013-08-22T22:00:00Z" au format JSON lorsque l’opération est effectuée en France en été (GMT+2). Ce principe est conforme au fonctionnement standard de JavaScript. Ce fonctionnement peut être source d’erreurs si vous souhaitez envoyer des valeurs de date en JSON à une personne qui se trouve dans un autre fuseau horaire. C’est le cas par exemple pour l’exportation d’une table avec [Selection to JSON](selection-to-json.md) en France destiné à être réimporté aux USA avec [JSON TO SELECTION](json-to-selection.md). Par défaut, les dates étant réinterprétées dans chaque fuseau horaire, les valeurs stockées dans la base seront différentes. Dans ce cas, vous pouvez modifier le mode de conversion des dates afin qu’il ne tienne pas compte du fuseau horaire en passant String type without time zone dans ce sélecteur. La conversion de la date !23/08/2013! donnera alors "2013-08-23T00:00:00Z" dans tous les cas. + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Diagnostic log level (86) -**Thread-safe** : Yes +### Idle connections timeout (54) -**Portée :** Application 4D +**Portée** : Application 4D sauf si valeur négative -**Conservé entre deux sessions :** Non +**Conservé** **entre deux sessions** : Non -**Description :** Niveau(x) de messages à inclure dans le journal de diagnostic lorsqu'il est activé (voir le sélecteur Diagnostic log recording). Chaque niveau désigne une catégorie de messages de diagnostic et inclut automatiquement la ou les catégories plus importantes. Pour une description des catégories, consultez la section *Log niveau diagnostic* sur le site *developer.4d.com*. +**Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Valeurs possibles** **:** L'une des constantes suivantes (Log info par défaut): Log trace: active ERROR, WARN, INFO, DEBUG, TRACE (niveau le plus détaillé) Log debug: active ERROR, WARN, INFO, DEBUG Log info: active ERROR, WARN, INFO (par défaut) Log warn: active ERROR, WARN Log error: active ERROR (niveau le moins détaillé) +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. +Si vous passez une valeur positive dans *valeur*, elle s'applique à toutes les nouvelles connexions dans tous les process. Si vous passez une valeur négative, elle s’applique aux connexions ouvertes dans le process courant. Si vous passez 0, les connexions inactives ne sont pas soumises à un timeout. -### Use legacy network layer (87) +Ce paramètre doit être défini côté client. Généralement, vous n'aurez pas besoin de modifier cette valeur. -**Portée :** 4D local, 4D Server. -**Conservé entre deux sessions :** Oui -**Description :** Fixe ou lit le statut courant de l'ancienne couche réseau pour les connexions client/serveur. L'ancienne couche réseau est obsolète à compter de 4D v14 R5 et doit être progressivement remplacée dans vos applications par la couche réseau *ServerNet*. *ServerNet* sera nécessaire dans les prochaines versions de 4D afin de permettre aux applications 4D de tirer parti des futures évolutions réseau. Pour des raisons de compatibilité, l'ancienne couche réseau est toujours prise en charge afin de faciliter la transition des applications existantes (elle reste utilisée par défaut dans les applications converties depuis des versions antérieures à la v14 R5). Passez 1 dans ce paramètre pour utiliser l'ancienne couche réseau (et désactiver *ServerNet*), et passez 0 pour désactiver l'ancienne couche réseau (et utiliser *ServerNet*). -Cette propriété peut également être définie à l'aide de l'option "Utiliser l'ancienne couche réseau" présente dans la *Page Compatibilité* des Propriétés de la base (voir section *Options réseau et Client-serveur* ; dans cette section, vous trouverez aussi un paragraphe décrivant la stratégie de migration. Nous vous recommandons d'activer *ServerNet* dès que possible). +### IMAP Log (119) -Il est nécessaire de redémarrer l'application pour que ce paramètre soit pris en compte. +**Thread-safe** : Yes -**Valeurs possibles :** 0 ou 1 (0 = ne pas utiliser l'ancienne couche, 1 = utiliser l'ancienne couche) +**Portée** : 4D local, 4D Server -**Valeur par défaut :** 0 dans les applications créées avec 4D v14 R5 ou suivantes, 1 dans les applications converties depuis 4D v14 R4 ou précédentes. +**Conservé entre deux sessions :** Non +**Valeurs possibles :** 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, ajouté au nom du fichier). Par défaut, la valeur est 0 (échanges IMAP non enregistrés). +**Description :** Démarre ou stoppe l'enregistrement des échanges entre 4D et le serveur IMAP, lorsqu'un objet transporteur est traité via *IMAP\_transporteur.getMail( )* ou *IMAP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (échanges non enregistrés). Lorsque ce mécanisme est activé, un fichier journal est créé dans le dossier Journaux de la base de données. Il est nommé 4DIMAPLog\_N.txt, où N est le numéro séquentiel du journal. Une fois que le fichier 4DIMAPLog a atteint une taille de 10 Mo, il est fermé et un nouveau est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre value. Par défaut, tous les fichiers sont conservés, mais vous pouvez contrôler le nombre de fichiers à conserver en utilisant le paramètre Circular log limitation. -### SQL Server Port ID (88) +Pour plus d'informations sur les fichiers 4DIMAPLog\_N.txt, reportez-vous à la section *Description des fichiers d'historique*. -**Portée** : 4D mode local et 4D Server. -**Conservé entre deux sessions** : Oui -**Description** : Permet de lire ou de fixer le numéro du port TCP utilisé par le serveur SQL intégré de 4D en mode local ou de 4D Server. Par défaut, la valeur est 19812\. Le numéro de port TCP peut également être défini dans la page "SQL" de la boîte de dialogue des Propriétés de la base. Lorsque ce sélecteur est utilisé en écriture, la propriété de la base est mise à jour. -**Valeurs possibles** : 0 à 65535. +### Is current database a project (112) -**Valeur par défaut** : 19812 +**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +**Portée** : Application 4D +**Description** : Retourne 1 si l'architecture de la base courante est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. -### Circular log limitation (90) -**Thread-safe** : Yes -**Portée** : 4D local, 4D Server. -**Conservé entre deux sessions** : Non +### Is host database a project (113) -**Valeurs possibles** : Toute valeur entière, 0 = conserver tous les journaux +**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. -**Description** : Nombre maximum de fichiers à conserver par roulement pour chaque type de journal. Par défaut, les 50 fichiers les plus récents sont conservés. Si vous passez une valeur N, seuls les N fichiers les plus récents seront conservés, le plus ancien étant automatiquement effacé à la création d'un nouveau. Ce paramétrage s'applique à tous les fichiers journaux, notamment le journal des requêtes (sélecteurs 28 et 45), le journal de débogage (sélecteur 34), le journal des événements (sélecteur 79), l'historique des requêtes Web (sélecteurs 29 et 84 de la commande [WEB SET OPTION](web-set-option.md)), etc. +**Portée** : Application 4D +**Description** : Retourne 1 si l'architecture de la base hôte est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. -### Number of formulas in cache (92) -**Portée** : Application 4D. -**Conservé entre deux sessions** : Non +### Is host database writable (117) -**Valeurs possibles** : Entier long positif +**Note :** Vous pouvez utiliser ce sélecteur uniquement avec la commande [Get database parameter](get-database-parameter.md) et sa valeur ne peut pas être définie. -**Valeur par défaut** : 0 (pas de cache) +**Portée** : Application 4D -**Description** : Fixe ou lit le nombre maximum de formules à conserver dans le cache des formules, qui est utilisé par la commande [EXECUTE FORMULA](execute-formula.md). Cette limite est appliquée à tous les process, mais chaque process dispose de son propre cache de formules. Placer des formules dans le cache accélère l'exécution de la commande [EXECUTE FORMULA](execute-formula.md) en mode compilé puisque chaque formule en cache est tokenisée une seule fois dans ce cas. Lorsque vous modifiez la valeur du cache, son contenu est réinitialisé même si la nouvelle valeur est supérieure à la précédente. Une fois le nombre maximum de formules en cache atteint, toute nouvelle formule exécutée écrase la plus ancienne dans le cache (mode FIFO). Ce paramètre est pris en compte uniquement dans les bases ou les composants compilés. +**Description** : Retourne 1 si le fichier de structure ou le fichier de projet de l'hôte est en écriture, et retourne 0 s'il est en lecture seule. -### OpenSSL version (94) -**Portée** : Tous postes 4D +### Libldap version (114) - **Conservé entre deux sessions** : Non +**Portée** : Machine 4D courante -**Description**: Retourne le numéro de version de la bibliothèque OpenSSL utilisée sur le poste. (Lecture seule) +**Conservé entre deux sessions** : Non +**Description** : Retourne le numéro de version de la bibliothèque LDAP dans l'application 4D sur la machine locale. (Lecture seule) -### Cache flush periodicity (95) -**Thread-safe** : Yes +### Libsasl version (115) -Portée : 4D local, 4D Server +**Portée** : Machine 4D courante **Conservé entre deux sessions** : Non -**Valeurs possibles** : entier long > 1 (secondes) +**Description** : Retourne le numéro de version de la bibliothèque SASL dans l'application 4D sur la machine locale. (Lecture seule) -**Description** : Permet de lire ou de fixer la valeur courante de périodicité de l'écriture du cache de données sur le disque, exprimée en secondes. Si elle est modifiée, cette valeur remplace la valeur définie par l'option **Ecriture cache toutes les secondes/minutes** dans la [XML DECODE](xml-decode.md) des Propriétés de la base durant la session courante (elle n'est pas stockée dans les Propriétés de la base). -### Remote connection sleep timeout (98) +### Libzip version (120) -**Portée** : Application 4D Server +**Portée :** Machine 4D courante -**Conservé entre deux sessions** : Non +**Conservé entre deux sessions :** n/a -**Valeurs possibles** : Entier long positif +**Description :** Retourne le numéro de version de la bibliothèque libzip dans l'application 4D sur la machine courante. (Lecture seule) -**Description** : Timeout de la connexion à distance en veille, exprimé en secondes. Par défaut, la valeur est 172800 (48 heures). Le délai de mise en veille est appliqué une fois qu'une machine exécutant une application distante 4D est passée en mode veille. Dans ce cas, sa session est maintenue par 4D Server (voir la description de la fonctionnalité ). 4D Server vérifie toutes les 5 minutes si un 4D distant en veille a dépassé le délai de veille, auquel cas il est abandonné. Ainsi, la durée de veille maximale autorisée est la *timeout mise en veille actuel + 300*. Dans certains cas, vous souhaiterez peut-être modifier le délai de mise en veille, pour libérer, par exemple, les enregistrements/licences verrouillés plus rapidement. -### Tips enabled (101) +### Log command list (80) -**Portée :** Application 4D +**Portée** : Application 4D -**Conservé entre deux sessions :** Non +**Conservé** **entre deux sessions** : Non -**Valeurs possibles :** 0 = message d'aide désactivés, 1 = messages d'aide activés (défaut) +**Valeurs possibles** : Chaîne contenant la liste des numéros des commandes 4D à enregistrer (séparées par des points-virgules), ou "all" pour enregistrer toutes les commande, ou "" (chaîne vide) pour n’enregistrer aucune commande, ou le préfixe "-" pour exclure des commandes spécifiques. -**Description :** Définit ou récupère l'état d'affichage des messages d'aide dans l'application 4D. Par défaut, les messages d'aide sont activées. +**Description** : Liste des commandes 4D à enregistrer dans le fichier de débogage ou à exclure du fichier de débogage (cf. sélecteur 34, Debug log recording). Par défaut, toutes les commandes 4D sont enregistrées. Ce sélecteur vous permet de restreindre la quantité d’informations stockées dans le fichier de débogage en limitant les commandes 4D dont vous souhaitez enregistrer l’exécution ou bien que vous souhaitez exclure de l'enregistrement. Par exemple, vous pouvez écrire : - Notez que ce paramètre fixe tous les messages d'aides, c'est-à-dire les messages d'aide des formulaires et ceux de l'éditeur du mode Développement. +```4d +//enregistrer uniquement les commandes QUERY et QUERY SELECTION +SET DATABASE PARAMETER(Log command list;"277;341")  +``` +OU +```4d +//exclure les commandes SET USER ALIAS et DELAY PROCESS de l'enregistrement +SET DATABASE PARAMETER(Log command list;"-1666;-323")  +``` -### Tips delay (102) +### Max concurrent Web processes (18) -**Portée :** Application 4D +**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non +**Conservé entre deux sessions** : Oui -**Valeurs possibles :** entier long >= 0 (ticks) +**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -**Description :** délai avant que les messages d'aide soient affichés une fois que le curseur de la souris est arrêté sur les objets avec message d'aide. La valeur est exprimée en ticks (1/60e de seconde). La valeur par défaut est de 45 ticks (0,75 seconde). -### Tips duration (103) +### Maximum Web requests size (27) -**Portée :** Application 4D +**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non + **Conservé** **entre deux sessions** : Oui -**Valeurs possibles :** entier long >= 60 (ticks) + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -**Description :** Durée maximum de l'affichage du message d'aide. La valeur est exprimée en ticks (1/60e de seconde). La valeur par défaut est de 720 ticks (12 secondes). @@ -773,166 +603,173 @@ Portée : 4D local, 4D Server -### User param value (108) -**Portée :** 4D local, 4D Server +### Number of formulas in cache (92) + +**Portée** : Application 4D. -**Conservé entre deux sessions :** Non +**Conservé entre deux sessions** : Non -**Valeurs possibles** : Toute chaîne personnalisée +**Valeurs possibles** : Entier long positif -**Description :** Chaîne personnalisée passée d'une session à la suivante lorsque l'application 4D est redémarrée. Ce sélecteur est utile dans les cas où des tests unitaires automatisés nécessitent que les applications redémarrent avec des paramètres différents. +**Valeur par défaut** : 0 (pas de cache) -Avec [SET DATABASE PARAMETER](set-database-parameter.md), définit une nouvelle valeur qui sera disponible dans la prochaine base de données ouverte après le redémarrage manuel de 4D or l'utilisation des commandes [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), ou [RESTART 4D](restart-4d.md). Avec [Get database parameter](get-database-parameter.md), retourne la valeur User param courante définie à l'aide d'une ligne de commande (voir *Interface ligne de commande*), un fichier .4DLink (voir *Utiliser un fichier 4DLink*), ou un appel à [SET DATABASE PARAMETER](set-database-parameter.md) durant la session précédente. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) fixe une User param value avant d'appeler [OPEN DATABASE](open-database.md) à l'aide d'un fichier .4DLink contenant également un attribut xml user-param xml, 4D ne tient compte que du paramètre fourni par [SET DATABASE PARAMETER](set-database-parameter.md). +**Description** : Fixe ou lit le nombre maximum de formules à conserver dans le cache des formules, qui est utilisé par la commande [EXECUTE FORMULA](execute-formula.md). Cette limite est appliquée à tous les process, mais chaque process dispose de son propre cache de formules. Placer des formules dans le cache accélère l'exécution de la commande [EXECUTE FORMULA](execute-formula.md) en mode compilé puisque chaque formule en cache est tokenisée une seule fois dans ce cas. Lorsque vous modifiez la valeur du cache, son contenu est réinitialisé même si la nouvelle valeur est supérieure à la précédente. Une fois le nombre maximum de formules en cache atteint, toute nouvelle formule exécutée écrase la plus ancienne dans le cache (mode FIFO). Ce paramètre est pris en compte uniquement dans les bases ou les composants compilés. -### Times inside objects (109) -Portée : 4D local, 4D Server (tous process) +### OpenSSL version (94) -**Conservé entre deux sessions** : Oui +**Portée** : Tous postes 4D - **Valeurs possibles** : Times in seconds (0) (défaut), Times in milliseconds (1) + **Conservé entre deux sessions** : Non -**Description** : Définit la manière dont les valeurs de type heure sont converties et stockées dans les propriétés d'objets et les éléments de collections, ainsi que lors des imports/exports JSON et via les zones Web. Par défaut, à compter de 4D v17, les heures sont converties et stockées en nombre de secondes. +**Description**: Retourne le numéro de version de la bibliothèque OpenSSL utilisée sur le poste. (Lecture seule) -Dans les versions précédentes, les heures étaient converties et stockées en nombre de millisecondes dans ces contextes. L'utilisation de ce sélecteur peut vous aider lors de la migration de vos applications en rétablissant le fonctionnement précédent lorsque c'est nécessaire. -**Note** : Les méthodes ORDA et le moteur SQL ne tiennent pas compte de ce paramétrage, ces deux environnements manipulent toujours les heures en nombre de secondes. +### Order by formula on server (47) -### SMTP Log (110) +**Portée** :Table et process courants -**Thread-safe** : Yes + **Conservé** **entre deux sessions** : Non -Portée : 4D local, 4D Server* + **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) + +**Description** : Emplacement de l’exécution de la commande [ORDER BY FORMULA](order-by-formula.md) pour la table passée en paramètre. -* **Conservé entre deux sessions** : Non +Dans le cadre de l’exploitation d’une base en client-serveur, la commande [ORDER BY FORMULA](order-by-formula.md) peut être exécutée soit sur le serveur soit sur le client. Ce sélecteur permet de définir l’emplacement de l’exécution de cette commande (serveur ou client). Ce mode peut également être défini dans les préférences de la base. Pour plus d’informations, reportez-vous à la description du sélecteur 46, Query by formula on server. -**Valeurs possibles** : 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, accolé au nom du fichier). Par défaut, la valeur est 0 (pas d'enregistrement des échanges SMTP). +**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. -**Description** : Démarrage ou arrêt de l'enregistrement des échanges entre 4D et le serveur SMTP, lorsqu'un objet *transporteur* est traité par *transporteur.send( )* ou *SMTP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (pas d'enregistrement des échanges SMTP). Lorsque ce mécanisme est activé, un fichier d'historique est créé dans le dossier Logs de la base. Il est nommé 4DSMTPLog\_X.txt, *où N* est le numéro séquentiel de l'historique. Une fois qu'un fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre *valeur*. Par défaut, tous les fichiers sont conservés, mais vous pouvez gérer le nombre de fichier à conserver à l'aide du paramètre Circular log limitation. -Pour plus d'informations sur les fichiers 4DSMTPLog\_X.txt, veuillez consulter la section *Description des fichiers d'historique*. +### Pause logging (121) -### Current process debug log recording (111) +**Thread-safe** : Yes **Portée :** Application 4D **Conservé entre deux sessions :** Non -**Description** : Démarrage ou arrêt de l'enregistrement séquentiel des événements de programmation **du process courant** dans un fichier d'historique séparé. Cet historique est semblable à Debug log recording (sélecteur 34) mais il ne porte que sur le process courant. Le nom du fichier d'historique inclut la lettre "p" et le numéro du process : 4DDebugLog\[\_p*N*_*n*].txt, où N est l'ID unique du process. Pour plus d'informations sur ce format et sur l'utilisation du fichier *4DDebugLog*, veuillez consulter la *Description des fichiers d'historique* dans le Mode Développement. +**Valeurs possibles :** 0 (reprise des journaux), 1 (pause des journaux) -**Notes :** Ce sélecteur est fourni uniquement à des fins de débogage et doit être utilisé avec précaution. Plus particulièrement, il ne doit pas être utilisé en production, étant donné qu'il peut avoir une incidence sur les performances de l'application. Vous pouvez utiliser simultanément les sélecteurs Debug log recording et Current process debug log recording, auquel cas les actions liées au process courant ne seront pas enregistrées dans le fichier d'historique principal. +Ce sélecteur permet de suspendre/reprendre toutes les opérations de journalisation lancées sur l'application (à l'exception des journaux ORDA). Cette fonction peut être utile pour alléger temporairement les tâches de l'application 4D ou pour planifier les opérations des journaux. -### Is current database a project (112) +### PHP interpreter IP address (55) -**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +**Portée** :Application 4D -**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non -**Description** : Retourne 1 si l'architecture de la base courante est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. +**Valeurs** : Chaîne formatée en IPv4 (par exemple "127.0.0.1") ou en IPv6 (par exemple "2001:0db8:0000:0000:0000:ff00:0042:8329") +**Description** : Adresse IP utilisée localement par 4D pour communiquer avec l’interpéteur PHP via fastcgi. Par défaut, la valeur est "127.0.0.1" (les adresses au format IPv6 sont prises en charge à compter de 4D v16R4).. Cette adresse doit correspondre à la machine sur laquelle se trouve 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. +Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. -### Is host database a project (113) -**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. -**Portée** : Application 4D -**Description** : Retourne 1 si l'architecture de la base hôte est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. +### PHP interpreter port (56) +**Portée** :Application 4D + **Conservé** **entre deux sessions** : Non -### Libldap version (114) +**Valeurs** : Valeur de type entier long positif. Par défaut, la valeur est 8002\. -**Portée** : Machine 4D courante +**Description** : Numéro du port TCP utilisé par l’interpréteur PHP de 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. -**Conservé entre deux sessions** : Non -**Description** : Retourne le numéro de version de la bibliothèque LDAP dans l'application 4D sur la machine locale. (Lecture seule) +### POP3 Log (116) -### Libsasl version (115) +**Thread-safe** : Yes -**Portée** : Machine 4D courante +Portée : 4D local, 4D Server **Conservé entre deux sessions** : Non -**Description** : Retourne le numéro de version de la bibliothèque SASL dans l'application 4D sur la machine locale. (Lecture seule) +**Valeurs possibles** : 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, accolé au nom du fichier). Par défaut, la valeur est 0 (pas d'enregistrement des échanges POP3). +**Description** : Démarrage ou arrêt de l'enregistrement des échanges entre 4D et le serveur POP3, lorsqu'un objet *transporteur* est traité par *POP3\_transporteur.getMail( )* ou *POP3\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (pas d'enregistrement des échanges POP3). Lorsque ce mécanisme est activé, un fichier d'historique est créé dans le dossier Logs de la base. Il est nommé 4DPOP3Log\_X.txt, *où N* est le numéro séquentiel de l'historique. Une fois qu'un fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre *valeur*. Par défaut, tous les fichiers sont conservés, mais vous pouvez gérer le nombre de fichier à conserver à l'aide du paramètre Circular log limitation. Pour plus d'informations sur les fichiers 4DPOP3Log\_X.txt, veuillez consulter la section *Description des fichiers d'historique*. -### POP3 Log (116) -**Thread-safe** : Yes -Portée : 4D local, 4D Server +### Port ID (15) + +**Portée** : 4D local, 4D Server **Conservé entre deux sessions** : Non -**Valeurs possibles** : 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, accolé au nom du fichier). Par défaut, la valeur est 0 (pas d'enregistrement des échanges POP3). +**Description** : Numéro du port TCP utilisé par le serveur Web 4D avec 4D en mode local et 4D Server. Par défaut, la valeur est 80\. -**Description** : Démarrage ou arrêt de l'enregistrement des échanges entre 4D et le serveur POP3, lorsqu'un objet *transporteur* est traité par *POP3\_transporteur.getMail( )* ou *POP3\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (pas d'enregistrement des échanges POP3). Lorsque ce mécanisme est activé, un fichier d'historique est créé dans le dossier Logs de la base. Il est nommé 4DPOP3Log\_X.txt, *où N* est le numéro séquentiel de l'historique. Une fois qu'un fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre *valeur*. Par défaut, tous les fichiers sont conservés, mais vous pouvez gérer le nombre de fichier à conserver à l'aide du paramètre Circular log limitation. Pour plus d'informations sur les fichiers 4DPOP3Log\_X.txt, veuillez consulter la section *Description des fichiers d'historique*. +Le numéro de port TCP est défini dans la page “Web/Configuration” de la boîte de dialogue des Propriétés de la base. Vous pouvez utiliser les constantes du thème *Numéros de port TCP* pour le paramètre *valeur*. +Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fusionnés avec 4D Desktop (pas d’accès au mode Développement). Pour plus d’informations sur le numéro de port TCP, reportez-vous à la section *Paramétrages du serveur Web*. -### Is host database writable (117) -**Note :** Vous pouvez utiliser ce sélecteur uniquement avec la commande [Get database parameter](get-database-parameter.md) et sa valeur ne peut pas être définie. -**Portée** : Application 4D +### Query by formula joins (49) -**Description** : Retourne 1 si le fichier de structure ou le fichier de projet de l'hôte est en écriture, et retourne 0 s'il est en lecture seule. +**Portée** :Process courant + **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 (utiliser paramétrages de la base), 1 (toujours utiliser les liens auto) ou 2 (utiliser les jointures SQL si possible). -### IMAP Log (119) +**Description** : Mode de fonctionnement des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) relatif à l’utilisation de "jointures SQL". -**Thread-safe** : Yes +Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, ces commandes effectuent des jointures sur le modèle des jointures SQL. Ce mécanisme permet de modifier la sélection d’une table en fonction d’une recherche effectuée sur une autre table sans que les tables soient reliées par un lien automatique (condition nécessaire dans les versions précédentes de 4D). -**Portée** : 4D local, 4D Server +Le sélecteur Query by formula joins vous permet de définir le mode de fonctionnement des commandes de recherche par formule pour le process courant : -**Conservé entre deux sessions :** Non +0 : utiliser les paramètres courants de la base (valeur par défaut). Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, les "jointures SQL" sont toujours activées pour les recherches par formule. Dans les bases de données converties, ce mécanisme est inactivé par défaut pour des raisons des compatibilité mais peut être mis en oeuvre via une préférence.1 : toujours utiliser les liens auto (= fonctionnement des versions précédentes de 4D). Dans ce mode, un lien est nécessaire pour définir la sélection d’une table en fonction de recherches effectuées dans une autre table. 4D n’effectue pas de "jointures SQL".2 : utiliser les jointures SQL si possible (= fonctionnement par défaut des bases créées en version 11.2 et suivantes de 4D v11 SQL). Dans ce mode, 4D établit des "jointures SQL" pour les recherches par formule lorsque la formule s’y prête (à deux exceptions près, voir la description de la commande commandes [QUERY BY FORMULA](query-by-formula.md) ou [QUERY SELECTION BY FORMULA](query-selection-by-formula.md). **Note :** Avec 4D en mode distant, les "jointures SQL" ne peuvent être utilisées que si les formules sont exécutées sur le serveur (elles doivent avoir accès aux enregistrements). Pour configurer le lieu d'exécution des formules, reportez-vous aux sélecteurs 46 et 47. -**Valeurs possibles :** 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, ajouté au nom du fichier). Par défaut, la valeur est 0 (échanges IMAP non enregistrés). -**Description :** Démarre ou stoppe l'enregistrement des échanges entre 4D et le serveur IMAP, lorsqu'un objet transporteur est traité via *IMAP\_transporteur.getMail( )* ou *IMAP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (échanges non enregistrés). Lorsque ce mécanisme est activé, un fichier journal est créé dans le dossier Journaux de la base de données. Il est nommé 4DIMAPLog\_N.txt, où N est le numéro séquentiel du journal. Une fois que le fichier 4DIMAPLog a atteint une taille de 10 Mo, il est fermé et un nouveau est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre value. Par défaut, tous les fichiers sont conservés, mais vous pouvez contrôler le nombre de fichiers à conserver en utilisant le paramètre Circular log limitation. -Pour plus d'informations sur les fichiers 4DIMAPLog\_N.txt, reportez-vous à la section *Description des fichiers d'historique*. +### Query by formula on server (46) +**Portée** :Table et process courants -### Libzip version (120) + **Conservé** **entre deux sessions** : Non -**Portée :** Machine 4D courante + **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -**Conservé entre deux sessions :** n/a +**Description** : Emplacement de l’exécution des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) pour la *table* passée en paramètre. -**Description :** Retourne le numéro de version de la bibliothèque libzip dans l'application 4D sur la machine courante. (Lecture seule) +Dans le cadre de l’exploitation d’une base en client-serveur, les commandes de recherche "par formule" peuvent exécutées soit sur le serveur soit sur le client : +dans les bases de données créées à partir de 4D v11 SQL, ces commandes sont exécutées sur le serveur. dans les bases de données converties, ces commandes sont exécutées sur le client, comme dans les versions précédentes de 4D.dans les bases de données converties, une préférence spécifique permet de modifier globalement le lieu d’exécution de ces commandes.Cette différence de lieu d’exécution influe sur les performances de l’application (l’exécution sur le serveur est généralement plus rapide) mais également sur la programmation. En effet, la valeur des composantes de la formule (notamment les variables appelées via une méthode) diffère suivant le contexte d’exécution. Vous pouvez utiliser ce sélecteur pour adapter ponctuellement le fonctionnement de votre application. + +Si vous passez 0 dans le paramètre *valeur*, l’emplacement d’exécution des commandes de recherche "par formule" dépendra de la configuration de la base : dans les bases créées avec 4D v11 SQL, les commandes seront exécutées sur le serveur. Dans les bases converties, elles seront exécutées sur le client ou le serveur en fonction des préférences de la base. Passez 1 ou 2 dans *valeur* pour "forcer" l’exécution des commandes respectivement sur le client ou sur le serveur. + +Reportez-vous à l'exemple 2. + +**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. -### Pause logging (121) -**Thread-safe** : Yes + +### RDP optimization (133) **Portée :** Application 4D **Conservé entre deux sessions :** Non -**Valeurs possibles :** 0 (reprise des journaux), 1 (pause des journaux) - -Ce sélecteur permet de suspendre/reprendre toutes les opérations de journalisation lancées sur l'application (à l'exception des journaux ORDA). Cette fonction peut être utile pour alléger temporairement les tâches de l'application 4D ou pour planifier les opérations des journaux. +**Valeurs possibles :** `0`: Désactivé (défaut), `1`: Activé. +**Description :** Active ou désactive les optimisations pour RDP (Remote Desktop Protocol). Lorsqu'il est activé, optimise en particulier l'utilisation du presse-papiers partagé dans les connexions RDP, qui peut sinon entraîner des problèmes de blocage. Notez que ce sélecteur désactive la prise en charge dans le presse-papiers des images encodées en tant que data uri dans du texte brut (concerne uniquement les images déposées ou copiées explicitement en tant que texte à partir d'un navigateur). diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md index cc438fb9687309..2a4ca5c7524977 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md @@ -21,26 +21,6 @@ displayed_sidebar: docs *sélecteur* désigne le paramètre à modifier. 4D vous propose des constantes prédéfinies, placées dans le thème *Paramètres de la base*. Le tableau suivant décrit chaque constante et indique sa portée et sa persistance entre deux sessions : -### 4D Server timeout (13) - -**Portée** : Application 4D si *valeur* positive - -**Conservé entre deux sessions** : Oui si *valeur* positive - -**Valeurs possibles** : 0 -> 32 767 - -**Description** : Valeur du délai avant déconnexion (timeout) accordé par 4D Server aux postes clients. - -Par défaut, cette valeur est définie dans la page “Client-Serveur/Options réseau” des Propriétés de la base, sur le poste serveur. - -Le timeout serveur définit la période maximale de non-réponse du client "autorisée", par exemple s'il effectue une opération bloquante. A l'issue de cette période, 4D Server déconnecte le client. Le sélecteur 4D Server timeout vous permet de fixer un nouveau timeout, exprimé en minutes. Cette possibilité permet en particulier d’augmenter la valeur du timeout avant l’exécution sur le poste client d’une opération bloquante de longue durée, risquant d’entraîner une déconnexion ; par exemple, l’impression d’un grand nombre de pages. - -Vous disposez en outre de deux possibilités : - -effectuer une modification globale et permanente : la nouvelle valeur s’applique à tous les process et est stockée dans les préférences de l’application (équivaut à une modification de la valeur dans la boîte de dialogue des Préférences). Pour cela, passez une valeur **positive** dans le paramètre *valeur*.effectuer une modification restreinte et temporaire : la nouvelle valeur ne s’applique qu’au process appelant (les autres process conservant la valeur d’origine), et est abandonnée dès que le serveur reçoit un signe d’activité du poste client — par exemple, dès que l’opération est terminée. Cette possibilité est utile pour gérer les opérations longues initiées par des plug-ins. Pour cela, passez une valeur **négative** dans le paramètre *valeur*. Pour définir une connexion “Ouverte en permanence”, passez 0 dans *valeur*. Reportez-vous à l’exemple 1. - - - ### 4D Remote mode timeout (14) **Portée** (ancienne couche réseau uniquement) : Application 4D si *valeur* positive @@ -53,85 +33,6 @@ Le sélecteur 4D Remote mode timeout n'est pris en compte que si vous utilisez l -### Port ID (15) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Non - -**Description** : Numéro du port TCP utilisé par le serveur Web 4D avec 4D en mode local et 4D Server. Par défaut, la valeur est 80\. - -Le numéro de port TCP est défini dans la page “Web/Configuration” de la boîte de dialogue des Propriétés de la base. Vous pouvez utiliser les constantes du thème *Numéros de port TCP* pour le paramètre *valeur*. - -Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fusionnés avec 4D Desktop (pas d’accès au mode Développement). Pour plus d’informations sur le numéro de port TCP, reportez-vous à la section *Paramétrages du serveur Web*. - - - -### Character set (17) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Oui - -**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Max concurrent Web processes (18) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Oui - -**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Client port ID (22) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 15 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Client character set (24) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 17 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Client max concurrent Web proc (25) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 18 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Maximum Web requests size (27) - -**Portée** : 4D local, 4D Server - - **Conservé** **entre deux sessions** : Oui - - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - ### 4D Server log recording (28) @@ -149,153 +50,131 @@ Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fu -### Client Web log recording (30) - -**Portée** :Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : 0 = Ne pas enregistrer (défaut), 1 = Enregistrer au format CLF, 2 = Enregistrer au format DLF, 3 = Enregistrer au format ELF, 4 = Enregistrer au format WLF. - -**Description** : Démarrage ou arrêt de l’enregistrement des requêtes Web reçues par les serveurs Web de tous les postes clients. Par défaut, la valeur est 0 (pas d’enregistrement des requêtes). - -Le fonctionnement de ce sélecteur est identique à celui du sélecteur 29 ; il s’applique toutefois à tous les postes 4D clients utilisés en tant que serveurs Web. Le fichier “logweb.txt” est dans ce cas automatiquement placé dans le sous-dossier Logs du dossier base 4D client (dossier de cache). Si vous souhaitez définir des valeurs pour certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - +### 4D Server timeout (13) -### Table sequence number (31) +**Portée** : Application 4D si *valeur* positive -**Portée** :Application 4D +**Conservé entre deux sessions** : Oui si *valeur* positive - **Conservé** **entre deux sessions** : Oui +**Valeurs possibles** : 0 -> 32 767 - **Valeurs possibles** : Toute valeur de type entier long. +**Description** : Valeur du délai avant déconnexion (timeout) accordé par 4D Server aux postes clients. -**Description** : Ce sélecteur permet de modifier ou de lire le numéro unique courant des enregistrements de la table passée en paramètre. “Numéro courant” signifie “dernier numéro utilisé” : si vous modifiez cette valeur à l’aide de [SET DATABASE PARAMETER](set-database-parameter.md), le prochain enregistrement sera créé avec comme numéro la valeur passée + 1\. Ce nouveau numéro est, lui, retourné par la commande [Sequence number](sequence-number.md) ainsi que dans tout champ de la table auquel la propriété "Incrémentation auto" a été affectée en Structure ou via le SQL. +Par défaut, cette valeur est définie dans la page “Client-Serveur/Options réseau” des Propriétés de la base, sur le poste serveur. -Par défaut, le numéro unique est défini par 4D et correspond à l’ordre de création des enregistrements. +Le timeout serveur définit la période maximale de non-réponse du client "autorisée", par exemple s'il effectue une opération bloquante. A l'issue de cette période, 4D Server déconnecte le client. Le sélecteur 4D Server timeout vous permet de fixer un nouveau timeout, exprimé en minutes. Cette possibilité permet en particulier d’augmenter la valeur du timeout avant l’exécution sur le poste client d’une opération bloquante de longue durée, risquant d’entraîner une déconnexion ; par exemple, l’impression d’un grand nombre de pages. -Pour des informations supplémentaires, reportez-vous à la documentation de la commande [Sequence number](sequence-number.md). +Vous disposez en outre de deux possibilités : +effectuer une modification globale et permanente : la nouvelle valeur s’applique à tous les process et est stockée dans les préférences de l’application (équivaut à une modification de la valeur dans la boîte de dialogue des Préférences). Pour cela, passez une valeur **positive** dans le paramètre *valeur*.effectuer une modification restreinte et temporaire : la nouvelle valeur ne s’applique qu’au process appelant (les autres process conservant la valeur d’origine), et est abandonnée dès que le serveur reçoit un signe d’activité du poste client — par exemple, dès que l’opération est terminée. Cette possibilité est utile pour gérer les opérations longues initiées par des plug-ins. Pour cela, passez une valeur **négative** dans le paramètre *valeur*. Pour définir une connexion “Ouverte en permanence”, passez 0 dans *valeur*. Reportez-vous à l’exemple 1. -### Debug log recording (34) -**Thread-safe** : Yes -**Portée** : Application 4D +### Auto synchro resources folder (48) -**Conservé** **entre deux sessions** : Non +**Portée** :Poste 4D distant -**Description** : Démarrage ou arrêt de l’enregistrement séquentiel des événements de programmation de 4D dans le fichier *4DDebugLogServer* *\[\_pN\_n\].txt* (où \_n est le numéro de segment du fichier). + **Conservé** **entre deux sessions** : Non -Deux modes sont possibles : + **Valeurs possibles** : 0 (pas de synchronisation), 1 (synchronisation auto) ou 2 (demander). -- Le mode standard propose une vue basique des événements et le fichier est automatiquement placé dans le sous-dossier Logs de la base, à côté du fichier de structure. Les durées d'exécution sont exprimées en millisecondes avec la valeur "< ms" qui s'affiche lorsqu'une opération dure moins d'une milliseconde. +**Description** : Mode de synchronisation dynamique du dossier *Resources* du poste client 4D ayant exécuté la commande avec celui du serveur. -- Le mode tabulé fournit des informations supplémentaires et utilise un format tabulé plus compact dans le fichier. Les durées d'exécution sont exprimées en millisecondes. **Valeurs possibles** : Entier long contenant un champ de bits (bit field) : valeur = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +Lorsque le contenu du dossier *Resources* sur le serveur a été modifié ou qu’une demande de synchronisation a été émise (via l’explorateur de ressources ou suite à l'exécution de la commande [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md)), le serveur notifie les clients connectés. -- Le bit 0 (valeur 1) permet de demander à activer le fichier (à noter que toute autre valeur non nulle l’activera également) +Trois modes de synchronisation sont alors possibles côté client. Le sélecteur Auto synchro resources folder vous permet de définir le mode à utiliser pour le poste client et la session courante : -- Le bit 1 (valeur 2) permet de demander les paramètres d’appel aux commandes et (mode interprété uniquement) aux méthodes. +0 (valeur par défaut) : pas de synchronisation dynamique (la demande de synchronisation est ignorée) 1 : synchronisation dynamique automatique2 : affichage d’une boîte de dialogue sur les postes clients, avec possibilité d’effectuer ou de refuser la synchronisation.Le mode de synchronisation peut également être défini globalement dans les Propriétés de la base. -- Le bit 2 (valeur 4) permet d’activer le format tabulé. -- Le bit 3 (valeur 8) permet de désactiver l’écriture immédiate de chaque opération sur disque (activée par défaut). L’écriture immédiate est moins rapide mais plus efficace par exemple pour rechercher les causes d’un plantage. Si vous désactivez ce mode, le fichier sera généré plus rapidement. -- Le bit 4 (valeur 16) permet de désactiver l’enregistrement des appels de plug-ins (activé par défaut). -- Le bit 5 (valeur 32) permet de désactiver l'enregistrement des fonctions membres. +### Cache flush periodicity (95) -Exemples : +**Thread-safe** : Yes -FIXER PARAMETRE BASE(34;1) // active le mode standard sans les paramètres, avec les durées -FIXER PARAMETRE BASE(34;2) // active le mode standard avec les paramètres et les durées +Portée : 4D local, 4D Server -FIXER PARAMETRE BASE(34;2+4) // active le mode tabulé avec les paramètres et les durées +**Conservé entre deux sessions** : Non -FIXER PARAMETRE BASE(34;0) // désactive le fichier +**Valeurs possibles** : entier long > 1 (secondes) -Dans tout type d'application 4D (4D tous modes, 4D Server, 4D Volume Desktop), en interprété ou en compilé, vous pouvez éviter que le fichier n’enregistre une trop grande quantité d’informations : +**Description** : Permet de lire ou de fixer la valeur courante de périodicité de l'écriture du cache de données sur le disque, exprimée en secondes. Si elle est modifiée, cette valeur remplace la valeur définie par l'option **Ecriture cache toutes les secondes/minutes** dans la [XML DECODE](xml-decode.md) des Propriétés de la base durant la session courante (elle n'est pas stockée dans les Propriétés de la base). -- en restreignant les commandes 4D examinées à l'aide de Log command list (sélecteur 80), ou -- en le restreignant au process courant uniquement à l'aide de Current process debug log recording (sélecteur 111). Cela ajoutera la lettre "p" et le numéro de process au nom du fichier : *4DDebugLog* *\[\_pN\_n\].txt ou* *4DDebugLogServer\[\_pn\_n\].txt.* Pour plus d’informations sur le format et l’exploitation du fichier 4DDebugLog, veuillez consulter la *Description des fichiers d'historique* dans le Manuel Développement. -**Note :** Ce sélecteur est proposé uniquement à des fins de débogage et doit être utilisé avec précaution car il peut entraîner une dégradation des performances de l'application. +### Cache unload minimum size (66) +**Portée** : Application 4D -### Client Server port ID (35) +**Conservé entre deux sessions** : Non -**Portée** :Base de données +**Valeurs possibles** : Entier long positif > 1. - **Conservé** **entre deux sessions** : Oui +**Description** : Taille minimum de mémoire à libérer du cache de la base de données lorsque le moteur a besoin d’y faire de la place pour y allouer un objet (valeur en octets). - **Valeurs possibles** : 0 à 65535 +Ce sélecteur a pour but de permettre de réduire le nombre de libérations de données du cache afin d’obtenir des gains de performances. Vous pouvez faire varier ce paramétrage en fonction de la taille du cache et de celle des blocs de données manipulées dans votre base. -**Description** : Numéro de port TCP sur lequel 4D Server publie la base de données (à destination des postes 4D distants). Par défaut, la valeur est 19813\. +Par défaut, si ce sélecteur n’est pas utilisé, 4D décharge au minimum 10 % du cache en cas de besoin de place. -La personnalisation de cette valeur permet d’utiliser plusieurs applications 4D client-serveur sur la même machine avec le protocole TCP ; dans ce cas, vous devez spécifier un numéro de port différent pour chaque application. -La valeur est stockée dans le fichier de structure de la base. Elle peut être définie avec 4D en mode local mais n’est prise en compte qu’en configuration client-serveur. -Lorsque vous modifiez cette valeur, il est nécessaire de redémarrer le poste serveur afin que la nouvelle valeur soit prise en compte. +### Character set (17) +**Portée** : 4D local, 4D Server -### HTTPS Port ID (39) +**Conservé entre deux sessions** : Oui -**Portée** :4D local, 4D Server +**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - **Conservé** **entre deux sessions** : Oui - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. +### Circular log limitation (90) -### Client HTTPS port ID (40) +**Thread-safe** : Yes -**Portée** :Tous postes 4D distants +**Portée** : 4D local, 4D Server. - **Conservé** **entre deux sessions** : Oui +**Conservé entre deux sessions** : Non - **Valeurs possibles** : 0 à 65535 +**Valeurs possibles** : Toute valeur entière, 0 = conserver tous les journaux -**Description** : Numéro du port TCP utilisé par les serveurs Web des postes clients pour les connexions sécurisées via SSL (protocole HTTPS). Par défaut, la valeur est 443 (valeur standard). +**Description** : Nombre maximum de fichiers à conserver par roulement pour chaque type de journal. Par défaut, les 50 fichiers les plus récents sont conservés. Si vous passez une valeur N, seuls les N fichiers les plus récents seront conservés, le plus ancien étant automatiquement effacé à la création d'un nouveau. Ce paramétrage s'applique à tous les fichiers journaux, notamment le journal des requêtes (sélecteurs 28 et 45), le journal de débogage (sélecteur 34), le journal des événements (sélecteur 79), l'historique des requêtes Web (sélecteurs 29 et 84 de la commande [WEB SET OPTION](web-set-option.md)), etc. -Le fonctionnement de ce sélecteur est identique à celui du sélecteur 39 ; il s’applique toutefois à tous les postes 4D distants utilisés en tant que serveurs Web. Si vous souhaitez modifier la valeur de certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D distant. -### SQL Autocommit (43) +### Client character set (24) -**Portée** :Base de données +**Portée** : Tous postes 4D distants **Conservé** **entre deux sessions** : Oui - **Valeurs possibles** : 0 (désactivation) ou 1 (activation) + **Valeurs possibles** : Voir sélecteur 17 -**Description** : Activation ou désactivation du mode SQL auto-commit. Par défaut, la valeur est 0 (mode désactivé) +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Le mode auto-commit permet de renforcer l'intégrité référentielle de la base. Lorsque ce mode est actif, les requêtes *SELECT*, *INSERT*, *UPDATE*, *DELETE* (SIUD) sont automatiquement incluses dans des transactions lorsqu'elles sont exécutées en-dehors de toute transaction. Ce mode peut également être défini dans les préférences de la base. -### SQL Engine case sensitivity (44) +### Client HTTPS port ID (40) -**Portée** : Base de données +**Portée** :Tous postes 4D distants -**Conservé** **entre deux sessions** : Oui + **Conservé** **entre deux sessions** : Oui -**Valeurs possibles** : 0 (casse non prise en compte) ou 1 (casse prise en compte) + **Valeurs possibles** : 0 à 65535 -**Description** : Activation ou désactivation de la prise en compte de la casse des caractères pour les comparaisons de chaînes effectuées par le moteur SQL. +**Description** : Numéro du port TCP utilisé par les serveurs Web des postes clients pour les connexions sécurisées via SSL (protocole HTTPS). Par défaut, la valeur est 443 (valeur standard). -Par défaut, la valeur est 1 (casse prise en compte) : le moteur SQL établit une différence entre les majuscules et les minuscules ainsi qu'entre les caractères accentués lors des comparaisons de chaînes (tris et recherches). Par exemple "ABC" = "ABC" mais "ABC" # "Abc" et "abc" # "âbc" . Dans certains cas, par exemple pour aligner le fonctionnement du moteur SQL sur celui du moteur 4D, vous pourrez souhaiter que les comparaisons de chaînes ne tiennent pas compte de la casse ("ABC"="Abc"="âbc"). +Le fonctionnement de ce sélecteur est identique à celui du sélecteur 39 ; il s’applique toutefois à tous les postes 4D distants utilisés en tant que serveurs Web. Si vous souhaitez modifier la valeur de certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D distant. -**Attention :** *Étant donné que cette option modifie le fichier de structure de la base de données et tous les process, il est fortement recommandé,* *pour des raisons de performances,* *de la définir uniquement au démarrage de la base de données.* Cette option peut également être définie dans la [CALL SUBFORM CONTAINER](call-subform-container.md) des Propriétés de la base. @@ -315,215 +194,173 @@ Ces fichiers texte stockent dans un format tabulé simple diverses informations -### Query by formula on server (46) -**Portée** :Table et process courants - - **Conservé** **entre deux sessions** : Non +### Client max concurrent Web proc (25) - **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) +**Portée** : Tous postes 4D distants -**Description** : Emplacement de l’exécution des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) pour la *table* passée en paramètre. + **Conservé** **entre deux sessions** : Oui -Dans le cadre de l’exploitation d’une base en client-serveur, les commandes de recherche "par formule" peuvent exécutées soit sur le serveur soit sur le client : + **Valeurs possibles** : Voir sélecteur 18 -dans les bases de données créées à partir de 4D v11 SQL, ces commandes sont exécutées sur le serveur. dans les bases de données converties, ces commandes sont exécutées sur le client, comme dans les versions précédentes de 4D.dans les bases de données converties, une préférence spécifique permet de modifier globalement le lieu d’exécution de ces commandes.Cette différence de lieu d’exécution influe sur les performances de l’application (l’exécution sur le serveur est généralement plus rapide) mais également sur la programmation. En effet, la valeur des composantes de la formule (notamment les variables appelées via une méthode) diffère suivant le contexte d’exécution. Vous pouvez utiliser ce sélecteur pour adapter ponctuellement le fonctionnement de votre application. +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Si vous passez 0 dans le paramètre *valeur*, l’emplacement d’exécution des commandes de recherche "par formule" dépendra de la configuration de la base : dans les bases créées avec 4D v11 SQL, les commandes seront exécutées sur le serveur. Dans les bases converties, elles seront exécutées sur le client ou le serveur en fonction des préférences de la base. Passez 1 ou 2 dans *valeur* pour "forcer" l’exécution des commandes respectivement sur le client ou sur le serveur. -Reportez-vous à l'exemple 2. -**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. +### Client port ID (22) +**Portée** : Tous postes 4D distants -### Order by formula on server (47) + **Conservé** **entre deux sessions** : Oui -**Portée** :Table et process courants + **Valeurs possibles** : Voir sélecteur 15 - **Conservé** **entre deux sessions** : Non +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -**Description** : Emplacement de l’exécution de la commande [ORDER BY FORMULA](order-by-formula.md) pour la table passée en paramètre. -Dans le cadre de l’exploitation d’une base en client-serveur, la commande [ORDER BY FORMULA](order-by-formula.md) peut être exécutée soit sur le serveur soit sur le client. Ce sélecteur permet de définir l’emplacement de l’exécution de cette commande (serveur ou client). Ce mode peut également être défini dans les préférences de la base. Pour plus d’informations, reportez-vous à la description du sélecteur 46, Query by formula on server. - -**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. +### Client Server port ID (35) +**Portée** :Base de données -### Auto synchro resources folder (48) + **Conservé** **entre deux sessions** : Oui -**Portée** :Poste 4D distant + **Valeurs possibles** : 0 à 65535 - **Conservé** **entre deux sessions** : Non +**Description** : Numéro de port TCP sur lequel 4D Server publie la base de données (à destination des postes 4D distants). Par défaut, la valeur est 19813\. - **Valeurs possibles** : 0 (pas de synchronisation), 1 (synchronisation auto) ou 2 (demander). +La personnalisation de cette valeur permet d’utiliser plusieurs applications 4D client-serveur sur la même machine avec le protocole TCP ; dans ce cas, vous devez spécifier un numéro de port différent pour chaque application. -**Description** : Mode de synchronisation dynamique du dossier *Resources* du poste client 4D ayant exécuté la commande avec celui du serveur. +La valeur est stockée dans le fichier de structure de la base. Elle peut être définie avec 4D en mode local mais n’est prise en compte qu’en configuration client-serveur. -Lorsque le contenu du dossier *Resources* sur le serveur a été modifié ou qu’une demande de synchronisation a été émise (via l’explorateur de ressources ou suite à l'exécution de la commande [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md)), le serveur notifie les clients connectés. +Lorsque vous modifiez cette valeur, il est nécessaire de redémarrer le poste serveur afin que la nouvelle valeur soit prise en compte. -Trois modes de synchronisation sont alors possibles côté client. Le sélecteur Auto synchro resources folder vous permet de définir le mode à utiliser pour le poste client et la session courante : -0 (valeur par défaut) : pas de synchronisation dynamique (la demande de synchronisation est ignorée) 1 : synchronisation dynamique automatique2 : affichage d’une boîte de dialogue sur les postes clients, avec possibilité d’effectuer ou de refuser la synchronisation.Le mode de synchronisation peut également être défini globalement dans les Propriétés de la base. +### Client Web log recording (30) -### Query by formula joins (49) +**Portée** :Tous postes 4D distants -**Portée** :Process courant + **Conservé** **entre deux sessions** : Oui - **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 = Ne pas enregistrer (défaut), 1 = Enregistrer au format CLF, 2 = Enregistrer au format DLF, 3 = Enregistrer au format ELF, 4 = Enregistrer au format WLF. - **Valeurs possibles** : 0 (utiliser paramétrages de la base), 1 (toujours utiliser les liens auto) ou 2 (utiliser les jointures SQL si possible). +**Description** : Démarrage ou arrêt de l’enregistrement des requêtes Web reçues par les serveurs Web de tous les postes clients. Par défaut, la valeur est 0 (pas d’enregistrement des requêtes). -**Description** : Mode de fonctionnement des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) relatif à l’utilisation de "jointures SQL". +Le fonctionnement de ce sélecteur est identique à celui du sélecteur 29 ; il s’applique toutefois à tous les postes 4D clients utilisés en tant que serveurs Web. Le fichier “logweb.txt” est dans ce cas automatiquement placé dans le sous-dossier Logs du dossier base 4D client (dossier de cache). Si vous souhaitez définir des valeurs pour certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, ces commandes effectuent des jointures sur le modèle des jointures SQL. Ce mécanisme permet de modifier la sélection d’une table en fonction d’une recherche effectuée sur une autre table sans que les tables soient reliées par un lien automatique (condition nécessaire dans les versions précédentes de 4D). -Le sélecteur Query by formula joins vous permet de définir le mode de fonctionnement des commandes de recherche par formule pour le process courant : -0 : utiliser les paramètres courants de la base (valeur par défaut). Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, les "jointures SQL" sont toujours activées pour les recherches par formule. Dans les bases de données converties, ce mécanisme est inactivé par défaut pour des raisons des compatibilité mais peut être mis en oeuvre via une préférence.1 : toujours utiliser les liens auto (= fonctionnement des versions précédentes de 4D). Dans ce mode, un lien est nécessaire pour définir la sélection d’une table en fonction de recherches effectuées dans une autre table. 4D n’effectue pas de "jointures SQL".2 : utiliser les jointures SQL si possible (= fonctionnement par défaut des bases créées en version 11.2 et suivantes de 4D v11 SQL). Dans ce mode, 4D établit des "jointures SQL" pour les recherches par formule lorsque la formule s’y prête (à deux exceptions près, voir la description de la commande commandes [QUERY BY FORMULA](query-by-formula.md) ou [QUERY SELECTION BY FORMULA](query-selection-by-formula.md). **Note :** Avec 4D en mode distant, les "jointures SQL" ne peuvent être utilisées que si les formules sont exécutées sur le serveur (elles doivent avoir accès aux enregistrements). Pour configurer le lieu d'exécution des formules, reportez-vous aux sélecteurs 46 et 47. +### Current process debug log recording (111) +**Portée :** Application 4D -### HTTP compression level (50) +**Conservé entre deux sessions :** Non -**Portée** : Application 4D +**Description** : Démarrage ou arrêt de l'enregistrement séquentiel des événements de programmation **du process courant** dans un fichier d'historique séparé. Cet historique est semblable à Debug log recording (sélecteur 34) mais il ne porte que sur le process courant. Le nom du fichier d'historique inclut la lettre "p" et le numéro du process : 4DDebugLog\[\_p*N*_*n*].txt, où N est l'ID unique du process. Pour plus d'informations sur ce format et sur l'utilisation du fichier *4DDebugLog*, veuillez consulter la *Description des fichiers d'historique* dans le Mode Développement. - **Conservé** **entre deux sessions** : Non +**Notes :** Ce sélecteur est fourni uniquement à des fins de débogage et doit être utilisé avec précaution. Plus particulièrement, il ne doit pas être utilisé en production, étant donné qu'il peut avoir une incidence sur les performances de l'application. Vous pouvez utiliser simultanément les sélecteurs Debug log recording et Current process debug log recording, auquel cas les actions liées au process courant ne seront pas enregistrées dans le fichier d'historique principal. - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### HTTP compression threshold (51) +### Dates inside objects (85) -**Portée** : Application 4D +**Portée** : Process courant **Conservé** **entre deux sessions** : Non - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Server base process stack size (53) - -**Portée** : 4D Server + **Valeurs possibles** : String type without time zone (0), String type with time zone (1), Date type (2) (défaut) - **Conservé** **entre deux sessions** : Non +**Description** : Définit la manière dont les dates sont stockées dans les objets, ainsi que leur traitement en cas d'importation/exportation en JSON. - **Valeurs possibles** : Entier long positif. +Lorsque ce sélecteur vaut Date type (valeur par défaut dans les bases créées à compter de 4D v17), les dates 4D sont stockées avec le type date dans les objets, en tenant compte des paramétrages de date locaux. Lorsqu'ils sont exportés au format JSON, les attributs date seront convertis en chaînes qui ne contiennent pas l'heure (**Note :** ce paramétrage peut être défini au niveau des paramètres de la base via l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la *Page Compatibilité*). -**Description** : Taille de la pile allouée à chaque process système préemptif sur le serveur, exprimée en octets. La taille par défaut est déterminée par le système. +Si vous passez String type with time zone dans ce sélecteur, les dates 4D seront converties en chaînes ISO en tenant compte du fuseau horaire local. Par exemple, la conversion de la date !23/08/2013! donne "2013-08-22T22:00:00Z" au format JSON lorsque l’opération est effectuée en France en été (GMT+2). Ce principe est conforme au fonctionnement standard de JavaScript. Ce fonctionnement peut être source d’erreurs si vous souhaitez envoyer des valeurs de date en JSON à une personne qui se trouve dans un autre fuseau horaire. C’est le cas par exemple pour l’exportation d’une table avec [Selection to JSON](selection-to-json.md) en France destiné à être réimporté aux USA avec [JSON TO SELECTION](json-to-selection.md). Par défaut, les dates étant réinterprétées dans chaque fuseau horaire, les valeurs stockées dans la base seront différentes. Dans ce cas, vous pouvez modifier le mode de conversion des dates afin qu’il ne tienne pas compte du fuseau horaire en passant String type without time zone dans ce sélecteur. La conversion de la date !23/08/2013! donnera alors "2013-08-23T00:00:00Z" dans tous les cas. -Les process système préemptifs (process de type Process base 4D client) sont chargés de contrôler les process clients 4D principaux. La taille allouée par défaut à la pile de chaque process préemptif permet un bon confort d’exécution mais peut s’avérer conséquente lorsque de très nombreux process (plusieurs centaines) sont créés. -A des fins d’optimisation, cette taille peut être diminuée sensiblement si les opérations effectuées par la base s'y prêtent (par exemple si la base n’effectue pas de tris sur de grosses quantités d’enregistrements). Des valeurs de 512 voire de 256 Ko sont possibles. Attention, le sous-dimensionnement de la pile est critique et peut nuire au fonctionnement de 4D Server. Le réglage de ce paramètre est à effectuer avec précaution et doit tenir compte des conditions d’utilisation de la base (nombre d’enregistrements, types d’opérations, etc.). Pour être pris en compte, ce paramétrage doit être exécuté sur le poste serveur (par exemple dans la méthode base Sur démarrage serveur). +### Debug log recording (34) -### Idle connections timeout (54) +**Thread-safe** : Yes -**Portée** : Application 4D sauf si valeur négative +**Portée** : Application 4D **Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. +**Description** : Démarrage ou arrêt de l’enregistrement séquentiel des événements de programmation de 4D dans le fichier *4DDebugLogServer* *\[\_pN\_n\].txt* (où \_n est le numéro de segment du fichier). -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +Deux modes sont possibles : -Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. +- Le mode standard propose une vue basique des événements et le fichier est automatiquement placé dans le sous-dossier Logs de la base, à côté du fichier de structure. Les durées d'exécution sont exprimées en millisecondes avec la valeur "< ms" qui s'affiche lorsqu'une opération dure moins d'une milliseconde. -Si vous passez une valeur positive dans *valeur*, elle s'applique à toutes les nouvelles connexions dans tous les process. Si vous passez une valeur négative, elle s’applique aux connexions ouvertes dans le process courant. Si vous passez 0, les connexions inactives ne sont pas soumises à un timeout. +- Le mode tabulé fournit des informations supplémentaires et utilise un format tabulé plus compact dans le fichier. Les durées d'exécution sont exprimées en millisecondes. **Valeurs possibles** : Entier long contenant un champ de bits (bit field) : valeur = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +- Le bit 0 (valeur 1) permet de demander à activer le fichier (à noter que toute autre valeur non nulle l’activera également) +- Le bit 1 (valeur 2) permet de demander les paramètres d’appel aux commandes et (mode interprété uniquement) aux méthodes. +- Le bit 2 (valeur 4) permet d’activer le format tabulé. +- Le bit 3 (valeur 8) permet de désactiver l’écriture immédiate de chaque opération sur disque (activée par défaut). L’écriture immédiate est moins rapide mais plus efficace par exemple pour rechercher les causes d’un plantage. Si vous désactivez ce mode, le fichier sera généré plus rapidement. +- Le bit 4 (valeur 16) permet de désactiver l’enregistrement des appels de plug-ins (activé par défaut). +- Le bit 5 (valeur 32) permet de désactiver l'enregistrement des fonctions membres. -Ce paramètre doit être défini côté client. Généralement, vous n'aurez pas besoin de modifier cette valeur. +Exemples : +```4d +SET DATABASE PARAMETER(34;1) // active le mode standard sans les paramètres, avec les durées +SET DATABASE PARAMETER(34;2) // active le mode standard avec les paramètres et les durées +SET DATABASE PARAMETER(34;2+4) // active le mode tabulé avec les paramètres et les durées +SET DATABASE PARAMETER(34;0) // désactive le fichier +``` +Dans tout type d'application 4D (4D tous modes, 4D Server, 4D Volume Desktop), en interprété ou en compilé, vous pouvez éviter que le fichier n’enregistre une trop grande quantité d’informations : -### PHP interpreter IP address (55) +- en restreignant les commandes 4D examinées à l'aide de Log command list (sélecteur 80), ou +- en le restreignant au process courant uniquement à l'aide de Current process debug log recording (sélecteur 111). Cela ajoutera la lettre "p" et le numéro de process au nom du fichier : *4DDebugLog* *\[\_pN\_n\].txt ou* *4DDebugLogServer\[\_pn\_n\].txt.* Pour plus d’informations sur le format et l’exploitation du fichier 4DDebugLog, veuillez consulter la *Description des fichiers d'historique* dans le Manuel Développement. -**Portée** :Application 4D +**Note :** Ce sélecteur est proposé uniquement à des fins de débogage et doit être utilisé avec précaution car il peut entraîner une dégradation des performances de l'application. - **Conservé** **entre deux sessions** : Non -**Valeurs** : Chaîne formatée en IPv4 (par exemple "127.0.0.1") ou en IPv6 (par exemple "2001:0db8:0000:0000:0000:ff00:0042:8329") -**Description** : Adresse IP utilisée localement par 4D pour communiquer avec l’interpéteur PHP via fastcgi. Par défaut, la valeur est "127.0.0.1" (les adresses au format IPv6 sont prises en charge à compter de 4D v16R4).. Cette adresse doit correspondre à la machine sur laquelle se trouve 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. -Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. +### Diagnostic log level (86) +**Thread-safe** : Yes +**Portée :** Application 4D -### PHP interpreter port (56) +**Conservé entre deux sessions :** Non -**Portée** :Application 4D +**Description :** Niveau(x) de messages à inclure dans le journal de diagnostic lorsqu'il est activé (voir le sélecteur Diagnostic log recording). Chaque niveau désigne une catégorie de messages de diagnostic et inclut automatiquement la ou les catégories plus importantes. Pour une description des catégories, consultez la section *Log niveau diagnostic* sur le site *developer.4d.com*. - **Conservé** **entre deux sessions** : Non +**Valeurs possibles** **:** L'une des constantes suivantes (Log info par défaut): +- Log trace: active ERROR, WARN, INFO, DEBUG, TRACE (niveau le plus détaillé) +- Log debug: active ERROR, WARN, INFO, DEBUG +- Log info: active ERROR, WARN, INFO (par défaut) +- Log warn: active ERROR, WARN Log error: active ERROR (niveau le moins détaillé) -**Valeurs** : Valeur de type entier long positif. Par défaut, la valeur est 8002\. -**Description** : Numéro du port TCP utilisé par l’interpréteur PHP de 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. +### Diagnostic log recording (79) -### SSL cipher list (64) +**Thread-safe** : Yes **Portée** : Application 4D -**Conservé entre deux sessions** : Non - -**Valeurs possibles** : Suite de chaînes séparées par des deux-points. - -**Description :** Liste de chiffrement (*cipher list*) utilisée par 4D pour le protocole sécurisé. Cette liste permet de modifier la priorité des algorithmes de chiffrement mis en oeuvre par 4D. - -Par exemple, vous pouvez passer la chaîne suivante dans le paramètre *valeur* : "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Pour une description complète de la syntaxe de la liste de chiffrement, reportez-vous à la *page ciphers sur le site de OpenSSL*. - -Ce paramétrage s'applique au principal serveur Web (à l'exclusion des objets Web server), au serveur SQL, aux connexions client/serveur ainsi qu'au client HTTP et aux commandes 4D faisant appel au protocole sécurisé. Ce paramétrage est temporaire (il n'est pas maintenu entre les sessions). - -Lorsque la liste de chiffrement a été modifiée, vous devez redémarrer le serveur concerné pour que le nouveau paramétrage soit pris en compte. - -Pour réinitialiser la liste de chiffrement à sa valeur par défaut (stockée en dur dans le fichier SLI), appelez la commande [SET DATABASE PARAMETER](set-database-parameter.md) et passez une chaîne vide ("") dans le paramètre *valeur*. - -**Note :** Avec la commande [Get database parameter](get-database-parameter.md), la liste de chiffrement est retournée dans le paramètre optionnel *valeurAlpha* et le paramètre de retour vaut toujours 0. - - - -### Cache unload minimum size (66) - -**Portée** : Application 4D - -**Conservé entre deux sessions** : Non - -**Valeurs possibles** : Entier long positif > 1. - -**Description** : Taille minimum de mémoire à libérer du cache de la base de données lorsque le moteur a besoin d’y faire de la place pour y allouer un objet (valeur en octets). - -Ce sélecteur a pour but de permettre de réduire le nombre de libérations de données du cache afin d’obtenir des gains de performances. Vous pouvez faire varier ce paramétrage en fonction de la taille du cache et de celle des blocs de données manipulées dans votre base. - -Par défaut, si ce sélecteur n’est pas utilisé, 4D décharge au minimum 10 % du cache en cas de besoin de place. - - - -### Direct2D status (69) - -**Portée**: Application 4D - -**Conservé entre deux sessions** : Non - -**Description** : Mode d’activation de l’implémentation de Direct2D sous Windows. +**Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Une des constantes suivantes (mode 3 par défaut) : +**Valeurs possibles** : 0 ou 1 (0 = ne pas enregistrer, 1 = enregistrer) -Direct2D disabled (0) : le mode Direct2D n’est pas activé, la base fonctionne dans le mode précédent (GDI/GDIPlus). +**Description** : Démarrage ou arrêt de l’enregistrement du fichier de diagnostic de 4D. Par défaut, la valeur est 0 (pas d’enregistrement). -Direct2D hardware (1) : utilisation de Direct2D en contexte graphique matériel dans toute l’application 4D. Si ce contexte n’est pas disponible, utilisation du contexte graphique Direct2D logiciel. +4D vous permet d’enregistrer de manière continue dans un fichier de diagnostic un ensemble d’événements relatifs au fonctionnement interne de l’application. Les informations contenues dans ce fichier sont destinées à la mise au point des applications 4D et pourront être analysées avec l’aide des services techniques de 4D (pour plus d'informations, reportez-vous à la section *Description des fichiers d'historique* sur *developer.4d.com*). Lorsque vous passez 1 dans ce sélecteur, un fichier de diagnostic est automatiquement créé (ou ouvert) dans le dossier **Logs** de la base. Le fichier est nommé *4DDiagnosticLog\_N*.txt (ou *4DDiagnosticLogServer\_N.*txt s'il est généré sur le serveur). Une fois que le fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel N incrémenté. -Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation de Direct2D en contexte graphique logiciel dans toute l’application 4D. +A noter qu’il est possible d’inclure des informations personnalisées dans ce fichier à l’aide de la commande [LOG EVENT](log-event.md). -**Attention :* Ce sélecteur est fourni uniquement à des fins de débogage. Etant donné que plusieurs fonctionnalités de 4D dépendent de Direct2D, il ne doit pas être désactivé dans les applications déployées. Seul le mode par défaut (Direct2D software) est approuvé pour les applications déployées.* @@ -536,221 +373,214 @@ Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation d **Valeurs possibles** : 0, 1, 2, 3, 4 ou 5 (cf. valeurs du sélecteur 69). La valeur retournée dépend de la disponibilité de Direct2D, du matériel et de la qualité de la prise en charge de Direct2D par le système d’exploitation. Par exemple, si vous exécutez : - +```4d  SET DATABASE PARAMETER(;Direct2D Hardware)  $mode:=Get database parameter() +``` - sur Windows 7 et suivants, *$mode* vaudra 1 si le système détecte un matériel compatible Direct2D, sinon *$mode* vaudra 3 (contexte logiciel). - - sur Windows Vista, *$mode* vaudra 1 si le système détecte un matériel compatible Direct2D, sinon *$mode* vaudra 0 (désactivation de Direct2D). - - sur Windows XP, *$mode* vaudra toujours 0 (incompatibilité avec Direct2D). -### Diagnostic log recording (79) -**Thread-safe** : Yes +### Direct2D status (69) -**Portée** : Application 4D +**Portée**: Application 4D -**Conservé** **entre deux sessions** : Non +**Conservé entre deux sessions** : Non -**Valeurs possibles** : 0 ou 1 (0 = ne pas enregistrer, 1 = enregistrer) +**Description** : Mode d’activation de l’implémentation de Direct2D sous Windows. -**Description** : Démarrage ou arrêt de l’enregistrement du fichier de diagnostic de 4D. Par défaut, la valeur est 0 (pas d’enregistrement). +**Valeurs possibles** : Une des constantes suivantes (mode 3 par défaut) : -4D vous permet d’enregistrer de manière continue dans un fichier de diagnostic un ensemble d’événements relatifs au fonctionnement interne de l’application. Les informations contenues dans ce fichier sont destinées à la mise au point des applications 4D et pourront être analysées avec l’aide des services techniques de 4D (pour plus d'informations, reportez-vous à la section *Description des fichiers d'historique* sur *developer.4d.com*). Lorsque vous passez 1 dans ce sélecteur, un fichier de diagnostic est automatiquement créé (ou ouvert) dans le dossier **Logs** de la base. Le fichier est nommé *4DDiagnosticLog\_N*.txt (ou *4DDiagnosticLogServer\_N.*txt s'il est généré sur le serveur). Une fois que le fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel N incrémenté. +Direct2D disabled (0) : le mode Direct2D n’est pas activé, la base fonctionne dans le mode précédent (GDI/GDIPlus). -A noter qu’il est possible d’inclure des informations personnalisées dans ce fichier à l’aide de la commande [LOG EVENT](log-event.md). +Direct2D hardware (1) : utilisation de Direct2D en contexte graphique matériel dans toute l’application 4D. Si ce contexte n’est pas disponible, utilisation du contexte graphique Direct2D logiciel. +Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation de Direct2D en contexte graphique logiciel dans toute l’application 4D. +**Attention :* Ce sélecteur est fourni uniquement à des fins de débogage. Etant donné que plusieurs fonctionnalités de 4D dépendent de Direct2D, il ne doit pas être désactivé dans les applications déployées. Seul le mode par défaut (Direct2D software) est approuvé pour les applications déployées.* -### Log command list (80) -**Portée** : Application 4D -**Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Chaîne contenant la liste des numéros des commandes 4D à enregistrer (séparées par des points-virgules), ou "all" pour enregistrer toutes les commande, ou "" (chaîne vide) pour n’enregistrer aucune commande, ou le préfixe "-" pour exclure des commandes spécifiques. +### HTTP compression level (50) -**Description** : Liste des commandes 4D à enregistrer dans le fichier de débogage ou à exclure du fichier de débogage (cf. sélecteur 34, Debug log recording). Par défaut, toutes les commandes 4D sont enregistrées. Ce sélecteur vous permet de restreindre la quantité d’informations stockées dans le fichier de débogage en limitant les commandes 4D dont vous souhaitez enregistrer l’exécution ou bien que vous souhaitez exclure de l'enregistrement. Par exemple, vous pouvez écrire :  SET DATABASE PARAMETER(Log command list;"277;341") //enregistrer uniquement les commandes CHERCHER et CHERCHER DANS SELECTION  OU  SET DATABASE PARAMETER(Log command list;"-1666;-323") //exclure les commandes FIXER ALIAS UTILISATEUR et ENDORMIR PROCESS de l'enregistrement +**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Spellchecker (81) -**Portée** : Application 4D - **Conservé** **entre deux sessions** : Non - **Valeurs possibles** : 0 (défaut) = correcteur macOS (Hunspell désactivé), 1 = correcteur Hunspell actif. +### HTTP compression threshold (51) -**Description** : Permet d’activer le correcteur orthographique Hunspell sous macOS. Par défaut, sur cette plate-forme le correcteur natif est activé. Vous pouvez souhaiter utiliser le correcteur Hunspell par exemple pour unifier l’interface de vos applications multiplates-formes (sous Windows, seul le correcteur Hunspell est disponible). Pour plus d’informations, reportez-vous à la page *Correction orthographique*. +**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Dates inside objects (85) -**Portée** : Process courant - **Conservé** **entre deux sessions** : Non - **Valeurs possibles** : String type without time zone (0), String type with time zone (1), Date type (2) (défaut) +### HTTPS Port ID (39) -**Description** : Définit la manière dont les dates sont stockées dans les objets, ainsi que leur traitement en cas d'importation/exportation en JSON. +**Portée** :4D local, 4D Server -Lorsque ce sélecteur vaut Date type (valeur par défaut dans les bases créées à compter de 4D v17), les dates 4D sont stockées avec le type date dans les objets, en tenant compte des paramétrages de date locaux. Lorsqu'ils sont exportés au format JSON, les attributs date seront convertis en chaînes qui ne contiennent pas l'heure (**Note :** ce paramétrage peut être défini au niveau des paramètres de la base via l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la *Page Compatibilité*). + **Conservé** **entre deux sessions** : Oui -Si vous passez String type with time zone dans ce sélecteur, les dates 4D seront converties en chaînes ISO en tenant compte du fuseau horaire local. Par exemple, la conversion de la date !23/08/2013! donne "2013-08-22T22:00:00Z" au format JSON lorsque l’opération est effectuée en France en été (GMT+2). Ce principe est conforme au fonctionnement standard de JavaScript. Ce fonctionnement peut être source d’erreurs si vous souhaitez envoyer des valeurs de date en JSON à une personne qui se trouve dans un autre fuseau horaire. C’est le cas par exemple pour l’exportation d’une table avec [Selection to JSON](selection-to-json.md) en France destiné à être réimporté aux USA avec [JSON TO SELECTION](json-to-selection.md). Par défaut, les dates étant réinterprétées dans chaque fuseau horaire, les valeurs stockées dans la base seront différentes. Dans ce cas, vous pouvez modifier le mode de conversion des dates afin qu’il ne tienne pas compte du fuseau horaire en passant String type without time zone dans ce sélecteur. La conversion de la date !23/08/2013! donnera alors "2013-08-23T00:00:00Z" dans tous les cas. + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Diagnostic log level (86) -**Thread-safe** : Yes +### Idle connections timeout (54) -**Portée :** Application 4D +**Portée** : Application 4D sauf si valeur négative -**Conservé entre deux sessions :** Non +**Conservé** **entre deux sessions** : Non -**Description :** Niveau(x) de messages à inclure dans le journal de diagnostic lorsqu'il est activé (voir le sélecteur Diagnostic log recording). Chaque niveau désigne une catégorie de messages de diagnostic et inclut automatiquement la ou les catégories plus importantes. Pour une description des catégories, consultez la section *Log niveau diagnostic* sur le site *developer.4d.com*. +**Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Valeurs possibles** **:** L'une des constantes suivantes (Log info par défaut): Log trace: active ERROR, WARN, INFO, DEBUG, TRACE (niveau le plus détaillé) Log debug: active ERROR, WARN, INFO, DEBUG Log info: active ERROR, WARN, INFO (par défaut) Log warn: active ERROR, WARN Log error: active ERROR (niveau le moins détaillé) +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. +Si vous passez une valeur positive dans *valeur*, elle s'applique à toutes les nouvelles connexions dans tous les process. Si vous passez une valeur négative, elle s’applique aux connexions ouvertes dans le process courant. Si vous passez 0, les connexions inactives ne sont pas soumises à un timeout. -### Use legacy network layer (87) +Ce paramètre doit être défini côté client. Généralement, vous n'aurez pas besoin de modifier cette valeur. -**Portée :** 4D local, 4D Server. -**Conservé entre deux sessions :** Oui -**Description :** Fixe ou lit le statut courant de l'ancienne couche réseau pour les connexions client/serveur. L'ancienne couche réseau est obsolète à compter de 4D v14 R5 et doit être progressivement remplacée dans vos applications par la couche réseau *ServerNet*. *ServerNet* sera nécessaire dans les prochaines versions de 4D afin de permettre aux applications 4D de tirer parti des futures évolutions réseau. Pour des raisons de compatibilité, l'ancienne couche réseau est toujours prise en charge afin de faciliter la transition des applications existantes (elle reste utilisée par défaut dans les applications converties depuis des versions antérieures à la v14 R5). Passez 1 dans ce paramètre pour utiliser l'ancienne couche réseau (et désactiver *ServerNet*), et passez 0 pour désactiver l'ancienne couche réseau (et utiliser *ServerNet*). -Cette propriété peut également être définie à l'aide de l'option "Utiliser l'ancienne couche réseau" présente dans la *Page Compatibilité* des Propriétés de la base (voir section *Options réseau et Client-serveur* ; dans cette section, vous trouverez aussi un paragraphe décrivant la stratégie de migration. Nous vous recommandons d'activer *ServerNet* dès que possible). +### IMAP Log (119) -Il est nécessaire de redémarrer l'application pour que ce paramètre soit pris en compte. +**Thread-safe** : Yes -**Valeurs possibles :** 0 ou 1 (0 = ne pas utiliser l'ancienne couche, 1 = utiliser l'ancienne couche) +**Portée** : 4D local, 4D Server -**Valeur par défaut :** 0 dans les applications créées avec 4D v14 R5 ou suivantes, 1 dans les applications converties depuis 4D v14 R4 ou précédentes. +**Conservé entre deux sessions :** Non +**Valeurs possibles :** 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, ajouté au nom du fichier). Par défaut, la valeur est 0 (échanges IMAP non enregistrés). +**Description :** Démarre ou stoppe l'enregistrement des échanges entre 4D et le serveur IMAP, lorsqu'un objet transporteur est traité via *IMAP\_transporteur.getMail( )* ou *IMAP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (échanges non enregistrés). Lorsque ce mécanisme est activé, un fichier journal est créé dans le dossier Journaux de la base de données. Il est nommé 4DIMAPLog\_N.txt, où N est le numéro séquentiel du journal. Une fois que le fichier 4DIMAPLog a atteint une taille de 10 Mo, il est fermé et un nouveau est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre value. Par défaut, tous les fichiers sont conservés, mais vous pouvez contrôler le nombre de fichiers à conserver en utilisant le paramètre Circular log limitation. -### SQL Server Port ID (88) +Pour plus d'informations sur les fichiers 4DIMAPLog\_N.txt, reportez-vous à la section *Description des fichiers d'historique*. -**Portée** : 4D mode local et 4D Server. -**Conservé entre deux sessions** : Oui -**Description** : Permet de lire ou de fixer le numéro du port TCP utilisé par le serveur SQL intégré de 4D en mode local ou de 4D Server. Par défaut, la valeur est 19812\. Le numéro de port TCP peut également être défini dans la page "SQL" de la boîte de dialogue des Propriétés de la base. Lorsque ce sélecteur est utilisé en écriture, la propriété de la base est mise à jour. -**Valeurs possibles** : 0 à 65535. +### Is current database a project (112) -**Valeur par défaut** : 19812 +**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +**Portée** : Application 4D +**Description** : Retourne 1 si l'architecture de la base courante est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. -### Circular log limitation (90) -**Thread-safe** : Yes -**Portée** : 4D local, 4D Server. -**Conservé entre deux sessions** : Non +### Is host database a project (113) -**Valeurs possibles** : Toute valeur entière, 0 = conserver tous les journaux +**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. -**Description** : Nombre maximum de fichiers à conserver par roulement pour chaque type de journal. Par défaut, les 50 fichiers les plus récents sont conservés. Si vous passez une valeur N, seuls les N fichiers les plus récents seront conservés, le plus ancien étant automatiquement effacé à la création d'un nouveau. Ce paramétrage s'applique à tous les fichiers journaux, notamment le journal des requêtes (sélecteurs 28 et 45), le journal de débogage (sélecteur 34), le journal des événements (sélecteur 79), l'historique des requêtes Web (sélecteurs 29 et 84 de la commande [WEB SET OPTION](web-set-option.md)), etc. +**Portée** : Application 4D +**Description** : Retourne 1 si l'architecture de la base hôte est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. -### Number of formulas in cache (92) -**Portée** : Application 4D. -**Conservé entre deux sessions** : Non +### Is host database writable (117) -**Valeurs possibles** : Entier long positif +**Note :** Vous pouvez utiliser ce sélecteur uniquement avec la commande [Get database parameter](get-database-parameter.md) et sa valeur ne peut pas être définie. -**Valeur par défaut** : 0 (pas de cache) +**Portée** : Application 4D -**Description** : Fixe ou lit le nombre maximum de formules à conserver dans le cache des formules, qui est utilisé par la commande [EXECUTE FORMULA](execute-formula.md). Cette limite est appliquée à tous les process, mais chaque process dispose de son propre cache de formules. Placer des formules dans le cache accélère l'exécution de la commande [EXECUTE FORMULA](execute-formula.md) en mode compilé puisque chaque formule en cache est tokenisée une seule fois dans ce cas. Lorsque vous modifiez la valeur du cache, son contenu est réinitialisé même si la nouvelle valeur est supérieure à la précédente. Une fois le nombre maximum de formules en cache atteint, toute nouvelle formule exécutée écrase la plus ancienne dans le cache (mode FIFO). Ce paramètre est pris en compte uniquement dans les bases ou les composants compilés. +**Description** : Retourne 1 si le fichier de structure ou le fichier de projet de l'hôte est en écriture, et retourne 0 s'il est en lecture seule. -### OpenSSL version (94) -**Portée** : Tous postes 4D +### Libldap version (114) - **Conservé entre deux sessions** : Non +**Portée** : Machine 4D courante -**Description**: Retourne le numéro de version de la bibliothèque OpenSSL utilisée sur le poste. (Lecture seule) +**Conservé entre deux sessions** : Non +**Description** : Retourne le numéro de version de la bibliothèque LDAP dans l'application 4D sur la machine locale. (Lecture seule) -### Cache flush periodicity (95) -**Thread-safe** : Yes +### Libsasl version (115) -Portée : 4D local, 4D Server +**Portée** : Machine 4D courante **Conservé entre deux sessions** : Non -**Valeurs possibles** : entier long > 1 (secondes) +**Description** : Retourne le numéro de version de la bibliothèque SASL dans l'application 4D sur la machine locale. (Lecture seule) -**Description** : Permet de lire ou de fixer la valeur courante de périodicité de l'écriture du cache de données sur le disque, exprimée en secondes. Si elle est modifiée, cette valeur remplace la valeur définie par l'option **Ecriture cache toutes les secondes/minutes** dans la [XML DECODE](xml-decode.md) des Propriétés de la base durant la session courante (elle n'est pas stockée dans les Propriétés de la base). -### Remote connection sleep timeout (98) +### Libzip version (120) -**Portée** : Application 4D Server +**Portée :** Machine 4D courante -**Conservé entre deux sessions** : Non +**Conservé entre deux sessions :** n/a -**Valeurs possibles** : Entier long positif +**Description :** Retourne le numéro de version de la bibliothèque libzip dans l'application 4D sur la machine courante. (Lecture seule) -**Description** : Timeout de la connexion à distance en veille, exprimé en secondes. Par défaut, la valeur est 172800 (48 heures). Le délai de mise en veille est appliqué une fois qu'une machine exécutant une application distante 4D est passée en mode veille. Dans ce cas, sa session est maintenue par 4D Server (voir la description de la fonctionnalité ). 4D Server vérifie toutes les 5 minutes si un 4D distant en veille a dépassé le délai de veille, auquel cas il est abandonné. Ainsi, la durée de veille maximale autorisée est la *timeout mise en veille actuel + 300*. Dans certains cas, vous souhaiterez peut-être modifier le délai de mise en veille, pour libérer, par exemple, les enregistrements/licences verrouillés plus rapidement. -### Tips enabled (101) +### Log command list (80) -**Portée :** Application 4D +**Portée** : Application 4D -**Conservé entre deux sessions :** Non +**Conservé** **entre deux sessions** : Non -**Valeurs possibles :** 0 = message d'aide désactivés, 1 = messages d'aide activés (défaut) +**Valeurs possibles** : Chaîne contenant la liste des numéros des commandes 4D à enregistrer (séparées par des points-virgules), ou "all" pour enregistrer toutes les commande, ou "" (chaîne vide) pour n’enregistrer aucune commande, ou le préfixe "-" pour exclure des commandes spécifiques. -**Description :** Définit ou récupère l'état d'affichage des messages d'aide dans l'application 4D. Par défaut, les messages d'aide sont activées. +**Description** : Liste des commandes 4D à enregistrer dans le fichier de débogage ou à exclure du fichier de débogage (cf. sélecteur 34, Debug log recording). Par défaut, toutes les commandes 4D sont enregistrées. Ce sélecteur vous permet de restreindre la quantité d’informations stockées dans le fichier de débogage en limitant les commandes 4D dont vous souhaitez enregistrer l’exécution ou bien que vous souhaitez exclure de l'enregistrement. Par exemple, vous pouvez écrire : - Notez que ce paramètre fixe tous les messages d'aides, c'est-à-dire les messages d'aide des formulaires et ceux de l'éditeur du mode Développement. +```4d +//enregistrer uniquement les commandes QUERY et QUERY SELECTION +SET DATABASE PARAMETER(Log command list;"277;341")  +``` +OU +```4d +//exclure les commandes SET USER ALIAS et DELAY PROCESS de l'enregistrement +SET DATABASE PARAMETER(Log command list;"-1666;-323")  +``` -### Tips delay (102) +### Max concurrent Web processes (18) -**Portée :** Application 4D +**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non +**Conservé entre deux sessions** : Oui -**Valeurs possibles :** entier long >= 0 (ticks) +**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -**Description :** délai avant que les messages d'aide soient affichés une fois que le curseur de la souris est arrêté sur les objets avec message d'aide. La valeur est exprimée en ticks (1/60e de seconde). La valeur par défaut est de 45 ticks (0,75 seconde). -### Tips duration (103) +### Maximum Web requests size (27) -**Portée :** Application 4D +**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non + **Conservé** **entre deux sessions** : Oui -**Valeurs possibles :** entier long >= 60 (ticks) + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -**Description :** Durée maximum de l'affichage du message d'aide. La valeur est exprimée en ticks (1/60e de seconde). La valeur par défaut est de 720 ticks (12 secondes). @@ -772,101 +602,89 @@ Portée : 4D local, 4D Server -### User param value (108) - -**Portée :** 4D local, 4D Server - -**Conservé entre deux sessions :** Non - -**Valeurs possibles** : Toute chaîne personnalisée - -**Description :** Chaîne personnalisée passée d'une session à la suivante lorsque l'application 4D est redémarrée. Ce sélecteur est utile dans les cas où des tests unitaires automatisés nécessitent que les applications redémarrent avec des paramètres différents. - -Avec [SET DATABASE PARAMETER](set-database-parameter.md), définit une nouvelle valeur qui sera disponible dans la prochaine base de données ouverte après le redémarrage manuel de 4D or l'utilisation des commandes [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), ou [RESTART 4D](restart-4d.md). Avec [Get database parameter](get-database-parameter.md), retourne la valeur User param courante définie à l'aide d'une ligne de commande (voir *Interface ligne de commande*), un fichier .4DLink (voir *Utiliser un fichier 4DLink*), ou un appel à [SET DATABASE PARAMETER](set-database-parameter.md) durant la session précédente. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) fixe une User param value avant d'appeler [OPEN DATABASE](open-database.md) à l'aide d'un fichier .4DLink contenant également un attribut xml user-param xml, 4D ne tient compte que du paramètre fourni par [SET DATABASE PARAMETER](set-database-parameter.md). +### Number of formulas in cache (92) +**Portée** : Application 4D. -### Times inside objects (109) +**Conservé entre deux sessions** : Non -Portée : 4D local, 4D Server (tous process) +**Valeurs possibles** : Entier long positif -**Conservé entre deux sessions** : Oui +**Valeur par défaut** : 0 (pas de cache) - **Valeurs possibles** : Times in seconds (0) (défaut), Times in milliseconds (1) +**Description** : Fixe ou lit le nombre maximum de formules à conserver dans le cache des formules, qui est utilisé par la commande [EXECUTE FORMULA](execute-formula.md). Cette limite est appliquée à tous les process, mais chaque process dispose de son propre cache de formules. Placer des formules dans le cache accélère l'exécution de la commande [EXECUTE FORMULA](execute-formula.md) en mode compilé puisque chaque formule en cache est tokenisée une seule fois dans ce cas. Lorsque vous modifiez la valeur du cache, son contenu est réinitialisé même si la nouvelle valeur est supérieure à la précédente. Une fois le nombre maximum de formules en cache atteint, toute nouvelle formule exécutée écrase la plus ancienne dans le cache (mode FIFO). Ce paramètre est pris en compte uniquement dans les bases ou les composants compilés. -**Description** : Définit la manière dont les valeurs de type heure sont converties et stockées dans les propriétés d'objets et les éléments de collections, ainsi que lors des imports/exports JSON et via les zones Web. Par défaut, à compter de 4D v17, les heures sont converties et stockées en nombre de secondes. -Dans les versions précédentes, les heures étaient converties et stockées en nombre de millisecondes dans ces contextes. L'utilisation de ce sélecteur peut vous aider lors de la migration de vos applications en rétablissant le fonctionnement précédent lorsque c'est nécessaire. -**Note** : Les méthodes ORDA et le moteur SQL ne tiennent pas compte de ce paramétrage, ces deux environnements manipulent toujours les heures en nombre de secondes. +### OpenSSL version (94) +**Portée** : Tous postes 4D -### SMTP Log (110) + **Conservé entre deux sessions** : Non -**Thread-safe** : Yes +**Description**: Retourne le numéro de version de la bibliothèque OpenSSL utilisée sur le poste. (Lecture seule) -Portée : 4D local, 4D Server* -* **Conservé entre deux sessions** : Non -**Valeurs possibles** : 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, accolé au nom du fichier). Par défaut, la valeur est 0 (pas d'enregistrement des échanges SMTP). -**Description** : Démarrage ou arrêt de l'enregistrement des échanges entre 4D et le serveur SMTP, lorsqu'un objet *transporteur* est traité par *transporteur.send( )* ou *SMTP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (pas d'enregistrement des échanges SMTP). Lorsque ce mécanisme est activé, un fichier d'historique est créé dans le dossier Logs de la base. Il est nommé 4DSMTPLog\_X.txt, *où N* est le numéro séquentiel de l'historique. Une fois qu'un fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre *valeur*. Par défaut, tous les fichiers sont conservés, mais vous pouvez gérer le nombre de fichier à conserver à l'aide du paramètre Circular log limitation. +### Order by formula on server (47) -Pour plus d'informations sur les fichiers 4DSMTPLog\_X.txt, veuillez consulter la section *Description des fichiers d'historique*. +**Portée** :Table et process courants + **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -### Current process debug log recording (111) +**Description** : Emplacement de l’exécution de la commande [ORDER BY FORMULA](order-by-formula.md) pour la table passée en paramètre. -**Portée :** Application 4D +Dans le cadre de l’exploitation d’une base en client-serveur, la commande [ORDER BY FORMULA](order-by-formula.md) peut être exécutée soit sur le serveur soit sur le client. Ce sélecteur permet de définir l’emplacement de l’exécution de cette commande (serveur ou client). Ce mode peut également être défini dans les préférences de la base. Pour plus d’informations, reportez-vous à la description du sélecteur 46, Query by formula on server. -**Conservé entre deux sessions :** Non +**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. -**Description** : Démarrage ou arrêt de l'enregistrement séquentiel des événements de programmation **du process courant** dans un fichier d'historique séparé. Cet historique est semblable à Debug log recording (sélecteur 34) mais il ne porte que sur le process courant. Le nom du fichier d'historique inclut la lettre "p" et le numéro du process : 4DDebugLog\[\_p*N*_*n*].txt, où N est l'ID unique du process. Pour plus d'informations sur ce format et sur l'utilisation du fichier *4DDebugLog*, veuillez consulter la *Description des fichiers d'historique* dans le Mode Développement. -**Notes :** Ce sélecteur est fourni uniquement à des fins de débogage et doit être utilisé avec précaution. Plus particulièrement, il ne doit pas être utilisé en production, étant donné qu'il peut avoir une incidence sur les performances de l'application. Vous pouvez utiliser simultanément les sélecteurs Debug log recording et Current process debug log recording, auquel cas les actions liées au process courant ne seront pas enregistrées dans le fichier d'historique principal. +### Pause logging (121) -### Is current database a project (112) +**Thread-safe** : Yes -**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +**Portée :** Application 4D -**Portée** : Application 4D +**Conservé entre deux sessions :** Non -**Description** : Retourne 1 si l'architecture de la base courante est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. +**Valeurs possibles :** 0 (reprise des journaux), 1 (pause des journaux) +Ce sélecteur permet de suspendre/reprendre toutes les opérations de journalisation lancées sur l'application (à l'exception des journaux ORDA). Cette fonction peut être utile pour alléger temporairement les tâches de l'application 4D ou pour planifier les opérations des journaux. -### Is host database a project (113) -**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +### PHP interpreter IP address (55) -**Portée** : Application 4D +**Portée** :Application 4D -**Description** : Retourne 1 si l'architecture de la base hôte est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. + **Conservé** **entre deux sessions** : Non +**Valeurs** : Chaîne formatée en IPv4 (par exemple "127.0.0.1") ou en IPv6 (par exemple "2001:0db8:0000:0000:0000:ff00:0042:8329") +**Description** : Adresse IP utilisée localement par 4D pour communiquer avec l’interpéteur PHP via fastcgi. Par défaut, la valeur est "127.0.0.1" (les adresses au format IPv6 sont prises en charge à compter de 4D v16R4).. Cette adresse doit correspondre à la machine sur laquelle se trouve 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. -### Libldap version (114) +Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. -**Portée** : Machine 4D courante -**Conservé entre deux sessions** : Non -**Description** : Retourne le numéro de version de la bibliothèque LDAP dans l'application 4D sur la machine locale. (Lecture seule) +### PHP interpreter port (56) +**Portée** :Application 4D -### Libsasl version (115) + **Conservé** **entre deux sessions** : Non -**Portée** : Machine 4D courante +**Valeurs** : Valeur de type entier long positif. Par défaut, la valeur est 8002\. -**Conservé entre deux sessions** : Non +**Description** : Numéro du port TCP utilisé par l’interpréteur PHP de 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. -**Description** : Retourne le numéro de version de la bibliothèque SASL dans l'application 4D sur la machine locale. (Lecture seule) @@ -884,64 +702,61 @@ Portée : 4D local, 4D Server -### Is host database writable (117) - -**Note :** Vous pouvez utiliser ce sélecteur uniquement avec la commande [Get database parameter](get-database-parameter.md) et sa valeur ne peut pas être définie. -**Portée** : Application 4D +### Port ID (15) -**Description** : Retourne 1 si le fichier de structure ou le fichier de projet de l'hôte est en écriture, et retourne 0 s'il est en lecture seule. +**Portée** : 4D local, 4D Server +**Conservé entre deux sessions** : Non +**Description** : Numéro du port TCP utilisé par le serveur Web 4D avec 4D en mode local et 4D Server. Par défaut, la valeur est 80\. -### IMAP Log (119) +Le numéro de port TCP est défini dans la page “Web/Configuration” de la boîte de dialogue des Propriétés de la base. Vous pouvez utiliser les constantes du thème *Numéros de port TCP* pour le paramètre *valeur*. -**Thread-safe** : Yes +Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fusionnés avec 4D Desktop (pas d’accès au mode Développement). Pour plus d’informations sur le numéro de port TCP, reportez-vous à la section *Paramétrages du serveur Web*. -**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non -**Valeurs possibles :** 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, ajouté au nom du fichier). Par défaut, la valeur est 0 (échanges IMAP non enregistrés). -**Description :** Démarre ou stoppe l'enregistrement des échanges entre 4D et le serveur IMAP, lorsqu'un objet transporteur est traité via *IMAP\_transporteur.getMail( )* ou *IMAP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (échanges non enregistrés). Lorsque ce mécanisme est activé, un fichier journal est créé dans le dossier Journaux de la base de données. Il est nommé 4DIMAPLog\_N.txt, où N est le numéro séquentiel du journal. Une fois que le fichier 4DIMAPLog a atteint une taille de 10 Mo, il est fermé et un nouveau est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre value. Par défaut, tous les fichiers sont conservés, mais vous pouvez contrôler le nombre de fichiers à conserver en utilisant le paramètre Circular log limitation. +### Query by formula joins (49) -Pour plus d'informations sur les fichiers 4DIMAPLog\_N.txt, reportez-vous à la section *Description des fichiers d'historique*. +**Portée** :Process courant + **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 (utiliser paramétrages de la base), 1 (toujours utiliser les liens auto) ou 2 (utiliser les jointures SQL si possible). -### Libzip version (120) +**Description** : Mode de fonctionnement des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) relatif à l’utilisation de "jointures SQL". -**Portée :** Machine 4D courante +Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, ces commandes effectuent des jointures sur le modèle des jointures SQL. Ce mécanisme permet de modifier la sélection d’une table en fonction d’une recherche effectuée sur une autre table sans que les tables soient reliées par un lien automatique (condition nécessaire dans les versions précédentes de 4D). -**Conservé entre deux sessions :** n/a +Le sélecteur Query by formula joins vous permet de définir le mode de fonctionnement des commandes de recherche par formule pour le process courant : -**Description :** Retourne le numéro de version de la bibliothèque libzip dans l'application 4D sur la machine courante. (Lecture seule) +0 : utiliser les paramètres courants de la base (valeur par défaut). Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, les "jointures SQL" sont toujours activées pour les recherches par formule. Dans les bases de données converties, ce mécanisme est inactivé par défaut pour des raisons des compatibilité mais peut être mis en oeuvre via une préférence.1 : toujours utiliser les liens auto (= fonctionnement des versions précédentes de 4D). Dans ce mode, un lien est nécessaire pour définir la sélection d’une table en fonction de recherches effectuées dans une autre table. 4D n’effectue pas de "jointures SQL".2 : utiliser les jointures SQL si possible (= fonctionnement par défaut des bases créées en version 11.2 et suivantes de 4D v11 SQL). Dans ce mode, 4D établit des "jointures SQL" pour les recherches par formule lorsque la formule s’y prête (à deux exceptions près, voir la description de la commande commandes [QUERY BY FORMULA](query-by-formula.md) ou [QUERY SELECTION BY FORMULA](query-selection-by-formula.md). **Note :** Avec 4D en mode distant, les "jointures SQL" ne peuvent être utilisées que si les formules sont exécutées sur le serveur (elles doivent avoir accès aux enregistrements). Pour configurer le lieu d'exécution des formules, reportez-vous aux sélecteurs 46 et 47. -### Pause logging (121) -**Thread-safe** : Yes +### Query by formula on server (46) -**Portée :** Application 4D +**Portée** :Table et process courants -**Conservé entre deux sessions :** Non + **Conservé** **entre deux sessions** : Non -**Valeurs possibles :** 0 (reprise des journaux), 1 (pause des journaux) + **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -Ce sélecteur permet de suspendre/reprendre toutes les opérations de journalisation lancées sur l'application (à l'exception des journaux ORDA). Cette fonction peut être utile pour alléger temporairement les tâches de l'application 4D ou pour planifier les opérations des journaux. +**Description** : Emplacement de l’exécution des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) pour la *table* passée en paramètre. +Dans le cadre de l’exploitation d’une base en client-serveur, les commandes de recherche "par formule" peuvent exécutées soit sur le serveur soit sur le client : -### TCPUDP log recording (131) +dans les bases de données créées à partir de 4D v11 SQL, ces commandes sont exécutées sur le serveur. dans les bases de données converties, ces commandes sont exécutées sur le client, comme dans les versions précédentes de 4D.dans les bases de données converties, une préférence spécifique permet de modifier globalement le lieu d’exécution de ces commandes.Cette différence de lieu d’exécution influe sur les performances de l’application (l’exécution sur le serveur est généralement plus rapide) mais également sur la programmation. En effet, la valeur des composantes de la formule (notamment les variables appelées via une méthode) diffère suivant le contexte d’exécution. Vous pouvez utiliser ce sélecteur pour adapter ponctuellement le fonctionnement de votre application. -**Portée :** Application 4D +Si vous passez 0 dans le paramètre *valeur*, l’emplacement d’exécution des commandes de recherche "par formule" dépendra de la configuration de la base : dans les bases créées avec 4D v11 SQL, les commandes seront exécutées sur le serveur. Dans les bases converties, elles seront exécutées sur le client ou le serveur en fonction des préférences de la base. Passez 1 ou 2 dans *valeur* pour "forcer" l’exécution des commandes respectivement sur le client ou sur le serveur. -**Conservé entre deux sessions :** Non +Reportez-vous à l'exemple 2. -**Valeurs possibles :** `0`: Enregistrement désactivé (défaut), `1`: Enregistrement activé. +**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. -**Description :** Active ou désactive le fichier `4DTCPUDPLog.txt` pour l'enregistrement des événements TCP et UDP. diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md index 408256a6f92ce3..e8375316d3a77b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md @@ -22,26 +22,6 @@ displayed_sidebar: docs Le paramètre *sélecteur* désigne le paramètre à lire. 4D vous propose les constantes prédéfinies suivantes, placées dans le thème *Paramètres de la base* : -### 4D Server timeout (13) - -**Portée** : Application 4D si *valeur* positive - -**Conservé entre deux sessions** : Oui si *valeur* positive - -**Valeurs possibles** : 0 -> 32 767 - -**Description** : Valeur du délai avant déconnexion (timeout) accordé par 4D Server aux postes clients. - -Par défaut, cette valeur est définie dans la page “Client-Serveur/Options réseau” des Propriétés de la base, sur le poste serveur. - -Le timeout serveur définit la période maximale de non-réponse du client "autorisée", par exemple s'il effectue une opération bloquante. A l'issue de cette période, 4D Server déconnecte le client. Le sélecteur 4D Server timeout vous permet de fixer un nouveau timeout, exprimé en minutes. Cette possibilité permet en particulier d’augmenter la valeur du timeout avant l’exécution sur le poste client d’une opération bloquante de longue durée, risquant d’entraîner une déconnexion ; par exemple, l’impression d’un grand nombre de pages. - -Vous disposez en outre de deux possibilités : - -effectuer une modification globale et permanente : la nouvelle valeur s’applique à tous les process et est stockée dans les préférences de l’application (équivaut à une modification de la valeur dans la boîte de dialogue des Préférences). Pour cela, passez une valeur **positive** dans le paramètre *valeur*.effectuer une modification restreinte et temporaire : la nouvelle valeur ne s’applique qu’au process appelant (les autres process conservant la valeur d’origine), et est abandonnée dès que le serveur reçoit un signe d’activité du poste client — par exemple, dès que l’opération est terminée. Cette possibilité est utile pour gérer les opérations longues initiées par des plug-ins. Pour cela, passez une valeur **négative** dans le paramètre *valeur*. Pour définir une connexion “Ouverte en permanence”, passez 0 dans *valeur*. Reportez-vous à l’exemple 1. - - - ### 4D Remote mode timeout (14) **Portée** (ancienne couche réseau uniquement) : Application 4D si *valeur* positive @@ -54,85 +34,6 @@ Le sélecteur 4D Remote mode timeout n'est pris en compte que si vous utilisez l -### Port ID (15) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Non - -**Description** : Numéro du port TCP utilisé par le serveur Web 4D avec 4D en mode local et 4D Server. Par défaut, la valeur est 80\. - -Le numéro de port TCP est défini dans la page “Web/Configuration” de la boîte de dialogue des Propriétés de la base. Vous pouvez utiliser les constantes du thème *Numéros de port TCP* pour le paramètre *valeur*. - -Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fusionnés avec 4D Desktop (pas d’accès au mode Développement). Pour plus d’informations sur le numéro de port TCP, reportez-vous à la section *Paramétrages du serveur Web*. - - - -### Character set (17) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Oui - -**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Max concurrent Web processes (18) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Oui - -**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Client port ID (22) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 15 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Client character set (24) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 17 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Client max concurrent Web proc (25) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 18 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Maximum Web requests size (27) - -**Portée** : 4D local, 4D Server - - **Conservé** **entre deux sessions** : Oui - - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - ### 4D Server log recording (28) @@ -150,153 +51,131 @@ Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fu -### Client Web log recording (30) - -**Portée** :Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : 0 = Ne pas enregistrer (défaut), 1 = Enregistrer au format CLF, 2 = Enregistrer au format DLF, 3 = Enregistrer au format ELF, 4 = Enregistrer au format WLF. - -**Description** : Démarrage ou arrêt de l’enregistrement des requêtes Web reçues par les serveurs Web de tous les postes clients. Par défaut, la valeur est 0 (pas d’enregistrement des requêtes). - -Le fonctionnement de ce sélecteur est identique à celui du sélecteur 29 ; il s’applique toutefois à tous les postes 4D clients utilisés en tant que serveurs Web. Le fichier “logweb.txt” est dans ce cas automatiquement placé dans le sous-dossier Logs du dossier base 4D client (dossier de cache). Si vous souhaitez définir des valeurs pour certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - +### 4D Server timeout (13) -### Table sequence number (31) +**Portée** : Application 4D si *valeur* positive -**Portée** :Application 4D +**Conservé entre deux sessions** : Oui si *valeur* positive - **Conservé** **entre deux sessions** : Oui +**Valeurs possibles** : 0 -> 32 767 - **Valeurs possibles** : Toute valeur de type entier long. +**Description** : Valeur du délai avant déconnexion (timeout) accordé par 4D Server aux postes clients. -**Description** : Ce sélecteur permet de modifier ou de lire le numéro unique courant des enregistrements de la table passée en paramètre. “Numéro courant” signifie “dernier numéro utilisé” : si vous modifiez cette valeur à l’aide de [SET DATABASE PARAMETER](set-database-parameter.md), le prochain enregistrement sera créé avec comme numéro la valeur passée + 1\. Ce nouveau numéro est, lui, retourné par la commande [Sequence number](sequence-number.md) ainsi que dans tout champ de la table auquel la propriété "Incrémentation auto" a été affectée en Structure ou via le SQL. +Par défaut, cette valeur est définie dans la page “Client-Serveur/Options réseau” des Propriétés de la base, sur le poste serveur. -Par défaut, le numéro unique est défini par 4D et correspond à l’ordre de création des enregistrements. +Le timeout serveur définit la période maximale de non-réponse du client "autorisée", par exemple s'il effectue une opération bloquante. A l'issue de cette période, 4D Server déconnecte le client. Le sélecteur 4D Server timeout vous permet de fixer un nouveau timeout, exprimé en minutes. Cette possibilité permet en particulier d’augmenter la valeur du timeout avant l’exécution sur le poste client d’une opération bloquante de longue durée, risquant d’entraîner une déconnexion ; par exemple, l’impression d’un grand nombre de pages. -Pour des informations supplémentaires, reportez-vous à la documentation de la commande [Sequence number](sequence-number.md). +Vous disposez en outre de deux possibilités : +effectuer une modification globale et permanente : la nouvelle valeur s’applique à tous les process et est stockée dans les préférences de l’application (équivaut à une modification de la valeur dans la boîte de dialogue des Préférences). Pour cela, passez une valeur **positive** dans le paramètre *valeur*.effectuer une modification restreinte et temporaire : la nouvelle valeur ne s’applique qu’au process appelant (les autres process conservant la valeur d’origine), et est abandonnée dès que le serveur reçoit un signe d’activité du poste client — par exemple, dès que l’opération est terminée. Cette possibilité est utile pour gérer les opérations longues initiées par des plug-ins. Pour cela, passez une valeur **négative** dans le paramètre *valeur*. Pour définir une connexion “Ouverte en permanence”, passez 0 dans *valeur*. Reportez-vous à l’exemple 1. -### Debug log recording (34) -**Thread-safe** : Yes -**Portée** : Application 4D +### Auto synchro resources folder (48) -**Conservé** **entre deux sessions** : Non +**Portée** :Poste 4D distant -**Description** : Démarrage ou arrêt de l’enregistrement séquentiel des événements de programmation de 4D dans le fichier *4DDebugLogServer* *\[\_pN\_n\].txt* (où \_n est le numéro de segment du fichier). + **Conservé** **entre deux sessions** : Non -Deux modes sont possibles : + **Valeurs possibles** : 0 (pas de synchronisation), 1 (synchronisation auto) ou 2 (demander). -- Le mode standard propose une vue basique des événements et le fichier est automatiquement placé dans le sous-dossier Logs de la base, à côté du fichier de structure. Les durées d'exécution sont exprimées en millisecondes avec la valeur "< ms" qui s'affiche lorsqu'une opération dure moins d'une milliseconde. +**Description** : Mode de synchronisation dynamique du dossier *Resources* du poste client 4D ayant exécuté la commande avec celui du serveur. -- Le mode tabulé fournit des informations supplémentaires et utilise un format tabulé plus compact dans le fichier. Les durées d'exécution sont exprimées en millisecondes. **Valeurs possibles** : Entier long contenant un champ de bits (bit field) : valeur = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +Lorsque le contenu du dossier *Resources* sur le serveur a été modifié ou qu’une demande de synchronisation a été émise (via l’explorateur de ressources ou suite à l'exécution de la commande [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md)), le serveur notifie les clients connectés. -- Le bit 0 (valeur 1) permet de demander à activer le fichier (à noter que toute autre valeur non nulle l’activera également) +Trois modes de synchronisation sont alors possibles côté client. Le sélecteur Auto synchro resources folder vous permet de définir le mode à utiliser pour le poste client et la session courante : -- Le bit 1 (valeur 2) permet de demander les paramètres d’appel aux commandes et (mode interprété uniquement) aux méthodes. +0 (valeur par défaut) : pas de synchronisation dynamique (la demande de synchronisation est ignorée) 1 : synchronisation dynamique automatique2 : affichage d’une boîte de dialogue sur les postes clients, avec possibilité d’effectuer ou de refuser la synchronisation.Le mode de synchronisation peut également être défini globalement dans les Propriétés de la base. -- Le bit 2 (valeur 4) permet d’activer le format tabulé. -- Le bit 3 (valeur 8) permet de désactiver l’écriture immédiate de chaque opération sur disque (activée par défaut). L’écriture immédiate est moins rapide mais plus efficace par exemple pour rechercher les causes d’un plantage. Si vous désactivez ce mode, le fichier sera généré plus rapidement. -- Le bit 4 (valeur 16) permet de désactiver l’enregistrement des appels de plug-ins (activé par défaut). -- Le bit 5 (valeur 32) permet de désactiver l'enregistrement des fonctions membres. +### Cache flush periodicity (95) -Exemples : +**Thread-safe** : Yes -FIXER PARAMETRE BASE(34;1) // active le mode standard sans les paramètres, avec les durées -FIXER PARAMETRE BASE(34;2) // active le mode standard avec les paramètres et les durées +Portée : 4D local, 4D Server -FIXER PARAMETRE BASE(34;2+4) // active le mode tabulé avec les paramètres et les durées +**Conservé entre deux sessions** : Non -FIXER PARAMETRE BASE(34;0) // désactive le fichier +**Valeurs possibles** : entier long > 1 (secondes) -Dans tout type d'application 4D (4D tous modes, 4D Server, 4D Volume Desktop), en interprété ou en compilé, vous pouvez éviter que le fichier n’enregistre une trop grande quantité d’informations : +**Description** : Permet de lire ou de fixer la valeur courante de périodicité de l'écriture du cache de données sur le disque, exprimée en secondes. Si elle est modifiée, cette valeur remplace la valeur définie par l'option **Ecriture cache toutes les secondes/minutes** dans la [XML DECODE](xml-decode.md) des Propriétés de la base durant la session courante (elle n'est pas stockée dans les Propriétés de la base). -- en restreignant les commandes 4D examinées à l'aide de Log command list (sélecteur 80), ou -- en le restreignant au process courant uniquement à l'aide de Current process debug log recording (sélecteur 111). Cela ajoutera la lettre "p" et le numéro de process au nom du fichier : *4DDebugLog* *\[\_pN\_n\].txt ou* *4DDebugLogServer\[\_pn\_n\].txt.* Pour plus d’informations sur le format et l’exploitation du fichier 4DDebugLog, veuillez consulter la *Description des fichiers d'historique* dans le Manuel Développement. -**Note :** Ce sélecteur est proposé uniquement à des fins de débogage et doit être utilisé avec précaution car il peut entraîner une dégradation des performances de l'application. +### Cache unload minimum size (66) +**Portée** : Application 4D -### Client Server port ID (35) +**Conservé entre deux sessions** : Non -**Portée** :Base de données +**Valeurs possibles** : Entier long positif > 1. - **Conservé** **entre deux sessions** : Oui +**Description** : Taille minimum de mémoire à libérer du cache de la base de données lorsque le moteur a besoin d’y faire de la place pour y allouer un objet (valeur en octets). - **Valeurs possibles** : 0 à 65535 +Ce sélecteur a pour but de permettre de réduire le nombre de libérations de données du cache afin d’obtenir des gains de performances. Vous pouvez faire varier ce paramétrage en fonction de la taille du cache et de celle des blocs de données manipulées dans votre base. -**Description** : Numéro de port TCP sur lequel 4D Server publie la base de données (à destination des postes 4D distants). Par défaut, la valeur est 19813\. +Par défaut, si ce sélecteur n’est pas utilisé, 4D décharge au minimum 10 % du cache en cas de besoin de place. -La personnalisation de cette valeur permet d’utiliser plusieurs applications 4D client-serveur sur la même machine avec le protocole TCP ; dans ce cas, vous devez spécifier un numéro de port différent pour chaque application. -La valeur est stockée dans le fichier de structure de la base. Elle peut être définie avec 4D en mode local mais n’est prise en compte qu’en configuration client-serveur. -Lorsque vous modifiez cette valeur, il est nécessaire de redémarrer le poste serveur afin que la nouvelle valeur soit prise en compte. +### Character set (17) +**Portée** : 4D local, 4D Server -### HTTPS Port ID (39) +**Conservé entre deux sessions** : Oui -**Portée** :4D local, 4D Server +**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - **Conservé** **entre deux sessions** : Oui - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. +### Circular log limitation (90) -### Client HTTPS port ID (40) +**Thread-safe** : Yes -**Portée** :Tous postes 4D distants +**Portée** : 4D local, 4D Server. - **Conservé** **entre deux sessions** : Oui +**Conservé entre deux sessions** : Non - **Valeurs possibles** : 0 à 65535 +**Valeurs possibles** : Toute valeur entière, 0 = conserver tous les journaux -**Description** : Numéro du port TCP utilisé par les serveurs Web des postes clients pour les connexions sécurisées via SSL (protocole HTTPS). Par défaut, la valeur est 443 (valeur standard). +**Description** : Nombre maximum de fichiers à conserver par roulement pour chaque type de journal. Par défaut, les 50 fichiers les plus récents sont conservés. Si vous passez une valeur N, seuls les N fichiers les plus récents seront conservés, le plus ancien étant automatiquement effacé à la création d'un nouveau. Ce paramétrage s'applique à tous les fichiers journaux, notamment le journal des requêtes (sélecteurs 28 et 45), le journal de débogage (sélecteur 34), le journal des événements (sélecteur 79), l'historique des requêtes Web (sélecteurs 29 et 84 de la commande [WEB SET OPTION](web-set-option.md)), etc. -Le fonctionnement de ce sélecteur est identique à celui du sélecteur 39 ; il s’applique toutefois à tous les postes 4D distants utilisés en tant que serveurs Web. Si vous souhaitez modifier la valeur de certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D distant. -### SQL Autocommit (43) +### Client character set (24) -**Portée** :Base de données +**Portée** : Tous postes 4D distants **Conservé** **entre deux sessions** : Oui - **Valeurs possibles** : 0 (désactivation) ou 1 (activation) + **Valeurs possibles** : Voir sélecteur 17 -**Description** : Activation ou désactivation du mode SQL auto-commit. Par défaut, la valeur est 0 (mode désactivé) +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Le mode auto-commit permet de renforcer l'intégrité référentielle de la base. Lorsque ce mode est actif, les requêtes *SELECT*, *INSERT*, *UPDATE*, *DELETE* (SIUD) sont automatiquement incluses dans des transactions lorsqu'elles sont exécutées en-dehors de toute transaction. Ce mode peut également être défini dans les préférences de la base. -### SQL Engine case sensitivity (44) +### Client HTTPS port ID (40) -**Portée** : Base de données +**Portée** :Tous postes 4D distants -**Conservé** **entre deux sessions** : Oui + **Conservé** **entre deux sessions** : Oui -**Valeurs possibles** : 0 (casse non prise en compte) ou 1 (casse prise en compte) + **Valeurs possibles** : 0 à 65535 -**Description** : Activation ou désactivation de la prise en compte de la casse des caractères pour les comparaisons de chaînes effectuées par le moteur SQL. +**Description** : Numéro du port TCP utilisé par les serveurs Web des postes clients pour les connexions sécurisées via SSL (protocole HTTPS). Par défaut, la valeur est 443 (valeur standard). -Par défaut, la valeur est 1 (casse prise en compte) : le moteur SQL établit une différence entre les majuscules et les minuscules ainsi qu'entre les caractères accentués lors des comparaisons de chaînes (tris et recherches). Par exemple "ABC" = "ABC" mais "ABC" # "Abc" et "abc" # "âbc" . Dans certains cas, par exemple pour aligner le fonctionnement du moteur SQL sur celui du moteur 4D, vous pourrez souhaiter que les comparaisons de chaînes ne tiennent pas compte de la casse ("ABC"="Abc"="âbc"). +Le fonctionnement de ce sélecteur est identique à celui du sélecteur 39 ; il s’applique toutefois à tous les postes 4D distants utilisés en tant que serveurs Web. Si vous souhaitez modifier la valeur de certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D distant. -**Attention :** *Étant donné que cette option modifie le fichier de structure de la base de données et tous les process, il est fortement recommandé,* *pour des raisons de performances,* *de la définir uniquement au démarrage de la base de données.* Cette option peut également être définie dans la [CALL SUBFORM CONTAINER](call-subform-container.md) des Propriétés de la base. @@ -316,215 +195,173 @@ Ces fichiers texte stockent dans un format tabulé simple diverses informations -### Query by formula on server (46) - -**Portée** :Table et process courants - **Conservé** **entre deux sessions** : Non +### Client max concurrent Web proc (25) - **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) +**Portée** : Tous postes 4D distants -**Description** : Emplacement de l’exécution des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) pour la *table* passée en paramètre. + **Conservé** **entre deux sessions** : Oui -Dans le cadre de l’exploitation d’une base en client-serveur, les commandes de recherche "par formule" peuvent exécutées soit sur le serveur soit sur le client : + **Valeurs possibles** : Voir sélecteur 18 -dans les bases de données créées à partir de 4D v11 SQL, ces commandes sont exécutées sur le serveur. dans les bases de données converties, ces commandes sont exécutées sur le client, comme dans les versions précédentes de 4D.dans les bases de données converties, une préférence spécifique permet de modifier globalement le lieu d’exécution de ces commandes.Cette différence de lieu d’exécution influe sur les performances de l’application (l’exécution sur le serveur est généralement plus rapide) mais également sur la programmation. En effet, la valeur des composantes de la formule (notamment les variables appelées via une méthode) diffère suivant le contexte d’exécution. Vous pouvez utiliser ce sélecteur pour adapter ponctuellement le fonctionnement de votre application. +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Si vous passez 0 dans le paramètre *valeur*, l’emplacement d’exécution des commandes de recherche "par formule" dépendra de la configuration de la base : dans les bases créées avec 4D v11 SQL, les commandes seront exécutées sur le serveur. Dans les bases converties, elles seront exécutées sur le client ou le serveur en fonction des préférences de la base. Passez 1 ou 2 dans *valeur* pour "forcer" l’exécution des commandes respectivement sur le client ou sur le serveur. -Reportez-vous à l'exemple 2. -**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. +### Client port ID (22) +**Portée** : Tous postes 4D distants -### Order by formula on server (47) + **Conservé** **entre deux sessions** : Oui -**Portée** :Table et process courants + **Valeurs possibles** : Voir sélecteur 15 - **Conservé** **entre deux sessions** : Non +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -**Description** : Emplacement de l’exécution de la commande [ORDER BY FORMULA](order-by-formula.md) pour la table passée en paramètre. -Dans le cadre de l’exploitation d’une base en client-serveur, la commande [ORDER BY FORMULA](order-by-formula.md) peut être exécutée soit sur le serveur soit sur le client. Ce sélecteur permet de définir l’emplacement de l’exécution de cette commande (serveur ou client). Ce mode peut également être défini dans les préférences de la base. Pour plus d’informations, reportez-vous à la description du sélecteur 46, Query by formula on server. - -**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. +### Client Server port ID (35) +**Portée** :Base de données -### Auto synchro resources folder (48) + **Conservé** **entre deux sessions** : Oui -**Portée** :Poste 4D distant + **Valeurs possibles** : 0 à 65535 - **Conservé** **entre deux sessions** : Non +**Description** : Numéro de port TCP sur lequel 4D Server publie la base de données (à destination des postes 4D distants). Par défaut, la valeur est 19813\. - **Valeurs possibles** : 0 (pas de synchronisation), 1 (synchronisation auto) ou 2 (demander). +La personnalisation de cette valeur permet d’utiliser plusieurs applications 4D client-serveur sur la même machine avec le protocole TCP ; dans ce cas, vous devez spécifier un numéro de port différent pour chaque application. -**Description** : Mode de synchronisation dynamique du dossier *Resources* du poste client 4D ayant exécuté la commande avec celui du serveur. +La valeur est stockée dans le fichier de structure de la base. Elle peut être définie avec 4D en mode local mais n’est prise en compte qu’en configuration client-serveur. -Lorsque le contenu du dossier *Resources* sur le serveur a été modifié ou qu’une demande de synchronisation a été émise (via l’explorateur de ressources ou suite à l'exécution de la commande [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md)), le serveur notifie les clients connectés. +Lorsque vous modifiez cette valeur, il est nécessaire de redémarrer le poste serveur afin que la nouvelle valeur soit prise en compte. -Trois modes de synchronisation sont alors possibles côté client. Le sélecteur Auto synchro resources folder vous permet de définir le mode à utiliser pour le poste client et la session courante : -0 (valeur par défaut) : pas de synchronisation dynamique (la demande de synchronisation est ignorée) 1 : synchronisation dynamique automatique2 : affichage d’une boîte de dialogue sur les postes clients, avec possibilité d’effectuer ou de refuser la synchronisation.Le mode de synchronisation peut également être défini globalement dans les Propriétés de la base. +### Client Web log recording (30) -### Query by formula joins (49) +**Portée** :Tous postes 4D distants -**Portée** :Process courant + **Conservé** **entre deux sessions** : Oui - **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 = Ne pas enregistrer (défaut), 1 = Enregistrer au format CLF, 2 = Enregistrer au format DLF, 3 = Enregistrer au format ELF, 4 = Enregistrer au format WLF. - **Valeurs possibles** : 0 (utiliser paramétrages de la base), 1 (toujours utiliser les liens auto) ou 2 (utiliser les jointures SQL si possible). +**Description** : Démarrage ou arrêt de l’enregistrement des requêtes Web reçues par les serveurs Web de tous les postes clients. Par défaut, la valeur est 0 (pas d’enregistrement des requêtes). -**Description** : Mode de fonctionnement des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) relatif à l’utilisation de "jointures SQL". +Le fonctionnement de ce sélecteur est identique à celui du sélecteur 29 ; il s’applique toutefois à tous les postes 4D clients utilisés en tant que serveurs Web. Le fichier “logweb.txt” est dans ce cas automatiquement placé dans le sous-dossier Logs du dossier base 4D client (dossier de cache). Si vous souhaitez définir des valeurs pour certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, ces commandes effectuent des jointures sur le modèle des jointures SQL. Ce mécanisme permet de modifier la sélection d’une table en fonction d’une recherche effectuée sur une autre table sans que les tables soient reliées par un lien automatique (condition nécessaire dans les versions précédentes de 4D). -Le sélecteur Query by formula joins vous permet de définir le mode de fonctionnement des commandes de recherche par formule pour le process courant : -0 : utiliser les paramètres courants de la base (valeur par défaut). Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, les "jointures SQL" sont toujours activées pour les recherches par formule. Dans les bases de données converties, ce mécanisme est inactivé par défaut pour des raisons des compatibilité mais peut être mis en oeuvre via une préférence.1 : toujours utiliser les liens auto (= fonctionnement des versions précédentes de 4D). Dans ce mode, un lien est nécessaire pour définir la sélection d’une table en fonction de recherches effectuées dans une autre table. 4D n’effectue pas de "jointures SQL".2 : utiliser les jointures SQL si possible (= fonctionnement par défaut des bases créées en version 11.2 et suivantes de 4D v11 SQL). Dans ce mode, 4D établit des "jointures SQL" pour les recherches par formule lorsque la formule s’y prête (à deux exceptions près, voir la description de la commande commandes [QUERY BY FORMULA](query-by-formula.md) ou [QUERY SELECTION BY FORMULA](query-selection-by-formula.md). **Note :** Avec 4D en mode distant, les "jointures SQL" ne peuvent être utilisées que si les formules sont exécutées sur le serveur (elles doivent avoir accès aux enregistrements). Pour configurer le lieu d'exécution des formules, reportez-vous aux sélecteurs 46 et 47. +### Current process debug log recording (111) +**Portée :** Application 4D -### HTTP compression level (50) +**Conservé entre deux sessions :** Non -**Portée** : Application 4D +**Description** : Démarrage ou arrêt de l'enregistrement séquentiel des événements de programmation **du process courant** dans un fichier d'historique séparé. Cet historique est semblable à Debug log recording (sélecteur 34) mais il ne porte que sur le process courant. Le nom du fichier d'historique inclut la lettre "p" et le numéro du process : 4DDebugLog\[\_p*N*_*n*].txt, où N est l'ID unique du process. Pour plus d'informations sur ce format et sur l'utilisation du fichier *4DDebugLog*, veuillez consulter la *Description des fichiers d'historique* dans le Mode Développement. - **Conservé** **entre deux sessions** : Non +**Notes :** Ce sélecteur est fourni uniquement à des fins de débogage et doit être utilisé avec précaution. Plus particulièrement, il ne doit pas être utilisé en production, étant donné qu'il peut avoir une incidence sur les performances de l'application. Vous pouvez utiliser simultanément les sélecteurs Debug log recording et Current process debug log recording, auquel cas les actions liées au process courant ne seront pas enregistrées dans le fichier d'historique principal. - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### HTTP compression threshold (51) +### Dates inside objects (85) -**Portée** : Application 4D +**Portée** : Process courant **Conservé** **entre deux sessions** : Non - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Server base process stack size (53) - -**Portée** : 4D Server + **Valeurs possibles** : String type without time zone (0), String type with time zone (1), Date type (2) (défaut) - **Conservé** **entre deux sessions** : Non +**Description** : Définit la manière dont les dates sont stockées dans les objets, ainsi que leur traitement en cas d'importation/exportation en JSON. - **Valeurs possibles** : Entier long positif. +Lorsque ce sélecteur vaut Date type (valeur par défaut dans les bases créées à compter de 4D v17), les dates 4D sont stockées avec le type date dans les objets, en tenant compte des paramétrages de date locaux. Lorsqu'ils sont exportés au format JSON, les attributs date seront convertis en chaînes qui ne contiennent pas l'heure (**Note :** ce paramétrage peut être défini au niveau des paramètres de la base via l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la *Page Compatibilité*). -**Description** : Taille de la pile allouée à chaque process système préemptif sur le serveur, exprimée en octets. La taille par défaut est déterminée par le système. +Si vous passez String type with time zone dans ce sélecteur, les dates 4D seront converties en chaînes ISO en tenant compte du fuseau horaire local. Par exemple, la conversion de la date !23/08/2013! donne "2013-08-22T22:00:00Z" au format JSON lorsque l’opération est effectuée en France en été (GMT+2). Ce principe est conforme au fonctionnement standard de JavaScript. Ce fonctionnement peut être source d’erreurs si vous souhaitez envoyer des valeurs de date en JSON à une personne qui se trouve dans un autre fuseau horaire. C’est le cas par exemple pour l’exportation d’une table avec [Selection to JSON](selection-to-json.md) en France destiné à être réimporté aux USA avec [JSON TO SELECTION](json-to-selection.md). Par défaut, les dates étant réinterprétées dans chaque fuseau horaire, les valeurs stockées dans la base seront différentes. Dans ce cas, vous pouvez modifier le mode de conversion des dates afin qu’il ne tienne pas compte du fuseau horaire en passant String type without time zone dans ce sélecteur. La conversion de la date !23/08/2013! donnera alors "2013-08-23T00:00:00Z" dans tous les cas. -Les process système préemptifs (process de type Process base 4D client) sont chargés de contrôler les process clients 4D principaux. La taille allouée par défaut à la pile de chaque process préemptif permet un bon confort d’exécution mais peut s’avérer conséquente lorsque de très nombreux process (plusieurs centaines) sont créés. -A des fins d’optimisation, cette taille peut être diminuée sensiblement si les opérations effectuées par la base s'y prêtent (par exemple si la base n’effectue pas de tris sur de grosses quantités d’enregistrements). Des valeurs de 512 voire de 256 Ko sont possibles. Attention, le sous-dimensionnement de la pile est critique et peut nuire au fonctionnement de 4D Server. Le réglage de ce paramètre est à effectuer avec précaution et doit tenir compte des conditions d’utilisation de la base (nombre d’enregistrements, types d’opérations, etc.). Pour être pris en compte, ce paramétrage doit être exécuté sur le poste serveur (par exemple dans la méthode base Sur démarrage serveur). +### Debug log recording (34) -### Idle connections timeout (54) +**Thread-safe** : Yes -**Portée** : Application 4D sauf si valeur négative +**Portée** : Application 4D **Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. +**Description** : Démarrage ou arrêt de l’enregistrement séquentiel des événements de programmation de 4D dans le fichier *4DDebugLogServer* *\[\_pN\_n\].txt* (où \_n est le numéro de segment du fichier). -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +Deux modes sont possibles : -Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. +- Le mode standard propose une vue basique des événements et le fichier est automatiquement placé dans le sous-dossier Logs de la base, à côté du fichier de structure. Les durées d'exécution sont exprimées en millisecondes avec la valeur "< ms" qui s'affiche lorsqu'une opération dure moins d'une milliseconde. -Si vous passez une valeur positive dans *valeur*, elle s'applique à toutes les nouvelles connexions dans tous les process. Si vous passez une valeur négative, elle s’applique aux connexions ouvertes dans le process courant. Si vous passez 0, les connexions inactives ne sont pas soumises à un timeout. +- Le mode tabulé fournit des informations supplémentaires et utilise un format tabulé plus compact dans le fichier. Les durées d'exécution sont exprimées en millisecondes. **Valeurs possibles** : Entier long contenant un champ de bits (bit field) : valeur = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +- Le bit 0 (valeur 1) permet de demander à activer le fichier (à noter que toute autre valeur non nulle l’activera également) +- Le bit 1 (valeur 2) permet de demander les paramètres d’appel aux commandes et (mode interprété uniquement) aux méthodes. +- Le bit 2 (valeur 4) permet d’activer le format tabulé. +- Le bit 3 (valeur 8) permet de désactiver l’écriture immédiate de chaque opération sur disque (activée par défaut). L’écriture immédiate est moins rapide mais plus efficace par exemple pour rechercher les causes d’un plantage. Si vous désactivez ce mode, le fichier sera généré plus rapidement. +- Le bit 4 (valeur 16) permet de désactiver l’enregistrement des appels de plug-ins (activé par défaut). +- Le bit 5 (valeur 32) permet de désactiver l'enregistrement des fonctions membres. -Ce paramètre doit être défini côté client. Généralement, vous n'aurez pas besoin de modifier cette valeur. +Exemples : +```4d +SET DATABASE PARAMETER(34;1) // active le mode standard sans les paramètres, avec les durées +SET DATABASE PARAMETER(34;2) // active le mode standard avec les paramètres et les durées +SET DATABASE PARAMETER(34;2+4) // active le mode tabulé avec les paramètres et les durées +SET DATABASE PARAMETER(34;0) // désactive le fichier +``` +Dans tout type d'application 4D (4D tous modes, 4D Server, 4D Volume Desktop), en interprété ou en compilé, vous pouvez éviter que le fichier n’enregistre une trop grande quantité d’informations : -### PHP interpreter IP address (55) +- en restreignant les commandes 4D examinées à l'aide de Log command list (sélecteur 80), ou +- en le restreignant au process courant uniquement à l'aide de Current process debug log recording (sélecteur 111). Cela ajoutera la lettre "p" et le numéro de process au nom du fichier : *4DDebugLog* *\[\_pN\_n\].txt ou* *4DDebugLogServer\[\_pn\_n\].txt.* Pour plus d’informations sur le format et l’exploitation du fichier 4DDebugLog, veuillez consulter la *Description des fichiers d'historique* dans le Manuel Développement. -**Portée** :Application 4D +**Note :** Ce sélecteur est proposé uniquement à des fins de débogage et doit être utilisé avec précaution car il peut entraîner une dégradation des performances de l'application. - **Conservé** **entre deux sessions** : Non -**Valeurs** : Chaîne formatée en IPv4 (par exemple "127.0.0.1") ou en IPv6 (par exemple "2001:0db8:0000:0000:0000:ff00:0042:8329") -**Description** : Adresse IP utilisée localement par 4D pour communiquer avec l’interpéteur PHP via fastcgi. Par défaut, la valeur est "127.0.0.1" (les adresses au format IPv6 sont prises en charge à compter de 4D v16R4).. Cette adresse doit correspondre à la machine sur laquelle se trouve 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. -Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. +### Diagnostic log level (86) +**Thread-safe** : Yes +**Portée :** Application 4D -### PHP interpreter port (56) +**Conservé entre deux sessions :** Non -**Portée** :Application 4D +**Description :** Niveau(x) de messages à inclure dans le journal de diagnostic lorsqu'il est activé (voir le sélecteur Diagnostic log recording). Chaque niveau désigne une catégorie de messages de diagnostic et inclut automatiquement la ou les catégories plus importantes. Pour une description des catégories, consultez la section *Log niveau diagnostic* sur le site *developer.4d.com*. - **Conservé** **entre deux sessions** : Non +**Valeurs possibles** **:** L'une des constantes suivantes (Log info par défaut): +- Log trace: active ERROR, WARN, INFO, DEBUG, TRACE (niveau le plus détaillé) +- Log debug: active ERROR, WARN, INFO, DEBUG +- Log info: active ERROR, WARN, INFO (par défaut) +- Log warn: active ERROR, WARN Log error: active ERROR (niveau le moins détaillé) -**Valeurs** : Valeur de type entier long positif. Par défaut, la valeur est 8002\. -**Description** : Numéro du port TCP utilisé par l’interpréteur PHP de 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. +### Diagnostic log recording (79) -### SSL cipher list (64) +**Thread-safe** : Yes **Portée** : Application 4D -**Conservé entre deux sessions** : Non - -**Valeurs possibles** : Suite de chaînes séparées par des deux-points. - -**Description :** Liste de chiffrement (*cipher list*) utilisée par 4D pour le protocole sécurisé. Cette liste permet de modifier la priorité des algorithmes de chiffrement mis en oeuvre par 4D. - -Par exemple, vous pouvez passer la chaîne suivante dans le paramètre *valeur* : "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Pour une description complète de la syntaxe de la liste de chiffrement, reportez-vous à la *page ciphers sur le site de OpenSSL*. - -Ce paramétrage s'applique au principal serveur Web (à l'exclusion des objets Web server), au serveur SQL, aux connexions client/serveur ainsi qu'au client HTTP et aux commandes 4D faisant appel au protocole sécurisé. Ce paramétrage est temporaire (il n'est pas maintenu entre les sessions). - -Lorsque la liste de chiffrement a été modifiée, vous devez redémarrer le serveur concerné pour que le nouveau paramétrage soit pris en compte. - -Pour réinitialiser la liste de chiffrement à sa valeur par défaut (stockée en dur dans le fichier SLI), appelez la commande [SET DATABASE PARAMETER](set-database-parameter.md) et passez une chaîne vide ("") dans le paramètre *valeur*. - -**Note :** Avec la commande [Get database parameter](get-database-parameter.md), la liste de chiffrement est retournée dans le paramètre optionnel *valeurAlpha* et le paramètre de retour vaut toujours 0. - - - -### Cache unload minimum size (66) - -**Portée** : Application 4D - -**Conservé entre deux sessions** : Non - -**Valeurs possibles** : Entier long positif > 1. - -**Description** : Taille minimum de mémoire à libérer du cache de la base de données lorsque le moteur a besoin d’y faire de la place pour y allouer un objet (valeur en octets). - -Ce sélecteur a pour but de permettre de réduire le nombre de libérations de données du cache afin d’obtenir des gains de performances. Vous pouvez faire varier ce paramétrage en fonction de la taille du cache et de celle des blocs de données manipulées dans votre base. - -Par défaut, si ce sélecteur n’est pas utilisé, 4D décharge au minimum 10 % du cache en cas de besoin de place. - - - -### Direct2D status (69) - -**Portée**: Application 4D - -**Conservé entre deux sessions** : Non - -**Description** : Mode d’activation de l’implémentation de Direct2D sous Windows. +**Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Une des constantes suivantes (mode 3 par défaut) : +**Valeurs possibles** : 0 ou 1 (0 = ne pas enregistrer, 1 = enregistrer) -Direct2D disabled (0) : le mode Direct2D n’est pas activé, la base fonctionne dans le mode précédent (GDI/GDIPlus). +**Description** : Démarrage ou arrêt de l’enregistrement du fichier de diagnostic de 4D. Par défaut, la valeur est 0 (pas d’enregistrement). -Direct2D hardware (1) : utilisation de Direct2D en contexte graphique matériel dans toute l’application 4D. Si ce contexte n’est pas disponible, utilisation du contexte graphique Direct2D logiciel. +4D vous permet d’enregistrer de manière continue dans un fichier de diagnostic un ensemble d’événements relatifs au fonctionnement interne de l’application. Les informations contenues dans ce fichier sont destinées à la mise au point des applications 4D et pourront être analysées avec l’aide des services techniques de 4D (pour plus d'informations, reportez-vous à la section *Description des fichiers d'historique* sur *developer.4d.com*). Lorsque vous passez 1 dans ce sélecteur, un fichier de diagnostic est automatiquement créé (ou ouvert) dans le dossier **Logs** de la base. Le fichier est nommé *4DDiagnosticLog\_N*.txt (ou *4DDiagnosticLogServer\_N.*txt s'il est généré sur le serveur). Une fois que le fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel N incrémenté. -Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation de Direct2D en contexte graphique logiciel dans toute l’application 4D. +A noter qu’il est possible d’inclure des informations personnalisées dans ce fichier à l’aide de la commande [LOG EVENT](log-event.md). -**Attention :* Ce sélecteur est fourni uniquement à des fins de débogage. Etant donné que plusieurs fonctionnalités de 4D dépendent de Direct2D, il ne doit pas être désactivé dans les applications déployées. Seul le mode par défaut (Direct2D software) est approuvé pour les applications déployées.* @@ -537,221 +374,214 @@ Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation d **Valeurs possibles** : 0, 1, 2, 3, 4 ou 5 (cf. valeurs du sélecteur 69). La valeur retournée dépend de la disponibilité de Direct2D, du matériel et de la qualité de la prise en charge de Direct2D par le système d’exploitation. Par exemple, si vous exécutez : - +```4d  SET DATABASE PARAMETER(;Direct2D Hardware)  $mode:=Get database parameter() +``` - sur Windows 7 et suivants, *$mode* vaudra 1 si le système détecte un matériel compatible Direct2D, sinon *$mode* vaudra 3 (contexte logiciel). - - sur Windows Vista, *$mode* vaudra 1 si le système détecte un matériel compatible Direct2D, sinon *$mode* vaudra 0 (désactivation de Direct2D). - - sur Windows XP, *$mode* vaudra toujours 0 (incompatibilité avec Direct2D). -### Diagnostic log recording (79) -**Thread-safe** : Yes +### Direct2D status (69) -**Portée** : Application 4D +**Portée**: Application 4D -**Conservé** **entre deux sessions** : Non +**Conservé entre deux sessions** : Non -**Valeurs possibles** : 0 ou 1 (0 = ne pas enregistrer, 1 = enregistrer) +**Description** : Mode d’activation de l’implémentation de Direct2D sous Windows. -**Description** : Démarrage ou arrêt de l’enregistrement du fichier de diagnostic de 4D. Par défaut, la valeur est 0 (pas d’enregistrement). +**Valeurs possibles** : Une des constantes suivantes (mode 3 par défaut) : -4D vous permet d’enregistrer de manière continue dans un fichier de diagnostic un ensemble d’événements relatifs au fonctionnement interne de l’application. Les informations contenues dans ce fichier sont destinées à la mise au point des applications 4D et pourront être analysées avec l’aide des services techniques de 4D (pour plus d'informations, reportez-vous à la section *Description des fichiers d'historique* sur *developer.4d.com*). Lorsque vous passez 1 dans ce sélecteur, un fichier de diagnostic est automatiquement créé (ou ouvert) dans le dossier **Logs** de la base. Le fichier est nommé *4DDiagnosticLog\_N*.txt (ou *4DDiagnosticLogServer\_N.*txt s'il est généré sur le serveur). Une fois que le fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel N incrémenté. +Direct2D disabled (0) : le mode Direct2D n’est pas activé, la base fonctionne dans le mode précédent (GDI/GDIPlus). -A noter qu’il est possible d’inclure des informations personnalisées dans ce fichier à l’aide de la commande [LOG EVENT](log-event.md). +Direct2D hardware (1) : utilisation de Direct2D en contexte graphique matériel dans toute l’application 4D. Si ce contexte n’est pas disponible, utilisation du contexte graphique Direct2D logiciel. +Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation de Direct2D en contexte graphique logiciel dans toute l’application 4D. +**Attention :* Ce sélecteur est fourni uniquement à des fins de débogage. Etant donné que plusieurs fonctionnalités de 4D dépendent de Direct2D, il ne doit pas être désactivé dans les applications déployées. Seul le mode par défaut (Direct2D software) est approuvé pour les applications déployées.* -### Log command list (80) -**Portée** : Application 4D -**Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Chaîne contenant la liste des numéros des commandes 4D à enregistrer (séparées par des points-virgules), ou "all" pour enregistrer toutes les commande, ou "" (chaîne vide) pour n’enregistrer aucune commande, ou le préfixe "-" pour exclure des commandes spécifiques. +### HTTP compression level (50) -**Description** : Liste des commandes 4D à enregistrer dans le fichier de débogage ou à exclure du fichier de débogage (cf. sélecteur 34, Debug log recording). Par défaut, toutes les commandes 4D sont enregistrées. Ce sélecteur vous permet de restreindre la quantité d’informations stockées dans le fichier de débogage en limitant les commandes 4D dont vous souhaitez enregistrer l’exécution ou bien que vous souhaitez exclure de l'enregistrement. Par exemple, vous pouvez écrire :  SET DATABASE PARAMETER(Log command list;"277;341") //enregistrer uniquement les commandes CHERCHER et CHERCHER DANS SELECTION  OU  SET DATABASE PARAMETER(Log command list;"-1666;-323") //exclure les commandes FIXER ALIAS UTILISATEUR et ENDORMIR PROCESS de l'enregistrement +**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Spellchecker (81) -**Portée** : Application 4D - **Conservé** **entre deux sessions** : Non - **Valeurs possibles** : 0 (défaut) = correcteur macOS (Hunspell désactivé), 1 = correcteur Hunspell actif. +### HTTP compression threshold (51) -**Description** : Permet d’activer le correcteur orthographique Hunspell sous macOS. Par défaut, sur cette plate-forme le correcteur natif est activé. Vous pouvez souhaiter utiliser le correcteur Hunspell par exemple pour unifier l’interface de vos applications multiplates-formes (sous Windows, seul le correcteur Hunspell est disponible). Pour plus d’informations, reportez-vous à la page *Correction orthographique*. +**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Dates inside objects (85) -**Portée** : Process courant - **Conservé** **entre deux sessions** : Non - **Valeurs possibles** : String type without time zone (0), String type with time zone (1), Date type (2) (défaut) +### HTTPS Port ID (39) -**Description** : Définit la manière dont les dates sont stockées dans les objets, ainsi que leur traitement en cas d'importation/exportation en JSON. +**Portée** :4D local, 4D Server -Lorsque ce sélecteur vaut Date type (valeur par défaut dans les bases créées à compter de 4D v17), les dates 4D sont stockées avec le type date dans les objets, en tenant compte des paramétrages de date locaux. Lorsqu'ils sont exportés au format JSON, les attributs date seront convertis en chaînes qui ne contiennent pas l'heure (**Note :** ce paramétrage peut être défini au niveau des paramètres de la base via l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la *Page Compatibilité*). + **Conservé** **entre deux sessions** : Oui -Si vous passez String type with time zone dans ce sélecteur, les dates 4D seront converties en chaînes ISO en tenant compte du fuseau horaire local. Par exemple, la conversion de la date !23/08/2013! donne "2013-08-22T22:00:00Z" au format JSON lorsque l’opération est effectuée en France en été (GMT+2). Ce principe est conforme au fonctionnement standard de JavaScript. Ce fonctionnement peut être source d’erreurs si vous souhaitez envoyer des valeurs de date en JSON à une personne qui se trouve dans un autre fuseau horaire. C’est le cas par exemple pour l’exportation d’une table avec [Selection to JSON](selection-to-json.md) en France destiné à être réimporté aux USA avec [JSON TO SELECTION](json-to-selection.md). Par défaut, les dates étant réinterprétées dans chaque fuseau horaire, les valeurs stockées dans la base seront différentes. Dans ce cas, vous pouvez modifier le mode de conversion des dates afin qu’il ne tienne pas compte du fuseau horaire en passant String type without time zone dans ce sélecteur. La conversion de la date !23/08/2013! donnera alors "2013-08-23T00:00:00Z" dans tous les cas. + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Diagnostic log level (86) -**Thread-safe** : Yes +### Idle connections timeout (54) -**Portée :** Application 4D +**Portée** : Application 4D sauf si valeur négative -**Conservé entre deux sessions :** Non +**Conservé** **entre deux sessions** : Non -**Description :** Niveau(x) de messages à inclure dans le journal de diagnostic lorsqu'il est activé (voir le sélecteur Diagnostic log recording). Chaque niveau désigne une catégorie de messages de diagnostic et inclut automatiquement la ou les catégories plus importantes. Pour une description des catégories, consultez la section *Log niveau diagnostic* sur le site *developer.4d.com*. +**Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Valeurs possibles** **:** L'une des constantes suivantes (Log info par défaut): Log trace: active ERROR, WARN, INFO, DEBUG, TRACE (niveau le plus détaillé) Log debug: active ERROR, WARN, INFO, DEBUG Log info: active ERROR, WARN, INFO (par défaut) Log warn: active ERROR, WARN Log error: active ERROR (niveau le moins détaillé) +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. +Si vous passez une valeur positive dans *valeur*, elle s'applique à toutes les nouvelles connexions dans tous les process. Si vous passez une valeur négative, elle s’applique aux connexions ouvertes dans le process courant. Si vous passez 0, les connexions inactives ne sont pas soumises à un timeout. -### Use legacy network layer (87) +Ce paramètre doit être défini côté client. Généralement, vous n'aurez pas besoin de modifier cette valeur. -**Portée :** 4D local, 4D Server. -**Conservé entre deux sessions :** Oui -**Description :** Fixe ou lit le statut courant de l'ancienne couche réseau pour les connexions client/serveur. L'ancienne couche réseau est obsolète à compter de 4D v14 R5 et doit être progressivement remplacée dans vos applications par la couche réseau *ServerNet*. *ServerNet* sera nécessaire dans les prochaines versions de 4D afin de permettre aux applications 4D de tirer parti des futures évolutions réseau. Pour des raisons de compatibilité, l'ancienne couche réseau est toujours prise en charge afin de faciliter la transition des applications existantes (elle reste utilisée par défaut dans les applications converties depuis des versions antérieures à la v14 R5). Passez 1 dans ce paramètre pour utiliser l'ancienne couche réseau (et désactiver *ServerNet*), et passez 0 pour désactiver l'ancienne couche réseau (et utiliser *ServerNet*). -Cette propriété peut également être définie à l'aide de l'option "Utiliser l'ancienne couche réseau" présente dans la *Page Compatibilité* des Propriétés de la base (voir section *Options réseau et Client-serveur* ; dans cette section, vous trouverez aussi un paragraphe décrivant la stratégie de migration. Nous vous recommandons d'activer *ServerNet* dès que possible). +### IMAP Log (119) -Il est nécessaire de redémarrer l'application pour que ce paramètre soit pris en compte. +**Thread-safe** : Yes -**Valeurs possibles :** 0 ou 1 (0 = ne pas utiliser l'ancienne couche, 1 = utiliser l'ancienne couche) +**Portée** : 4D local, 4D Server -**Valeur par défaut :** 0 dans les applications créées avec 4D v14 R5 ou suivantes, 1 dans les applications converties depuis 4D v14 R4 ou précédentes. +**Conservé entre deux sessions :** Non +**Valeurs possibles :** 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, ajouté au nom du fichier). Par défaut, la valeur est 0 (échanges IMAP non enregistrés). +**Description :** Démarre ou stoppe l'enregistrement des échanges entre 4D et le serveur IMAP, lorsqu'un objet transporteur est traité via *IMAP\_transporteur.getMail( )* ou *IMAP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (échanges non enregistrés). Lorsque ce mécanisme est activé, un fichier journal est créé dans le dossier Journaux de la base de données. Il est nommé 4DIMAPLog\_N.txt, où N est le numéro séquentiel du journal. Une fois que le fichier 4DIMAPLog a atteint une taille de 10 Mo, il est fermé et un nouveau est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre value. Par défaut, tous les fichiers sont conservés, mais vous pouvez contrôler le nombre de fichiers à conserver en utilisant le paramètre Circular log limitation. -### SQL Server Port ID (88) +Pour plus d'informations sur les fichiers 4DIMAPLog\_N.txt, reportez-vous à la section *Description des fichiers d'historique*. -**Portée** : 4D mode local et 4D Server. -**Conservé entre deux sessions** : Oui -**Description** : Permet de lire ou de fixer le numéro du port TCP utilisé par le serveur SQL intégré de 4D en mode local ou de 4D Server. Par défaut, la valeur est 19812\. Le numéro de port TCP peut également être défini dans la page "SQL" de la boîte de dialogue des Propriétés de la base. Lorsque ce sélecteur est utilisé en écriture, la propriété de la base est mise à jour. -**Valeurs possibles** : 0 à 65535. +### Is current database a project (112) -**Valeur par défaut** : 19812 +**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +**Portée** : Application 4D +**Description** : Retourne 1 si l'architecture de la base courante est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. -### Circular log limitation (90) -**Thread-safe** : Yes -**Portée** : 4D local, 4D Server. -**Conservé entre deux sessions** : Non +### Is host database a project (113) -**Valeurs possibles** : Toute valeur entière, 0 = conserver tous les journaux +**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. -**Description** : Nombre maximum de fichiers à conserver par roulement pour chaque type de journal. Par défaut, les 50 fichiers les plus récents sont conservés. Si vous passez une valeur N, seuls les N fichiers les plus récents seront conservés, le plus ancien étant automatiquement effacé à la création d'un nouveau. Ce paramétrage s'applique à tous les fichiers journaux, notamment le journal des requêtes (sélecteurs 28 et 45), le journal de débogage (sélecteur 34), le journal des événements (sélecteur 79), l'historique des requêtes Web (sélecteurs 29 et 84 de la commande [WEB SET OPTION](web-set-option.md)), etc. +**Portée** : Application 4D +**Description** : Retourne 1 si l'architecture de la base hôte est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. -### Number of formulas in cache (92) -**Portée** : Application 4D. -**Conservé entre deux sessions** : Non +### Is host database writable (117) -**Valeurs possibles** : Entier long positif +**Note :** Vous pouvez utiliser ce sélecteur uniquement avec la commande [Get database parameter](get-database-parameter.md) et sa valeur ne peut pas être définie. -**Valeur par défaut** : 0 (pas de cache) +**Portée** : Application 4D -**Description** : Fixe ou lit le nombre maximum de formules à conserver dans le cache des formules, qui est utilisé par la commande [EXECUTE FORMULA](execute-formula.md). Cette limite est appliquée à tous les process, mais chaque process dispose de son propre cache de formules. Placer des formules dans le cache accélère l'exécution de la commande [EXECUTE FORMULA](execute-formula.md) en mode compilé puisque chaque formule en cache est tokenisée une seule fois dans ce cas. Lorsque vous modifiez la valeur du cache, son contenu est réinitialisé même si la nouvelle valeur est supérieure à la précédente. Une fois le nombre maximum de formules en cache atteint, toute nouvelle formule exécutée écrase la plus ancienne dans le cache (mode FIFO). Ce paramètre est pris en compte uniquement dans les bases ou les composants compilés. +**Description** : Retourne 1 si le fichier de structure ou le fichier de projet de l'hôte est en écriture, et retourne 0 s'il est en lecture seule. -### OpenSSL version (94) -**Portée** : Tous postes 4D +### Libldap version (114) - **Conservé entre deux sessions** : Non +**Portée** : Machine 4D courante -**Description**: Retourne le numéro de version de la bibliothèque OpenSSL utilisée sur le poste. (Lecture seule) +**Conservé entre deux sessions** : Non +**Description** : Retourne le numéro de version de la bibliothèque LDAP dans l'application 4D sur la machine locale. (Lecture seule) -### Cache flush periodicity (95) -**Thread-safe** : Yes +### Libsasl version (115) -Portée : 4D local, 4D Server +**Portée** : Machine 4D courante **Conservé entre deux sessions** : Non -**Valeurs possibles** : entier long > 1 (secondes) +**Description** : Retourne le numéro de version de la bibliothèque SASL dans l'application 4D sur la machine locale. (Lecture seule) -**Description** : Permet de lire ou de fixer la valeur courante de périodicité de l'écriture du cache de données sur le disque, exprimée en secondes. Si elle est modifiée, cette valeur remplace la valeur définie par l'option **Ecriture cache toutes les secondes/minutes** dans la [XML DECODE](xml-decode.md) des Propriétés de la base durant la session courante (elle n'est pas stockée dans les Propriétés de la base). -### Remote connection sleep timeout (98) +### Libzip version (120) -**Portée** : Application 4D Server +**Portée :** Machine 4D courante -**Conservé entre deux sessions** : Non +**Conservé entre deux sessions :** n/a -**Valeurs possibles** : Entier long positif +**Description :** Retourne le numéro de version de la bibliothèque libzip dans l'application 4D sur la machine courante. (Lecture seule) -**Description** : Timeout de la connexion à distance en veille, exprimé en secondes. Par défaut, la valeur est 172800 (48 heures). Le délai de mise en veille est appliqué une fois qu'une machine exécutant une application distante 4D est passée en mode veille. Dans ce cas, sa session est maintenue par 4D Server (voir la description de la fonctionnalité ). 4D Server vérifie toutes les 5 minutes si un 4D distant en veille a dépassé le délai de veille, auquel cas il est abandonné. Ainsi, la durée de veille maximale autorisée est la *timeout mise en veille actuel + 300*. Dans certains cas, vous souhaiterez peut-être modifier le délai de mise en veille, pour libérer, par exemple, les enregistrements/licences verrouillés plus rapidement. -### Tips enabled (101) +### Log command list (80) -**Portée :** Application 4D +**Portée** : Application 4D -**Conservé entre deux sessions :** Non +**Conservé** **entre deux sessions** : Non -**Valeurs possibles :** 0 = message d'aide désactivés, 1 = messages d'aide activés (défaut) +**Valeurs possibles** : Chaîne contenant la liste des numéros des commandes 4D à enregistrer (séparées par des points-virgules), ou "all" pour enregistrer toutes les commande, ou "" (chaîne vide) pour n’enregistrer aucune commande, ou le préfixe "-" pour exclure des commandes spécifiques. -**Description :** Définit ou récupère l'état d'affichage des messages d'aide dans l'application 4D. Par défaut, les messages d'aide sont activées. +**Description** : Liste des commandes 4D à enregistrer dans le fichier de débogage ou à exclure du fichier de débogage (cf. sélecteur 34, Debug log recording). Par défaut, toutes les commandes 4D sont enregistrées. Ce sélecteur vous permet de restreindre la quantité d’informations stockées dans le fichier de débogage en limitant les commandes 4D dont vous souhaitez enregistrer l’exécution ou bien que vous souhaitez exclure de l'enregistrement. Par exemple, vous pouvez écrire : - Notez que ce paramètre fixe tous les messages d'aides, c'est-à-dire les messages d'aide des formulaires et ceux de l'éditeur du mode Développement. +```4d +//enregistrer uniquement les commandes QUERY et QUERY SELECTION +SET DATABASE PARAMETER(Log command list;"277;341")  +``` +OU +```4d +//exclure les commandes SET USER ALIAS et DELAY PROCESS de l'enregistrement +SET DATABASE PARAMETER(Log command list;"-1666;-323")  +``` -### Tips delay (102) +### Max concurrent Web processes (18) -**Portée :** Application 4D +**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non +**Conservé entre deux sessions** : Oui -**Valeurs possibles :** entier long >= 0 (ticks) +**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -**Description :** délai avant que les messages d'aide soient affichés une fois que le curseur de la souris est arrêté sur les objets avec message d'aide. La valeur est exprimée en ticks (1/60e de seconde). La valeur par défaut est de 45 ticks (0,75 seconde). -### Tips duration (103) +### Maximum Web requests size (27) -**Portée :** Application 4D +**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non + **Conservé** **entre deux sessions** : Oui -**Valeurs possibles :** entier long >= 60 (ticks) + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -**Description :** Durée maximum de l'affichage du message d'aide. La valeur est exprimée en ticks (1/60e de seconde). La valeur par défaut est de 720 ticks (12 secondes). @@ -773,166 +603,173 @@ Portée : 4D local, 4D Server -### User param value (108) -**Portée :** 4D local, 4D Server +### Number of formulas in cache (92) + +**Portée** : Application 4D. -**Conservé entre deux sessions :** Non +**Conservé entre deux sessions** : Non -**Valeurs possibles** : Toute chaîne personnalisée +**Valeurs possibles** : Entier long positif -**Description :** Chaîne personnalisée passée d'une session à la suivante lorsque l'application 4D est redémarrée. Ce sélecteur est utile dans les cas où des tests unitaires automatisés nécessitent que les applications redémarrent avec des paramètres différents. +**Valeur par défaut** : 0 (pas de cache) -Avec [SET DATABASE PARAMETER](set-database-parameter.md), définit une nouvelle valeur qui sera disponible dans la prochaine base de données ouverte après le redémarrage manuel de 4D or l'utilisation des commandes [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), ou [RESTART 4D](restart-4d.md). Avec [Get database parameter](get-database-parameter.md), retourne la valeur User param courante définie à l'aide d'une ligne de commande (voir *Interface ligne de commande*), un fichier .4DLink (voir *Utiliser un fichier 4DLink*), ou un appel à [SET DATABASE PARAMETER](set-database-parameter.md) durant la session précédente. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) fixe une User param value avant d'appeler [OPEN DATABASE](open-database.md) à l'aide d'un fichier .4DLink contenant également un attribut xml user-param xml, 4D ne tient compte que du paramètre fourni par [SET DATABASE PARAMETER](set-database-parameter.md). +**Description** : Fixe ou lit le nombre maximum de formules à conserver dans le cache des formules, qui est utilisé par la commande [EXECUTE FORMULA](execute-formula.md). Cette limite est appliquée à tous les process, mais chaque process dispose de son propre cache de formules. Placer des formules dans le cache accélère l'exécution de la commande [EXECUTE FORMULA](execute-formula.md) en mode compilé puisque chaque formule en cache est tokenisée une seule fois dans ce cas. Lorsque vous modifiez la valeur du cache, son contenu est réinitialisé même si la nouvelle valeur est supérieure à la précédente. Une fois le nombre maximum de formules en cache atteint, toute nouvelle formule exécutée écrase la plus ancienne dans le cache (mode FIFO). Ce paramètre est pris en compte uniquement dans les bases ou les composants compilés. -### Times inside objects (109) -Portée : 4D local, 4D Server (tous process) +### OpenSSL version (94) -**Conservé entre deux sessions** : Oui +**Portée** : Tous postes 4D - **Valeurs possibles** : Times in seconds (0) (défaut), Times in milliseconds (1) + **Conservé entre deux sessions** : Non -**Description** : Définit la manière dont les valeurs de type heure sont converties et stockées dans les propriétés d'objets et les éléments de collections, ainsi que lors des imports/exports JSON et via les zones Web. Par défaut, à compter de 4D v17, les heures sont converties et stockées en nombre de secondes. +**Description**: Retourne le numéro de version de la bibliothèque OpenSSL utilisée sur le poste. (Lecture seule) -Dans les versions précédentes, les heures étaient converties et stockées en nombre de millisecondes dans ces contextes. L'utilisation de ce sélecteur peut vous aider lors de la migration de vos applications en rétablissant le fonctionnement précédent lorsque c'est nécessaire. -**Note** : Les méthodes ORDA et le moteur SQL ne tiennent pas compte de ce paramétrage, ces deux environnements manipulent toujours les heures en nombre de secondes. +### Order by formula on server (47) -### SMTP Log (110) +**Portée** :Table et process courants -**Thread-safe** : Yes + **Conservé** **entre deux sessions** : Non -Portée : 4D local, 4D Server* + **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) + +**Description** : Emplacement de l’exécution de la commande [ORDER BY FORMULA](order-by-formula.md) pour la table passée en paramètre. -* **Conservé entre deux sessions** : Non +Dans le cadre de l’exploitation d’une base en client-serveur, la commande [ORDER BY FORMULA](order-by-formula.md) peut être exécutée soit sur le serveur soit sur le client. Ce sélecteur permet de définir l’emplacement de l’exécution de cette commande (serveur ou client). Ce mode peut également être défini dans les préférences de la base. Pour plus d’informations, reportez-vous à la description du sélecteur 46, Query by formula on server. -**Valeurs possibles** : 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, accolé au nom du fichier). Par défaut, la valeur est 0 (pas d'enregistrement des échanges SMTP). +**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. -**Description** : Démarrage ou arrêt de l'enregistrement des échanges entre 4D et le serveur SMTP, lorsqu'un objet *transporteur* est traité par *transporteur.send( )* ou *SMTP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (pas d'enregistrement des échanges SMTP). Lorsque ce mécanisme est activé, un fichier d'historique est créé dans le dossier Logs de la base. Il est nommé 4DSMTPLog\_X.txt, *où N* est le numéro séquentiel de l'historique. Une fois qu'un fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre *valeur*. Par défaut, tous les fichiers sont conservés, mais vous pouvez gérer le nombre de fichier à conserver à l'aide du paramètre Circular log limitation. -Pour plus d'informations sur les fichiers 4DSMTPLog\_X.txt, veuillez consulter la section *Description des fichiers d'historique*. +### Pause logging (121) -### Current process debug log recording (111) +**Thread-safe** : Yes **Portée :** Application 4D **Conservé entre deux sessions :** Non -**Description** : Démarrage ou arrêt de l'enregistrement séquentiel des événements de programmation **du process courant** dans un fichier d'historique séparé. Cet historique est semblable à Debug log recording (sélecteur 34) mais il ne porte que sur le process courant. Le nom du fichier d'historique inclut la lettre "p" et le numéro du process : 4DDebugLog\[\_p*N*_*n*].txt, où N est l'ID unique du process. Pour plus d'informations sur ce format et sur l'utilisation du fichier *4DDebugLog*, veuillez consulter la *Description des fichiers d'historique* dans le Mode Développement. +**Valeurs possibles :** 0 (reprise des journaux), 1 (pause des journaux) -**Notes :** Ce sélecteur est fourni uniquement à des fins de débogage et doit être utilisé avec précaution. Plus particulièrement, il ne doit pas être utilisé en production, étant donné qu'il peut avoir une incidence sur les performances de l'application. Vous pouvez utiliser simultanément les sélecteurs Debug log recording et Current process debug log recording, auquel cas les actions liées au process courant ne seront pas enregistrées dans le fichier d'historique principal. +Ce sélecteur permet de suspendre/reprendre toutes les opérations de journalisation lancées sur l'application (à l'exception des journaux ORDA). Cette fonction peut être utile pour alléger temporairement les tâches de l'application 4D ou pour planifier les opérations des journaux. -### Is current database a project (112) +### PHP interpreter IP address (55) -**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +**Portée** :Application 4D -**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non -**Description** : Retourne 1 si l'architecture de la base courante est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. +**Valeurs** : Chaîne formatée en IPv4 (par exemple "127.0.0.1") ou en IPv6 (par exemple "2001:0db8:0000:0000:0000:ff00:0042:8329") +**Description** : Adresse IP utilisée localement par 4D pour communiquer avec l’interpéteur PHP via fastcgi. Par défaut, la valeur est "127.0.0.1" (les adresses au format IPv6 sont prises en charge à compter de 4D v16R4).. Cette adresse doit correspondre à la machine sur laquelle se trouve 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. +Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. -### Is host database a project (113) -**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. -**Portée** : Application 4D -**Description** : Retourne 1 si l'architecture de la base hôte est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. +### PHP interpreter port (56) +**Portée** :Application 4D + **Conservé** **entre deux sessions** : Non -### Libldap version (114) +**Valeurs** : Valeur de type entier long positif. Par défaut, la valeur est 8002\. -**Portée** : Machine 4D courante +**Description** : Numéro du port TCP utilisé par l’interpréteur PHP de 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. -**Conservé entre deux sessions** : Non -**Description** : Retourne le numéro de version de la bibliothèque LDAP dans l'application 4D sur la machine locale. (Lecture seule) +### POP3 Log (116) -### Libsasl version (115) +**Thread-safe** : Yes -**Portée** : Machine 4D courante +Portée : 4D local, 4D Server **Conservé entre deux sessions** : Non -**Description** : Retourne le numéro de version de la bibliothèque SASL dans l'application 4D sur la machine locale. (Lecture seule) +**Valeurs possibles** : 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, accolé au nom du fichier). Par défaut, la valeur est 0 (pas d'enregistrement des échanges POP3). +**Description** : Démarrage ou arrêt de l'enregistrement des échanges entre 4D et le serveur POP3, lorsqu'un objet *transporteur* est traité par *POP3\_transporteur.getMail( )* ou *POP3\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (pas d'enregistrement des échanges POP3). Lorsque ce mécanisme est activé, un fichier d'historique est créé dans le dossier Logs de la base. Il est nommé 4DPOP3Log\_X.txt, *où N* est le numéro séquentiel de l'historique. Une fois qu'un fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre *valeur*. Par défaut, tous les fichiers sont conservés, mais vous pouvez gérer le nombre de fichier à conserver à l'aide du paramètre Circular log limitation. Pour plus d'informations sur les fichiers 4DPOP3Log\_X.txt, veuillez consulter la section *Description des fichiers d'historique*. -### POP3 Log (116) -**Thread-safe** : Yes -Portée : 4D local, 4D Server +### Port ID (15) + +**Portée** : 4D local, 4D Server **Conservé entre deux sessions** : Non -**Valeurs possibles** : 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, accolé au nom du fichier). Par défaut, la valeur est 0 (pas d'enregistrement des échanges POP3). +**Description** : Numéro du port TCP utilisé par le serveur Web 4D avec 4D en mode local et 4D Server. Par défaut, la valeur est 80\. -**Description** : Démarrage ou arrêt de l'enregistrement des échanges entre 4D et le serveur POP3, lorsqu'un objet *transporteur* est traité par *POP3\_transporteur.getMail( )* ou *POP3\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (pas d'enregistrement des échanges POP3). Lorsque ce mécanisme est activé, un fichier d'historique est créé dans le dossier Logs de la base. Il est nommé 4DPOP3Log\_X.txt, *où N* est le numéro séquentiel de l'historique. Une fois qu'un fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre *valeur*. Par défaut, tous les fichiers sont conservés, mais vous pouvez gérer le nombre de fichier à conserver à l'aide du paramètre Circular log limitation. Pour plus d'informations sur les fichiers 4DPOP3Log\_X.txt, veuillez consulter la section *Description des fichiers d'historique*. +Le numéro de port TCP est défini dans la page “Web/Configuration” de la boîte de dialogue des Propriétés de la base. Vous pouvez utiliser les constantes du thème *Numéros de port TCP* pour le paramètre *valeur*. +Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fusionnés avec 4D Desktop (pas d’accès au mode Développement). Pour plus d’informations sur le numéro de port TCP, reportez-vous à la section *Paramétrages du serveur Web*. -### Is host database writable (117) -**Note :** Vous pouvez utiliser ce sélecteur uniquement avec la commande [Get database parameter](get-database-parameter.md) et sa valeur ne peut pas être définie. -**Portée** : Application 4D +### Query by formula joins (49) -**Description** : Retourne 1 si le fichier de structure ou le fichier de projet de l'hôte est en écriture, et retourne 0 s'il est en lecture seule. +**Portée** :Process courant + **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 (utiliser paramétrages de la base), 1 (toujours utiliser les liens auto) ou 2 (utiliser les jointures SQL si possible). -### IMAP Log (119) +**Description** : Mode de fonctionnement des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) relatif à l’utilisation de "jointures SQL". -**Thread-safe** : Yes +Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, ces commandes effectuent des jointures sur le modèle des jointures SQL. Ce mécanisme permet de modifier la sélection d’une table en fonction d’une recherche effectuée sur une autre table sans que les tables soient reliées par un lien automatique (condition nécessaire dans les versions précédentes de 4D). -**Portée** : 4D local, 4D Server +Le sélecteur Query by formula joins vous permet de définir le mode de fonctionnement des commandes de recherche par formule pour le process courant : -**Conservé entre deux sessions :** Non +0 : utiliser les paramètres courants de la base (valeur par défaut). Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, les "jointures SQL" sont toujours activées pour les recherches par formule. Dans les bases de données converties, ce mécanisme est inactivé par défaut pour des raisons des compatibilité mais peut être mis en oeuvre via une préférence.1 : toujours utiliser les liens auto (= fonctionnement des versions précédentes de 4D). Dans ce mode, un lien est nécessaire pour définir la sélection d’une table en fonction de recherches effectuées dans une autre table. 4D n’effectue pas de "jointures SQL".2 : utiliser les jointures SQL si possible (= fonctionnement par défaut des bases créées en version 11.2 et suivantes de 4D v11 SQL). Dans ce mode, 4D établit des "jointures SQL" pour les recherches par formule lorsque la formule s’y prête (à deux exceptions près, voir la description de la commande commandes [QUERY BY FORMULA](query-by-formula.md) ou [QUERY SELECTION BY FORMULA](query-selection-by-formula.md). **Note :** Avec 4D en mode distant, les "jointures SQL" ne peuvent être utilisées que si les formules sont exécutées sur le serveur (elles doivent avoir accès aux enregistrements). Pour configurer le lieu d'exécution des formules, reportez-vous aux sélecteurs 46 et 47. -**Valeurs possibles :** 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, ajouté au nom du fichier). Par défaut, la valeur est 0 (échanges IMAP non enregistrés). -**Description :** Démarre ou stoppe l'enregistrement des échanges entre 4D et le serveur IMAP, lorsqu'un objet transporteur est traité via *IMAP\_transporteur.getMail( )* ou *IMAP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (échanges non enregistrés). Lorsque ce mécanisme est activé, un fichier journal est créé dans le dossier Journaux de la base de données. Il est nommé 4DIMAPLog\_N.txt, où N est le numéro séquentiel du journal. Une fois que le fichier 4DIMAPLog a atteint une taille de 10 Mo, il est fermé et un nouveau est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre value. Par défaut, tous les fichiers sont conservés, mais vous pouvez contrôler le nombre de fichiers à conserver en utilisant le paramètre Circular log limitation. -Pour plus d'informations sur les fichiers 4DIMAPLog\_N.txt, reportez-vous à la section *Description des fichiers d'historique*. +### Query by formula on server (46) +**Portée** :Table et process courants -### Libzip version (120) + **Conservé** **entre deux sessions** : Non -**Portée :** Machine 4D courante + **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -**Conservé entre deux sessions :** n/a +**Description** : Emplacement de l’exécution des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) pour la *table* passée en paramètre. -**Description :** Retourne le numéro de version de la bibliothèque libzip dans l'application 4D sur la machine courante. (Lecture seule) +Dans le cadre de l’exploitation d’une base en client-serveur, les commandes de recherche "par formule" peuvent exécutées soit sur le serveur soit sur le client : +dans les bases de données créées à partir de 4D v11 SQL, ces commandes sont exécutées sur le serveur. dans les bases de données converties, ces commandes sont exécutées sur le client, comme dans les versions précédentes de 4D.dans les bases de données converties, une préférence spécifique permet de modifier globalement le lieu d’exécution de ces commandes.Cette différence de lieu d’exécution influe sur les performances de l’application (l’exécution sur le serveur est généralement plus rapide) mais également sur la programmation. En effet, la valeur des composantes de la formule (notamment les variables appelées via une méthode) diffère suivant le contexte d’exécution. Vous pouvez utiliser ce sélecteur pour adapter ponctuellement le fonctionnement de votre application. + +Si vous passez 0 dans le paramètre *valeur*, l’emplacement d’exécution des commandes de recherche "par formule" dépendra de la configuration de la base : dans les bases créées avec 4D v11 SQL, les commandes seront exécutées sur le serveur. Dans les bases converties, elles seront exécutées sur le client ou le serveur en fonction des préférences de la base. Passez 1 ou 2 dans *valeur* pour "forcer" l’exécution des commandes respectivement sur le client ou sur le serveur. + +Reportez-vous à l'exemple 2. + +**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. -### Pause logging (121) -**Thread-safe** : Yes + +### RDP optimization (133) **Portée :** Application 4D **Conservé entre deux sessions :** Non -**Valeurs possibles :** 0 (reprise des journaux), 1 (pause des journaux) - -Ce sélecteur permet de suspendre/reprendre toutes les opérations de journalisation lancées sur l'application (à l'exception des journaux ORDA). Cette fonction peut être utile pour alléger temporairement les tâches de l'application 4D ou pour planifier les opérations des journaux. +**Valeurs possibles :** `0`: Désactivé (défaut), `1`: Activé. +**Description :** Active ou désactive les optimisations pour RDP (Remote Desktop Protocol). Lorsqu'il est activé, optimise en particulier l'utilisation du presse-papiers partagé dans les connexions RDP, qui peut sinon entraîner des problèmes de blocage. Notez que ce sélecteur désactive la prise en charge dans le presse-papiers des images encodées en tant que data uri dans du texte brut (concerne uniquement les images déposées ou copiées explicitement en tant que texte à partir d'un navigateur). diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md index cc438fb9687309..2a4ca5c7524977 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md @@ -21,26 +21,6 @@ displayed_sidebar: docs *sélecteur* désigne le paramètre à modifier. 4D vous propose des constantes prédéfinies, placées dans le thème *Paramètres de la base*. Le tableau suivant décrit chaque constante et indique sa portée et sa persistance entre deux sessions : -### 4D Server timeout (13) - -**Portée** : Application 4D si *valeur* positive - -**Conservé entre deux sessions** : Oui si *valeur* positive - -**Valeurs possibles** : 0 -> 32 767 - -**Description** : Valeur du délai avant déconnexion (timeout) accordé par 4D Server aux postes clients. - -Par défaut, cette valeur est définie dans la page “Client-Serveur/Options réseau” des Propriétés de la base, sur le poste serveur. - -Le timeout serveur définit la période maximale de non-réponse du client "autorisée", par exemple s'il effectue une opération bloquante. A l'issue de cette période, 4D Server déconnecte le client. Le sélecteur 4D Server timeout vous permet de fixer un nouveau timeout, exprimé en minutes. Cette possibilité permet en particulier d’augmenter la valeur du timeout avant l’exécution sur le poste client d’une opération bloquante de longue durée, risquant d’entraîner une déconnexion ; par exemple, l’impression d’un grand nombre de pages. - -Vous disposez en outre de deux possibilités : - -effectuer une modification globale et permanente : la nouvelle valeur s’applique à tous les process et est stockée dans les préférences de l’application (équivaut à une modification de la valeur dans la boîte de dialogue des Préférences). Pour cela, passez une valeur **positive** dans le paramètre *valeur*.effectuer une modification restreinte et temporaire : la nouvelle valeur ne s’applique qu’au process appelant (les autres process conservant la valeur d’origine), et est abandonnée dès que le serveur reçoit un signe d’activité du poste client — par exemple, dès que l’opération est terminée. Cette possibilité est utile pour gérer les opérations longues initiées par des plug-ins. Pour cela, passez une valeur **négative** dans le paramètre *valeur*. Pour définir une connexion “Ouverte en permanence”, passez 0 dans *valeur*. Reportez-vous à l’exemple 1. - - - ### 4D Remote mode timeout (14) **Portée** (ancienne couche réseau uniquement) : Application 4D si *valeur* positive @@ -53,85 +33,6 @@ Le sélecteur 4D Remote mode timeout n'est pris en compte que si vous utilisez l -### Port ID (15) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Non - -**Description** : Numéro du port TCP utilisé par le serveur Web 4D avec 4D en mode local et 4D Server. Par défaut, la valeur est 80\. - -Le numéro de port TCP est défini dans la page “Web/Configuration” de la boîte de dialogue des Propriétés de la base. Vous pouvez utiliser les constantes du thème *Numéros de port TCP* pour le paramètre *valeur*. - -Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fusionnés avec 4D Desktop (pas d’accès au mode Développement). Pour plus d’informations sur le numéro de port TCP, reportez-vous à la section *Paramétrages du serveur Web*. - - - -### Character set (17) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Oui - -**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Max concurrent Web processes (18) - -**Portée** : 4D local, 4D Server - -**Conservé entre deux sessions** : Oui - -**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Client port ID (22) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 15 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Client character set (24) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 17 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Client max concurrent Web proc (25) - -**Portée** : Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : Voir sélecteur 18 - -**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - - - -### Maximum Web requests size (27) - -**Portée** : 4D local, 4D Server - - **Conservé** **entre deux sessions** : Oui - - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - ### 4D Server log recording (28) @@ -149,153 +50,131 @@ Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fu -### Client Web log recording (30) - -**Portée** :Tous postes 4D distants - - **Conservé** **entre deux sessions** : Oui - - **Valeurs possibles** : 0 = Ne pas enregistrer (défaut), 1 = Enregistrer au format CLF, 2 = Enregistrer au format DLF, 3 = Enregistrer au format ELF, 4 = Enregistrer au format WLF. - -**Description** : Démarrage ou arrêt de l’enregistrement des requêtes Web reçues par les serveurs Web de tous les postes clients. Par défaut, la valeur est 0 (pas d’enregistrement des requêtes). - -Le fonctionnement de ce sélecteur est identique à celui du sélecteur 29 ; il s’applique toutefois à tous les postes 4D clients utilisés en tant que serveurs Web. Le fichier “logweb.txt” est dans ce cas automatiquement placé dans le sous-dossier Logs du dossier base 4D client (dossier de cache). Si vous souhaitez définir des valeurs pour certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - +### 4D Server timeout (13) -### Table sequence number (31) +**Portée** : Application 4D si *valeur* positive -**Portée** :Application 4D +**Conservé entre deux sessions** : Oui si *valeur* positive - **Conservé** **entre deux sessions** : Oui +**Valeurs possibles** : 0 -> 32 767 - **Valeurs possibles** : Toute valeur de type entier long. +**Description** : Valeur du délai avant déconnexion (timeout) accordé par 4D Server aux postes clients. -**Description** : Ce sélecteur permet de modifier ou de lire le numéro unique courant des enregistrements de la table passée en paramètre. “Numéro courant” signifie “dernier numéro utilisé” : si vous modifiez cette valeur à l’aide de [SET DATABASE PARAMETER](set-database-parameter.md), le prochain enregistrement sera créé avec comme numéro la valeur passée + 1\. Ce nouveau numéro est, lui, retourné par la commande [Sequence number](sequence-number.md) ainsi que dans tout champ de la table auquel la propriété "Incrémentation auto" a été affectée en Structure ou via le SQL. +Par défaut, cette valeur est définie dans la page “Client-Serveur/Options réseau” des Propriétés de la base, sur le poste serveur. -Par défaut, le numéro unique est défini par 4D et correspond à l’ordre de création des enregistrements. +Le timeout serveur définit la période maximale de non-réponse du client "autorisée", par exemple s'il effectue une opération bloquante. A l'issue de cette période, 4D Server déconnecte le client. Le sélecteur 4D Server timeout vous permet de fixer un nouveau timeout, exprimé en minutes. Cette possibilité permet en particulier d’augmenter la valeur du timeout avant l’exécution sur le poste client d’une opération bloquante de longue durée, risquant d’entraîner une déconnexion ; par exemple, l’impression d’un grand nombre de pages. -Pour des informations supplémentaires, reportez-vous à la documentation de la commande [Sequence number](sequence-number.md). +Vous disposez en outre de deux possibilités : +effectuer une modification globale et permanente : la nouvelle valeur s’applique à tous les process et est stockée dans les préférences de l’application (équivaut à une modification de la valeur dans la boîte de dialogue des Préférences). Pour cela, passez une valeur **positive** dans le paramètre *valeur*.effectuer une modification restreinte et temporaire : la nouvelle valeur ne s’applique qu’au process appelant (les autres process conservant la valeur d’origine), et est abandonnée dès que le serveur reçoit un signe d’activité du poste client — par exemple, dès que l’opération est terminée. Cette possibilité est utile pour gérer les opérations longues initiées par des plug-ins. Pour cela, passez une valeur **négative** dans le paramètre *valeur*. Pour définir une connexion “Ouverte en permanence”, passez 0 dans *valeur*. Reportez-vous à l’exemple 1. -### Debug log recording (34) -**Thread-safe** : Yes -**Portée** : Application 4D +### Auto synchro resources folder (48) -**Conservé** **entre deux sessions** : Non +**Portée** :Poste 4D distant -**Description** : Démarrage ou arrêt de l’enregistrement séquentiel des événements de programmation de 4D dans le fichier *4DDebugLogServer* *\[\_pN\_n\].txt* (où \_n est le numéro de segment du fichier). + **Conservé** **entre deux sessions** : Non -Deux modes sont possibles : + **Valeurs possibles** : 0 (pas de synchronisation), 1 (synchronisation auto) ou 2 (demander). -- Le mode standard propose une vue basique des événements et le fichier est automatiquement placé dans le sous-dossier Logs de la base, à côté du fichier de structure. Les durées d'exécution sont exprimées en millisecondes avec la valeur "< ms" qui s'affiche lorsqu'une opération dure moins d'une milliseconde. +**Description** : Mode de synchronisation dynamique du dossier *Resources* du poste client 4D ayant exécuté la commande avec celui du serveur. -- Le mode tabulé fournit des informations supplémentaires et utilise un format tabulé plus compact dans le fichier. Les durées d'exécution sont exprimées en millisecondes. **Valeurs possibles** : Entier long contenant un champ de bits (bit field) : valeur = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +Lorsque le contenu du dossier *Resources* sur le serveur a été modifié ou qu’une demande de synchronisation a été émise (via l’explorateur de ressources ou suite à l'exécution de la commande [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md)), le serveur notifie les clients connectés. -- Le bit 0 (valeur 1) permet de demander à activer le fichier (à noter que toute autre valeur non nulle l’activera également) +Trois modes de synchronisation sont alors possibles côté client. Le sélecteur Auto synchro resources folder vous permet de définir le mode à utiliser pour le poste client et la session courante : -- Le bit 1 (valeur 2) permet de demander les paramètres d’appel aux commandes et (mode interprété uniquement) aux méthodes. +0 (valeur par défaut) : pas de synchronisation dynamique (la demande de synchronisation est ignorée) 1 : synchronisation dynamique automatique2 : affichage d’une boîte de dialogue sur les postes clients, avec possibilité d’effectuer ou de refuser la synchronisation.Le mode de synchronisation peut également être défini globalement dans les Propriétés de la base. -- Le bit 2 (valeur 4) permet d’activer le format tabulé. -- Le bit 3 (valeur 8) permet de désactiver l’écriture immédiate de chaque opération sur disque (activée par défaut). L’écriture immédiate est moins rapide mais plus efficace par exemple pour rechercher les causes d’un plantage. Si vous désactivez ce mode, le fichier sera généré plus rapidement. -- Le bit 4 (valeur 16) permet de désactiver l’enregistrement des appels de plug-ins (activé par défaut). -- Le bit 5 (valeur 32) permet de désactiver l'enregistrement des fonctions membres. +### Cache flush periodicity (95) -Exemples : +**Thread-safe** : Yes -FIXER PARAMETRE BASE(34;1) // active le mode standard sans les paramètres, avec les durées -FIXER PARAMETRE BASE(34;2) // active le mode standard avec les paramètres et les durées +Portée : 4D local, 4D Server -FIXER PARAMETRE BASE(34;2+4) // active le mode tabulé avec les paramètres et les durées +**Conservé entre deux sessions** : Non -FIXER PARAMETRE BASE(34;0) // désactive le fichier +**Valeurs possibles** : entier long > 1 (secondes) -Dans tout type d'application 4D (4D tous modes, 4D Server, 4D Volume Desktop), en interprété ou en compilé, vous pouvez éviter que le fichier n’enregistre une trop grande quantité d’informations : +**Description** : Permet de lire ou de fixer la valeur courante de périodicité de l'écriture du cache de données sur le disque, exprimée en secondes. Si elle est modifiée, cette valeur remplace la valeur définie par l'option **Ecriture cache toutes les secondes/minutes** dans la [XML DECODE](xml-decode.md) des Propriétés de la base durant la session courante (elle n'est pas stockée dans les Propriétés de la base). -- en restreignant les commandes 4D examinées à l'aide de Log command list (sélecteur 80), ou -- en le restreignant au process courant uniquement à l'aide de Current process debug log recording (sélecteur 111). Cela ajoutera la lettre "p" et le numéro de process au nom du fichier : *4DDebugLog* *\[\_pN\_n\].txt ou* *4DDebugLogServer\[\_pn\_n\].txt.* Pour plus d’informations sur le format et l’exploitation du fichier 4DDebugLog, veuillez consulter la *Description des fichiers d'historique* dans le Manuel Développement. -**Note :** Ce sélecteur est proposé uniquement à des fins de débogage et doit être utilisé avec précaution car il peut entraîner une dégradation des performances de l'application. +### Cache unload minimum size (66) +**Portée** : Application 4D -### Client Server port ID (35) +**Conservé entre deux sessions** : Non -**Portée** :Base de données +**Valeurs possibles** : Entier long positif > 1. - **Conservé** **entre deux sessions** : Oui +**Description** : Taille minimum de mémoire à libérer du cache de la base de données lorsque le moteur a besoin d’y faire de la place pour y allouer un objet (valeur en octets). - **Valeurs possibles** : 0 à 65535 +Ce sélecteur a pour but de permettre de réduire le nombre de libérations de données du cache afin d’obtenir des gains de performances. Vous pouvez faire varier ce paramétrage en fonction de la taille du cache et de celle des blocs de données manipulées dans votre base. -**Description** : Numéro de port TCP sur lequel 4D Server publie la base de données (à destination des postes 4D distants). Par défaut, la valeur est 19813\. +Par défaut, si ce sélecteur n’est pas utilisé, 4D décharge au minimum 10 % du cache en cas de besoin de place. -La personnalisation de cette valeur permet d’utiliser plusieurs applications 4D client-serveur sur la même machine avec le protocole TCP ; dans ce cas, vous devez spécifier un numéro de port différent pour chaque application. -La valeur est stockée dans le fichier de structure de la base. Elle peut être définie avec 4D en mode local mais n’est prise en compte qu’en configuration client-serveur. -Lorsque vous modifiez cette valeur, il est nécessaire de redémarrer le poste serveur afin que la nouvelle valeur soit prise en compte. +### Character set (17) +**Portée** : 4D local, 4D Server -### HTTPS Port ID (39) +**Conservé entre deux sessions** : Oui -**Portée** :4D local, 4D Server +**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - **Conservé** **entre deux sessions** : Oui - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. +### Circular log limitation (90) -### Client HTTPS port ID (40) +**Thread-safe** : Yes -**Portée** :Tous postes 4D distants +**Portée** : 4D local, 4D Server. - **Conservé** **entre deux sessions** : Oui +**Conservé entre deux sessions** : Non - **Valeurs possibles** : 0 à 65535 +**Valeurs possibles** : Toute valeur entière, 0 = conserver tous les journaux -**Description** : Numéro du port TCP utilisé par les serveurs Web des postes clients pour les connexions sécurisées via SSL (protocole HTTPS). Par défaut, la valeur est 443 (valeur standard). +**Description** : Nombre maximum de fichiers à conserver par roulement pour chaque type de journal. Par défaut, les 50 fichiers les plus récents sont conservés. Si vous passez une valeur N, seuls les N fichiers les plus récents seront conservés, le plus ancien étant automatiquement effacé à la création d'un nouveau. Ce paramétrage s'applique à tous les fichiers journaux, notamment le journal des requêtes (sélecteurs 28 et 45), le journal de débogage (sélecteur 34), le journal des événements (sélecteur 79), l'historique des requêtes Web (sélecteurs 29 et 84 de la commande [WEB SET OPTION](web-set-option.md)), etc. -Le fonctionnement de ce sélecteur est identique à celui du sélecteur 39 ; il s’applique toutefois à tous les postes 4D distants utilisés en tant que serveurs Web. Si vous souhaitez modifier la valeur de certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D distant. -### SQL Autocommit (43) +### Client character set (24) -**Portée** :Base de données +**Portée** : Tous postes 4D distants **Conservé** **entre deux sessions** : Oui - **Valeurs possibles** : 0 (désactivation) ou 1 (activation) + **Valeurs possibles** : Voir sélecteur 17 -**Description** : Activation ou désactivation du mode SQL auto-commit. Par défaut, la valeur est 0 (mode désactivé) +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Le mode auto-commit permet de renforcer l'intégrité référentielle de la base. Lorsque ce mode est actif, les requêtes *SELECT*, *INSERT*, *UPDATE*, *DELETE* (SIUD) sont automatiquement incluses dans des transactions lorsqu'elles sont exécutées en-dehors de toute transaction. Ce mode peut également être défini dans les préférences de la base. -### SQL Engine case sensitivity (44) +### Client HTTPS port ID (40) -**Portée** : Base de données +**Portée** :Tous postes 4D distants -**Conservé** **entre deux sessions** : Oui + **Conservé** **entre deux sessions** : Oui -**Valeurs possibles** : 0 (casse non prise en compte) ou 1 (casse prise en compte) + **Valeurs possibles** : 0 à 65535 -**Description** : Activation ou désactivation de la prise en compte de la casse des caractères pour les comparaisons de chaînes effectuées par le moteur SQL. +**Description** : Numéro du port TCP utilisé par les serveurs Web des postes clients pour les connexions sécurisées via SSL (protocole HTTPS). Par défaut, la valeur est 443 (valeur standard). -Par défaut, la valeur est 1 (casse prise en compte) : le moteur SQL établit une différence entre les majuscules et les minuscules ainsi qu'entre les caractères accentués lors des comparaisons de chaînes (tris et recherches). Par exemple "ABC" = "ABC" mais "ABC" # "Abc" et "abc" # "âbc" . Dans certains cas, par exemple pour aligner le fonctionnement du moteur SQL sur celui du moteur 4D, vous pourrez souhaiter que les comparaisons de chaînes ne tiennent pas compte de la casse ("ABC"="Abc"="âbc"). +Le fonctionnement de ce sélecteur est identique à celui du sélecteur 39 ; il s’applique toutefois à tous les postes 4D distants utilisés en tant que serveurs Web. Si vous souhaitez modifier la valeur de certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D distant. -**Attention :** *Étant donné que cette option modifie le fichier de structure de la base de données et tous les process, il est fortement recommandé,* *pour des raisons de performances,* *de la définir uniquement au démarrage de la base de données.* Cette option peut également être définie dans la [CALL SUBFORM CONTAINER](call-subform-container.md) des Propriétés de la base. @@ -315,215 +194,173 @@ Ces fichiers texte stockent dans un format tabulé simple diverses informations -### Query by formula on server (46) -**Portée** :Table et process courants - - **Conservé** **entre deux sessions** : Non +### Client max concurrent Web proc (25) - **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) +**Portée** : Tous postes 4D distants -**Description** : Emplacement de l’exécution des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) pour la *table* passée en paramètre. + **Conservé** **entre deux sessions** : Oui -Dans le cadre de l’exploitation d’une base en client-serveur, les commandes de recherche "par formule" peuvent exécutées soit sur le serveur soit sur le client : + **Valeurs possibles** : Voir sélecteur 18 -dans les bases de données créées à partir de 4D v11 SQL, ces commandes sont exécutées sur le serveur. dans les bases de données converties, ces commandes sont exécutées sur le client, comme dans les versions précédentes de 4D.dans les bases de données converties, une préférence spécifique permet de modifier globalement le lieu d’exécution de ces commandes.Cette différence de lieu d’exécution influe sur les performances de l’application (l’exécution sur le serveur est généralement plus rapide) mais également sur la programmation. En effet, la valeur des composantes de la formule (notamment les variables appelées via une méthode) diffère suivant le contexte d’exécution. Vous pouvez utiliser ce sélecteur pour adapter ponctuellement le fonctionnement de votre application. +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Si vous passez 0 dans le paramètre *valeur*, l’emplacement d’exécution des commandes de recherche "par formule" dépendra de la configuration de la base : dans les bases créées avec 4D v11 SQL, les commandes seront exécutées sur le serveur. Dans les bases converties, elles seront exécutées sur le client ou le serveur en fonction des préférences de la base. Passez 1 ou 2 dans *valeur* pour "forcer" l’exécution des commandes respectivement sur le client ou sur le serveur. -Reportez-vous à l'exemple 2. -**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. +### Client port ID (22) +**Portée** : Tous postes 4D distants -### Order by formula on server (47) + **Conservé** **entre deux sessions** : Oui -**Portée** :Table et process courants + **Valeurs possibles** : Voir sélecteur 15 - **Conservé** **entre deux sessions** : Non +**Description** : Permet de spécifier ce paramètre pour les postes 4D distants utilisés en tant que serveurs Web. La valeur définie via ce sélecteur est appliquée à tous les postes distants utilisés comme serveurs Web. Si vous souhaitez définir cette valeur pour certains postes distants uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. - **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -**Description** : Emplacement de l’exécution de la commande [ORDER BY FORMULA](order-by-formula.md) pour la table passée en paramètre. -Dans le cadre de l’exploitation d’une base en client-serveur, la commande [ORDER BY FORMULA](order-by-formula.md) peut être exécutée soit sur le serveur soit sur le client. Ce sélecteur permet de définir l’emplacement de l’exécution de cette commande (serveur ou client). Ce mode peut également être défini dans les préférences de la base. Pour plus d’informations, reportez-vous à la description du sélecteur 46, Query by formula on server. - -**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. +### Client Server port ID (35) +**Portée** :Base de données -### Auto synchro resources folder (48) + **Conservé** **entre deux sessions** : Oui -**Portée** :Poste 4D distant + **Valeurs possibles** : 0 à 65535 - **Conservé** **entre deux sessions** : Non +**Description** : Numéro de port TCP sur lequel 4D Server publie la base de données (à destination des postes 4D distants). Par défaut, la valeur est 19813\. - **Valeurs possibles** : 0 (pas de synchronisation), 1 (synchronisation auto) ou 2 (demander). +La personnalisation de cette valeur permet d’utiliser plusieurs applications 4D client-serveur sur la même machine avec le protocole TCP ; dans ce cas, vous devez spécifier un numéro de port différent pour chaque application. -**Description** : Mode de synchronisation dynamique du dossier *Resources* du poste client 4D ayant exécuté la commande avec celui du serveur. +La valeur est stockée dans le fichier de structure de la base. Elle peut être définie avec 4D en mode local mais n’est prise en compte qu’en configuration client-serveur. -Lorsque le contenu du dossier *Resources* sur le serveur a été modifié ou qu’une demande de synchronisation a été émise (via l’explorateur de ressources ou suite à l'exécution de la commande [NOTIFY RESOURCES FOLDER MODIFICATION](notify-resources-folder-modification.md)), le serveur notifie les clients connectés. +Lorsque vous modifiez cette valeur, il est nécessaire de redémarrer le poste serveur afin que la nouvelle valeur soit prise en compte. -Trois modes de synchronisation sont alors possibles côté client. Le sélecteur Auto synchro resources folder vous permet de définir le mode à utiliser pour le poste client et la session courante : -0 (valeur par défaut) : pas de synchronisation dynamique (la demande de synchronisation est ignorée) 1 : synchronisation dynamique automatique2 : affichage d’une boîte de dialogue sur les postes clients, avec possibilité d’effectuer ou de refuser la synchronisation.Le mode de synchronisation peut également être défini globalement dans les Propriétés de la base. +### Client Web log recording (30) -### Query by formula joins (49) +**Portée** :Tous postes 4D distants -**Portée** :Process courant + **Conservé** **entre deux sessions** : Oui - **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 = Ne pas enregistrer (défaut), 1 = Enregistrer au format CLF, 2 = Enregistrer au format DLF, 3 = Enregistrer au format ELF, 4 = Enregistrer au format WLF. - **Valeurs possibles** : 0 (utiliser paramétrages de la base), 1 (toujours utiliser les liens auto) ou 2 (utiliser les jointures SQL si possible). +**Description** : Démarrage ou arrêt de l’enregistrement des requêtes Web reçues par les serveurs Web de tous les postes clients. Par défaut, la valeur est 0 (pas d’enregistrement des requêtes). -**Description** : Mode de fonctionnement des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) relatif à l’utilisation de "jointures SQL". +Le fonctionnement de ce sélecteur est identique à celui du sélecteur 29 ; il s’applique toutefois à tous les postes 4D clients utilisés en tant que serveurs Web. Le fichier “logweb.txt” est dans ce cas automatiquement placé dans le sous-dossier Logs du dossier base 4D client (dossier de cache). Si vous souhaitez définir des valeurs pour certains postes clients uniquement, utilisez la boîte de dialogue des Préférences de 4D en mode distant. -Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, ces commandes effectuent des jointures sur le modèle des jointures SQL. Ce mécanisme permet de modifier la sélection d’une table en fonction d’une recherche effectuée sur une autre table sans que les tables soient reliées par un lien automatique (condition nécessaire dans les versions précédentes de 4D). -Le sélecteur Query by formula joins vous permet de définir le mode de fonctionnement des commandes de recherche par formule pour le process courant : -0 : utiliser les paramètres courants de la base (valeur par défaut). Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, les "jointures SQL" sont toujours activées pour les recherches par formule. Dans les bases de données converties, ce mécanisme est inactivé par défaut pour des raisons des compatibilité mais peut être mis en oeuvre via une préférence.1 : toujours utiliser les liens auto (= fonctionnement des versions précédentes de 4D). Dans ce mode, un lien est nécessaire pour définir la sélection d’une table en fonction de recherches effectuées dans une autre table. 4D n’effectue pas de "jointures SQL".2 : utiliser les jointures SQL si possible (= fonctionnement par défaut des bases créées en version 11.2 et suivantes de 4D v11 SQL). Dans ce mode, 4D établit des "jointures SQL" pour les recherches par formule lorsque la formule s’y prête (à deux exceptions près, voir la description de la commande commandes [QUERY BY FORMULA](query-by-formula.md) ou [QUERY SELECTION BY FORMULA](query-selection-by-formula.md). **Note :** Avec 4D en mode distant, les "jointures SQL" ne peuvent être utilisées que si les formules sont exécutées sur le serveur (elles doivent avoir accès aux enregistrements). Pour configurer le lieu d'exécution des formules, reportez-vous aux sélecteurs 46 et 47. +### Current process debug log recording (111) +**Portée :** Application 4D -### HTTP compression level (50) +**Conservé entre deux sessions :** Non -**Portée** : Application 4D +**Description** : Démarrage ou arrêt de l'enregistrement séquentiel des événements de programmation **du process courant** dans un fichier d'historique séparé. Cet historique est semblable à Debug log recording (sélecteur 34) mais il ne porte que sur le process courant. Le nom du fichier d'historique inclut la lettre "p" et le numéro du process : 4DDebugLog\[\_p*N*_*n*].txt, où N est l'ID unique du process. Pour plus d'informations sur ce format et sur l'utilisation du fichier *4DDebugLog*, veuillez consulter la *Description des fichiers d'historique* dans le Mode Développement. - **Conservé** **entre deux sessions** : Non +**Notes :** Ce sélecteur est fourni uniquement à des fins de débogage et doit être utilisé avec précaution. Plus particulièrement, il ne doit pas être utilisé en production, étant donné qu'il peut avoir une incidence sur les performances de l'application. Vous pouvez utiliser simultanément les sélecteurs Debug log recording et Current process debug log recording, auquel cas les actions liées au process courant ne seront pas enregistrées dans le fichier d'historique principal. - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### HTTP compression threshold (51) +### Dates inside objects (85) -**Portée** : Application 4D +**Portée** : Process courant **Conservé** **entre deux sessions** : Non - **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. - - - -### Server base process stack size (53) - -**Portée** : 4D Server + **Valeurs possibles** : String type without time zone (0), String type with time zone (1), Date type (2) (défaut) - **Conservé** **entre deux sessions** : Non +**Description** : Définit la manière dont les dates sont stockées dans les objets, ainsi que leur traitement en cas d'importation/exportation en JSON. - **Valeurs possibles** : Entier long positif. +Lorsque ce sélecteur vaut Date type (valeur par défaut dans les bases créées à compter de 4D v17), les dates 4D sont stockées avec le type date dans les objets, en tenant compte des paramétrages de date locaux. Lorsqu'ils sont exportés au format JSON, les attributs date seront convertis en chaînes qui ne contiennent pas l'heure (**Note :** ce paramétrage peut être défini au niveau des paramètres de la base via l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la *Page Compatibilité*). -**Description** : Taille de la pile allouée à chaque process système préemptif sur le serveur, exprimée en octets. La taille par défaut est déterminée par le système. +Si vous passez String type with time zone dans ce sélecteur, les dates 4D seront converties en chaînes ISO en tenant compte du fuseau horaire local. Par exemple, la conversion de la date !23/08/2013! donne "2013-08-22T22:00:00Z" au format JSON lorsque l’opération est effectuée en France en été (GMT+2). Ce principe est conforme au fonctionnement standard de JavaScript. Ce fonctionnement peut être source d’erreurs si vous souhaitez envoyer des valeurs de date en JSON à une personne qui se trouve dans un autre fuseau horaire. C’est le cas par exemple pour l’exportation d’une table avec [Selection to JSON](selection-to-json.md) en France destiné à être réimporté aux USA avec [JSON TO SELECTION](json-to-selection.md). Par défaut, les dates étant réinterprétées dans chaque fuseau horaire, les valeurs stockées dans la base seront différentes. Dans ce cas, vous pouvez modifier le mode de conversion des dates afin qu’il ne tienne pas compte du fuseau horaire en passant String type without time zone dans ce sélecteur. La conversion de la date !23/08/2013! donnera alors "2013-08-23T00:00:00Z" dans tous les cas. -Les process système préemptifs (process de type Process base 4D client) sont chargés de contrôler les process clients 4D principaux. La taille allouée par défaut à la pile de chaque process préemptif permet un bon confort d’exécution mais peut s’avérer conséquente lorsque de très nombreux process (plusieurs centaines) sont créés. -A des fins d’optimisation, cette taille peut être diminuée sensiblement si les opérations effectuées par la base s'y prêtent (par exemple si la base n’effectue pas de tris sur de grosses quantités d’enregistrements). Des valeurs de 512 voire de 256 Ko sont possibles. Attention, le sous-dimensionnement de la pile est critique et peut nuire au fonctionnement de 4D Server. Le réglage de ce paramètre est à effectuer avec précaution et doit tenir compte des conditions d’utilisation de la base (nombre d’enregistrements, types d’opérations, etc.). Pour être pris en compte, ce paramétrage doit être exécuté sur le poste serveur (par exemple dans la méthode base Sur démarrage serveur). +### Debug log recording (34) -### Idle connections timeout (54) +**Thread-safe** : Yes -**Portée** : Application 4D sauf si valeur négative +**Portée** : Application 4D **Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. +**Description** : Démarrage ou arrêt de l’enregistrement séquentiel des événements de programmation de 4D dans le fichier *4DDebugLogServer* *\[\_pN\_n\].txt* (où \_n est le numéro de segment du fichier). -**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +Deux modes sont possibles : -Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. +- Le mode standard propose une vue basique des événements et le fichier est automatiquement placé dans le sous-dossier Logs de la base, à côté du fichier de structure. Les durées d'exécution sont exprimées en millisecondes avec la valeur "< ms" qui s'affiche lorsqu'une opération dure moins d'une milliseconde. -Si vous passez une valeur positive dans *valeur*, elle s'applique à toutes les nouvelles connexions dans tous les process. Si vous passez une valeur négative, elle s’applique aux connexions ouvertes dans le process courant. Si vous passez 0, les connexions inactives ne sont pas soumises à un timeout. +- Le mode tabulé fournit des informations supplémentaires et utilise un format tabulé plus compact dans le fichier. Les durées d'exécution sont exprimées en millisecondes. **Valeurs possibles** : Entier long contenant un champ de bits (bit field) : valeur = bit1(1)+bit2(2)+bit3(4)+bit4(8)+…). +- Le bit 0 (valeur 1) permet de demander à activer le fichier (à noter que toute autre valeur non nulle l’activera également) +- Le bit 1 (valeur 2) permet de demander les paramètres d’appel aux commandes et (mode interprété uniquement) aux méthodes. +- Le bit 2 (valeur 4) permet d’activer le format tabulé. +- Le bit 3 (valeur 8) permet de désactiver l’écriture immédiate de chaque opération sur disque (activée par défaut). L’écriture immédiate est moins rapide mais plus efficace par exemple pour rechercher les causes d’un plantage. Si vous désactivez ce mode, le fichier sera généré plus rapidement. +- Le bit 4 (valeur 16) permet de désactiver l’enregistrement des appels de plug-ins (activé par défaut). +- Le bit 5 (valeur 32) permet de désactiver l'enregistrement des fonctions membres. -Ce paramètre doit être défini côté client. Généralement, vous n'aurez pas besoin de modifier cette valeur. +Exemples : +```4d +SET DATABASE PARAMETER(34;1) // active le mode standard sans les paramètres, avec les durées +SET DATABASE PARAMETER(34;2) // active le mode standard avec les paramètres et les durées +SET DATABASE PARAMETER(34;2+4) // active le mode tabulé avec les paramètres et les durées +SET DATABASE PARAMETER(34;0) // désactive le fichier +``` +Dans tout type d'application 4D (4D tous modes, 4D Server, 4D Volume Desktop), en interprété ou en compilé, vous pouvez éviter que le fichier n’enregistre une trop grande quantité d’informations : -### PHP interpreter IP address (55) +- en restreignant les commandes 4D examinées à l'aide de Log command list (sélecteur 80), ou +- en le restreignant au process courant uniquement à l'aide de Current process debug log recording (sélecteur 111). Cela ajoutera la lettre "p" et le numéro de process au nom du fichier : *4DDebugLog* *\[\_pN\_n\].txt ou* *4DDebugLogServer\[\_pn\_n\].txt.* Pour plus d’informations sur le format et l’exploitation du fichier 4DDebugLog, veuillez consulter la *Description des fichiers d'historique* dans le Manuel Développement. -**Portée** :Application 4D +**Note :** Ce sélecteur est proposé uniquement à des fins de débogage et doit être utilisé avec précaution car il peut entraîner une dégradation des performances de l'application. - **Conservé** **entre deux sessions** : Non -**Valeurs** : Chaîne formatée en IPv4 (par exemple "127.0.0.1") ou en IPv6 (par exemple "2001:0db8:0000:0000:0000:ff00:0042:8329") -**Description** : Adresse IP utilisée localement par 4D pour communiquer avec l’interpéteur PHP via fastcgi. Par défaut, la valeur est "127.0.0.1" (les adresses au format IPv6 sont prises en charge à compter de 4D v16R4).. Cette adresse doit correspondre à la machine sur laquelle se trouve 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. -Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. +### Diagnostic log level (86) +**Thread-safe** : Yes +**Portée :** Application 4D -### PHP interpreter port (56) +**Conservé entre deux sessions :** Non -**Portée** :Application 4D +**Description :** Niveau(x) de messages à inclure dans le journal de diagnostic lorsqu'il est activé (voir le sélecteur Diagnostic log recording). Chaque niveau désigne une catégorie de messages de diagnostic et inclut automatiquement la ou les catégories plus importantes. Pour une description des catégories, consultez la section *Log niveau diagnostic* sur le site *developer.4d.com*. - **Conservé** **entre deux sessions** : Non +**Valeurs possibles** **:** L'une des constantes suivantes (Log info par défaut): +- Log trace: active ERROR, WARN, INFO, DEBUG, TRACE (niveau le plus détaillé) +- Log debug: active ERROR, WARN, INFO, DEBUG +- Log info: active ERROR, WARN, INFO (par défaut) +- Log warn: active ERROR, WARN Log error: active ERROR (niveau le moins détaillé) -**Valeurs** : Valeur de type entier long positif. Par défaut, la valeur est 8002\. -**Description** : Numéro du port TCP utilisé par l’interpréteur PHP de 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. +### Diagnostic log recording (79) -### SSL cipher list (64) +**Thread-safe** : Yes **Portée** : Application 4D -**Conservé entre deux sessions** : Non - -**Valeurs possibles** : Suite de chaînes séparées par des deux-points. - -**Description :** Liste de chiffrement (*cipher list*) utilisée par 4D pour le protocole sécurisé. Cette liste permet de modifier la priorité des algorithmes de chiffrement mis en oeuvre par 4D. - -Par exemple, vous pouvez passer la chaîne suivante dans le paramètre *valeur* : "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". Pour une description complète de la syntaxe de la liste de chiffrement, reportez-vous à la *page ciphers sur le site de OpenSSL*. - -Ce paramétrage s'applique au principal serveur Web (à l'exclusion des objets Web server), au serveur SQL, aux connexions client/serveur ainsi qu'au client HTTP et aux commandes 4D faisant appel au protocole sécurisé. Ce paramétrage est temporaire (il n'est pas maintenu entre les sessions). - -Lorsque la liste de chiffrement a été modifiée, vous devez redémarrer le serveur concerné pour que le nouveau paramétrage soit pris en compte. - -Pour réinitialiser la liste de chiffrement à sa valeur par défaut (stockée en dur dans le fichier SLI), appelez la commande [SET DATABASE PARAMETER](set-database-parameter.md) et passez une chaîne vide ("") dans le paramètre *valeur*. - -**Note :** Avec la commande [Get database parameter](get-database-parameter.md), la liste de chiffrement est retournée dans le paramètre optionnel *valeurAlpha* et le paramètre de retour vaut toujours 0. - - - -### Cache unload minimum size (66) - -**Portée** : Application 4D - -**Conservé entre deux sessions** : Non - -**Valeurs possibles** : Entier long positif > 1. - -**Description** : Taille minimum de mémoire à libérer du cache de la base de données lorsque le moteur a besoin d’y faire de la place pour y allouer un objet (valeur en octets). - -Ce sélecteur a pour but de permettre de réduire le nombre de libérations de données du cache afin d’obtenir des gains de performances. Vous pouvez faire varier ce paramétrage en fonction de la taille du cache et de celle des blocs de données manipulées dans votre base. - -Par défaut, si ce sélecteur n’est pas utilisé, 4D décharge au minimum 10 % du cache en cas de besoin de place. - - - -### Direct2D status (69) - -**Portée**: Application 4D - -**Conservé entre deux sessions** : Non - -**Description** : Mode d’activation de l’implémentation de Direct2D sous Windows. +**Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Une des constantes suivantes (mode 3 par défaut) : +**Valeurs possibles** : 0 ou 1 (0 = ne pas enregistrer, 1 = enregistrer) -Direct2D disabled (0) : le mode Direct2D n’est pas activé, la base fonctionne dans le mode précédent (GDI/GDIPlus). +**Description** : Démarrage ou arrêt de l’enregistrement du fichier de diagnostic de 4D. Par défaut, la valeur est 0 (pas d’enregistrement). -Direct2D hardware (1) : utilisation de Direct2D en contexte graphique matériel dans toute l’application 4D. Si ce contexte n’est pas disponible, utilisation du contexte graphique Direct2D logiciel. +4D vous permet d’enregistrer de manière continue dans un fichier de diagnostic un ensemble d’événements relatifs au fonctionnement interne de l’application. Les informations contenues dans ce fichier sont destinées à la mise au point des applications 4D et pourront être analysées avec l’aide des services techniques de 4D (pour plus d'informations, reportez-vous à la section *Description des fichiers d'historique* sur *developer.4d.com*). Lorsque vous passez 1 dans ce sélecteur, un fichier de diagnostic est automatiquement créé (ou ouvert) dans le dossier **Logs** de la base. Le fichier est nommé *4DDiagnosticLog\_N*.txt (ou *4DDiagnosticLogServer\_N.*txt s'il est généré sur le serveur). Une fois que le fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel N incrémenté. -Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation de Direct2D en contexte graphique logiciel dans toute l’application 4D. +A noter qu’il est possible d’inclure des informations personnalisées dans ce fichier à l’aide de la commande [LOG EVENT](log-event.md). -**Attention :* Ce sélecteur est fourni uniquement à des fins de débogage. Etant donné que plusieurs fonctionnalités de 4D dépendent de Direct2D, il ne doit pas être désactivé dans les applications déployées. Seul le mode par défaut (Direct2D software) est approuvé pour les applications déployées.* @@ -536,221 +373,214 @@ Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation d **Valeurs possibles** : 0, 1, 2, 3, 4 ou 5 (cf. valeurs du sélecteur 69). La valeur retournée dépend de la disponibilité de Direct2D, du matériel et de la qualité de la prise en charge de Direct2D par le système d’exploitation. Par exemple, si vous exécutez : - +```4d  SET DATABASE PARAMETER(;Direct2D Hardware)  $mode:=Get database parameter() +``` - sur Windows 7 et suivants, *$mode* vaudra 1 si le système détecte un matériel compatible Direct2D, sinon *$mode* vaudra 3 (contexte logiciel). - - sur Windows Vista, *$mode* vaudra 1 si le système détecte un matériel compatible Direct2D, sinon *$mode* vaudra 0 (désactivation de Direct2D). - - sur Windows XP, *$mode* vaudra toujours 0 (incompatibilité avec Direct2D). -### Diagnostic log recording (79) -**Thread-safe** : Yes +### Direct2D status (69) -**Portée** : Application 4D +**Portée**: Application 4D -**Conservé** **entre deux sessions** : Non +**Conservé entre deux sessions** : Non -**Valeurs possibles** : 0 ou 1 (0 = ne pas enregistrer, 1 = enregistrer) +**Description** : Mode d’activation de l’implémentation de Direct2D sous Windows. -**Description** : Démarrage ou arrêt de l’enregistrement du fichier de diagnostic de 4D. Par défaut, la valeur est 0 (pas d’enregistrement). +**Valeurs possibles** : Une des constantes suivantes (mode 3 par défaut) : -4D vous permet d’enregistrer de manière continue dans un fichier de diagnostic un ensemble d’événements relatifs au fonctionnement interne de l’application. Les informations contenues dans ce fichier sont destinées à la mise au point des applications 4D et pourront être analysées avec l’aide des services techniques de 4D (pour plus d'informations, reportez-vous à la section *Description des fichiers d'historique* sur *developer.4d.com*). Lorsque vous passez 1 dans ce sélecteur, un fichier de diagnostic est automatiquement créé (ou ouvert) dans le dossier **Logs** de la base. Le fichier est nommé *4DDiagnosticLog\_N*.txt (ou *4DDiagnosticLogServer\_N.*txt s'il est généré sur le serveur). Une fois que le fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel N incrémenté. +Direct2D disabled (0) : le mode Direct2D n’est pas activé, la base fonctionne dans le mode précédent (GDI/GDIPlus). -A noter qu’il est possible d’inclure des informations personnalisées dans ce fichier à l’aide de la commande [LOG EVENT](log-event.md). +Direct2D hardware (1) : utilisation de Direct2D en contexte graphique matériel dans toute l’application 4D. Si ce contexte n’est pas disponible, utilisation du contexte graphique Direct2D logiciel. +Direct2D software (3) (Mode par défaut) : à partir de Windows 7, utilisation de Direct2D en contexte graphique logiciel dans toute l’application 4D. +**Attention :* Ce sélecteur est fourni uniquement à des fins de débogage. Etant donné que plusieurs fonctionnalités de 4D dépendent de Direct2D, il ne doit pas être désactivé dans les applications déployées. Seul le mode par défaut (Direct2D software) est approuvé pour les applications déployées.* -### Log command list (80) -**Portée** : Application 4D -**Conservé** **entre deux sessions** : Non -**Valeurs possibles** : Chaîne contenant la liste des numéros des commandes 4D à enregistrer (séparées par des points-virgules), ou "all" pour enregistrer toutes les commande, ou "" (chaîne vide) pour n’enregistrer aucune commande, ou le préfixe "-" pour exclure des commandes spécifiques. +### HTTP compression level (50) -**Description** : Liste des commandes 4D à enregistrer dans le fichier de débogage ou à exclure du fichier de débogage (cf. sélecteur 34, Debug log recording). Par défaut, toutes les commandes 4D sont enregistrées. Ce sélecteur vous permet de restreindre la quantité d’informations stockées dans le fichier de débogage en limitant les commandes 4D dont vous souhaitez enregistrer l’exécution ou bien que vous souhaitez exclure de l'enregistrement. Par exemple, vous pouvez écrire :  SET DATABASE PARAMETER(Log command list;"277;341") //enregistrer uniquement les commandes CHERCHER et CHERCHER DANS SELECTION  OU  SET DATABASE PARAMETER(Log command list;"-1666;-323") //exclure les commandes FIXER ALIAS UTILISATEUR et ENDORMIR PROCESS de l'enregistrement +**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Spellchecker (81) -**Portée** : Application 4D - **Conservé** **entre deux sessions** : Non - **Valeurs possibles** : 0 (défaut) = correcteur macOS (Hunspell désactivé), 1 = correcteur Hunspell actif. +### HTTP compression threshold (51) -**Description** : Permet d’activer le correcteur orthographique Hunspell sous macOS. Par défaut, sur cette plate-forme le correcteur natif est activé. Vous pouvez souhaiter utiliser le correcteur Hunspell par exemple pour unifier l’interface de vos applications multiplates-formes (sous Windows, seul le correcteur Hunspell est disponible). Pour plus d’informations, reportez-vous à la page *Correction orthographique*. +**Portée** : Application 4D + **Conservé** **entre deux sessions** : Non + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Dates inside objects (85) -**Portée** : Process courant - **Conservé** **entre deux sessions** : Non - **Valeurs possibles** : String type without time zone (0), String type with time zone (1), Date type (2) (défaut) +### HTTPS Port ID (39) -**Description** : Définit la manière dont les dates sont stockées dans les objets, ainsi que leur traitement en cas d'importation/exportation en JSON. +**Portée** :4D local, 4D Server -Lorsque ce sélecteur vaut Date type (valeur par défaut dans les bases créées à compter de 4D v17), les dates 4D sont stockées avec le type date dans les objets, en tenant compte des paramétrages de date locaux. Lorsqu'ils sont exportés au format JSON, les attributs date seront convertis en chaînes qui ne contiennent pas l'heure (**Note :** ce paramétrage peut être défini au niveau des paramètres de la base via l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la *Page Compatibilité*). + **Conservé** **entre deux sessions** : Oui -Si vous passez String type with time zone dans ce sélecteur, les dates 4D seront converties en chaînes ISO en tenant compte du fuseau horaire local. Par exemple, la conversion de la date !23/08/2013! donne "2013-08-22T22:00:00Z" au format JSON lorsque l’opération est effectuée en France en été (GMT+2). Ce principe est conforme au fonctionnement standard de JavaScript. Ce fonctionnement peut être source d’erreurs si vous souhaitez envoyer des valeurs de date en JSON à une personne qui se trouve dans un autre fuseau horaire. C’est le cas par exemple pour l’exportation d’une table avec [Selection to JSON](selection-to-json.md) en France destiné à être réimporté aux USA avec [JSON TO SELECTION](json-to-selection.md). Par défaut, les dates étant réinterprétées dans chaque fuseau horaire, les valeurs stockées dans la base seront différentes. Dans ce cas, vous pouvez modifier le mode de conversion des dates afin qu’il ne tienne pas compte du fuseau horaire en passant String type without time zone dans ce sélecteur. La conversion de la date !23/08/2013! donnera alors "2013-08-23T00:00:00Z" dans tous les cas. + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -### Diagnostic log level (86) -**Thread-safe** : Yes +### Idle connections timeout (54) -**Portée :** Application 4D +**Portée** : Application 4D sauf si valeur négative -**Conservé entre deux sessions :** Non +**Conservé** **entre deux sessions** : Non -**Description :** Niveau(x) de messages à inclure dans le journal de diagnostic lorsqu'il est activé (voir le sélecteur Diagnostic log recording). Chaque niveau désigne une catégorie de messages de diagnostic et inclut automatiquement la ou les catégories plus importantes. Pour une description des catégories, consultez la section *Log niveau diagnostic* sur le site *developer.4d.com*. +**Valeurs possibles** : Valeur entière exprimant une durée en secondes. La valeur peut être positive (nouvelles connexions) ou négative (connexions existantes). Par défaut, la valeur est 20. -**Valeurs possibles** **:** L'une des constantes suivantes (Log info par défaut): Log trace: active ERROR, WARN, INFO, DEBUG, TRACE (niveau le plus détaillé) Log debug: active ERROR, WARN, INFO, DEBUG Log info: active ERROR, WARN, INFO (par défaut) Log warn: active ERROR, WARN Log error: active ERROR (niveau le moins détaillé) +**Description** : Délai maximum d’inactivité (timeout) des connexions au moteur de base de données, au serveur SQL de 4D ainsi qu'au serveur d'applications 4D (mode *ServerNet* uniquement, ignoré en *QUIC*). Lorsqu’une connexion inactive atteint ce délai, elle est automatiquement mise en veille, ce qui se traduit par le gel de la session client/serveur et la fermeture du socket réseau. Dans la fenêtre d'administration du serveur, le process utilisateur prend l'état "Postponed". Ce fonctionnement est entièrement transparent pour l’utilisateur : dès qu’il y a reprise d’activité sur la connexion mise en veille, le socket est automatiquement rouvert et la session client/serveur restaurée. +Ce paramétrage permet, d’une part, d’économiser des ressources sur le serveur : les connexions mises en veille referment le socket et libèrent un processus sur le serveur. D’autre part, il permet d’éviter les pertes de connexions dues aux fermetures par les pare-feux des sockets inactifs. La valeur de timeout des connexions inactives doit pour cela être inférieure à celle du pare-feu. +Si vous passez une valeur positive dans *valeur*, elle s'applique à toutes les nouvelles connexions dans tous les process. Si vous passez une valeur négative, elle s’applique aux connexions ouvertes dans le process courant. Si vous passez 0, les connexions inactives ne sont pas soumises à un timeout. -### Use legacy network layer (87) +Ce paramètre doit être défini côté client. Généralement, vous n'aurez pas besoin de modifier cette valeur. -**Portée :** 4D local, 4D Server. -**Conservé entre deux sessions :** Oui -**Description :** Fixe ou lit le statut courant de l'ancienne couche réseau pour les connexions client/serveur. L'ancienne couche réseau est obsolète à compter de 4D v14 R5 et doit être progressivement remplacée dans vos applications par la couche réseau *ServerNet*. *ServerNet* sera nécessaire dans les prochaines versions de 4D afin de permettre aux applications 4D de tirer parti des futures évolutions réseau. Pour des raisons de compatibilité, l'ancienne couche réseau est toujours prise en charge afin de faciliter la transition des applications existantes (elle reste utilisée par défaut dans les applications converties depuis des versions antérieures à la v14 R5). Passez 1 dans ce paramètre pour utiliser l'ancienne couche réseau (et désactiver *ServerNet*), et passez 0 pour désactiver l'ancienne couche réseau (et utiliser *ServerNet*). -Cette propriété peut également être définie à l'aide de l'option "Utiliser l'ancienne couche réseau" présente dans la *Page Compatibilité* des Propriétés de la base (voir section *Options réseau et Client-serveur* ; dans cette section, vous trouverez aussi un paragraphe décrivant la stratégie de migration. Nous vous recommandons d'activer *ServerNet* dès que possible). +### IMAP Log (119) -Il est nécessaire de redémarrer l'application pour que ce paramètre soit pris en compte. +**Thread-safe** : Yes -**Valeurs possibles :** 0 ou 1 (0 = ne pas utiliser l'ancienne couche, 1 = utiliser l'ancienne couche) +**Portée** : 4D local, 4D Server -**Valeur par défaut :** 0 dans les applications créées avec 4D v14 R5 ou suivantes, 1 dans les applications converties depuis 4D v14 R4 ou précédentes. +**Conservé entre deux sessions :** Non +**Valeurs possibles :** 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, ajouté au nom du fichier). Par défaut, la valeur est 0 (échanges IMAP non enregistrés). +**Description :** Démarre ou stoppe l'enregistrement des échanges entre 4D et le serveur IMAP, lorsqu'un objet transporteur est traité via *IMAP\_transporteur.getMail( )* ou *IMAP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (échanges non enregistrés). Lorsque ce mécanisme est activé, un fichier journal est créé dans le dossier Journaux de la base de données. Il est nommé 4DIMAPLog\_N.txt, où N est le numéro séquentiel du journal. Une fois que le fichier 4DIMAPLog a atteint une taille de 10 Mo, il est fermé et un nouveau est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre value. Par défaut, tous les fichiers sont conservés, mais vous pouvez contrôler le nombre de fichiers à conserver en utilisant le paramètre Circular log limitation. -### SQL Server Port ID (88) +Pour plus d'informations sur les fichiers 4DIMAPLog\_N.txt, reportez-vous à la section *Description des fichiers d'historique*. -**Portée** : 4D mode local et 4D Server. -**Conservé entre deux sessions** : Oui -**Description** : Permet de lire ou de fixer le numéro du port TCP utilisé par le serveur SQL intégré de 4D en mode local ou de 4D Server. Par défaut, la valeur est 19812\. Le numéro de port TCP peut également être défini dans la page "SQL" de la boîte de dialogue des Propriétés de la base. Lorsque ce sélecteur est utilisé en écriture, la propriété de la base est mise à jour. -**Valeurs possibles** : 0 à 65535. +### Is current database a project (112) -**Valeur par défaut** : 19812 +**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +**Portée** : Application 4D +**Description** : Retourne 1 si l'architecture de la base courante est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. -### Circular log limitation (90) -**Thread-safe** : Yes -**Portée** : 4D local, 4D Server. -**Conservé entre deux sessions** : Non +### Is host database a project (113) -**Valeurs possibles** : Toute valeur entière, 0 = conserver tous les journaux +**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. -**Description** : Nombre maximum de fichiers à conserver par roulement pour chaque type de journal. Par défaut, les 50 fichiers les plus récents sont conservés. Si vous passez une valeur N, seuls les N fichiers les plus récents seront conservés, le plus ancien étant automatiquement effacé à la création d'un nouveau. Ce paramétrage s'applique à tous les fichiers journaux, notamment le journal des requêtes (sélecteurs 28 et 45), le journal de débogage (sélecteur 34), le journal des événements (sélecteur 79), l'historique des requêtes Web (sélecteurs 29 et 84 de la commande [WEB SET OPTION](web-set-option.md)), etc. +**Portée** : Application 4D +**Description** : Retourne 1 si l'architecture de la base hôte est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. -### Number of formulas in cache (92) -**Portée** : Application 4D. -**Conservé entre deux sessions** : Non +### Is host database writable (117) -**Valeurs possibles** : Entier long positif +**Note :** Vous pouvez utiliser ce sélecteur uniquement avec la commande [Get database parameter](get-database-parameter.md) et sa valeur ne peut pas être définie. -**Valeur par défaut** : 0 (pas de cache) +**Portée** : Application 4D -**Description** : Fixe ou lit le nombre maximum de formules à conserver dans le cache des formules, qui est utilisé par la commande [EXECUTE FORMULA](execute-formula.md). Cette limite est appliquée à tous les process, mais chaque process dispose de son propre cache de formules. Placer des formules dans le cache accélère l'exécution de la commande [EXECUTE FORMULA](execute-formula.md) en mode compilé puisque chaque formule en cache est tokenisée une seule fois dans ce cas. Lorsque vous modifiez la valeur du cache, son contenu est réinitialisé même si la nouvelle valeur est supérieure à la précédente. Une fois le nombre maximum de formules en cache atteint, toute nouvelle formule exécutée écrase la plus ancienne dans le cache (mode FIFO). Ce paramètre est pris en compte uniquement dans les bases ou les composants compilés. +**Description** : Retourne 1 si le fichier de structure ou le fichier de projet de l'hôte est en écriture, et retourne 0 s'il est en lecture seule. -### OpenSSL version (94) -**Portée** : Tous postes 4D +### Libldap version (114) - **Conservé entre deux sessions** : Non +**Portée** : Machine 4D courante -**Description**: Retourne le numéro de version de la bibliothèque OpenSSL utilisée sur le poste. (Lecture seule) +**Conservé entre deux sessions** : Non +**Description** : Retourne le numéro de version de la bibliothèque LDAP dans l'application 4D sur la machine locale. (Lecture seule) -### Cache flush periodicity (95) -**Thread-safe** : Yes +### Libsasl version (115) -Portée : 4D local, 4D Server +**Portée** : Machine 4D courante **Conservé entre deux sessions** : Non -**Valeurs possibles** : entier long > 1 (secondes) +**Description** : Retourne le numéro de version de la bibliothèque SASL dans l'application 4D sur la machine locale. (Lecture seule) -**Description** : Permet de lire ou de fixer la valeur courante de périodicité de l'écriture du cache de données sur le disque, exprimée en secondes. Si elle est modifiée, cette valeur remplace la valeur définie par l'option **Ecriture cache toutes les secondes/minutes** dans la [XML DECODE](xml-decode.md) des Propriétés de la base durant la session courante (elle n'est pas stockée dans les Propriétés de la base). -### Remote connection sleep timeout (98) +### Libzip version (120) -**Portée** : Application 4D Server +**Portée :** Machine 4D courante -**Conservé entre deux sessions** : Non +**Conservé entre deux sessions :** n/a -**Valeurs possibles** : Entier long positif +**Description :** Retourne le numéro de version de la bibliothèque libzip dans l'application 4D sur la machine courante. (Lecture seule) -**Description** : Timeout de la connexion à distance en veille, exprimé en secondes. Par défaut, la valeur est 172800 (48 heures). Le délai de mise en veille est appliqué une fois qu'une machine exécutant une application distante 4D est passée en mode veille. Dans ce cas, sa session est maintenue par 4D Server (voir la description de la fonctionnalité ). 4D Server vérifie toutes les 5 minutes si un 4D distant en veille a dépassé le délai de veille, auquel cas il est abandonné. Ainsi, la durée de veille maximale autorisée est la *timeout mise en veille actuel + 300*. Dans certains cas, vous souhaiterez peut-être modifier le délai de mise en veille, pour libérer, par exemple, les enregistrements/licences verrouillés plus rapidement. -### Tips enabled (101) +### Log command list (80) -**Portée :** Application 4D +**Portée** : Application 4D -**Conservé entre deux sessions :** Non +**Conservé** **entre deux sessions** : Non -**Valeurs possibles :** 0 = message d'aide désactivés, 1 = messages d'aide activés (défaut) +**Valeurs possibles** : Chaîne contenant la liste des numéros des commandes 4D à enregistrer (séparées par des points-virgules), ou "all" pour enregistrer toutes les commande, ou "" (chaîne vide) pour n’enregistrer aucune commande, ou le préfixe "-" pour exclure des commandes spécifiques. -**Description :** Définit ou récupère l'état d'affichage des messages d'aide dans l'application 4D. Par défaut, les messages d'aide sont activées. +**Description** : Liste des commandes 4D à enregistrer dans le fichier de débogage ou à exclure du fichier de débogage (cf. sélecteur 34, Debug log recording). Par défaut, toutes les commandes 4D sont enregistrées. Ce sélecteur vous permet de restreindre la quantité d’informations stockées dans le fichier de débogage en limitant les commandes 4D dont vous souhaitez enregistrer l’exécution ou bien que vous souhaitez exclure de l'enregistrement. Par exemple, vous pouvez écrire : - Notez que ce paramètre fixe tous les messages d'aides, c'est-à-dire les messages d'aide des formulaires et ceux de l'éditeur du mode Développement. +```4d +//enregistrer uniquement les commandes QUERY et QUERY SELECTION +SET DATABASE PARAMETER(Log command list;"277;341")  +``` +OU +```4d +//exclure les commandes SET USER ALIAS et DELAY PROCESS de l'enregistrement +SET DATABASE PARAMETER(Log command list;"-1666;-323")  +``` -### Tips delay (102) +### Max concurrent Web processes (18) -**Portée :** Application 4D +**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non +**Conservé entre deux sessions** : Oui -**Valeurs possibles :** entier long >= 0 (ticks) +**Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -**Description :** délai avant que les messages d'aide soient affichés une fois que le curseur de la souris est arrêté sur les objets avec message d'aide. La valeur est exprimée en ticks (1/60e de seconde). La valeur par défaut est de 45 ticks (0,75 seconde). -### Tips duration (103) +### Maximum Web requests size (27) -**Portée :** Application 4D +**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non + **Conservé** **entre deux sessions** : Oui -**Valeurs possibles :** entier long >= 60 (ticks) + **Description** : *Constante obsolète (conservée par compatibilité uniquement).* Il est désormais conseillé d'utiliser les commandes [WEB SET OPTION](web-set-option.md) et [WEB GET OPTION](web-get-option.md) pour le paramétrage du serveur HTTP. -**Description :** Durée maximum de l'affichage du message d'aide. La valeur est exprimée en ticks (1/60e de seconde). La valeur par défaut est de 720 ticks (12 secondes). @@ -772,101 +602,89 @@ Portée : 4D local, 4D Server -### User param value (108) - -**Portée :** 4D local, 4D Server - -**Conservé entre deux sessions :** Non - -**Valeurs possibles** : Toute chaîne personnalisée - -**Description :** Chaîne personnalisée passée d'une session à la suivante lorsque l'application 4D est redémarrée. Ce sélecteur est utile dans les cas où des tests unitaires automatisés nécessitent que les applications redémarrent avec des paramètres différents. - -Avec [SET DATABASE PARAMETER](set-database-parameter.md), définit une nouvelle valeur qui sera disponible dans la prochaine base de données ouverte après le redémarrage manuel de 4D or l'utilisation des commandes [OPEN DATABASE](open-database.md)(\*), [OPEN DATA FILE](open-data-file.md), ou [RESTART 4D](restart-4d.md). Avec [Get database parameter](get-database-parameter.md), retourne la valeur User param courante définie à l'aide d'une ligne de commande (voir *Interface ligne de commande*), un fichier .4DLink (voir *Utiliser un fichier 4DLink*), ou un appel à [SET DATABASE PARAMETER](set-database-parameter.md) durant la session précédente. (\*) Si [SET DATABASE PARAMETER](set-database-parameter.md) fixe une User param value avant d'appeler [OPEN DATABASE](open-database.md) à l'aide d'un fichier .4DLink contenant également un attribut xml user-param xml, 4D ne tient compte que du paramètre fourni par [SET DATABASE PARAMETER](set-database-parameter.md). +### Number of formulas in cache (92) +**Portée** : Application 4D. -### Times inside objects (109) +**Conservé entre deux sessions** : Non -Portée : 4D local, 4D Server (tous process) +**Valeurs possibles** : Entier long positif -**Conservé entre deux sessions** : Oui +**Valeur par défaut** : 0 (pas de cache) - **Valeurs possibles** : Times in seconds (0) (défaut), Times in milliseconds (1) +**Description** : Fixe ou lit le nombre maximum de formules à conserver dans le cache des formules, qui est utilisé par la commande [EXECUTE FORMULA](execute-formula.md). Cette limite est appliquée à tous les process, mais chaque process dispose de son propre cache de formules. Placer des formules dans le cache accélère l'exécution de la commande [EXECUTE FORMULA](execute-formula.md) en mode compilé puisque chaque formule en cache est tokenisée une seule fois dans ce cas. Lorsque vous modifiez la valeur du cache, son contenu est réinitialisé même si la nouvelle valeur est supérieure à la précédente. Une fois le nombre maximum de formules en cache atteint, toute nouvelle formule exécutée écrase la plus ancienne dans le cache (mode FIFO). Ce paramètre est pris en compte uniquement dans les bases ou les composants compilés. -**Description** : Définit la manière dont les valeurs de type heure sont converties et stockées dans les propriétés d'objets et les éléments de collections, ainsi que lors des imports/exports JSON et via les zones Web. Par défaut, à compter de 4D v17, les heures sont converties et stockées en nombre de secondes. -Dans les versions précédentes, les heures étaient converties et stockées en nombre de millisecondes dans ces contextes. L'utilisation de ce sélecteur peut vous aider lors de la migration de vos applications en rétablissant le fonctionnement précédent lorsque c'est nécessaire. -**Note** : Les méthodes ORDA et le moteur SQL ne tiennent pas compte de ce paramétrage, ces deux environnements manipulent toujours les heures en nombre de secondes. +### OpenSSL version (94) +**Portée** : Tous postes 4D -### SMTP Log (110) + **Conservé entre deux sessions** : Non -**Thread-safe** : Yes +**Description**: Retourne le numéro de version de la bibliothèque OpenSSL utilisée sur le poste. (Lecture seule) -Portée : 4D local, 4D Server* -* **Conservé entre deux sessions** : Non -**Valeurs possibles** : 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, accolé au nom du fichier). Par défaut, la valeur est 0 (pas d'enregistrement des échanges SMTP). -**Description** : Démarrage ou arrêt de l'enregistrement des échanges entre 4D et le serveur SMTP, lorsqu'un objet *transporteur* est traité par *transporteur.send( )* ou *SMTP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (pas d'enregistrement des échanges SMTP). Lorsque ce mécanisme est activé, un fichier d'historique est créé dans le dossier Logs de la base. Il est nommé 4DSMTPLog\_X.txt, *où N* est le numéro séquentiel de l'historique. Une fois qu'un fichier atteint une taille de 10 Mo, il est refermé et un nouveau fichier est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre *valeur*. Par défaut, tous les fichiers sont conservés, mais vous pouvez gérer le nombre de fichier à conserver à l'aide du paramètre Circular log limitation. +### Order by formula on server (47) -Pour plus d'informations sur les fichiers 4DSMTPLog\_X.txt, veuillez consulter la section *Description des fichiers d'historique*. +**Portée** :Table et process courants + **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -### Current process debug log recording (111) +**Description** : Emplacement de l’exécution de la commande [ORDER BY FORMULA](order-by-formula.md) pour la table passée en paramètre. -**Portée :** Application 4D +Dans le cadre de l’exploitation d’une base en client-serveur, la commande [ORDER BY FORMULA](order-by-formula.md) peut être exécutée soit sur le serveur soit sur le client. Ce sélecteur permet de définir l’emplacement de l’exécution de cette commande (serveur ou client). Ce mode peut également être défini dans les préférences de la base. Pour plus d’informations, reportez-vous à la description du sélecteur 46, Query by formula on server. -**Conservé entre deux sessions :** Non +**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. -**Description** : Démarrage ou arrêt de l'enregistrement séquentiel des événements de programmation **du process courant** dans un fichier d'historique séparé. Cet historique est semblable à Debug log recording (sélecteur 34) mais il ne porte que sur le process courant. Le nom du fichier d'historique inclut la lettre "p" et le numéro du process : 4DDebugLog\[\_p*N*_*n*].txt, où N est l'ID unique du process. Pour plus d'informations sur ce format et sur l'utilisation du fichier *4DDebugLog*, veuillez consulter la *Description des fichiers d'historique* dans le Mode Développement. -**Notes :** Ce sélecteur est fourni uniquement à des fins de débogage et doit être utilisé avec précaution. Plus particulièrement, il ne doit pas être utilisé en production, étant donné qu'il peut avoir une incidence sur les performances de l'application. Vous pouvez utiliser simultanément les sélecteurs Debug log recording et Current process debug log recording, auquel cas les actions liées au process courant ne seront pas enregistrées dans le fichier d'historique principal. +### Pause logging (121) -### Is current database a project (112) +**Thread-safe** : Yes -**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +**Portée :** Application 4D -**Portée** : Application 4D +**Conservé entre deux sessions :** Non -**Description** : Retourne 1 si l'architecture de la base courante est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. +**Valeurs possibles :** 0 (reprise des journaux), 1 (pause des journaux) +Ce sélecteur permet de suspendre/reprendre toutes les opérations de journalisation lancées sur l'application (à l'exception des journaux ORDA). Cette fonction peut être utile pour alléger temporairement les tâches de l'application 4D ou pour planifier les opérations des journaux. -### Is host database a project (113) -**Note :** Vous pouvez utiliser ce sélecteur uniquement à l'aide de la commande [Get database parameter](get-database-parameter.md) et ses valeurs ne peuvent pas être définies. +### PHP interpreter IP address (55) -**Portée** : Application 4D +**Portée** :Application 4D -**Description** : Retourne 1 si l'architecture de la base hôte est un projet, sinon elle retourne 0\. Pour plus d'informations, veuillez consulter la section *Base projet VS base binaire*. + **Conservé** **entre deux sessions** : Non +**Valeurs** : Chaîne formatée en IPv4 (par exemple "127.0.0.1") ou en IPv6 (par exemple "2001:0db8:0000:0000:0000:ff00:0042:8329") +**Description** : Adresse IP utilisée localement par 4D pour communiquer avec l’interpéteur PHP via fastcgi. Par défaut, la valeur est "127.0.0.1" (les adresses au format IPv6 sont prises en charge à compter de 4D v16R4).. Cette adresse doit correspondre à la machine sur laquelle se trouve 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. -### Libldap version (114) +Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. -**Portée** : Machine 4D courante -**Conservé entre deux sessions** : Non -**Description** : Retourne le numéro de version de la bibliothèque LDAP dans l'application 4D sur la machine locale. (Lecture seule) +### PHP interpreter port (56) +**Portée** :Application 4D -### Libsasl version (115) + **Conservé** **entre deux sessions** : Non -**Portée** : Machine 4D courante +**Valeurs** : Valeur de type entier long positif. Par défaut, la valeur est 8002\. -**Conservé entre deux sessions** : Non +**Description** : Numéro du port TCP utilisé par l’interpréteur PHP de 4D. Ce paramètre peut également être défini globalement pour tous les postes via les Propriétés de la base. Pour plus d’informations sur l’interpréteur PHP de 4D, reportez-vous au manuel *Mode Développement*. -**Description** : Retourne le numéro de version de la bibliothèque SASL dans l'application 4D sur la machine locale. (Lecture seule) @@ -884,64 +702,61 @@ Portée : 4D local, 4D Server -### Is host database writable (117) - -**Note :** Vous pouvez utiliser ce sélecteur uniquement avec la commande [Get database parameter](get-database-parameter.md) et sa valeur ne peut pas être définie. -**Portée** : Application 4D +### Port ID (15) -**Description** : Retourne 1 si le fichier de structure ou le fichier de projet de l'hôte est en écriture, et retourne 0 s'il est en lecture seule. +**Portée** : 4D local, 4D Server +**Conservé entre deux sessions** : Non +**Description** : Numéro du port TCP utilisé par le serveur Web 4D avec 4D en mode local et 4D Server. Par défaut, la valeur est 80\. -### IMAP Log (119) +Le numéro de port TCP est défini dans la page “Web/Configuration” de la boîte de dialogue des Propriétés de la base. Vous pouvez utiliser les constantes du thème *Numéros de port TCP* pour le paramètre *valeur*. -**Thread-safe** : Yes +Le sélecteur Port ID est utile dans le cadre de serveurs Web 4D compilés et fusionnés avec 4D Desktop (pas d’accès au mode Développement). Pour plus d’informations sur le numéro de port TCP, reportez-vous à la section *Paramétrages du serveur Web*. -**Portée** : 4D local, 4D Server -**Conservé entre deux sessions :** Non -**Valeurs possibles :** 0 ou de 1 à N (0 = ne pas enregistrer, 1 à N = numéro séquentiel, ajouté au nom du fichier). Par défaut, la valeur est 0 (échanges IMAP non enregistrés). -**Description :** Démarre ou stoppe l'enregistrement des échanges entre 4D et le serveur IMAP, lorsqu'un objet transporteur est traité via *IMAP\_transporteur.getMail( )* ou *IMAP\_transporteur.checkConnection( )*. Par défaut, la valeur est 0 (échanges non enregistrés). Lorsque ce mécanisme est activé, un fichier journal est créé dans le dossier Journaux de la base de données. Il est nommé 4DIMAPLog\_N.txt, où N est le numéro séquentiel du journal. Une fois que le fichier 4DIMAPLog a atteint une taille de 10 Mo, il est fermé et un nouveau est généré, avec un numéro séquentiel incrémenté. Si un fichier du même nom existe déjà, il est directement remplacé. Vous pouvez définir le numéro de départ de la séquence à l'aide du paramètre value. Par défaut, tous les fichiers sont conservés, mais vous pouvez contrôler le nombre de fichiers à conserver en utilisant le paramètre Circular log limitation. +### Query by formula joins (49) -Pour plus d'informations sur les fichiers 4DIMAPLog\_N.txt, reportez-vous à la section *Description des fichiers d'historique*. +**Portée** :Process courant + **Conservé** **entre deux sessions** : Non + **Valeurs possibles** : 0 (utiliser paramétrages de la base), 1 (toujours utiliser les liens auto) ou 2 (utiliser les jointures SQL si possible). -### Libzip version (120) +**Description** : Mode de fonctionnement des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) relatif à l’utilisation de "jointures SQL". -**Portée :** Machine 4D courante +Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, ces commandes effectuent des jointures sur le modèle des jointures SQL. Ce mécanisme permet de modifier la sélection d’une table en fonction d’une recherche effectuée sur une autre table sans que les tables soient reliées par un lien automatique (condition nécessaire dans les versions précédentes de 4D). -**Conservé entre deux sessions :** n/a +Le sélecteur Query by formula joins vous permet de définir le mode de fonctionnement des commandes de recherche par formule pour le process courant : -**Description :** Retourne le numéro de version de la bibliothèque libzip dans l'application 4D sur la machine courante. (Lecture seule) +0 : utiliser les paramètres courants de la base (valeur par défaut). Dans les bases de données créées à compter de la version 11.2 de 4D v11 SQL, les "jointures SQL" sont toujours activées pour les recherches par formule. Dans les bases de données converties, ce mécanisme est inactivé par défaut pour des raisons des compatibilité mais peut être mis en oeuvre via une préférence.1 : toujours utiliser les liens auto (= fonctionnement des versions précédentes de 4D). Dans ce mode, un lien est nécessaire pour définir la sélection d’une table en fonction de recherches effectuées dans une autre table. 4D n’effectue pas de "jointures SQL".2 : utiliser les jointures SQL si possible (= fonctionnement par défaut des bases créées en version 11.2 et suivantes de 4D v11 SQL). Dans ce mode, 4D établit des "jointures SQL" pour les recherches par formule lorsque la formule s’y prête (à deux exceptions près, voir la description de la commande commandes [QUERY BY FORMULA](query-by-formula.md) ou [QUERY SELECTION BY FORMULA](query-selection-by-formula.md). **Note :** Avec 4D en mode distant, les "jointures SQL" ne peuvent être utilisées que si les formules sont exécutées sur le serveur (elles doivent avoir accès aux enregistrements). Pour configurer le lieu d'exécution des formules, reportez-vous aux sélecteurs 46 et 47. -### Pause logging (121) -**Thread-safe** : Yes +### Query by formula on server (46) -**Portée :** Application 4D +**Portée** :Table et process courants -**Conservé entre deux sessions :** Non + **Conservé** **entre deux sessions** : Non -**Valeurs possibles :** 0 (reprise des journaux), 1 (pause des journaux) + **Valeurs possibles** : 0 (utiliser le paramétrage de la base), 1 (exécuter sur le client) ou 2 (exécuter sur le serveur) -Ce sélecteur permet de suspendre/reprendre toutes les opérations de journalisation lancées sur l'application (à l'exception des journaux ORDA). Cette fonction peut être utile pour alléger temporairement les tâches de l'application 4D ou pour planifier les opérations des journaux. +**Description** : Emplacement de l’exécution des commandes [QUERY BY FORMULA](query-by-formula.md) et [QUERY SELECTION BY FORMULA](query-selection-by-formula.md) pour la *table* passée en paramètre. +Dans le cadre de l’exploitation d’une base en client-serveur, les commandes de recherche "par formule" peuvent exécutées soit sur le serveur soit sur le client : -### TCPUDP log recording (131) +dans les bases de données créées à partir de 4D v11 SQL, ces commandes sont exécutées sur le serveur. dans les bases de données converties, ces commandes sont exécutées sur le client, comme dans les versions précédentes de 4D.dans les bases de données converties, une préférence spécifique permet de modifier globalement le lieu d’exécution de ces commandes.Cette différence de lieu d’exécution influe sur les performances de l’application (l’exécution sur le serveur est généralement plus rapide) mais également sur la programmation. En effet, la valeur des composantes de la formule (notamment les variables appelées via une méthode) diffère suivant le contexte d’exécution. Vous pouvez utiliser ce sélecteur pour adapter ponctuellement le fonctionnement de votre application. -**Portée :** Application 4D +Si vous passez 0 dans le paramètre *valeur*, l’emplacement d’exécution des commandes de recherche "par formule" dépendra de la configuration de la base : dans les bases créées avec 4D v11 SQL, les commandes seront exécutées sur le serveur. Dans les bases converties, elles seront exécutées sur le client ou le serveur en fonction des préférences de la base. Passez 1 ou 2 dans *valeur* pour "forcer" l’exécution des commandes respectivement sur le client ou sur le serveur. -**Conservé entre deux sessions :** Non +Reportez-vous à l'exemple 2. -**Valeurs possibles :** `0`: Enregistrement désactivé (défaut), `1`: Enregistrement activé. +**Note :** Si vous souhaitez pouvoir activer les jointures "type SQL" (cf. sélecteur Query by formula joins), vous devez toujours exécuter les formules sur le serveur afin qu'elle ait accès aux enregistrements. Attention, dans ce contexte, la formule ne doit pas contenir d'appel à une méthode, sinon elle est automatiquement basculée sur le poste distant. -**Description :** Active ou désactive le fichier `4DTCPUDPLog.txt` pour l'enregistrement des événements TCP et UDP. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md index 560a5127fd9c6c..72a44938ecd316 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/get-database-parameter.md @@ -22,6 +22,36 @@ displayed_sidebar: docs *selector* 引数には、知りたいパラメーターを指定します。4Dは*Database Parameters* テーマで、定義済み定数を提供しています: +### 4D Remote mode timeout (14) + +**スコープ**(旧式ネットワークレイヤーのみ): *value* が正数の場合4D アプリケーション + +**2セッション間で設定を保持**: *value* が正数の場合Yes + +**説明**: 非常に特殊な場合においてのみ使用されるべき定数です。この引数を使用して、4D Serverに接続したリモートの4Dマシンが参照するタイムアウト値を設定できます。リモートモードの4Dが使用するデフォルトのタイムアウト値は、リモートマシン上の環境設定の“クライアント-サーバ/設定”ページで設定されます。 + +4D Remote Mode Timeout セレクターは旧式ネットワークレイヤーを使用している場合のみ考慮されます。*ServerNet* レイヤーが有効化されている場合には無視されます。この設定は4D Server Timeout (13) によって完全に管理されています。 + + + + +### 4D Server log recording (28) + +**Thread-safe** : Yes + +**Scope**: 4D Server, 4D リモート + +**2セッション間で設定を保持**: No** + +とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 + +: 4D Serverが受け取る標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 + +サーバマシンが受信した各リクエストをログファイルに記録するよう、4D Serverに指示することができます。このメカニズムが有効になると、データベースストラクチャと同じ階層に2つのログファイルが作成されます。サーバー側では*4DRequestsLogServer\_X*.txt および *4DRequestsLog\_ProcessInfoServer\_X*.txt 、リモート側では*4DRequestsLog\_X*.txt および *4DRequestsLog\_ProcessInfo\_X*.txt on the と名付けられたファイルが作成されます(Xはログのシーケンシャル番号)。ファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、*value*引数を使用して指定できます。このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、ユーザ、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestLog ファイルのより詳細な情報については、*ログファイルの詳細* の章を参照してください。 + + + + ### 4D Server timeout (13) **スコープ**: *value* が正数なら4Dアプリケーション @@ -42,53 +72,76 @@ displayed_sidebar: docs -### 4D Remote mode timeout (14) -**スコープ**(旧式ネットワークレイヤーのみ): *value* が正数の場合4D アプリケーション +### Auto synchro resources folder (48) -**2セッション間で設定を保持**: *value* が正数の場合Yes +**スコープ**:4D リモートマシン -**説明**: 非常に特殊な場合においてのみ使用されるべき定数です。この引数を使用して、4D Serverに接続したリモートの4Dマシンが参照するタイムアウト値を設定できます。リモートモードの4Dが使用するデフォルトのタイムアウト値は、リモートマシン上の環境設定の“クライアント-サーバ/設定”ページで設定されます。 + **2セッション間で設定を保持**: No -4D Remote Mode Timeout セレクターは旧式ネットワークレイヤーを使用している場合のみ考慮されます。*ServerNet* レイヤーが有効化されている場合には無視されます。この設定は4D Server Timeout (13) によって完全に管理されています。 + **とりうる値**: 0 (同期しない), 1 (自動同期) または2 (確認する). + +**説明**: このコマンドを実行する4DクライアントマシンのResourcesフォルダの動的な同期モード。 +サーバ上のResourcesフォルダの内容が更新されたり、(リソースエクスプローラや SET DATABASE LOCALIZATION コマンドで) ユーザが同期をリクエストすると、サーバは接続されたユーザに通知を行います。 +クライアント側では3つの同期モードを選択できます。Auto Synchro Resources Folderセレクタはカレントセッションでクライアントマシンが使用するモードを指定できます: -### Port ID (15) +0 (デフォルト値): 動的な同期を行わない (同期リクエストは無視される)1: 自動の動的同期2: クライアントマシンにダイアログを表示し、同期の受け入れ回避を確認するアプリケーションの環境設定で、同期モードをグローバルに設定できます。 -**スコープ**: 4D ローカル, 4D Server -**2セッション間で設定を保持**: No -**説明**: Command SET DATABASE この引数を使用して、ローカルモードの4Dおよび4D Serverによる4D Webサーバが使用するTCPポートをオンザフライで変更することができます。デフォルト値は80で、この値は環境設定ダイアログボックスの“Web/設定”ページで設定できます。*TCP Port Numbers*テーマの定数を*value*引数に使用できます。 +### Cache flush periodicity (95) +**Thread-safe** : Yes -Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Webサーバで役立ちます(この場合、デザインモードへのアクセス手段がありません)。TCPポートIDに関する詳細は*Webサーバー設定*を参照してください。 +**スコープ**: 4Dローカル、4D Server +**異なるセッション間で値を保持**: No -### Character set (17) +**取りうる値**: 倍長整数 > 1 (秒) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +**詳細**: 秒単位で指定された、キャッシュ保存頻度を取得あるいは設定します。この値を変更すると、データベース設定の[XML DECODE](xml-decode.md)内の**キャッシュを保存: X秒毎**オプションをセッション中の間上書きします(これはデータベース設定には保存されません)。 -### Max concurrent Web processes (18) + +### Cache unload minimum size (66) + +**スコープ**:4Dアプリケーション + + **2セッション間で設定を保持**: No + + **とりうる値**: 1より大きい正の倍長整数 + +**説明**: エンジンがオブジェクトをデータベースキャッシュに配置する際に空き空間を作成する必要が出た場合、データベースキャッシュからリリースするメモリの最小サイズ (バイト単位)。 + +このセレクタの目的はキャッシュからデータをリリースする時間を減らし、よりパフォーマンスを得ることにあります。キャッシュのサイズやデータベース中で処理されるデータのブロックサイズに応じてこの値を変更できます。 + +このセレクタが使用されないとデフォルトで、4Dは空間が必要になった時最低10%のキャッシュをアンロードします。 + + + + +### Character set (17) **説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### Client port ID (22) -**スコープ**: すべての4Dリモートマシン +### Circular log limitation (90) - **2セッション間で設定を保持**: Yes +**Thread-safe** : Yes - **とりうる値**: セレクタ15参照 +**スコープ**: 4Dローカル、4D Server **異なるセッション間で値を保持**: No** + +取りうる値**: 任意の整数値、0 = 全てのログを保持** + +詳細**: 各タイプのロゴのローテーションに保存するファイル数の最大値。デフォルトでは、直近の50 ファイルが保持されます。*X* という値を渡した場合、直近の*X* 個のファイルのみが保持され、最も古いファイルは新しいファイルが作成されたときに自動的に削除されます。この設定は全てのログファイルに対して適用されます:リクエストログ(セレクター28と45)、デバッグログ(セレクター34)、イベントログ(セレクター79)、Web ログ([WEB SET OPTION](web-set-option.md)コマンドのセレクター29と84)、などです。 -**説明**: このセレクタを使用して、Webサーバとして使用する4Dクライアントマシンの動作パラメタを指定できます。これらのセレクタを用いて指定された値は、 Webサーバとして使用するすべての4D Clientマシンに対して適用されます。特定の4D Clientマシンに対してのみ値を指定したい場合には、4D Clientの環境設定ダイアログボックスを使用してください。 @@ -104,6 +157,43 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web + +### Client HTTPS port ID (40) + +**スコープ**:すべての4Dリモートマシン + + **2セッション間で設定を保持**: Yes + + **とりうる値**: 0 ~ 65535 + +**説明**: このセレクタは、クライアントマシンのWebサーバがSSLによるセキュアな接続(HTTPSプロトコル)で使用するTCP ポート番号を、プログラムで変更するために使用できます。デフォルトの値は443(標準ポート番号)です。 + +このセレクタの動作はセレクタ39と同じですが、Web サーバとして使用されるすべてのクライアントマシンに適用されます。特定のクライアントマシンの設定だけを変更するのであれば、4Dリモートの環境設定ダイアログ画面を使用してください。 + + + + +### Client log recording (45) + +**スコープ**: リモート4Dマシン + +2セッション間で設定を保持: No + +**とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 + +**説明**: コマンドを実行した4Dクライアントマシンが実行した標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 + + + +クライアントマシンが実行したリクエストをログファイルに記録するよう、4Dに指示することができます。このメカニズムが有効になると、クライアントマシンのデータベースのローカルフォルダ内、Logsサブフォルダに2つのログファイルが作成されます。ファイルには"4DRequestsLog\_X.txt"と"4DRequestsLog\_ProcessInfo\_X.txt"(Xはログのシーケンシャル番号)の名前が付けられます。4DRequestsLogファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、value引数を使用して指定できます。 + + + +このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestsLogについての詳細な情報については、*ログファイルの詳細* の章を参照してください。 + + + + ### Client max concurrent Web proc (25) **スコープ**: すべての4Dリモートマシン @@ -116,25 +206,42 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web -### Maximum Web requests size (27) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +### Client port ID (22) +**スコープ**: すべての4Dリモートマシン + **2セッション間で設定を保持**: Yes -### 4D Server log recording (28) + **とりうる値**: セレクタ15参照 -**Thread-safe** : Yes +**説明**: このセレクタを使用して、Webサーバとして使用する4Dクライアントマシンの動作パラメタを指定できます。これらのセレクタを用いて指定された値は、 Webサーバとして使用するすべての4D Clientマシンに対して適用されます。特定の4D Clientマシンに対してのみ値を指定したい場合には、4D Clientの環境設定ダイアログボックスを使用してください。 -**Scope**: 4D Server, 4D リモート -**2セッション間で設定を保持**: No** -とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 -: 4D Serverが受け取る標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 +### Client Server port ID (35) + +**スコープ**:データベース + + **2セッション間で設定を保持**: Yes + + **とりうる値**: 0~65535 + +**説明**: 4D Server が(4D Client に対して)データベースを公開するために使用されるTCPポート番号をプログラムで変更するために使用します。デフォルト値は19813 です。 + + + +この値を変更すれば、TCPプロトコルを使用して、複数の4D クライアント/サーバアプリケーションを同じマシンで同時に使用することができます。その場合、それぞれのアプリケーションごとに異なるポート番号を設定します。 + + + +公開ポート番号は、ストラクチャファイルに記録されています。ローカルモードの4Dで設定することもできますが、クライアント/サーバ環境でのみ考慮されます。 + + + +値を変更した場合、新しい設定が有効になるためには、アプリケーションを再起動する必要があります。 -サーバマシンが受信した各リクエストをログファイルに記録するよう、4D Serverに指示することができます。このメカニズムが有効になると、データベースストラクチャと同じ階層に2つのログファイルが作成されます。サーバー側では*4DRequestsLogServer\_X*.txt および *4DRequestsLog\_ProcessInfoServer\_X*.txt 、リモート側では*4DRequestsLog\_X*.txt および *4DRequestsLog\_ProcessInfo\_X*.txt on the と名付けられたファイルが作成されます(Xはログのシーケンシャル番号)。ファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、*value*引数を使用して指定できます。このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、ユーザ、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestLog ファイルのより詳細な情報については、*ログファイルの詳細* の章を参照してください。 @@ -154,19 +261,36 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web -### Table sequence number (31) -**スコープ**:4D アプリケーション +### Current process debug log recording (111) - **2セッション間で設定を保持**: Yes +**スコープ:** 4D アプリケーション - **とりうる値**: 任意の倍長整数値 +**異なるセッション間で値を保持:** No -**説明**: Command SET DATABASE PARAMETERこのセレクタは、引数に渡したテーブルのレコードの、カレントのユニーク番号を取得あるいは設定するために使用します。“カレントの数値”とは“最後に使用された数値”を意味します。[SET DATABASE PARAMETER](set-database-parameter.md "SET DATABASE PARAMETER")コマンドを使用してこの値を変更すると、渡された値+1の番号を使用して次のレコードが作成されます。この新しい番号は、[Sequence number](sequence-number.md "Sequence number")コマンドによって返される、さらにはストラクチャエディタやSQLで自動インクリメントが設定されたフィールドに返される番号です。 +**詳細**: **カレントプロセスにおける**プログラミングイベントの、別のログファイルへのシーケンシャルな記録を開始または停止します。このログはDebug log recording (セレクター34)に似ていますが、こちらはカレントプロセスにのみを対象とします。ログファイル名はアルファベットの"p"とプロセス番号を含みます: 4DDebugLog\[\_p*N*_*n*].txt ここでのNはプロセスの固有のIDです。 +このフォーマットと*4DDebugLog* ファイルの使用についての詳細な情報については、デザインリファレンスの*ログファイルの詳細* を参照してください。 +**注:** このセレクターはデバッグ目的のためだけに提供されており、使用する際には注意が必要です。特に、アプリケーションのパフォーマンスに影響しうるため、製品で使用してはいけません。 Debug log recording および Current process debug log recording セレクターは同時に併用することができ、その場合にはメインのログファイルにはカレントプロセスのアクションは記録されません。 + + + + +### Dates inside objects (85) + +スコープ: カレントプロセス + + 2セッション間で設定を保持: No + + **取り得る値**: String type without time zone (0), String type with time zone (1), Date type (2) (デフォルト) + +**説明**: 日付がオブジェクトにどのように保存されるかを定義するとともに、どのようにJSON に読み込み/書き出しされるかも定義します。 + +セレクターの値がDate type (4D v17以降で作成されたデータベースにおけるデフォルト)のとき、4D 日付はオブジェクト内で日付型として保存され、ローカルの日付設定に準拠します。JSON フォーマットに変換された時、日付属性は、時間を含まない文字列へと変換されます(**注:** この設定は、データベース設定のにある"オブジェクト内ではISO日付フォーマットの代わりに日付型を使用"オプションによって設定することができます)。 + +セレクターにを渡した場合、4D 日付はローカルなタイムゾーンを考慮に入れつつISO 文字列に変換されます。例えば、例えば、23/08/2013という日付の変 換を、フランスのサマータイム(GMT+2)にて実行した場合、JSONフォーマットの"2013-08-22T22:00:00Z"という結 果が返されます。この原理はJavaScriptの標準のオペレーションに従うものです。これは異なるタイムゾーンにいる人にJSON日付の値を 送る場合には、エラーの原因となりかねません。例えば、[Selection to JSON](selection-to-json.md)を使ってフランスでエクスポートされたテーブルを[JSON TO SELECTION](json-to-selection.md) を使用してアメリカで再インポートする、というような場合です。日付の値は、デフォルトではそれぞれのタイムゾーンにおいて再変換 されるため、データベース内に保存された値は異なってしまいます。こういった場合には、このセレクターにString type without time zoneを渡す事によって、タイムゾーンを考慮しないよ うに日付の変換モードを変更することができます。すると、23/08/2013という日付を変換した場合に は、"2013-08-23T00:00:00Z"という値を返すようになります。 -デフォルトで、この固有の番号は4Dが設定し、レコードの作成順に対応します。詳細は[Sequence number](sequence-number.md "Sequence number")コマンドのドキュメントを参照してください。 @@ -218,486 +342,431 @@ SET DATABASE PARAMETER (34;0) // ファイルを無効化 -### Client Server port ID (35) -**スコープ**:データベース +### Diagnostic log level (86) - **2セッション間で設定を保持**: Yes +**Thread-safe** : Yes - **とりうる値**: 0~65535 +**スコープ:** 4D アプリケーション** -**説明**: 4D Server が(4D Client に対して)データベースを公開するために使用されるTCPポート番号をプログラムで変更するために使用します。デフォルト値は19813 です。 +** **異なるセッション間で設定を保持:** No** +** **説明:** 診断ログが有効化された際に、そこに含まれるメッセージのレベル(Diagnostic log recording セレクターを参照)。各レベルは診断メッセージのカテゴリを指定し、それより重要なカテゴリのメッセージも自動的に含まれます。カテゴリの詳細については、*developer.4d.com* 上の*Diagnostic log levels* の章を参照してください。 + **取りうる値:** 以下の定数のいづれか(デフォルトは Log info ): Log trace: ERROR、WARN、INFO、DEBUG、TRACE を有効化します(最も詳細なレベル) Log debug: ERROR、WARN、INFO、DEBUG を有効化します Log info: ERROR、WARN、INFO を有効化します(デフォルト) Log warn: ERROR、WARN を有効化します Log error: ERROR を有効化します(最も簡略なレベル) -この値を変更すれば、TCPプロトコルを使用して、複数の4D クライアント/サーバアプリケーションを同じマシンで同時に使用することができます。その場合、それぞれのアプリケーションごとに異なるポート番号を設定します。 -公開ポート番号は、ストラクチャファイルに記録されています。ローカルモードの4Dで設定することもできますが、クライアント/サーバ環境でのみ考慮されます。 +### Diagnostic log recording (79) +**Thread-safe** : Yes +**スコープ**: 4Dアプリケーション -値を変更した場合、新しい設定が有効になるためには、アプリケーションを再起動する必要があります。 +2セッション間で設定を保持: No +取りうる値: 0 または 1 (0 = 記録しない, 1 = 記録する) +: 4D診断ファイルの記録を開始または停止する。デフォルトの値は0(記録しない)です。 -### HTTPS Port ID (39) +4Dは診断ファイルの中に内部的なアプリケーション処理に関連するイベントを継続的に記録することができます。このファイルに含まれる情報は4Dアプリケーション開発のために使用され、4D社の技術サポート担当により解析されます。このセレクターに1を渡すと、データベースの**Logs** フォルダ内に診断ファイルが自動的に作成されます(またはすでに存在する場合には開かれます)。ファイルには*4DDiagnosticLog\_X*.txt (あるいはサーバー側で生成された場合には *4DDiagnosticLogServer\_X*.txt) という名前が付けられます。このファイルのサイズが10MBに達するとそのファイルは閉じられ、DatabaseName\_N.txtが生成されます (Nは連番)。 -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +[LOG EVENT](log-event.md)コマンドを使用してカスタム情報をこのファイルに書き込むこともできます。 -### Client HTTPS port ID (40) -**スコープ**:すべての4Dリモートマシン +### Direct2D get active status (74) - **2セッション間で設定を保持**: Yes +**注:** このセレクターは[Get database parameter](get-database-parameter.md)コマンドでのみ使用することができ、設定することはできません。 - **とりうる値**: 0 ~ 65535 +説明: WindowsにおいてDirect2Dのアクティブな実装を返します。 -**説明**: このセレクタは、クライアントマシンのWebサーバがSSLによるセキュアな接続(HTTPSプロトコル)で使用するTCP ポート番号を、プログラムで変更するために使用できます。デフォルトの値は443(標準ポート番号)です。 +取りうる値: 0, 1, 2, 3, 4 または 5 (セレクター69の値参照)。返される値はDirect2Dが利用可能かどうか、およびハードウェア、OSによってサポートされるDirec2Dの品質に基づきます。 -このセレクタの動作はセレクタ39と同じですが、Web サーバとして使用されるすべてのクライアントマシンに適用されます。特定のクライアントマシンの設定だけを変更するのであれば、4Dリモートの環境設定ダイアログ画面を使用してください。 +例えば以下のコードを実行した場合、 -### SQL Autocommit (43) + SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) -**スコープ**:データベース - **2セッション間で設定を保持**: Yes - **とりうる値**: 0 (無効) または 1 (有効) +- Windows 7以降、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは3に設定されます (ソフトウェアコンテキスト)。 -**説明**: SQLの自動コミットモードを有効または無効にするために使用します。デフォルトは 0 (無効モード) です。 +- Windows Vistaでは、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは0に設定されます (Direct2D無効)。 +- Windows XPでは、$modeは常に0です (Direct2D非互換)。 -自動コミットモードは、データベースの参照整合性を強化するために使用されます。このモードが有効の時、すべての*SELECT*, INSERT, *UPDATE* そして *DELETE* (SIUD) クエリは、これらがトランザクション内で実行されていない場合、自動でアドホックなトランザクションに含められます。このモードはデータベースの環境設定でも設定できます。 +### Direct2D status (69) -### SQL Engine case sensitivity (44) +**スコープ*: 4Dアプリケーション* -**スコープ**: データベース** + *(Direct2D Software) のみが許可されます。* -2セッション間で設定を保持**: Yes** -とりうる値**: 0 (大文字小文字を区別しない) または 1 (区別する) -: SQLエンジンが文字列比較を行う際に、大文字と小文字の違いを考慮させるかどうかを設定します。 デフォルトで値は1 (大文字小文字を区別する) です。SQLエンジンは文字列比較 (並び替えやクエリ) の際に大文字と小文字とアクセント付き文字を異なる文字として扱います。例えば“ABC”= “ABC”ですが“ABC” # “Abc”であり、"abc" # "âbc"です。SQLエンジンと4Dエンジンの動作をそろえたいなど特定の場合では、大文字と小文字を区別しない文字列比較 (“ABC”=“Abc"="âbc") を使用できます。 -**警告:* このオプションはデータベースのストラクチャーファイルと全てのプロセスを変更するため、パフォーマンス上の観点から、データベースのスタートアップ時にのみ設定することが強く推奨されます。* +### HTTP compression level (50) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -このオプションはアプリケーション環境設定の[CALL SUBFORM CONTAINER](call-subform-container.md) で設定できます。 +### HTTP compression threshold (51) -### Client log recording (45) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -**スコープ**: リモート4Dマシン -2セッション間で設定を保持: No -**とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 -**説明**: コマンドを実行した4Dクライアントマシンが実行した標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 +### HTTPS Port ID (39) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -クライアントマシンが実行したリクエストをログファイルに記録するよう、4Dに指示することができます。このメカニズムが有効になると、クライアントマシンのデータベースのローカルフォルダ内、Logsサブフォルダに2つのログファイルが作成されます。ファイルには"4DRequestsLog\_X.txt"と"4DRequestsLog\_ProcessInfo\_X.txt"(Xはログのシーケンシャル番号)の名前が付けられます。4DRequestsLogファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、value引数を使用して指定できます。 +### Idle connections timeout (54) -このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestsLogについての詳細な情報については、*ログファイルの詳細* の章を参照してください。 - - - -### Query by formula on server (46) - -**スコープ**: カレントテーブルおよびプロセス - - **2セッション間で設定を保持**: No - - **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) - -**説明**: 引数に渡された*table*に対して実行される[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの実行場所。 +**スコープ**: 値が負数でないなら4Dアプリケーション -クライアント/サーバモードでデータベースを使用するとき、フォーミュラを使用したクエリをサーバ上またはクライアント上で実行させることができます: +**2セッション間で設定を保持**: No -4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、これらのコマンドは、以前のバージョンの4Dと同様、クライアントマシン上で実行されます。変換されたデータベースでは、環境設定のアプリケーション/互換性ページで、これらのコマンドの実行場所をグローバルに変更できます。この実行場所の違いは、アプリケーションのパフォーマンス (通常サーバ上で実行したほうが早い) だけでなく、プログラミングにも影響します。実際フォーミュラの部品の値 (特にメソッドから呼ばれる変数) は、実行コンテキストにより異なります。このセレクタを使用して開発者は、アプリケーションの動作を適応させられます。 +**とりうる値**: 持続時間を秒で表す値。値は正数 (新規接続) または負数 (既存の接続)をとることができます。デフォルト値は20です。 -*value* 引数に0を渡すと、フォーミュラを使用するクエリの実行場所は、データベースの設定に基づきます: 4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、データベース環境設定に基づき、クライアントマシンまたはサーバマシンで実行されます。*value*に1または2を渡すと、これらのコマンドの実行場所をクライアントマシンまたはサーバマシンに強制できます。 +**説明**: この引数を使用して、4DデータベースエンジンとSQLエンジン両方への動きのない接続の最大時間 (タイムアウト) を設定できます。また*ServerNet* (新しいネットワークレイヤー)モードにおいては4Dアプリケーションサーバーへの接続のタイムアウトも設定します。 -例題2を参照してください。 -**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 +動作していない接続がこの制限時間に達すると、接続は自動でスタンバイ状態に置かれます。つまりクライアント/サーバセッションがフリーズされ、ネットワー クソケットが閉じられます。サーバー管理ウィンドウでは、ユーザープロセスの状態は"延期"と表示されます。この動作はユーザに対し完全に透過的です。スタンバイ状態の接続でリクエストが開始されると、ソケットが自動で再び開かれ、クライアント/サーバセッションが再び有効になります。 -### Order by formula on server (47) -**スコープ**:カレントテーブルおよびプロセス +この設定によりサーバのリソースを節約できます。スタンバイ状態の接続はソケットを 閉じ、サーバ上のプロセスを解放します。他方これにより、ファイアウォールがアイドルなソケットを閉じてしまうことに伴い接続が失われることを避けること ができます。このためには、アイドル接続のタイムアウト値はファイアウォールのタイムアウト値よりも小さくなくてはなりません。 - **2セッション間で設定を保持**: No - **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) -**説明**: 引数に渡されたtableに対して実行される[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドの実行場所。 +*value*に正数を渡すと、設定はすべてのプロセスのすべての新規接続に適用されます。負数を渡すと、設定はカレントプロセスの開かれた接続に適用されます。0を渡すと、アイドル接続のタイムアウトは行われません。 -クライアント/サーバモードでデータベースを使用するとき、[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドをサーバ上またはクライアント上で実行させることができます。このセレクタを使用して、このコマンドの実行場所 (サーバまたはクライアント) を指定できます。このモードはデータベース環境設定でも設定できます。詳細はセレクタ46、Query By Formula On Serverの説明を参照してください。 +このパラメターはクライアント側で設定する必要があります。通常この値を変更する必要はありません。 -**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュ ラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -### Auto synchro resources folder (48) +### IMAP Log (119) -**スコープ**:4D リモートマシン +**Thread-safe** : Yes - **2セッション間で設定を保持**: No +**スコープ**: 4D ローカル、4D Server - **とりうる値**: 0 (同期しない), 1 (自動同期) または2 (確認する). +**異なるセッション間で値を保持**: No -**説明**: このコマンドを実行する4DクライアントマシンのResourcesフォルダの動的な同期モード。 +**取りうる値**: 0 または1 から X(0= 記録しない、1からX= シーケンシャル番号、ファイル名に追加される)。デフォルトでは値は0 です(IMAP の交換は記録されない)。 -サーバ上のResourcesフォルダの内容が更新されたり、(リソースエクスプローラや SET DATABASE LOCALIZATION コマンドで) ユーザが同期をリクエストすると、サーバは接続されたユーザに通知を行います。 +**詳細**: transporter オブジェクトが*IMAP\_transporter.getMail( )* または *IMAP\_transporter.checkConnection( )* で処理される際の4D とIMAP サーバーとの間の通信記録を開始または停止します。デフォルトでは、値は0です(通信は記録されません)。この機構が有効化されている場合、ログファイルがデータベースのLogフォルダに作成されます。ファイルは4DIMAPLog\_X.txt と名前がつけられ、このX はログのシーケンシャル番号です。ファイルのサイズが10MB に到達すると、ファイルは閉じられ、インクリメントされたシーケンシャル番号を持った新しいファイルが生成されます。同じ名前のファイルが既に存在する場合、それは直接置き換えられます。value 引数を使用するとシーケンス番号の開始番号を設定することができます。デフォルトで、全てのファイルは保持されますが、Circular log limitation 引数を使用することで保持するファイルの数をコントロールすることができます。 -クライアント側では3つの同期モードを選択できます。Auto Synchro Resources Folderセレクタはカレントセッションでクライアントマシンが使用するモードを指定できます: +ファイルの詳細については、*ログファイルの詳細* の章を参照してください。 -0 (デフォルト値): 動的な同期を行わない (同期リクエストは無視される)1: 自動の動的同期2: クライアントマシンにダイアログを表示し、同期の受け入れ回避を確認するアプリケーションの環境設定で、同期モードをグローバルに設定できます。 -### Query by formula joins (49) +### Is current database a project (112) -**スコープ**:カレントプロセス +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 - **2セッション間で設定を保持**: No +: 4D アプリケーション** - **とりうる値**: 0 (データベース設定を使用), 1 (常に自動リレーションを使用) または 2 (可能ならSQL JOINを使用) +詳細**: カレントのデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 -**説明**: "SQL JOIN"の利用に関連する、[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")と[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの動作モード。 -4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、これらのコマンドはSQL JOINモデルに基づくJOINを実行します。このメカニズムを使用して、(以前のバージョンでは必要な条件だった) 自動リレーションで接続されていない他のテーブルに対して実行されたクエリに基づき、テーブルのセレクションを変更できます。 -QUERY BY FORMULA Joinsセレクタで、カレントプロセスの、フォーミュラによるクエリの動作モードを指定できます: -0: データベースの現在の設定を使用する (デフォルト値)。4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、"SQL JOIN"はフォーミュラによるクエリに対し常に有効です。変換されたデータベースでは、互換性のためデフォルトでこのメカニズムは有効になっていません。しかし環境設定で実装できます。1: 常に自動リレーションを使用 (= 以前のバージョンの4Dの動作)。このモードでは、他のテーブルに対して行われたクエリに基づきテーブルのセレクションを作成するためには、リレーションが必要です。4Dは"SQL JOIN"を行いません。2: 可能であればSQL JOINを使用 (= 4D v11 SQLのバージョン11.2以降で作成されたデータベースのデフォルト動作)。このモードでは、フォーミュラが適合する限り、4Dはフォーミュラによるクエリに"SQL JOIN"を使用します (2つの例外があります。[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") コマンドの説明を参照)。**Note:** 4Dのリモートモードにおいて、"SQL JOIN"はフォーミュラがサーバ上で実行されているときにのみ使用できます (レコードへのアクセスが必要なため)。フォーミュラの実行場所を設定するには、セレクタ46と47を参照してください。 +### Is host database a project (113) +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 +: 4D アプリケーション** -### HTTP compression level (50) +詳細**: ホストデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### HTTP compression threshold (51) +### Is host database writable (117) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでしか使用できず、この値を設定することはできません。 +**スコープ**: 4D アプリケーション +**詳細**: ホストのプロジェクトファイル/ストラクチャーが書き込み可能なら1を、読み出し専用なら0を返します。 -### Server base process stack size (53) -**スコープ**: 4D Server - 2セッション間で設定を保持: No - **とりうる値**:正の倍長整数 +### Libldap version (114) -**説明**: サーバ上のプリエンプティブシステムプロセス毎に割り当てるスタックのサイズ (バイト単位) です。デフォルトでの値はシステムによって決定されます。 +**スコープ**: カレント4D マシン -プ リエンプティブシステムプロセスはメインの4D クライアントプロセスを制御するためにロードされます。デフォルトでそれぞれのプリエンプティブプロセスに割り当てられるサイズはおよその場合最適なサイ ズですが、何百ものプロセスが作成されるようなケースではこのサイズが適切かどうか検討する必要が出てくるかもしれません。 +**異なるセッション間で値を保持**: No -データベースが実行する処理がそれを許す限り、最適化の目的でこのサイズを大幅に減らすことができます ( 例えばデータベースで大量のレコードの並び替えなどを行わない場合)。512 や256 KB でさえも設定可能です。スタックサイズを小さくしすぎることは致命的であり、4D Server の動作に害を及ぼすことになるので注意してください。このパラメタの設定は注意を持って行い、データベースの利用状況 (レコード数や行う処理など) を考慮しながら行わなければなりません。 +**詳細**: カレントマシン上の4D アプリケーション内のLDAP ライブラリーのバージョン番号を返します(読み出し専用) -このパラメタの設定を行うには、*On Server Startupデータベースメソッド* などにおいてサーバ上でコマンドが実行されなければなりません。 -### Idle connections timeout (54) +### Libsasl version (115) -**スコープ**: 値が負数でないなら4Dアプリケーション +**スコープ**: カレント4D マシン** -**2セッション間で設定を保持**: No +異なるセッション間で値を保持**: No** -**とりうる値**: 持続時間を秒で表す値。値は正数 (新規接続) または負数 (既存の接続)をとることができます。デフォルト値は20です。 +詳細**: カレントマシン上の4D アプリケーション内のSASL ライブラリーのバージョン番号を返します(読み出し専用) -**説明**: この引数を使用して、4DデータベースエンジンとSQLエンジン両方への動きのない接続の最大時間 (タイムアウト) を設定できます。また*ServerNet* (新しいネットワークレイヤー)モードにおいては4Dアプリケーションサーバーへの接続のタイムアウトも設定します。 -動作していない接続がこの制限時間に達すると、接続は自動でスタンバイ状態に置かれます。つまりクライアント/サーバセッションがフリーズされ、ネットワー クソケットが閉じられます。サーバー管理ウィンドウでは、ユーザープロセスの状態は"延期"と表示されます。この動作はユーザに対し完全に透過的です。スタンバイ状態の接続でリクエストが開始されると、ソケットが自動で再び開かれ、クライアント/サーバセッションが再び有効になります。 +### Libzip version (120) +**スコープ:** カレントの4D マシン** +2セッション間で設定を保持:** n/a** -この設定によりサーバのリソースを節約できます。スタンバイ状態の接続はソケットを 閉じ、サーバ上のプロセスを解放します。他方これにより、ファイアウォールがアイドルなソケットを閉じてしまうことに伴い接続が失われることを避けること ができます。このためには、アイドル接続のタイムアウト値はファイアウォールのタイムアウト値よりも小さくなくてはなりません。 +説明:** カレントマシン上の4D アプリケーションのlibzip ライブラリのバージョン番号を返します(読み出し専用) -*value*に正数を渡すと、設定はすべてのプロセスのすべての新規接続に適用されます。負数を渡すと、設定はカレントプロセスの開かれた接続に適用されます。0を渡すと、アイドル接続のタイムアウトは行われません。 +### Log command list (80) +**スコープ**: 4D アプリケーション -このパラメターはクライアント側で設定する必要があります。通常この値を変更する必要はありません。 +**2セッション間で設定を保持**: No +**取りうる値**: 記録する4Dコマンドの番号リスト。型は文字列で各コマンド番号をセミコロンで区切ります。"all"を渡すとすべてのコマンドが記録され、"" (空の文字列) を渡すとなにも記録されません。 +**説明**: デバッグファイルに記録する4Dコマンドのリスト (セレクター 34, Debug Log Recording参照)。デフォルトではすべての4Dコマンドが記録されます。 -### PHP interpreter IP address (55) +このセレクターを使用すれば、記録に残したい4Dコマンドを指定することで、デバッグファイルに保存される情報の量を制限することができます。例えば以下のようにコードを記述できます: -**スコープ**: 4D アプリケーション + SET DATABASE PARAMETER(Log command list;"277;341")   // QUERY および QUERY SELECTION コマンドのみを記録する -2セッション間で設定を保持: No** -値**: IPv4 型にフォーマットされた文字列(例 "127.0.0.1") あるいはIPv6 型にフォーマットされた文字列(例 "2001:0db8:0000:0000:0000:ff00:0042:8329") -: FastCGI を経由してPHPインタプリタと通信を行うために、4D がローカルで使用するIP アドレス。デフォルトで値は"127.0.0.1" です(IPv5 フォーマットのアドレスは4D v16 R4 以降でサポートされます)。このアドレスは4D が配置されているマシンに対応しなければなりません。このパラメタはデータベース設定を使用してすべてのマシン用にグローバルに設定できます。 -PHPインタプリタに関する詳細は*Design Reference*マニュアルを参照してください。 +### Max concurrent Web processes (18) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### PHP interpreter port (56) -**スコープ**:4D アプリケーション - **2セッション間で設定を保持**: No +### Maximum Web requests size (27) -**値**: 正の倍長整数値。デフォルト値は8002。 +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -**説明**: 4DのPHPインタプリタが使用するTCPポート番号。データベース設定でこの値をすべてのマシン用にグローバルに変更できます。PHPインタープリタに関する詳細は*Design Reference* マニュアルを参照してください。 -### SSL cipher list (64) +### Min TLS version (105) -**スコープ**: 4Dアプリケーション **2セッション間で設定を保持**: No +**スコープ**: 4D Server、4D Web サーバーおよび4D SQL サーバー -**とりうる値**: コロンで区切られた一連の文字列 (例 "ECDHE-RSA-AES128-....") +**異なるセッション間で値を保持**: No -**説明**: 安全なプロトコルのために4Dが使用する暗号リストです。このリストを使用して4Dによって実装された暗号化アルゴリズムの順位を変更することができます。例えば、以下の文字列を *value* 引数に渡す事ができます:"HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". 暗号リストのシンタックスの完全な詳細については、*OpenSSL の暗号ページ* *のサイト* を参照して下さい。 +**詳細**: Transport Layer Security (TLS) レベルを指定するのに使用します。これはデータ暗号化とアプリケーションとサーバー間での認証を可能にします。これによって定義された最小値を下回るバージョンしかサポートしないクライアントからの接続は拒否されます。この設定はネットワークレイヤー全体に適用されます。変更した後にその新しい値を使用するためには、サーバーを再起動する必要があります。 -この設定はメインWebサーバー(ただしWebサーバーオブジェクトは除く)、SQLサーバー、クライアント/サーバー接続、そしてHTTPクライアントと、安全なプロトコルを使用する4D コマンドの全てに対して適用されます。この変更は一時的な物です(つまり異なるセッション間で設定は保持されません)。 +**デフォルトの値**: TLSv1\_3 -暗号リストが変更された場合、新しい設定が使用されるようにするためには関係するサーバーを再起動する必要があります。 +**取りうる値**: TLSv1\_2 (TLS 1.2、2008年に導入) TLSv1\_3 (TLS 1.3、2018年に導入) **注**: -暗号リストを (SLIファイルに恒久的に格納された) デフォルト値に再設定するには、*value*引数に空の文字列 ("") を渡して [SET DATABASE PARAMETER](set-database-parameter.md) コマンドを呼び出します。 +- 4D Internet Commands プラグインは異るネットワークレイヤーを使用するため、ここのセレクターは4DICのTLSバージョンには影響しません。 -**注**: [Get database parameter](get-database-parameter.md) コマンドで暗号リストはオプションの *stringValue* 引数に返され、戻り値は常に0となります。 +- TLS を旧式ネットワークレイヤーに適用しても反映されません。 -### Cache unload minimum size (66) -**スコープ**:4Dアプリケーション +### Number of formulas in cache (92) - **2セッション間で設定を保持**: No +**スコープ**: 4Dアプリケーション - **とりうる値**: 1より大きい正の倍長整数 +**異なるセッション間で保持**: No -**説明**: エンジンがオブジェクトをデータベースキャッシュに配置する際に空き空間を作成する必要が出た場合、データベースキャッシュからリリースするメモリの最小サイズ (バイト単位)。 +**取りうる値**: 正の倍長整数 -このセレクタの目的はキャッシュからデータをリリースする時間を減らし、よりパフォーマンスを得ることにあります。キャッシュのサイズやデータベース中で処理されるデータのブロックサイズに応じてこの値を変更できます。 +**デフォルト値**: 0 (キャッシュなし) -このセレクタが使用されないとデフォルトで、4Dは空間が必要になった時最低10%のキャッシュをアンロードします。 +**詳細**: フォーミュラのキャッシュに保存されるフォーミュラの最大数を設定あるいは取得します。これは[EXECUTE FORMULA](execute-formula.md)コマンドで使用されます。この上限は全てのプロセスに適用されますが、各プロセスにはそれぞれ独自のフォーミュラ用キャッシュがあります。フォーミュラをキャッシュすると、それぞれのフォーミュラはこの場合1度しかトークン化されないため、コンパイル済みモードでの[EXECUTE FORMULA](execute-formula.md)コマンドの実行が速くなります。キャッシュ値を変化させると、例え新しいサイズが以前のものより大きくても、既存の中身は全てリセットされます。キャッシュ内のフォーミュラ数が上限値に達すると、その後新しく実行されたフォーミュラはキャッシュ内の一番古いものを消去します(FIFOモード)。この引数は、コンパイルされたデータベース、あるいはコンパイルされたコンポーネントでのみ考慮されます。 -### Direct2D status (69) -**スコープ*: 4Dアプリケーション* +### OpenSSL version (94) - *(Direct2D Software) のみが許可されます。* +**スコープ**: 4D マシン全体* +* **2セッション間で設定を保持**: No +**説明**: マシン上で使用されているOpenSSL ライブラリーのバージョン番号を返します(読み込みのみ) -### Direct2D get active status (74) -**注:** このセレクターは[Get database parameter](get-database-parameter.md)コマンドでのみ使用することができ、設定することはできません。 -説明: WindowsにおいてDirect2Dのアクティブな実装を返します。 -取りうる値: 0, 1, 2, 3, 4 または 5 (セレクター69の値参照)。返される値はDirect2Dが利用可能かどうか、およびハードウェア、OSによってサポートされるDirec2Dの品質に基づきます。 +### Order by formula on server (47) -例えば以下のコードを実行した場合、 +**スコープ**:カレントテーブルおよびプロセス + **2セッション間で設定を保持**: No + **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) - SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) +**説明**: 引数に渡されたtableに対して実行される[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドの実行場所。 -- Windows 7以降、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは3に設定されます (ソフトウェアコンテキスト)。 +クライアント/サーバモードでデータベースを使用するとき、[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドをサーバ上またはクライアント上で実行させることができます。このセレクタを使用して、このコマンドの実行場所 (サーバまたはクライアント) を指定できます。このモードはデータベース環境設定でも設定できます。詳細はセレクタ46、Query By Formula On Serverの説明を参照してください。 -- Windows Vistaでは、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは0に設定されます (Direct2D無効)。 +**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュ ラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -- Windows XPでは、$modeは常に0です (Direct2D非互換)。 -### Diagnostic log recording (79) +### Pause logging (121) **Thread-safe** : Yes -**スコープ**: 4Dアプリケーション - -2セッション間で設定を保持: No +**スコープ**: 4D アプリケーション** -取りうる値: 0 または 1 (0 = 記録しない, 1 = 記録する) +異なるセッション間で値を設定を保持**: No** -: 4D診断ファイルの記録を開始または停止する。デフォルトの値は0(記録しない)です。 +取り得る値**: 0 (ログを再開)、1 (ログを停止) -4Dは診断ファイルの中に内部的なアプリケーション処理に関連するイベントを継続的に記録することができます。このファイルに含まれる情報は4Dアプリケーション開発のために使用され、4D社の技術サポート担当により解析されます。このセレクターに1を渡すと、データベースの**Logs** フォルダ内に診断ファイルが自動的に作成されます(またはすでに存在する場合には開かれます)。ファイルには*4DDiagnosticLog\_X*.txt (あるいはサーバー側で生成された場合には *4DDiagnosticLogServer\_X*.txt) という名前が付けられます。このファイルのサイズが10MBに達するとそのファイルは閉じられ、DatabaseName\_N.txtが生成されます (Nは連番)。 +このセレクターを使用するとアプリケーション上で開始された全てのログオペレーションを停止/再開させることができます(ただしORDAログは除く)。この機能は4Dアプリケーションのタスクを一時的に軽くしたり、あるいはログオペレーションのスケジュールを設定することに有用です。 -[LOG EVENT](log-event.md)コマンドを使用してカスタム情報をこのファイルに書き込むこともできます。 -### Log command list (80) +### PHP interpreter IP address (55) **スコープ**: 4D アプリケーション -**2セッション間で設定を保持**: No - -**取りうる値**: 記録する4Dコマンドの番号リスト。型は文字列で各コマンド番号をセミコロンで区切ります。"all"を渡すとすべてのコマンドが記録され、"" (空の文字列) を渡すとなにも記録されません。 - -**説明**: デバッグファイルに記録する4Dコマンドのリスト (セレクター 34, Debug Log Recording参照)。デフォルトではすべての4Dコマンドが記録されます。 - -このセレクターを使用すれば、記録に残したい4Dコマンドを指定することで、デバッグファイルに保存される情報の量を制限することができます。例えば以下のようにコードを記述できます: - - SET DATABASE PARAMETER(Log command list;"277;341")   // QUERY および QUERY SELECTION コマンドのみを記録する - - - -### Spellchecker (81) - -**スコープ**: 4D アプリケーション** +2セッション間で設定を保持: No** -2セッション間で設定を保持**: No +値**: IPv4 型にフォーマットされた文字列(例 "127.0.0.1") あるいはIPv6 型にフォーマットされた文字列(例 "2001:0db8:0000:0000:0000:ff00:0042:8329") - **とりうる値**: 0 (default) = macOSのシステムのスペルチェッカー(ハンスペルは無効化されます), 1 = ハンスペルスペルチェッカー有効化** +: FastCGI を経由してPHPインタプリタと通信を行うために、4D がローカルで使用するIP アドレス。デフォルトで値は"127.0.0.1" です(IPv5 フォーマットのアドレスは4D v16 R4 以降でサポートされます)。このアドレスは4D が配置されているマシンに対応しなければなりません。このパラメタはデータベース設定を使用してすべてのマシン用にグローバルに設定できます。 -説明**: macOS環境下においてハンスペルスペルチェッカーを有効化します。デフォルトでは、このプラットフォームではシステムのスペルチェッカーが有効化されています。例えば、クロスプラットフォームアプリケーションのインターフェースを統一するためにハンスペルを使用したいという場面があるかもしれません(Windowsでは、ハンスペルチェッカーのみが動作します)。詳細な情報に関しては、*スペルチェック*を参照して下さい。 +PHPインタプリタに関する詳細は*Design Reference*マニュアルを参照してください。 -### Dates inside objects (85) -スコープ: カレントプロセス +### PHP interpreter port (56) - 2セッション間で設定を保持: No +**スコープ**:4D アプリケーション - **取り得る値**: String type without time zone (0), String type with time zone (1), Date type (2) (デフォルト) + **2セッション間で設定を保持**: No -**説明**: 日付がオブジェクトにどのように保存されるかを定義するとともに、どのようにJSON に読み込み/書き出しされるかも定義します。 +**値**: 正の倍長整数値。デフォルト値は8002。 -セレクターの値がDate type (4D v17以降で作成されたデータベースにおけるデフォルト)のとき、4D 日付はオブジェクト内で日付型として保存され、ローカルの日付設定に準拠します。JSON フォーマットに変換された時、日付属性は、時間を含まない文字列へと変換されます(**注:** この設定は、データベース設定のにある"オブジェクト内ではISO日付フォーマットの代わりに日付型を使用"オプションによって設定することができます)。 +**説明**: 4DのPHPインタプリタが使用するTCPポート番号。データベース設定でこの値をすべてのマシン用にグローバルに変更できます。PHPインタープリタに関する詳細は*Design Reference* マニュアルを参照してください。 -セレクターにを渡した場合、4D 日付はローカルなタイムゾーンを考慮に入れつつISO 文字列に変換されます。例えば、例えば、23/08/2013という日付の変 換を、フランスのサマータイム(GMT+2)にて実行した場合、JSONフォーマットの"2013-08-22T22:00:00Z"という結 果が返されます。この原理はJavaScriptの標準のオペレーションに従うものです。これは異なるタイムゾーンにいる人にJSON日付の値を 送る場合には、エラーの原因となりかねません。例えば、[Selection to JSON](selection-to-json.md)を使ってフランスでエクスポートされたテーブルを[JSON TO SELECTION](json-to-selection.md) を使用してアメリカで再インポートする、というような場合です。日付の値は、デフォルトではそれぞれのタイムゾーンにおいて再変換 されるため、データベース内に保存された値は異なってしまいます。こういった場合には、このセレクターにString type without time zoneを渡す事によって、タイムゾーンを考慮しないよ うに日付の変換モードを変更することができます。すると、23/08/2013という日付を変換した場合に は、"2013-08-23T00:00:00Z"という値を返すようになります。 -### Diagnostic log level (86) +### POP3 Log (116) **Thread-safe** : Yes -**スコープ:** 4D アプリケーション** - -** **異なるセッション間で設定を保持:** No** - -** **説明:** 診断ログが有効化された際に、そこに含まれるメッセージのレベル(Diagnostic log recording セレクターを参照)。各レベルは診断メッセージのカテゴリを指定し、それより重要なカテゴリのメッセージも自動的に含まれます。カテゴリの詳細については、*developer.4d.com* 上の*Diagnostic log levels* の章を参照してください。 - - **取りうる値:** 以下の定数のいづれか(デフォルトは Log info ): Log trace: ERROR、WARN、INFO、DEBUG、TRACE を有効化します(最も詳細なレベル) Log debug: ERROR、WARN、INFO、DEBUG を有効化します Log info: ERROR、WARN、INFO を有効化します(デフォルト) Log warn: ERROR、WARN を有効化します Log error: ERROR を有効化します(最も簡略なレベル) +**スコープ:** 4D ローカル、4D Server +**2セッション間で設定を保持:** No +**取りうる値:** 0 または1からXまでの数字(0= 記録を取らない、1からX=シーケンシャルな数字、ファイル名に追加される)。デフォルトでは、値は0です(POP3通信は記録されません)。 -### Use legacy network layer (87) +**説明**: トランスポーターオブジェクトが*POP3\_transporter.getMail( )* または *POP3\_transporter.checkConnection( )*で処理されたとき、4D とPOP3 サーバー間の通信の記録を開始または停止します。デフォルトでは値は0 です(通信は記録されません)。この機構か有効化されている時、データベースのLogs フォルダにログファイルが作成されます。ファイル名は4DPOP3Log\_X.txt という形式となっており、X はログのシーケンシャル番号です。4DPOP3Log のサイズが10MBに到達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャル番号は1つ増加します。同じ名前のファイルが既に存在する場合、それは上書きされます。シーケンシャル番号の開始番号を、value 引数を用いて指定することができます。デフォルトでは全てのファイルが保持されますが、Circular log limitation 定数を使用することで残すファイルの数を制限することもできます。 -**スコープ**: 4D ローカル、4D Server +4DPOP3Log\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -**異なるセッション間で値を保持**: Yes -**詳細:** クライアント/サーバー間の通信のネットワークレイヤーのカレントの状態を設定・取得します。旧式ネットワークレイヤーは4D v14 R5以降廃止予定となり、お使いのアプリケーションにおいて*ServerNet* ネットワークレイヤーへと積極的に置き換えられてい行くべきです。*ServerNet* は、将来のネットワークの進化の恩恵を受けるために、今後の4Dのリリースの中で必須要項となって行きます。互換性の理由から、既存のアプリケーションの速やかな移行をサポートするために、旧式のネットワークレイヤーは引き続きサポートされます(v14 R5以前のリリースから変換されたアプリケーションにおいてはデフォルトで旧式ネットワークレイヤーが使用されます)。クライアント/サーバー通信において旧式ネットワークレイヤーを使用するためにはこの引数に1を渡します(*ServerNet* が無効化されます)。0を渡すと旧式ネットワークレイヤーが無効化されます(そして*ServerNet* が使用されます)。 -このプロパティはデータベース設定の*互換性ページ* の"旧式ネットワークレイヤー"オプションを使用することによっても設定できます(*ネットワーク/クライアント-サーバー通信*参照)。この章では、移行戦略についての議論を読むこともできます。*ServerNet* の速やかな有効化が推奨されます。 -この引数が有効になるためには、アプリケーションを再起動する必要があります。OS X版の4D Server 64-bit 版においては*ServerNet* のみをサポートするため、このオプションはご利用いただけません(常に0を返します)。 +### Port ID (15) -**取り得る値:** 0 または 1 (0 = 旧式ネットワークレイヤーを使用しない、1 = 旧式ネットワークレイヤーを使用する) +**スコープ**: 4D ローカル, 4D Server -**デフォルトの値:** 4D v14 R5以降で作成されたデータベースにおいては0、4D v14 R4以前のものから変換されたデータベースにおいては1 +**2セッション間で設定を保持**: No +**説明**: Command SET DATABASE この引数を使用して、ローカルモードの4Dおよび4D Serverによる4D Webサーバが使用するTCPポートをオンザフライで変更することができます。デフォルト値は80で、この値は環境設定ダイアログボックスの“Web/設定”ページで設定できます。*TCP Port Numbers*テーマの定数を*value*引数に使用できます。 -### SQL Server Port ID (88) -**スコープ**: 4D ローカル、4D Server +Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Webサーバで役立ちます(この場合、デザインモードへのアクセス手段がありません)。TCPポートIDに関する詳細は*Webサーバー設定*を参照してください。 -**2セッション間で設定を保持**: Yes -**説明**: 4Dローカル、または4D Server の統合されたSQLサーバーで使用されるTCPポート番号を取得、または設定します。デフォルトの値は19812です。このセレクターが設定されると、データベース設定は更新されます。TCPポート番号はデータベース設定ダイアログボックスの"SQL"ページにおいても設定可能です。 -**とりうる値**: 0 から 65535 -**デフォルト値**: 19812 +### Query by formula joins (49) +**スコープ**:カレントプロセス + **2セッション間で設定を保持**: No -### Circular log limitation (90) + **とりうる値**: 0 (データベース設定を使用), 1 (常に自動リレーションを使用) または 2 (可能ならSQL JOINを使用) -**Thread-safe** : Yes +**説明**: "SQL JOIN"の利用に関連する、[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")と[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの動作モード。 -**スコープ**: 4Dローカル、4D Server **異なるセッション間で値を保持**: No** +4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、これらのコマンドはSQL JOINモデルに基づくJOINを実行します。このメカニズムを使用して、(以前のバージョンでは必要な条件だった) 自動リレーションで接続されていない他のテーブルに対して実行されたクエリに基づき、テーブルのセレクションを変更できます。 -取りうる値**: 任意の整数値、0 = 全てのログを保持** +QUERY BY FORMULA Joinsセレクタで、カレントプロセスの、フォーミュラによるクエリの動作モードを指定できます: -詳細**: 各タイプのロゴのローテーションに保存するファイル数の最大値。デフォルトでは、直近の50 ファイルが保持されます。*X* という値を渡した場合、直近の*X* 個のファイルのみが保持され、最も古いファイルは新しいファイルが作成されたときに自動的に削除されます。この設定は全てのログファイルに対して適用されます:リクエストログ(セレクター28と45)、デバッグログ(セレクター34)、イベントログ(セレクター79)、Web ログ([WEB SET OPTION](web-set-option.md)コマンドのセレクター29と84)、などです。 +0: データベースの現在の設定を使用する (デフォルト値)。4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、"SQL JOIN"はフォーミュラによるクエリに対し常に有効です。変換されたデータベースでは、互換性のためデフォルトでこのメカニズムは有効になっていません。しかし環境設定で実装できます。1: 常に自動リレーションを使用 (= 以前のバージョンの4Dの動作)。このモードでは、他のテーブルに対して行われたクエリに基づきテーブルのセレクションを作成するためには、リレーションが必要です。4Dは"SQL JOIN"を行いません。2: 可能であればSQL JOINを使用 (= 4D v11 SQLのバージョン11.2以降で作成されたデータベースのデフォルト動作)。このモードでは、フォーミュラが適合する限り、4Dはフォーミュラによるクエリに"SQL JOIN"を使用します (2つの例外があります。[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") コマンドの説明を参照)。**Note:** 4Dのリモートモードにおいて、"SQL JOIN"はフォーミュラがサーバ上で実行されているときにのみ使用できます (レコードへのアクセスが必要なため)。フォーミュラの実行場所を設定するには、セレクタ46と47を参照してください。 -### Number of formulas in cache (92) -**スコープ**: 4Dアプリケーション +### Query by formula on server (46) -**異なるセッション間で保持**: No +**スコープ**: カレントテーブルおよびプロセス -**取りうる値**: 正の倍長整数 + **2セッション間で設定を保持**: No -**デフォルト値**: 0 (キャッシュなし) + **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) -**詳細**: フォーミュラのキャッシュに保存されるフォーミュラの最大数を設定あるいは取得します。これは[EXECUTE FORMULA](execute-formula.md)コマンドで使用されます。この上限は全てのプロセスに適用されますが、各プロセスにはそれぞれ独自のフォーミュラ用キャッシュがあります。フォーミュラをキャッシュすると、それぞれのフォーミュラはこの場合1度しかトークン化されないため、コンパイル済みモードでの[EXECUTE FORMULA](execute-formula.md)コマンドの実行が速くなります。キャッシュ値を変化させると、例え新しいサイズが以前のものより大きくても、既存の中身は全てリセットされます。キャッシュ内のフォーミュラ数が上限値に達すると、その後新しく実行されたフォーミュラはキャッシュ内の一番古いものを消去します(FIFOモード)。この引数は、コンパイルされたデータベース、あるいはコンパイルされたコンポーネントでのみ考慮されます。 +**説明**: 引数に渡された*table*に対して実行される[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの実行場所。 +クライアント/サーバモードでデータベースを使用するとき、フォーミュラを使用したクエリをサーバ上またはクライアント上で実行させることができます: +4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、これらのコマンドは、以前のバージョンの4Dと同様、クライアントマシン上で実行されます。変換されたデータベースでは、環境設定のアプリケーション/互換性ページで、これらのコマンドの実行場所をグローバルに変更できます。この実行場所の違いは、アプリケーションのパフォーマンス (通常サーバ上で実行したほうが早い) だけでなく、プログラミングにも影響します。実際フォーミュラの部品の値 (特にメソッドから呼ばれる変数) は、実行コンテキストにより異なります。このセレクタを使用して開発者は、アプリケーションの動作を適応させられます。 -### OpenSSL version (94) +*value* 引数に0を渡すと、フォーミュラを使用するクエリの実行場所は、データベースの設定に基づきます: 4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、データベース環境設定に基づき、クライアントマシンまたはサーバマシンで実行されます。*value*に1または2を渡すと、これらのコマンドの実行場所をクライアントマシンまたはサーバマシンに強制できます。 -**スコープ**: 4D マシン全体* +例題2を参照してください。 -* **2セッション間で設定を保持**: No +**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -**説明**: マシン上で使用されているOpenSSL ライブラリーのバージョン番号を返します(読み込みのみ) -### Cache flush periodicity (95) +### RDP optimization (133) -**Thread-safe** : Yes +**Scope:** 4D application. +**Kept between two sessions:** No. -**スコープ**: 4Dローカル、4D Server +**Possible values:** `0`: Disabled (default), `1`: Enabled. -**異なるセッション間で値を保持**: No +**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). -**取りうる値**: 倍長整数 > 1 (秒) -**詳細**: 秒単位で指定された、キャッシュ保存頻度を取得あるいは設定します。この値を変更すると、データベース設定の[XML DECODE](xml-decode.md)内の**キャッシュを保存: X秒毎**オプションをセッション中の間上書きします(これはデータベース設定には保存されません)。 @@ -715,246 +784,243 @@ PHPインタプリタに関する詳細は*Design Reference*マニュアルを -### Tips enabled (101) -**スコープ:** 4D アプリケーション +### Server base process stack size (53) -**異なるセッション間で値を保持:** No +**スコープ**: 4D Server -**取りうる値:** 0 = tips無効化、1 = tips有効化(デフォルト) + 2セッション間で設定を保持: No -**詳細:** 4DアプリケーションのTipsのカレントの表示状態を設定あるいは取得します。デフォルトでは、Tipsは有効化されています。 + **とりうる値**:正の倍長整数 -この引数は全ての4DTipsに影響するという点に注意してください。つまり、フォームヘルプメッセージとデザインモードのエディターTipsに影響します。 +**説明**: サーバ上のプリエンプティブシステムプロセス毎に割り当てるスタックのサイズ (バイト単位) です。デフォルトでの値はシステムによって決定されます。 + +プ リエンプティブシステムプロセスはメインの4D クライアントプロセスを制御するためにロードされます。デフォルトでそれぞれのプリエンプティブプロセスに割り当てられるサイズはおよその場合最適なサイ ズですが、何百ものプロセスが作成されるようなケースではこのサイズが適切かどうか検討する必要が出てくるかもしれません。 +データベースが実行する処理がそれを許す限り、最適化の目的でこのサイズを大幅に減らすことができます ( 例えばデータベースで大量のレコードの並び替えなどを行わない場合)。512 や256 KB でさえも設定可能です。スタックサイズを小さくしすぎることは致命的であり、4D Server の動作に害を及ぼすことになるので注意してください。このパラメタの設定は注意を持って行い、データベースの利用状況 (レコード数や行う処理など) を考慮しながら行わなければなりません。 +このパラメタの設定を行うには、*On Server Startupデータベースメソッド* などにおいてサーバ上でコマンドが実行されなければなりません。 -### Tips delay (102) -**スコープ:** 4Dアプリケーション -**異なるセッション間で値を保持:** No -**取りうる値:** 倍調整数 >= 0 (ティック) +### SMTP Log (110) -**詳細:** マウスカーソルがヘルプメッセージが関連づけられたオブジェクト内で停止してからTipsが表示されるまでの遅延時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は45ティック(=0.75秒)です。 +**Thread-safe** : Yes +**スコープ**: 4D ローカル、4D Server +**異なるセッション間で値を保持**: しない** -### Tips duration (103) +取りうる値**: 0 あるいは1 からX まで(0 = 記録しない、1 から X = ファイル名に追加されるシーケンシャルな数字)。デフォルトでは、値は0(SMTP 通信は記録されない)です。 -**スコープ:** 4Dアプリケーション +: *transporter* オブジェクトが*transporter.send( )* または *SMTP\_transporter.checkConnection( )* を通して処理される際、4D とSMTP サーバー間の通信の記録を開始、あるいは停止します。デフォルトでは、値は0です(通信は記録されない)。このログが有効化されると、データベースのLogs フォルダ内にログファイルが作成されます。ファイル名は4DSMTPLog\_X.txt で、この*X* はログのシーケンシャルな番号です。4DSMTPLog のファイルのサイズが10MB に達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャルな番号は数字がインクリメントされます。同じ名前のファイルが既に存在していた場合、そのファイルは直接上書きされます。*value* 引数を使用してシーケンスの開始番号を設定することができます。デフォルトでは全てのファイルが残されますが、Circular log limitation パラメータを使用することで保存しておくファイルの数を管理することができます。 -**異なるセッション間で値を保持:** No +4DSMTPLog\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -**取りうる値:** 倍調整数 >= 60 (ティック) -**詳細:** Tipsの最大表示時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は720ティック(=12秒)です。 +### Spellchecker (81) -### Min TLS version (105) +**スコープ**: 4D アプリケーション** -**スコープ**: 4D Server、4D Web サーバーおよび4D SQL サーバー +2セッション間で設定を保持**: No -**異なるセッション間で値を保持**: No + **とりうる値**: 0 (default) = macOSのシステムのスペルチェッカー(ハンスペルは無効化されます), 1 = ハンスペルスペルチェッカー有効化** -**詳細**: Transport Layer Security (TLS) レベルを指定するのに使用します。これはデータ暗号化とアプリケーションとサーバー間での認証を可能にします。これによって定義された最小値を下回るバージョンしかサポートしないクライアントからの接続は拒否されます。この設定はネットワークレイヤー全体に適用されます。変更した後にその新しい値を使用するためには、サーバーを再起動する必要があります。 +説明**: macOS環境下においてハンスペルスペルチェッカーを有効化します。デフォルトでは、このプラットフォームではシステムのスペルチェッカーが有効化されています。例えば、クロスプラットフォームアプリケーションのインターフェースを統一するためにハンスペルを使用したいという場面があるかもしれません(Windowsでは、ハンスペルチェッカーのみが動作します)。詳細な情報に関しては、*スペルチェック*を参照して下さい。 -**デフォルトの値**: TLSv1\_3 -**取りうる値**: TLSv1\_2 (TLS 1.2、2008年に導入) TLSv1\_3 (TLS 1.3、2018年に導入) **注**: -- 4D Internet Commands プラグインは異るネットワークレイヤーを使用するため、ここのセレクターは4DICのTLSバージョンには影響しません。 -- TLS を旧式ネットワークレイヤーに適用しても反映されません。 +### SQL Autocommit (43) +**スコープ**:データベース + **2セッション間で設定を保持**: Yes -### User param value (108) + **とりうる値**: 0 (無効) または 1 (有効) -**スコープ:** 4D スタンドアロン、4D Server +**説明**: SQLの自動コミットモードを有効または無効にするために使用します。デフォルトは 0 (無効モード) です。 -**2セッション間で値を保持:** No -**取りうる値**: 任意のカスタムの文字列 -**説明:** 4D アプリケーションが再起動される際に、ひとつのセッションから次のセッションへと渡されるカスタムの文字列です。このセレクターは異なる引数を使用してアプリケーションを再起動する必要がある、自動化されたユニットテストなどのコンテキストで有用です。[SET DATABASE PARAMETER](set-database-parameter.md) で使用された場合、手動で、あるいは[OPEN DATABASE](open-database.md)(\*)、 [OPEN DATA FILE](open-data-file.md)、 または [RESTART 4D](restart-4d.md) コマンドを使用して4D が再起動したあとに開かれるデータベースで利用可能となる新しい値を定義します。[Get database parameter](get-database-parameter.md) で使用された場合、コマンドライン(*コマンドラインインターフェース* 参照)、4DLink ファイル(*4DLinkファイルを使用する* 参照)、あるいは前のセッションでの[SET DATABASE PARAMETER](set-database-parameter.md) への呼び出しなどを使用して定義された、現在利用可能なユーザー引数値を取得します。(\*) [SET DATABASE PARAMETER](set-database-parameter.md)がUser param value を設定した後に、[OPEN DATABASE](open-database.md)にuser-param xml 属性を含む.4DLink ファイル渡して呼び出した場合、4D は[SET DATABASE PARAMETER](set-database-parameter.md)で提供された引数のみを考慮します。 +自動コミットモードは、データベースの参照整合性を強化するために使用されます。このモードが有効の時、すべての*SELECT*, INSERT, *UPDATE* そして *DELETE* (SIUD) クエリは、これらがトランザクション内で実行されていない場合、自動でアドホックなトランザクションに含められます。このモードはデータベースの環境設定でも設定できます。 -### Times inside objects (109) -スコープ: 4D ローカル、4D Server (全てのプロセス) +### SQL Engine case sensitivity (44) - 異なるセッション間で値を保持: No +**スコープ**: データベース** - **取りうる値**: Times in seconds (0) (デフォルト)、 Times in milliseconds (1) +2セッション間で設定を保持**: Yes** -**詳細**: オブジェクトプロパティ内およびコレクション要素内で時間値がどのように変換され保存されるかを定義するとともに、JSONおよびWeb エリアへの読込/書出の方法を定義します。デフォルトでは、4D v17 以降、時間はオブジェクト内では秒数として変換・保管されます。 +とりうる値**: 0 (大文字小文字を区別しない) または 1 (区別する) -以前のリリースでは、時間値はこれらのコンテキストにおいてはミリ秒数として変換・保管されていました。このセレクターを使用することで、必要であれば以前の設定に戻すことで、移行がスムーズになります。 +: SQLエンジンが文字列比較を行う際に、大文字と小文字の違いを考慮させるかどうかを設定します。 デフォルトで値は1 (大文字小文字を区別する) です。SQLエンジンは文字列比較 (並び替えやクエリ) の際に大文字と小文字とアクセント付き文字を異なる文字として扱います。例えば“ABC”= “ABC”ですが“ABC” # “Abc”であり、"abc" # "âbc"です。SQLエンジンと4Dエンジンの動作をそろえたいなど特定の場合では、大文字と小文字を区別しない文字列比較 (“ABC”=“Abc"="âbc") を使用できます。 -**注**: ORDA メソッドとSQL エンジンはこの設定を無視し、時間値は常に秒数であるとみなします。 +**警告:* このオプションはデータベースのストラクチャーファイルと全てのプロセスを変更するため、パフォーマンス上の観点から、データベースのスタートアップ時にのみ設定することが強く推奨されます。* -### SMTP Log (110) +このオプションはアプリケーション環境設定の[CALL SUBFORM CONTAINER](call-subform-container.md) で設定できます。 -**Thread-safe** : Yes + + + +### SQL Server Port ID (88) **スコープ**: 4D ローカル、4D Server -**異なるセッション間で値を保持**: しない** +**2セッション間で設定を保持**: Yes -取りうる値**: 0 あるいは1 からX まで(0 = 記録しない、1 から X = ファイル名に追加されるシーケンシャルな数字)。デフォルトでは、値は0(SMTP 通信は記録されない)です。 +**説明**: 4Dローカル、または4D Server の統合されたSQLサーバーで使用されるTCPポート番号を取得、または設定します。デフォルトの値は19812です。このセレクターが設定されると、データベース設定は更新されます。TCPポート番号はデータベース設定ダイアログボックスの"SQL"ページにおいても設定可能です。 -: *transporter* オブジェクトが*transporter.send( )* または *SMTP\_transporter.checkConnection( )* を通して処理される際、4D とSMTP サーバー間の通信の記録を開始、あるいは停止します。デフォルトでは、値は0です(通信は記録されない)。このログが有効化されると、データベースのLogs フォルダ内にログファイルが作成されます。ファイル名は4DSMTPLog\_X.txt で、この*X* はログのシーケンシャルな番号です。4DSMTPLog のファイルのサイズが10MB に達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャルな番号は数字がインクリメントされます。同じ名前のファイルが既に存在していた場合、そのファイルは直接上書きされます。*value* 引数を使用してシーケンスの開始番号を設定することができます。デフォルトでは全てのファイルが残されますが、Circular log limitation パラメータを使用することで保存しておくファイルの数を管理することができます。 +**とりうる値**: 0 から 65535 -4DSMTPLog\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 +**デフォルト値**: 19812 -### Current process debug log recording (111) -**スコープ:** 4D アプリケーション +### SSL cipher list (64) -**異なるセッション間で値を保持:** No +**スコープ**: 4Dアプリケーション **2セッション間で設定を保持**: No -**詳細**: **カレントプロセスにおける**プログラミングイベントの、別のログファイルへのシーケンシャルな記録を開始または停止します。このログはDebug log recording (セレクター34)に似ていますが、こちらはカレントプロセスにのみを対象とします。ログファイル名はアルファベットの"p"とプロセス番号を含みます: 4DDebugLog\[\_p*N*_*n*].txt ここでのNはプロセスの固有のIDです。 +**とりうる値**: コロンで区切られた一連の文字列 (例 "ECDHE-RSA-AES128-....") -このフォーマットと*4DDebugLog* ファイルの使用についての詳細な情報については、デザインリファレンスの*ログファイルの詳細* を参照してください。 +**説明**: 安全なプロトコルのために4Dが使用する暗号リストです。このリストを使用して4Dによって実装された暗号化アルゴリズムの順位を変更することができます。例えば、以下の文字列を *value* 引数に渡す事ができます:"HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". 暗号リストのシンタックスの完全な詳細については、*OpenSSL の暗号ページ* *のサイト* を参照して下さい。 -**注:** このセレクターはデバッグ目的のためだけに提供されており、使用する際には注意が必要です。特に、アプリケーションのパフォーマンスに影響しうるため、製品で使用してはいけません。 Debug log recording および Current process debug log recording セレクターは同時に併用することができ、その場合にはメインのログファイルにはカレントプロセスのアクションは記録されません。 +この設定はメインWebサーバー(ただしWebサーバーオブジェクトは除く)、SQLサーバー、クライアント/サーバー接続、そしてHTTPクライアントと、安全なプロトコルを使用する4D コマンドの全てに対して適用されます。この変更は一時的な物です(つまり異なるセッション間で設定は保持されません)。 +暗号リストが変更された場合、新しい設定が使用されるようにするためには関係するサーバーを再起動する必要があります。 +暗号リストを (SLIファイルに恒久的に格納された) デフォルト値に再設定するには、*value*引数に空の文字列 ("") を渡して [SET DATABASE PARAMETER](set-database-parameter.md) コマンドを呼び出します。 -### Is current database a project (112) +**注**: [Get database parameter](get-database-parameter.md) コマンドで暗号リストはオプションの *stringValue* 引数に返され、戻り値は常に0となります。 -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 -: 4D アプリケーション** -詳細**: カレントのデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 +### Table sequence number (31) +**スコープ**:4D アプリケーション -### Is host database a project (113) + **2セッション間で設定を保持**: Yes -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 + **とりうる値**: 任意の倍長整数値 -: 4D アプリケーション** +**説明**: Command SET DATABASE PARAMETERこのセレクタは、引数に渡したテーブルのレコードの、カレントのユニーク番号を取得あるいは設定するために使用します。“カレントの数値”とは“最後に使用された数値”を意味します。SET DATABASE PARAMETERコマンドを使用してこの値を変更すると、渡された値+1の番号を使用して次のレコードが作成されます。この新しい番号は、[Sequence number](sequence-number.md "Sequence number")コマンドによって返される、さらにはストラクチャエディタやSQLで自動インクリメントが設定されたフィールドに返される番号です。 -詳細**: ホストデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 +デフォルトで、この固有の番号は4Dが設定し、レコードの作成順に対応します。詳細は[Sequence number](sequence-number.md "Sequence number")コマンドのドキュメントを参照してください。 -### Libldap version (114) -**スコープ**: カレント4D マシン -**異なるセッション間で値を保持**: No -**詳細**: カレントマシン上の4D アプリケーション内のLDAP ライブラリーのバージョン番号を返します(読み出し専用) +### TCPUDP log recording (131) +**Scope:** 4D application. +**Kept between two sessions:** No. -### Libsasl version (115) +**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. -**スコープ**: カレント4D マシン** +**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -異なるセッション間で値を保持**: No** -詳細**: カレントマシン上の4D アプリケーション内のSASL ライブラリーのバージョン番号を返します(読み出し専用) +### Times inside objects (109) -### POP3 Log (116) +スコープ: 4D ローカル、4D Server (全てのプロセス) -**Thread-safe** : Yes + 異なるセッション間で値を保持: No -**スコープ:** 4D ローカル、4D Server + **取りうる値**: Times in seconds (0) (デフォルト)、 Times in milliseconds (1) -**2セッション間で設定を保持:** No +**詳細**: オブジェクトプロパティ内およびコレクション要素内で時間値がどのように変換され保存されるかを定義するとともに、JSONおよびWeb エリアへの読込/書出の方法を定義します。デフォルトでは、4D v17 以降、時間はオブジェクト内では秒数として変換・保管されます。 -**取りうる値:** 0 または1からXまでの数字(0= 記録を取らない、1からX=シーケンシャルな数字、ファイル名に追加される)。デフォルトでは、値は0です(POP3通信は記録されません)。 +以前のリリースでは、時間値はこれらのコンテキストにおいてはミリ秒数として変換・保管されていました。このセレクターを使用することで、必要であれば以前の設定に戻すことで、移行がスムーズになります。 -**説明**: トランスポーターオブジェクトが*POP3\_transporter.getMail( )* または *POP3\_transporter.checkConnection( )*で処理されたとき、4D とPOP3 サーバー間の通信の記録を開始または停止します。デフォルトでは値は0 です(通信は記録されません)。この機構か有効化されている時、データベースのLogs フォルダにログファイルが作成されます。ファイル名は4DPOP3Log\_X.txt という形式となっており、X はログのシーケンシャル番号です。4DPOP3Log のサイズが10MBに到達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャル番号は1つ増加します。同じ名前のファイルが既に存在する場合、それは上書きされます。シーケンシャル番号の開始番号を、value 引数を用いて指定することができます。デフォルトでは全てのファイルが保持されますが、Circular log limitation 定数を使用することで残すファイルの数を制限することもできます。 +**注**: ORDA メソッドとSQL エンジンはこの設定を無視し、時間値は常に秒数であるとみなします。 -4DPOP3Log\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -### Is host database writable (117) +### Tips delay (102) -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでしか使用できず、この値を設定することはできません。 +**スコープ:** 4Dアプリケーション -**スコープ**: 4D アプリケーション +**異なるセッション間で値を保持:** No -**詳細**: ホストのプロジェクトファイル/ストラクチャーが書き込み可能なら1を、読み出し専用なら0を返します。 +**取りうる値:** 倍調整数 >= 0 (ティック) +**詳細:** マウスカーソルがヘルプメッセージが関連づけられたオブジェクト内で停止してからTipsが表示されるまでの遅延時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は45ティック(=0.75秒)です。 -### IMAP Log (119) -**Thread-safe** : Yes -**スコープ**: 4D ローカル、4D Server +### Tips duration (103) -**異なるセッション間で値を保持**: No +**スコープ:** 4Dアプリケーション -**取りうる値**: 0 または1 から X(0= 記録しない、1からX= シーケンシャル番号、ファイル名に追加される)。デフォルトでは値は0 です(IMAP の交換は記録されない)。 +**異なるセッション間で値を保持:** No -**詳細**: transporter オブジェクトが*IMAP\_transporter.getMail( )* または *IMAP\_transporter.checkConnection( )* で処理される際の4D とIMAP サーバーとの間の通信記録を開始または停止します。デフォルトでは、値は0です(通信は記録されません)。この機構が有効化されている場合、ログファイルがデータベースのLogフォルダに作成されます。ファイルは4DIMAPLog\_X.txt と名前がつけられ、このX はログのシーケンシャル番号です。ファイルのサイズが10MB に到達すると、ファイルは閉じられ、インクリメントされたシーケンシャル番号を持った新しいファイルが生成されます。同じ名前のファイルが既に存在する場合、それは直接置き換えられます。value 引数を使用するとシーケンス番号の開始番号を設定することができます。デフォルトで、全てのファイルは保持されますが、Circular log limitation 引数を使用することで保持するファイルの数をコントロールすることができます。 +**取りうる値:** 倍調整数 >= 60 (ティック) -ファイルの詳細については、*ログファイルの詳細* の章を参照してください。 +**詳細:** Tipsの最大表示時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は720ティック(=12秒)です。 -### Libzip version (120) -**スコープ:** カレントの4D マシン** +### Tips enabled (101) -2セッション間で設定を保持:** n/a** +**スコープ:** 4D アプリケーション -説明:** カレントマシン上の4D アプリケーションのlibzip ライブラリのバージョン番号を返します(読み出し専用) +**異なるセッション間で値を保持:** No +**取りうる値:** 0 = tips無効化、1 = tips有効化(デフォルト) +**詳細:** 4DアプリケーションのTipsのカレントの表示状態を設定あるいは取得します。デフォルトでは、Tipsは有効化されています。 -### Pause logging (121) +この引数は全ての4DTipsに影響するという点に注意してください。つまり、フォームヘルプメッセージとデザインモードのエディターTipsに影響します。 -**Thread-safe** : Yes -**スコープ**: 4D アプリケーション** -異なるセッション間で値を設定を保持**: No** -取り得る値**: 0 (ログを再開)、1 (ログを停止) +### Use legacy network layer (87) -このセレクターを使用するとアプリケーション上で開始された全てのログオペレーションを停止/再開させることができます(ただしORDAログは除く)。この機能は4Dアプリケーションのタスクを一時的に軽くしたり、あるいはログオペレーションのスケジュールを設定することに有用です。 +**スコープ**: 4D ローカル、4D Server +**異なるセッション間で値を保持**: Yes -### TCPUDP log recording (131) +**詳細:** クライアント/サーバー間の通信のネットワークレイヤーのカレントの状態を設定・取得します。旧式ネットワークレイヤーは4D v14 R5以降廃止予定となり、お使いのアプリケーションにおいて*ServerNet* ネットワークレイヤーへと積極的に置き換えられてい行くべきです。*ServerNet* は、将来のネットワークの進化の恩恵を受けるために、今後の4Dのリリースの中で必須要項となって行きます。互換性の理由から、既存のアプリケーションの速やかな移行をサポートするために、旧式のネットワークレイヤーは引き続きサポートされます(v14 R5以前のリリースから変換されたアプリケーションにおいてはデフォルトで旧式ネットワークレイヤーが使用されます)。クライアント/サーバー通信において旧式ネットワークレイヤーを使用するためにはこの引数に1を渡します(*ServerNet* が無効化されます)。0を渡すと旧式ネットワークレイヤーが無効化されます(そして*ServerNet* が使用されます)。 -**Scope:** 4D application. +このプロパティはデータベース設定の*互換性ページ* の"旧式ネットワークレイヤー"オプションを使用することによっても設定できます(*ネットワーク/クライアント-サーバー通信*参照)。この章では、移行戦略についての議論を読むこともできます。*ServerNet* の速やかな有効化が推奨されます。 -**Kept between two sessions:** No. +この引数が有効になるためには、アプリケーションを再起動する必要があります。OS X版の4D Server 64-bit 版においては*ServerNet* のみをサポートするため、このオプションはご利用いただけません(常に0を返します)。 -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**取り得る値:** 0 または 1 (0 = 旧式ネットワークレイヤーを使用しない、1 = 旧式ネットワークレイヤーを使用する) -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. +**デフォルトの値:** 4D v14 R5以降で作成されたデータベースにおいては0、4D v14 R4以前のものから変換されたデータベースにおいては1 -### RDP optimization (133) -**Scope:** 4D application. +### User param value (108) -**Kept between two sessions:** No. +**スコープ:** 4D スタンドアロン、4D Server -**Possible values:** `0`: Disabled (default), `1`: Enabled. +**2セッション間で値を保持:** No + +**取りうる値**: 任意のカスタムの文字列 + +**説明:** 4D アプリケーションが再起動される際に、ひとつのセッションから次のセッションへと渡されるカスタムの文字列です。このセレクターは異なる引数を使用してアプリケーションを再起動する必要がある、自動化されたユニットテストなどのコンテキストで有用です。[SET DATABASE PARAMETER](set-database-parameter.md) で使用された場合、手動で、あるいは[OPEN DATABASE](open-database.md)(\*)、 [OPEN DATA FILE](open-data-file.md)、 または [RESTART 4D](restart-4d.md) コマンドを使用して4D が再起動したあとに開かれるデータベースで利用可能となる新しい値を定義します。[Get database parameter](get-database-parameter.md) で使用された場合、コマンドライン(*コマンドラインインターフェース* 参照)、4DLink ファイル(*4DLinkファイルを使用する* 参照)、あるいは前のセッションでの[SET DATABASE PARAMETER](set-database-parameter.md) への呼び出しなどを使用して定義された、現在利用可能なユーザー引数値を取得します。(\*) [SET DATABASE PARAMETER](set-database-parameter.md)がUser param value を設定した後に、[OPEN DATABASE](open-database.md)にuser-param xml 属性を含む.4DLink ファイル渡して呼び出した場合、4D は[SET DATABASE PARAMETER](set-database-parameter.md)で提供された引数のみを考慮します。 -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md index a65c682040218a..cd85497e741d91 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/set-database-parameter.md @@ -21,6 +21,36 @@ displayed_sidebar: docs *selector*には、変更するデータベースのパラメーターを指定します。4Dは*Database Parameters*テーマに定義済の下記のような定数があります。次の表は、各定数とその有効範囲、またその設定が2つの異なるセッションで保持されるかを示しています: +### 4D Remote mode timeout (14) + +**スコープ**(旧式ネットワークレイヤーのみ): *value* が正数の場合4D アプリケーション + +**2セッション間で設定を保持**: *value* が正数の場合Yes + +**説明**: 非常に特殊な場合においてのみ使用されるべき定数です。この引数を使用して、4D Serverに接続したリモートの4Dマシンが参照するタイムアウト値を設定できます。リモートモードの4Dが使用するデフォルトのタイムアウト値は、リモートマシン上の環境設定の“クライアント-サーバ/設定”ページで設定されます。 + +4D Remote Mode Timeout セレクターは旧式ネットワークレイヤーを使用している場合のみ考慮されます。*ServerNet* レイヤーが有効化されている場合には無視されます。この設定は4D Server Timeout (13) によって完全に管理されています。 + + + + +### 4D Server log recording (28) + +**Thread-safe** : Yes + +**Scope**: 4D Server, 4D リモート + +**2セッション間で設定を保持**: No** + +とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 + +: 4D Serverが受け取る標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 + +サーバマシンが受信した各リクエストをログファイルに記録するよう、4D Serverに指示することができます。このメカニズムが有効になると、データベースストラクチャと同じ階層に2つのログファイルが作成されます。サーバー側では*4DRequestsLogServer\_X*.txt および *4DRequestsLog\_ProcessInfoServer\_X*.txt 、リモート側では*4DRequestsLog\_X*.txt および *4DRequestsLog\_ProcessInfo\_X*.txt on the と名付けられたファイルが作成されます(Xはログのシーケンシャル番号)。ファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、*value*引数を使用して指定できます。このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、ユーザ、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestLog ファイルのより詳細な情報については、*ログファイルの詳細* の章を参照してください。 + + + + ### 4D Server timeout (13) **スコープ**: *value* が正数なら4Dアプリケーション @@ -41,53 +71,76 @@ displayed_sidebar: docs -### 4D Remote mode timeout (14) -**スコープ**(旧式ネットワークレイヤーのみ): *value* が正数の場合4D アプリケーション +### Auto synchro resources folder (48) -**2セッション間で設定を保持**: *value* が正数の場合Yes +**スコープ**:4D リモートマシン -**説明**: 非常に特殊な場合においてのみ使用されるべき定数です。この引数を使用して、4D Serverに接続したリモートの4Dマシンが参照するタイムアウト値を設定できます。リモートモードの4Dが使用するデフォルトのタイムアウト値は、リモートマシン上の環境設定の“クライアント-サーバ/設定”ページで設定されます。 + **2セッション間で設定を保持**: No -4D Remote Mode Timeout セレクターは旧式ネットワークレイヤーを使用している場合のみ考慮されます。*ServerNet* レイヤーが有効化されている場合には無視されます。この設定は4D Server Timeout (13) によって完全に管理されています。 + **とりうる値**: 0 (同期しない), 1 (自動同期) または2 (確認する). + +**説明**: このコマンドを実行する4DクライアントマシンのResourcesフォルダの動的な同期モード。 +サーバ上のResourcesフォルダの内容が更新されたり、(リソースエクスプローラや SET DATABASE LOCALIZATION コマンドで) ユーザが同期をリクエストすると、サーバは接続されたユーザに通知を行います。 +クライアント側では3つの同期モードを選択できます。Auto Synchro Resources Folderセレクタはカレントセッションでクライアントマシンが使用するモードを指定できます: -### Port ID (15) +0 (デフォルト値): 動的な同期を行わない (同期リクエストは無視される)1: 自動の動的同期2: クライアントマシンにダイアログを表示し、同期の受け入れ回避を確認するアプリケーションの環境設定で、同期モードをグローバルに設定できます。 -**スコープ**: 4D ローカル, 4D Server -**2セッション間で設定を保持**: No -**説明**: Command SET DATABASE この引数を使用して、ローカルモードの4Dおよび4D Serverによる4D Webサーバが使用するTCPポートをオンザフライで変更することができます。デフォルト値は80で、この値は環境設定ダイアログボックスの“Web/設定”ページで設定できます。*TCP Port Numbers*テーマの定数を*value*引数に使用できます。 +### Cache flush periodicity (95) +**Thread-safe** : Yes -Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Webサーバで役立ちます(この場合、デザインモードへのアクセス手段がありません)。TCPポートIDに関する詳細は*Webサーバー設定*を参照してください。 +**スコープ**: 4Dローカル、4D Server +**異なるセッション間で値を保持**: No -### Character set (17) +**取りうる値**: 倍長整数 > 1 (秒) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +**詳細**: 秒単位で指定された、キャッシュ保存頻度を取得あるいは設定します。この値を変更すると、データベース設定の[XML DECODE](xml-decode.md)内の**キャッシュを保存: X秒毎**オプションをセッション中の間上書きします(これはデータベース設定には保存されません)。 -### Max concurrent Web processes (18) + +### Cache unload minimum size (66) + +**スコープ**:4Dアプリケーション + + **2セッション間で設定を保持**: No + + **とりうる値**: 1より大きい正の倍長整数 + +**説明**: エンジンがオブジェクトをデータベースキャッシュに配置する際に空き空間を作成する必要が出た場合、データベースキャッシュからリリースするメモリの最小サイズ (バイト単位)。 + +このセレクタの目的はキャッシュからデータをリリースする時間を減らし、よりパフォーマンスを得ることにあります。キャッシュのサイズやデータベース中で処理されるデータのブロックサイズに応じてこの値を変更できます。 + +このセレクタが使用されないとデフォルトで、4Dは空間が必要になった時最低10%のキャッシュをアンロードします。 + + + + +### Character set (17) **説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### Client port ID (22) -**スコープ**: すべての4Dリモートマシン +### Circular log limitation (90) - **2セッション間で設定を保持**: Yes +**Thread-safe** : Yes - **とりうる値**: セレクタ15参照 +**スコープ**: 4Dローカル、4D Server **異なるセッション間で値を保持**: No** + +取りうる値**: 任意の整数値、0 = 全てのログを保持** + +詳細**: 各タイプのロゴのローテーションに保存するファイル数の最大値。デフォルトでは、直近の50 ファイルが保持されます。*X* という値を渡した場合、直近の*X* 個のファイルのみが保持され、最も古いファイルは新しいファイルが作成されたときに自動的に削除されます。この設定は全てのログファイルに対して適用されます:リクエストログ(セレクター28と45)、デバッグログ(セレクター34)、イベントログ(セレクター79)、Web ログ([WEB SET OPTION](web-set-option.md)コマンドのセレクター29と84)、などです。 -**説明**: このセレクタを使用して、Webサーバとして使用する4Dクライアントマシンの動作パラメタを指定できます。これらのセレクタを用いて指定された値は、 Webサーバとして使用するすべての4D Clientマシンに対して適用されます。特定の4D Clientマシンに対してのみ値を指定したい場合には、4D Clientの環境設定ダイアログボックスを使用してください。 @@ -103,6 +156,43 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web + +### Client HTTPS port ID (40) + +**スコープ**:すべての4Dリモートマシン + + **2セッション間で設定を保持**: Yes + + **とりうる値**: 0 ~ 65535 + +**説明**: このセレクタは、クライアントマシンのWebサーバがSSLによるセキュアな接続(HTTPSプロトコル)で使用するTCP ポート番号を、プログラムで変更するために使用できます。デフォルトの値は443(標準ポート番号)です。 + +このセレクタの動作はセレクタ39と同じですが、Web サーバとして使用されるすべてのクライアントマシンに適用されます。特定のクライアントマシンの設定だけを変更するのであれば、4Dリモートの環境設定ダイアログ画面を使用してください。 + + + + +### Client log recording (45) + +**スコープ**: リモート4Dマシン + +2セッション間で設定を保持: No + +**とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 + +**説明**: コマンドを実行した4Dクライアントマシンが実行した標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 + + + +クライアントマシンが実行したリクエストをログファイルに記録するよう、4Dに指示することができます。このメカニズムが有効になると、クライアントマシンのデータベースのローカルフォルダ内、Logsサブフォルダに2つのログファイルが作成されます。ファイルには"4DRequestsLog\_X.txt"と"4DRequestsLog\_ProcessInfo\_X.txt"(Xはログのシーケンシャル番号)の名前が付けられます。4DRequestsLogファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、value引数を使用して指定できます。 + + + +このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestsLogについての詳細な情報については、*ログファイルの詳細* の章を参照してください。 + + + + ### Client max concurrent Web proc (25) **スコープ**: すべての4Dリモートマシン @@ -115,25 +205,42 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web -### Maximum Web requests size (27) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +### Client port ID (22) +**スコープ**: すべての4Dリモートマシン + **2セッション間で設定を保持**: Yes -### 4D Server log recording (28) + **とりうる値**: セレクタ15参照 -**Thread-safe** : Yes +**説明**: このセレクタを使用して、Webサーバとして使用する4Dクライアントマシンの動作パラメタを指定できます。これらのセレクタを用いて指定された値は、 Webサーバとして使用するすべての4D Clientマシンに対して適用されます。特定の4D Clientマシンに対してのみ値を指定したい場合には、4D Clientの環境設定ダイアログボックスを使用してください。 -**Scope**: 4D Server, 4D リモート -**2セッション間で設定を保持**: No** -とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 -: 4D Serverが受け取る標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 +### Client Server port ID (35) + +**スコープ**:データベース + + **2セッション間で設定を保持**: Yes + + **とりうる値**: 0~65535 + +**説明**: 4D Server が(4D Client に対して)データベースを公開するために使用されるTCPポート番号をプログラムで変更するために使用します。デフォルト値は19813 です。 + + + +この値を変更すれば、TCPプロトコルを使用して、複数の4D クライアント/サーバアプリケーションを同じマシンで同時に使用することができます。その場合、それぞれのアプリケーションごとに異なるポート番号を設定します。 + + + +公開ポート番号は、ストラクチャファイルに記録されています。ローカルモードの4Dで設定することもできますが、クライアント/サーバ環境でのみ考慮されます。 + + + +値を変更した場合、新しい設定が有効になるためには、アプリケーションを再起動する必要があります。 -サーバマシンが受信した各リクエストをログファイルに記録するよう、4D Serverに指示することができます。このメカニズムが有効になると、データベースストラクチャと同じ階層に2つのログファイルが作成されます。サーバー側では*4DRequestsLogServer\_X*.txt および *4DRequestsLog\_ProcessInfoServer\_X*.txt 、リモート側では*4DRequestsLog\_X*.txt および *4DRequestsLog\_ProcessInfo\_X*.txt on the と名付けられたファイルが作成されます(Xはログのシーケンシャル番号)。ファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、*value*引数を使用して指定できます。このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、ユーザ、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestLog ファイルのより詳細な情報については、*ログファイルの詳細* の章を参照してください。 @@ -153,19 +260,36 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web -### Table sequence number (31) -**スコープ**:4D アプリケーション +### Current process debug log recording (111) - **2セッション間で設定を保持**: Yes +**スコープ:** 4D アプリケーション - **とりうる値**: 任意の倍長整数値 +**異なるセッション間で値を保持:** No -**説明**: Command SET DATABASE PARAMETERこのセレクタは、引数に渡したテーブルのレコードの、カレントのユニーク番号を取得あるいは設定するために使用します。“カレントの数値”とは“最後に使用された数値”を意味します。SET DATABASE PARAMETERコマンドを使用してこの値を変更すると、渡された値+1の番号を使用して次のレコードが作成されます。この新しい番号は、[Sequence number](sequence-number.md "Sequence number")コマンドによって返される、さらにはストラクチャエディタやSQLで自動インクリメントが設定されたフィールドに返される番号です。 +**詳細**: **カレントプロセスにおける**プログラミングイベントの、別のログファイルへのシーケンシャルな記録を開始または停止します。このログはDebug log recording (セレクター34)に似ていますが、こちらはカレントプロセスにのみを対象とします。ログファイル名はアルファベットの"p"とプロセス番号を含みます: 4DDebugLog\[\_p*N*_*n*].txt ここでのNはプロセスの固有のIDです。 + +このフォーマットと*4DDebugLog* ファイルの使用についての詳細な情報については、デザインリファレンスの*ログファイルの詳細* を参照してください。 +**注:** このセレクターはデバッグ目的のためだけに提供されており、使用する際には注意が必要です。特に、アプリケーションのパフォーマンスに影響しうるため、製品で使用してはいけません。 Debug log recording および Current process debug log recording セレクターは同時に併用することができ、その場合にはメインのログファイルにはカレントプロセスのアクションは記録されません。 -デフォルトで、この固有の番号は4Dが設定し、レコードの作成順に対応します。詳細は[Sequence number](sequence-number.md "Sequence number")コマンドのドキュメントを参照してください。 + + +### Dates inside objects (85) + +スコープ: カレントプロセス + + 2セッション間で設定を保持: No + + **取り得る値**: String type without time zone (0), String type with time zone (1), Date type (2) (デフォルト) + +**説明**: 日付がオブジェクトにどのように保存されるかを定義するとともに、どのようにJSON に読み込み/書き出しされるかも定義します。 + +セレクターの値がDate type (4D v17以降で作成されたデータベースにおけるデフォルト)のとき、4D 日付はオブジェクト内で日付型として保存され、ローカルの日付設定に準拠します。JSON フォーマットに変換された時、日付属性は、時間を含まない文字列へと変換されます(**注:** この設定は、データベース設定のにある"オブジェクト内ではISO日付フォーマットの代わりに日付型を使用"オプションによって設定することができます)。 + +セレクターにを渡した場合、4D 日付はローカルなタイムゾーンを考慮に入れつつISO 文字列に変換されます。例えば、例えば、23/08/2013という日付の変 換を、フランスのサマータイム(GMT+2)にて実行した場合、JSONフォーマットの"2013-08-22T22:00:00Z"という結 果が返されます。この原理はJavaScriptの標準のオペレーションに従うものです。これは異なるタイムゾーンにいる人にJSON日付の値を 送る場合には、エラーの原因となりかねません。例えば、[Selection to JSON](selection-to-json.md)を使ってフランスでエクスポートされたテーブルを[JSON TO SELECTION](json-to-selection.md) を使用してアメリカで再インポートする、というような場合です。日付の値は、デフォルトではそれぞれのタイムゾーンにおいて再変換 されるため、データベース内に保存された値は異なってしまいます。こういった場合には、このセレクターにString type without time zoneを渡す事によって、タイムゾーンを考慮しないよ うに日付の変換モードを変更することができます。すると、23/08/2013という日付を変換した場合に は、"2013-08-23T00:00:00Z"という値を返すようになります。 + @@ -217,486 +341,431 @@ SET DATABASE PARAMETER (34;0) // ファイルを無効化 -### Client Server port ID (35) -**スコープ**:データベース +### Diagnostic log level (86) - **2セッション間で設定を保持**: Yes +**Thread-safe** : Yes - **とりうる値**: 0~65535 +**スコープ:** 4D アプリケーション** -**説明**: 4D Server が(4D Client に対して)データベースを公開するために使用されるTCPポート番号をプログラムで変更するために使用します。デフォルト値は19813 です。 +** **異なるセッション間で設定を保持:** No** +** **説明:** 診断ログが有効化された際に、そこに含まれるメッセージのレベル(Diagnostic log recording セレクターを参照)。各レベルは診断メッセージのカテゴリを指定し、それより重要なカテゴリのメッセージも自動的に含まれます。カテゴリの詳細については、*developer.4d.com* 上の*Diagnostic log levels* の章を参照してください。 + **取りうる値:** 以下の定数のいづれか(デフォルトは Log info ): Log trace: ERROR、WARN、INFO、DEBUG、TRACE を有効化します(最も詳細なレベル) Log debug: ERROR、WARN、INFO、DEBUG を有効化します Log info: ERROR、WARN、INFO を有効化します(デフォルト) Log warn: ERROR、WARN を有効化します Log error: ERROR を有効化します(最も簡略なレベル) -この値を変更すれば、TCPプロトコルを使用して、複数の4D クライアント/サーバアプリケーションを同じマシンで同時に使用することができます。その場合、それぞれのアプリケーションごとに異なるポート番号を設定します。 -公開ポート番号は、ストラクチャファイルに記録されています。ローカルモードの4Dで設定することもできますが、クライアント/サーバ環境でのみ考慮されます。 +### Diagnostic log recording (79) +**Thread-safe** : Yes +**スコープ**: 4Dアプリケーション -値を変更した場合、新しい設定が有効になるためには、アプリケーションを再起動する必要があります。 +2セッション間で設定を保持: No +取りうる値: 0 または 1 (0 = 記録しない, 1 = 記録する) +: 4D診断ファイルの記録を開始または停止する。デフォルトの値は0(記録しない)です。 -### HTTPS Port ID (39) +4Dは診断ファイルの中に内部的なアプリケーション処理に関連するイベントを継続的に記録することができます。このファイルに含まれる情報は4Dアプリケーション開発のために使用され、4D社の技術サポート担当により解析されます。このセレクターに1を渡すと、データベースの**Logs** フォルダ内に診断ファイルが自動的に作成されます(またはすでに存在する場合には開かれます)。ファイルには*4DDiagnosticLog\_X*.txt (あるいはサーバー側で生成された場合には *4DDiagnosticLogServer\_X*.txt) という名前が付けられます。このファイルのサイズが10MBに達するとそのファイルは閉じられ、DatabaseName\_N.txtが生成されます (Nは連番)。 -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +[LOG EVENT](log-event.md)コマンドを使用してカスタム情報をこのファイルに書き込むこともできます。 -### Client HTTPS port ID (40) -**スコープ**:すべての4Dリモートマシン +### Direct2D get active status (74) - **2セッション間で設定を保持**: Yes +**注:** このセレクターは[Get database parameter](get-database-parameter.md)コマンドでのみ使用することができ、設定することはできません。 - **とりうる値**: 0 ~ 65535 +説明: WindowsにおいてDirect2Dのアクティブな実装を返します。 -**説明**: このセレクタは、クライアントマシンのWebサーバがSSLによるセキュアな接続(HTTPSプロトコル)で使用するTCP ポート番号を、プログラムで変更するために使用できます。デフォルトの値は443(標準ポート番号)です。 +取りうる値: 0, 1, 2, 3, 4 または 5 (セレクター69の値参照)。返される値はDirect2Dが利用可能かどうか、およびハードウェア、OSによってサポートされるDirec2Dの品質に基づきます。 -このセレクタの動作はセレクタ39と同じですが、Web サーバとして使用されるすべてのクライアントマシンに適用されます。特定のクライアントマシンの設定だけを変更するのであれば、4Dリモートの環境設定ダイアログ画面を使用してください。 +例えば以下のコードを実行した場合、 -### SQL Autocommit (43) + SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) -**スコープ**:データベース - **2セッション間で設定を保持**: Yes - **とりうる値**: 0 (無効) または 1 (有効) +- Windows 7以降、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは3に設定されます (ソフトウェアコンテキスト)。 -**説明**: SQLの自動コミットモードを有効または無効にするために使用します。デフォルトは 0 (無効モード) です。 +- Windows Vistaでは、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは0に設定されます (Direct2D無効)。 +- Windows XPでは、$modeは常に0です (Direct2D非互換)。 -自動コミットモードは、データベースの参照整合性を強化するために使用されます。このモードが有効の時、すべての*SELECT*, INSERT, *UPDATE* そして *DELETE* (SIUD) クエリは、これらがトランザクション内で実行されていない場合、自動でアドホックなトランザクションに含められます。このモードはデータベースの環境設定でも設定できます。 +### Direct2D status (69) -### SQL Engine case sensitivity (44) +**スコープ*: 4Dアプリケーション* -**スコープ**: データベース** + *(Direct2D Software) のみが許可されます。* -2セッション間で設定を保持**: Yes** -とりうる値**: 0 (大文字小文字を区別しない) または 1 (区別する) -: SQLエンジンが文字列比較を行う際に、大文字と小文字の違いを考慮させるかどうかを設定します。 デフォルトで値は1 (大文字小文字を区別する) です。SQLエンジンは文字列比較 (並び替えやクエリ) の際に大文字と小文字とアクセント付き文字を異なる文字として扱います。例えば“ABC”= “ABC”ですが“ABC” # “Abc”であり、"abc" # "âbc"です。SQLエンジンと4Dエンジンの動作をそろえたいなど特定の場合では、大文字と小文字を区別しない文字列比較 (“ABC”=“Abc"="âbc") を使用できます。 -**警告:* このオプションはデータベースのストラクチャーファイルと全てのプロセスを変更するため、パフォーマンス上の観点から、データベースのスタートアップ時にのみ設定することが強く推奨されます。* +### HTTP compression level (50) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -このオプションはアプリケーション環境設定の[CALL SUBFORM CONTAINER](call-subform-container.md) で設定できます。 +### HTTP compression threshold (51) -### Client log recording (45) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -**スコープ**: リモート4Dマシン -2セッション間で設定を保持: No -**とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 -**説明**: コマンドを実行した4Dクライアントマシンが実行した標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 +### HTTPS Port ID (39) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -クライアントマシンが実行したリクエストをログファイルに記録するよう、4Dに指示することができます。このメカニズムが有効になると、クライアントマシンのデータベースのローカルフォルダ内、Logsサブフォルダに2つのログファイルが作成されます。ファイルには"4DRequestsLog\_X.txt"と"4DRequestsLog\_ProcessInfo\_X.txt"(Xはログのシーケンシャル番号)の名前が付けられます。4DRequestsLogファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、value引数を使用して指定できます。 - - - -このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestsLogについての詳細な情報については、*ログファイルの詳細* の章を参照してください。 - - - -### Query by formula on server (46) - -**スコープ**: カレントテーブルおよびプロセス - **2セッション間で設定を保持**: No - **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) +### Idle connections timeout (54) -**説明**: 引数に渡された*table*に対して実行される[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの実行場所。 +**スコープ**: 値が負数でないなら4Dアプリケーション -クライアント/サーバモードでデータベースを使用するとき、フォーミュラを使用したクエリをサーバ上またはクライアント上で実行させることができます: +**2セッション間で設定を保持**: No -4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、これらのコマンドは、以前のバージョンの4Dと同様、クライアントマシン上で実行されます。変換されたデータベースでは、環境設定のアプリケーション/互換性ページで、これらのコマンドの実行場所をグローバルに変更できます。この実行場所の違いは、アプリケーションのパフォーマンス (通常サーバ上で実行したほうが早い) だけでなく、プログラミングにも影響します。実際フォーミュラの部品の値 (特にメソッドから呼ばれる変数) は、実行コンテキストにより異なります。このセレクタを使用して開発者は、アプリケーションの動作を適応させられます。 +**とりうる値**: 持続時間を秒で表す値。値は正数 (新規接続) または負数 (既存の接続)をとることができます。デフォルト値は20です。 -*value* 引数に0を渡すと、フォーミュラを使用するクエリの実行場所は、データベースの設定に基づきます: 4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、データベース環境設定に基づき、クライアントマシンまたはサーバマシンで実行されます。*value*に1または2を渡すと、これらのコマンドの実行場所をクライアントマシンまたはサーバマシンに強制できます。 +**説明**: この引数を使用して、4DデータベースエンジンとSQLエンジン両方への動きのない接続の最大時間 (タイムアウト) を設定できます。また*ServerNet* (新しいネットワークレイヤー)モードにおいては4Dアプリケーションサーバーへの接続のタイムアウトも設定します。 -例題2を参照してください。 -**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 +動作していない接続がこの制限時間に達すると、接続は自動でスタンバイ状態に置かれます。つまりクライアント/サーバセッションがフリーズされ、ネットワー クソケットが閉じられます。サーバー管理ウィンドウでは、ユーザープロセスの状態は"延期"と表示されます。この動作はユーザに対し完全に透過的です。スタンバイ状態の接続でリクエストが開始されると、ソケットが自動で再び開かれ、クライアント/サーバセッションが再び有効になります。 -### Order by formula on server (47) -**スコープ**:カレントテーブルおよびプロセス +この設定によりサーバのリソースを節約できます。スタンバイ状態の接続はソケットを 閉じ、サーバ上のプロセスを解放します。他方これにより、ファイアウォールがアイドルなソケットを閉じてしまうことに伴い接続が失われることを避けること ができます。このためには、アイドル接続のタイムアウト値はファイアウォールのタイムアウト値よりも小さくなくてはなりません。 - **2セッション間で設定を保持**: No - **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) -**説明**: 引数に渡されたtableに対して実行される[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドの実行場所。 +*value*に正数を渡すと、設定はすべてのプロセスのすべての新規接続に適用されます。負数を渡すと、設定はカレントプロセスの開かれた接続に適用されます。0を渡すと、アイドル接続のタイムアウトは行われません。 -クライアント/サーバモードでデータベースを使用するとき、[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドをサーバ上またはクライアント上で実行させることができます。このセレクタを使用して、このコマンドの実行場所 (サーバまたはクライアント) を指定できます。このモードはデータベース環境設定でも設定できます。詳細はセレクタ46、Query By Formula On Serverの説明を参照してください。 +このパラメターはクライアント側で設定する必要があります。通常この値を変更する必要はありません。 -**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュ ラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -### Auto synchro resources folder (48) +### IMAP Log (119) -**スコープ**:4D リモートマシン +**Thread-safe** : Yes - **2セッション間で設定を保持**: No +**スコープ**: 4D ローカル、4D Server - **とりうる値**: 0 (同期しない), 1 (自動同期) または2 (確認する). +**異なるセッション間で値を保持**: No -**説明**: このコマンドを実行する4DクライアントマシンのResourcesフォルダの動的な同期モード。 +**取りうる値**: 0 または1 から X(0= 記録しない、1からX= シーケンシャル番号、ファイル名に追加される)。デフォルトでは値は0 です(IMAP の交換は記録されない)。 -サーバ上のResourcesフォルダの内容が更新されたり、(リソースエクスプローラや SET DATABASE LOCALIZATION コマンドで) ユーザが同期をリクエストすると、サーバは接続されたユーザに通知を行います。 +**詳細**: transporter オブジェクトが*IMAP\_transporter.getMail( )* または *IMAP\_transporter.checkConnection( )* で処理される際の4D とIMAP サーバーとの間の通信記録を開始または停止します。デフォルトでは、値は0です(通信は記録されません)。この機構が有効化されている場合、ログファイルがデータベースのLogフォルダに作成されます。ファイルは4DIMAPLog\_X.txt と名前がつけられ、このX はログのシーケンシャル番号です。ファイルのサイズが10MB に到達すると、ファイルは閉じられ、インクリメントされたシーケンシャル番号を持った新しいファイルが生成されます。同じ名前のファイルが既に存在する場合、それは直接置き換えられます。value 引数を使用するとシーケンス番号の開始番号を設定することができます。デフォルトで、全てのファイルは保持されますが、Circular log limitation 引数を使用することで保持するファイルの数をコントロールすることができます。 -クライアント側では3つの同期モードを選択できます。Auto Synchro Resources Folderセレクタはカレントセッションでクライアントマシンが使用するモードを指定できます: +ファイルの詳細については、*ログファイルの詳細* の章を参照してください。 -0 (デフォルト値): 動的な同期を行わない (同期リクエストは無視される)1: 自動の動的同期2: クライアントマシンにダイアログを表示し、同期の受け入れ回避を確認するアプリケーションの環境設定で、同期モードをグローバルに設定できます。 -### Query by formula joins (49) +### Is current database a project (112) -**スコープ**:カレントプロセス +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 - **2セッション間で設定を保持**: No +: 4D アプリケーション** - **とりうる値**: 0 (データベース設定を使用), 1 (常に自動リレーションを使用) または 2 (可能ならSQL JOINを使用) +詳細**: カレントのデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 -**説明**: "SQL JOIN"の利用に関連する、[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")と[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの動作モード。 -4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、これらのコマンドはSQL JOINモデルに基づくJOINを実行します。このメカニズムを使用して、(以前のバージョンでは必要な条件だった) 自動リレーションで接続されていない他のテーブルに対して実行されたクエリに基づき、テーブルのセレクションを変更できます。 -QUERY BY FORMULA Joinsセレクタで、カレントプロセスの、フォーミュラによるクエリの動作モードを指定できます: -0: データベースの現在の設定を使用する (デフォルト値)。4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、"SQL JOIN"はフォーミュラによるクエリに対し常に有効です。変換されたデータベースでは、互換性のためデフォルトでこのメカニズムは有効になっていません。しかし環境設定で実装できます。1: 常に自動リレーションを使用 (= 以前のバージョンの4Dの動作)。このモードでは、他のテーブルに対して行われたクエリに基づきテーブルのセレクションを作成するためには、リレーションが必要です。4Dは"SQL JOIN"を行いません。2: 可能であればSQL JOINを使用 (= 4D v11 SQLのバージョン11.2以降で作成されたデータベースのデフォルト動作)。このモードでは、フォーミュラが適合する限り、4Dはフォーミュラによるクエリに"SQL JOIN"を使用します (2つの例外があります。[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") コマンドの説明を参照)。**Note:** 4Dのリモートモードにおいて、"SQL JOIN"はフォーミュラがサーバ上で実行されているときにのみ使用できます (レコードへのアクセスが必要なため)。フォーミュラの実行場所を設定するには、セレクタ46と47を参照してください。 +### Is host database a project (113) +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 +: 4D アプリケーション** -### HTTP compression level (50) +詳細**: ホストデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### HTTP compression threshold (51) +### Is host database writable (117) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでしか使用できず、この値を設定することはできません。 +**スコープ**: 4D アプリケーション +**詳細**: ホストのプロジェクトファイル/ストラクチャーが書き込み可能なら1を、読み出し専用なら0を返します。 -### Server base process stack size (53) -**スコープ**: 4D Server - 2セッション間で設定を保持: No - **とりうる値**:正の倍長整数 +### Libldap version (114) -**説明**: サーバ上のプリエンプティブシステムプロセス毎に割り当てるスタックのサイズ (バイト単位) です。デフォルトでの値はシステムによって決定されます。 +**スコープ**: カレント4D マシン -プ リエンプティブシステムプロセスはメインの4D クライアントプロセスを制御するためにロードされます。デフォルトでそれぞれのプリエンプティブプロセスに割り当てられるサイズはおよその場合最適なサイ ズですが、何百ものプロセスが作成されるようなケースではこのサイズが適切かどうか検討する必要が出てくるかもしれません。 +**異なるセッション間で値を保持**: No -データベースが実行する処理がそれを許す限り、最適化の目的でこのサイズを大幅に減らすことができます ( 例えばデータベースで大量のレコードの並び替えなどを行わない場合)。512 や256 KB でさえも設定可能です。スタックサイズを小さくしすぎることは致命的であり、4D Server の動作に害を及ぼすことになるので注意してください。このパラメタの設定は注意を持って行い、データベースの利用状況 (レコード数や行う処理など) を考慮しながら行わなければなりません。 +**詳細**: カレントマシン上の4D アプリケーション内のLDAP ライブラリーのバージョン番号を返します(読み出し専用) -このパラメタの設定を行うには、*On Server Startupデータベースメソッド* などにおいてサーバ上でコマンドが実行されなければなりません。 -### Idle connections timeout (54) +### Libsasl version (115) -**スコープ**: 値が負数でないなら4Dアプリケーション +**スコープ**: カレント4D マシン** -**2セッション間で設定を保持**: No +異なるセッション間で値を保持**: No** -**とりうる値**: 持続時間を秒で表す値。値は正数 (新規接続) または負数 (既存の接続)をとることができます。デフォルト値は20です。 +詳細**: カレントマシン上の4D アプリケーション内のSASL ライブラリーのバージョン番号を返します(読み出し専用) -**説明**: この引数を使用して、4DデータベースエンジンとSQLエンジン両方への動きのない接続の最大時間 (タイムアウト) を設定できます。また*ServerNet* (新しいネットワークレイヤー)モードにおいては4Dアプリケーションサーバーへの接続のタイムアウトも設定します。 -動作していない接続がこの制限時間に達すると、接続は自動でスタンバイ状態に置かれます。つまりクライアント/サーバセッションがフリーズされ、ネットワー クソケットが閉じられます。サーバー管理ウィンドウでは、ユーザープロセスの状態は"延期"と表示されます。この動作はユーザに対し完全に透過的です。スタンバイ状態の接続でリクエストが開始されると、ソケットが自動で再び開かれ、クライアント/サーバセッションが再び有効になります。 +### Libzip version (120) +**スコープ:** カレントの4D マシン** +2セッション間で設定を保持:** n/a** -この設定によりサーバのリソースを節約できます。スタンバイ状態の接続はソケットを 閉じ、サーバ上のプロセスを解放します。他方これにより、ファイアウォールがアイドルなソケットを閉じてしまうことに伴い接続が失われることを避けること ができます。このためには、アイドル接続のタイムアウト値はファイアウォールのタイムアウト値よりも小さくなくてはなりません。 +説明:** カレントマシン上の4D アプリケーションのlibzip ライブラリのバージョン番号を返します(読み出し専用) -*value*に正数を渡すと、設定はすべてのプロセスのすべての新規接続に適用されます。負数を渡すと、設定はカレントプロセスの開かれた接続に適用されます。0を渡すと、アイドル接続のタイムアウトは行われません。 +### Log command list (80) +**スコープ**: 4D アプリケーション -このパラメターはクライアント側で設定する必要があります。通常この値を変更する必要はありません。 +**2セッション間で設定を保持**: No +**取りうる値**: 記録する4Dコマンドの番号リスト。型は文字列で各コマンド番号をセミコロンで区切ります。"all"を渡すとすべてのコマンドが記録され、"" (空の文字列) を渡すとなにも記録されません。 +**説明**: デバッグファイルに記録する4Dコマンドのリスト (セレクター 34, Debug Log Recording参照)。デフォルトではすべての4Dコマンドが記録されます。 -### PHP interpreter IP address (55) +このセレクターを使用すれば、記録に残したい4Dコマンドを指定することで、デバッグファイルに保存される情報の量を制限することができます。例えば以下のようにコードを記述できます: -**スコープ**: 4D アプリケーション + SET DATABASE PARAMETER(Log command list;"277;341")   // QUERY および QUERY SELECTION コマンドのみを記録する -2セッション間で設定を保持: No** -値**: IPv4 型にフォーマットされた文字列(例 "127.0.0.1") あるいはIPv6 型にフォーマットされた文字列(例 "2001:0db8:0000:0000:0000:ff00:0042:8329") -: FastCGI を経由してPHPインタプリタと通信を行うために、4D がローカルで使用するIP アドレス。デフォルトで値は"127.0.0.1" です(IPv5 フォーマットのアドレスは4D v16 R4 以降でサポートされます)。このアドレスは4D が配置されているマシンに対応しなければなりません。このパラメタはデータベース設定を使用してすべてのマシン用にグローバルに設定できます。 -PHPインタプリタに関する詳細は*Design Reference*マニュアルを参照してください。 +### Max concurrent Web processes (18) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### PHP interpreter port (56) -**スコープ**:4D アプリケーション - **2セッション間で設定を保持**: No +### Maximum Web requests size (27) -**値**: 正の倍長整数値。デフォルト値は8002。 +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -**説明**: 4DのPHPインタプリタが使用するTCPポート番号。データベース設定でこの値をすべてのマシン用にグローバルに変更できます。PHPインタープリタに関する詳細は*Design Reference* マニュアルを参照してください。 -### SSL cipher list (64) +### Min TLS version (105) -**スコープ**: 4Dアプリケーション **2セッション間で設定を保持**: No +**スコープ**: 4D Server、4D Web サーバーおよび4D SQL サーバー -**とりうる値**: コロンで区切られた一連の文字列 (例 "ECDHE-RSA-AES128-....") +**異なるセッション間で値を保持**: No -**説明**: 安全なプロトコルのために4Dが使用する暗号リストです。このリストを使用して4Dによって実装された暗号化アルゴリズムの順位を変更することができます。例えば、以下の文字列を *value* 引数に渡す事ができます:"HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". 暗号リストのシンタックスの完全な詳細については、*OpenSSL の暗号ページ* *のサイト* を参照して下さい。 +**詳細**: Transport Layer Security (TLS) レベルを指定するのに使用します。これはデータ暗号化とアプリケーションとサーバー間での認証を可能にします。これによって定義された最小値を下回るバージョンしかサポートしないクライアントからの接続は拒否されます。この設定はネットワークレイヤー全体に適用されます。変更した後にその新しい値を使用するためには、サーバーを再起動する必要があります。 -この設定はメインWebサーバー(ただしWebサーバーオブジェクトは除く)、SQLサーバー、クライアント/サーバー接続、そしてHTTPクライアントと、安全なプロトコルを使用する4D コマンドの全てに対して適用されます。この変更は一時的な物です(つまり異なるセッション間で設定は保持されません)。 +**デフォルトの値**: TLSv1\_3 -暗号リストが変更された場合、新しい設定が使用されるようにするためには関係するサーバーを再起動する必要があります。 +**取りうる値**: TLSv1\_2 (TLS 1.2、2008年に導入) TLSv1\_3 (TLS 1.3、2018年に導入) **注**: -暗号リストを (SLIファイルに恒久的に格納された) デフォルト値に再設定するには、*value*引数に空の文字列 ("") を渡して [SET DATABASE PARAMETER](set-database-parameter.md) コマンドを呼び出します。 +- 4D Internet Commands プラグインは異るネットワークレイヤーを使用するため、ここのセレクターは4DICのTLSバージョンには影響しません。 -**注**: [Get database parameter](get-database-parameter.md) コマンドで暗号リストはオプションの *stringValue* 引数に返され、戻り値は常に0となります。 +- TLS を旧式ネットワークレイヤーに適用しても反映されません。 -### Cache unload minimum size (66) -**スコープ**:4Dアプリケーション +### Number of formulas in cache (92) - **2セッション間で設定を保持**: No +**スコープ**: 4Dアプリケーション - **とりうる値**: 1より大きい正の倍長整数 +**異なるセッション間で保持**: No -**説明**: エンジンがオブジェクトをデータベースキャッシュに配置する際に空き空間を作成する必要が出た場合、データベースキャッシュからリリースするメモリの最小サイズ (バイト単位)。 +**取りうる値**: 正の倍長整数 -このセレクタの目的はキャッシュからデータをリリースする時間を減らし、よりパフォーマンスを得ることにあります。キャッシュのサイズやデータベース中で処理されるデータのブロックサイズに応じてこの値を変更できます。 +**デフォルト値**: 0 (キャッシュなし) -このセレクタが使用されないとデフォルトで、4Dは空間が必要になった時最低10%のキャッシュをアンロードします。 +**詳細**: フォーミュラのキャッシュに保存されるフォーミュラの最大数を設定あるいは取得します。これは[EXECUTE FORMULA](execute-formula.md)コマンドで使用されます。この上限は全てのプロセスに適用されますが、各プロセスにはそれぞれ独自のフォーミュラ用キャッシュがあります。フォーミュラをキャッシュすると、それぞれのフォーミュラはこの場合1度しかトークン化されないため、コンパイル済みモードでの[EXECUTE FORMULA](execute-formula.md)コマンドの実行が速くなります。キャッシュ値を変化させると、例え新しいサイズが以前のものより大きくても、既存の中身は全てリセットされます。キャッシュ内のフォーミュラ数が上限値に達すると、その後新しく実行されたフォーミュラはキャッシュ内の一番古いものを消去します(FIFOモード)。この引数は、コンパイルされたデータベース、あるいはコンパイルされたコンポーネントでのみ考慮されます。 -### Direct2D status (69) -**スコープ*: 4Dアプリケーション* +### OpenSSL version (94) - *(Direct2D Software) のみが許可されます。* +**スコープ**: 4D マシン全体* +* **2セッション間で設定を保持**: No +**説明**: マシン上で使用されているOpenSSL ライブラリーのバージョン番号を返します(読み込みのみ) -### Direct2D get active status (74) -**注:** このセレクターは[Get database parameter](get-database-parameter.md)コマンドでのみ使用することができ、設定することはできません。 -説明: WindowsにおいてDirect2Dのアクティブな実装を返します。 -取りうる値: 0, 1, 2, 3, 4 または 5 (セレクター69の値参照)。返される値はDirect2Dが利用可能かどうか、およびハードウェア、OSによってサポートされるDirec2Dの品質に基づきます。 +### Order by formula on server (47) -例えば以下のコードを実行した場合、 +**スコープ**:カレントテーブルおよびプロセス + **2セッション間で設定を保持**: No + **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) - SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) +**説明**: 引数に渡されたtableに対して実行される[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドの実行場所。 -- Windows 7以降、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは3に設定されます (ソフトウェアコンテキスト)。 +クライアント/サーバモードでデータベースを使用するとき、[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドをサーバ上またはクライアント上で実行させることができます。このセレクタを使用して、このコマンドの実行場所 (サーバまたはクライアント) を指定できます。このモードはデータベース環境設定でも設定できます。詳細はセレクタ46、Query By Formula On Serverの説明を参照してください。 -- Windows Vistaでは、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは0に設定されます (Direct2D無効)。 +**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュ ラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -- Windows XPでは、$modeは常に0です (Direct2D非互換)。 -### Diagnostic log recording (79) +### Pause logging (121) **Thread-safe** : Yes -**スコープ**: 4Dアプリケーション +**スコープ**: 4D アプリケーション** -2セッション間で設定を保持: No +異なるセッション間で値を設定を保持**: No** -取りうる値: 0 または 1 (0 = 記録しない, 1 = 記録する) +取り得る値**: 0 (ログを再開)、1 (ログを停止) -: 4D診断ファイルの記録を開始または停止する。デフォルトの値は0(記録しない)です。 +このセレクターを使用するとアプリケーション上で開始された全てのログオペレーションを停止/再開させることができます(ただしORDAログは除く)。この機能は4Dアプリケーションのタスクを一時的に軽くしたり、あるいはログオペレーションのスケジュールを設定することに有用です。 -4Dは診断ファイルの中に内部的なアプリケーション処理に関連するイベントを継続的に記録することができます。このファイルに含まれる情報は4Dアプリケーション開発のために使用され、4D社の技術サポート担当により解析されます。このセレクターに1を渡すと、データベースの**Logs** フォルダ内に診断ファイルが自動的に作成されます(またはすでに存在する場合には開かれます)。ファイルには*4DDiagnosticLog\_X*.txt (あるいはサーバー側で生成された場合には *4DDiagnosticLogServer\_X*.txt) という名前が付けられます。このファイルのサイズが10MBに達するとそのファイルは閉じられ、DatabaseName\_N.txtが生成されます (Nは連番)。 -[LOG EVENT](log-event.md)コマンドを使用してカスタム情報をこのファイルに書き込むこともできます。 - -### Log command list (80) +### PHP interpreter IP address (55) **スコープ**: 4D アプリケーション -**2セッション間で設定を保持**: No - -**取りうる値**: 記録する4Dコマンドの番号リスト。型は文字列で各コマンド番号をセミコロンで区切ります。"all"を渡すとすべてのコマンドが記録され、"" (空の文字列) を渡すとなにも記録されません。 - -**説明**: デバッグファイルに記録する4Dコマンドのリスト (セレクター 34, Debug Log Recording参照)。デフォルトではすべての4Dコマンドが記録されます。 - -このセレクターを使用すれば、記録に残したい4Dコマンドを指定することで、デバッグファイルに保存される情報の量を制限することができます。例えば以下のようにコードを記述できます: - - SET DATABASE PARAMETER(Log command list;"277;341")   // QUERY および QUERY SELECTION コマンドのみを記録する - - - -### Spellchecker (81) - -**スコープ**: 4D アプリケーション** +2セッション間で設定を保持: No** -2セッション間で設定を保持**: No +値**: IPv4 型にフォーマットされた文字列(例 "127.0.0.1") あるいはIPv6 型にフォーマットされた文字列(例 "2001:0db8:0000:0000:0000:ff00:0042:8329") - **とりうる値**: 0 (default) = macOSのシステムのスペルチェッカー(ハンスペルは無効化されます), 1 = ハンスペルスペルチェッカー有効化** +: FastCGI を経由してPHPインタプリタと通信を行うために、4D がローカルで使用するIP アドレス。デフォルトで値は"127.0.0.1" です(IPv5 フォーマットのアドレスは4D v16 R4 以降でサポートされます)。このアドレスは4D が配置されているマシンに対応しなければなりません。このパラメタはデータベース設定を使用してすべてのマシン用にグローバルに設定できます。 -説明**: macOS環境下においてハンスペルスペルチェッカーを有効化します。デフォルトでは、このプラットフォームではシステムのスペルチェッカーが有効化されています。例えば、クロスプラットフォームアプリケーションのインターフェースを統一するためにハンスペルを使用したいという場面があるかもしれません(Windowsでは、ハンスペルチェッカーのみが動作します)。詳細な情報に関しては、*スペルチェック*を参照して下さい。 +PHPインタプリタに関する詳細は*Design Reference*マニュアルを参照してください。 -### Dates inside objects (85) -スコープ: カレントプロセス +### PHP interpreter port (56) - 2セッション間で設定を保持: No +**スコープ**:4D アプリケーション - **取り得る値**: String type without time zone (0), String type with time zone (1), Date type (2) (デフォルト) + **2セッション間で設定を保持**: No -**説明**: 日付がオブジェクトにどのように保存されるかを定義するとともに、どのようにJSON に読み込み/書き出しされるかも定義します。 +**値**: 正の倍長整数値。デフォルト値は8002。 -セレクターの値がDate type (4D v17以降で作成されたデータベースにおけるデフォルト)のとき、4D 日付はオブジェクト内で日付型として保存され、ローカルの日付設定に準拠します。JSON フォーマットに変換された時、日付属性は、時間を含まない文字列へと変換されます(**注:** この設定は、データベース設定のにある"オブジェクト内ではISO日付フォーマットの代わりに日付型を使用"オプションによって設定することができます)。 +**説明**: 4DのPHPインタプリタが使用するTCPポート番号。データベース設定でこの値をすべてのマシン用にグローバルに変更できます。PHPインタープリタに関する詳細は*Design Reference* マニュアルを参照してください。 -セレクターにを渡した場合、4D 日付はローカルなタイムゾーンを考慮に入れつつISO 文字列に変換されます。例えば、例えば、23/08/2013という日付の変 換を、フランスのサマータイム(GMT+2)にて実行した場合、JSONフォーマットの"2013-08-22T22:00:00Z"という結 果が返されます。この原理はJavaScriptの標準のオペレーションに従うものです。これは異なるタイムゾーンにいる人にJSON日付の値を 送る場合には、エラーの原因となりかねません。例えば、[Selection to JSON](selection-to-json.md)を使ってフランスでエクスポートされたテーブルを[JSON TO SELECTION](json-to-selection.md) を使用してアメリカで再インポートする、というような場合です。日付の値は、デフォルトではそれぞれのタイムゾーンにおいて再変換 されるため、データベース内に保存された値は異なってしまいます。こういった場合には、このセレクターにString type without time zoneを渡す事によって、タイムゾーンを考慮しないよ うに日付の変換モードを変更することができます。すると、23/08/2013という日付を変換した場合に は、"2013-08-23T00:00:00Z"という値を返すようになります。 -### Diagnostic log level (86) +### POP3 Log (116) **Thread-safe** : Yes -**スコープ:** 4D アプリケーション** - -** **異なるセッション間で設定を保持:** No** - -** **説明:** 診断ログが有効化された際に、そこに含まれるメッセージのレベル(Diagnostic log recording セレクターを参照)。各レベルは診断メッセージのカテゴリを指定し、それより重要なカテゴリのメッセージも自動的に含まれます。カテゴリの詳細については、*developer.4d.com* 上の*Diagnostic log levels* の章を参照してください。 - - **取りうる値:** 以下の定数のいづれか(デフォルトは Log info ): Log trace: ERROR、WARN、INFO、DEBUG、TRACE を有効化します(最も詳細なレベル) Log debug: ERROR、WARN、INFO、DEBUG を有効化します Log info: ERROR、WARN、INFO を有効化します(デフォルト) Log warn: ERROR、WARN を有効化します Log error: ERROR を有効化します(最も簡略なレベル) +**スコープ:** 4D ローカル、4D Server +**2セッション間で設定を保持:** No +**取りうる値:** 0 または1からXまでの数字(0= 記録を取らない、1からX=シーケンシャルな数字、ファイル名に追加される)。デフォルトでは、値は0です(POP3通信は記録されません)。 -### Use legacy network layer (87) +**説明**: トランスポーターオブジェクトが*POP3\_transporter.getMail( )* または *POP3\_transporter.checkConnection( )*で処理されたとき、4D とPOP3 サーバー間の通信の記録を開始または停止します。デフォルトでは値は0 です(通信は記録されません)。この機構か有効化されている時、データベースのLogs フォルダにログファイルが作成されます。ファイル名は4DPOP3Log\_X.txt という形式となっており、X はログのシーケンシャル番号です。4DPOP3Log のサイズが10MBに到達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャル番号は1つ増加します。同じ名前のファイルが既に存在する場合、それは上書きされます。シーケンシャル番号の開始番号を、value 引数を用いて指定することができます。デフォルトでは全てのファイルが保持されますが、Circular log limitation 定数を使用することで残すファイルの数を制限することもできます。 -**スコープ**: 4D ローカル、4D Server +4DPOP3Log\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -**異なるセッション間で値を保持**: Yes -**詳細:** クライアント/サーバー間の通信のネットワークレイヤーのカレントの状態を設定・取得します。旧式ネットワークレイヤーは4D v14 R5以降廃止予定となり、お使いのアプリケーションにおいて*ServerNet* ネットワークレイヤーへと積極的に置き換えられてい行くべきです。*ServerNet* は、将来のネットワークの進化の恩恵を受けるために、今後の4Dのリリースの中で必須要項となって行きます。互換性の理由から、既存のアプリケーションの速やかな移行をサポートするために、旧式のネットワークレイヤーは引き続きサポートされます(v14 R5以前のリリースから変換されたアプリケーションにおいてはデフォルトで旧式ネットワークレイヤーが使用されます)。クライアント/サーバー通信において旧式ネットワークレイヤーを使用するためにはこの引数に1を渡します(*ServerNet* が無効化されます)。0を渡すと旧式ネットワークレイヤーが無効化されます(そして*ServerNet* が使用されます)。 -このプロパティはデータベース設定の*互換性ページ* の"旧式ネットワークレイヤー"オプションを使用することによっても設定できます(*ネットワーク/クライアント-サーバー通信*参照)。この章では、移行戦略についての議論を読むこともできます。*ServerNet* の速やかな有効化が推奨されます。 -この引数が有効になるためには、アプリケーションを再起動する必要があります。OS X版の4D Server 64-bit 版においては*ServerNet* のみをサポートするため、このオプションはご利用いただけません(常に0を返します)。 +### Port ID (15) -**取り得る値:** 0 または 1 (0 = 旧式ネットワークレイヤーを使用しない、1 = 旧式ネットワークレイヤーを使用する) +**スコープ**: 4D ローカル, 4D Server -**デフォルトの値:** 4D v14 R5以降で作成されたデータベースにおいては0、4D v14 R4以前のものから変換されたデータベースにおいては1 +**2セッション間で設定を保持**: No +**説明**: Command SET DATABASE この引数を使用して、ローカルモードの4Dおよび4D Serverによる4D Webサーバが使用するTCPポートをオンザフライで変更することができます。デフォルト値は80で、この値は環境設定ダイアログボックスの“Web/設定”ページで設定できます。*TCP Port Numbers*テーマの定数を*value*引数に使用できます。 -### SQL Server Port ID (88) -**スコープ**: 4D ローカル、4D Server +Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Webサーバで役立ちます(この場合、デザインモードへのアクセス手段がありません)。TCPポートIDに関する詳細は*Webサーバー設定*を参照してください。 -**2セッション間で設定を保持**: Yes -**説明**: 4Dローカル、または4D Server の統合されたSQLサーバーで使用されるTCPポート番号を取得、または設定します。デフォルトの値は19812です。このセレクターが設定されると、データベース設定は更新されます。TCPポート番号はデータベース設定ダイアログボックスの"SQL"ページにおいても設定可能です。 -**とりうる値**: 0 から 65535 -**デフォルト値**: 19812 +### Query by formula joins (49) +**スコープ**:カレントプロセス + **2セッション間で設定を保持**: No -### Circular log limitation (90) + **とりうる値**: 0 (データベース設定を使用), 1 (常に自動リレーションを使用) または 2 (可能ならSQL JOINを使用) -**Thread-safe** : Yes +**説明**: "SQL JOIN"の利用に関連する、[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")と[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの動作モード。 -**スコープ**: 4Dローカル、4D Server **異なるセッション間で値を保持**: No** +4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、これらのコマンドはSQL JOINモデルに基づくJOINを実行します。このメカニズムを使用して、(以前のバージョンでは必要な条件だった) 自動リレーションで接続されていない他のテーブルに対して実行されたクエリに基づき、テーブルのセレクションを変更できます。 -取りうる値**: 任意の整数値、0 = 全てのログを保持** +QUERY BY FORMULA Joinsセレクタで、カレントプロセスの、フォーミュラによるクエリの動作モードを指定できます: -詳細**: 各タイプのロゴのローテーションに保存するファイル数の最大値。デフォルトでは、直近の50 ファイルが保持されます。*X* という値を渡した場合、直近の*X* 個のファイルのみが保持され、最も古いファイルは新しいファイルが作成されたときに自動的に削除されます。この設定は全てのログファイルに対して適用されます:リクエストログ(セレクター28と45)、デバッグログ(セレクター34)、イベントログ(セレクター79)、Web ログ([WEB SET OPTION](web-set-option.md)コマンドのセレクター29と84)、などです。 +0: データベースの現在の設定を使用する (デフォルト値)。4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、"SQL JOIN"はフォーミュラによるクエリに対し常に有効です。変換されたデータベースでは、互換性のためデフォルトでこのメカニズムは有効になっていません。しかし環境設定で実装できます。1: 常に自動リレーションを使用 (= 以前のバージョンの4Dの動作)。このモードでは、他のテーブルに対して行われたクエリに基づきテーブルのセレクションを作成するためには、リレーションが必要です。4Dは"SQL JOIN"を行いません。2: 可能であればSQL JOINを使用 (= 4D v11 SQLのバージョン11.2以降で作成されたデータベースのデフォルト動作)。このモードでは、フォーミュラが適合する限り、4Dはフォーミュラによるクエリに"SQL JOIN"を使用します (2つの例外があります。[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") コマンドの説明を参照)。**Note:** 4Dのリモートモードにおいて、"SQL JOIN"はフォーミュラがサーバ上で実行されているときにのみ使用できます (レコードへのアクセスが必要なため)。フォーミュラの実行場所を設定するには、セレクタ46と47を参照してください。 -### Number of formulas in cache (92) -**スコープ**: 4Dアプリケーション +### Query by formula on server (46) -**異なるセッション間で保持**: No +**スコープ**: カレントテーブルおよびプロセス -**取りうる値**: 正の倍長整数 + **2セッション間で設定を保持**: No -**デフォルト値**: 0 (キャッシュなし) + **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) -**詳細**: フォーミュラのキャッシュに保存されるフォーミュラの最大数を設定あるいは取得します。これは[EXECUTE FORMULA](execute-formula.md)コマンドで使用されます。この上限は全てのプロセスに適用されますが、各プロセスにはそれぞれ独自のフォーミュラ用キャッシュがあります。フォーミュラをキャッシュすると、それぞれのフォーミュラはこの場合1度しかトークン化されないため、コンパイル済みモードでの[EXECUTE FORMULA](execute-formula.md)コマンドの実行が速くなります。キャッシュ値を変化させると、例え新しいサイズが以前のものより大きくても、既存の中身は全てリセットされます。キャッシュ内のフォーミュラ数が上限値に達すると、その後新しく実行されたフォーミュラはキャッシュ内の一番古いものを消去します(FIFOモード)。この引数は、コンパイルされたデータベース、あるいはコンパイルされたコンポーネントでのみ考慮されます。 +**説明**: 引数に渡された*table*に対して実行される[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの実行場所。 +クライアント/サーバモードでデータベースを使用するとき、フォーミュラを使用したクエリをサーバ上またはクライアント上で実行させることができます: +4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、これらのコマンドは、以前のバージョンの4Dと同様、クライアントマシン上で実行されます。変換されたデータベースでは、環境設定のアプリケーション/互換性ページで、これらのコマンドの実行場所をグローバルに変更できます。この実行場所の違いは、アプリケーションのパフォーマンス (通常サーバ上で実行したほうが早い) だけでなく、プログラミングにも影響します。実際フォーミュラの部品の値 (特にメソッドから呼ばれる変数) は、実行コンテキストにより異なります。このセレクタを使用して開発者は、アプリケーションの動作を適応させられます。 -### OpenSSL version (94) +*value* 引数に0を渡すと、フォーミュラを使用するクエリの実行場所は、データベースの設定に基づきます: 4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、データベース環境設定に基づき、クライアントマシンまたはサーバマシンで実行されます。*value*に1または2を渡すと、これらのコマンドの実行場所をクライアントマシンまたはサーバマシンに強制できます。 -**スコープ**: 4D マシン全体* +例題2を参照してください。 -* **2セッション間で設定を保持**: No +**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -**説明**: マシン上で使用されているOpenSSL ライブラリーのバージョン番号を返します(読み込みのみ) -### Cache flush periodicity (95) +### RDP optimization (133) -**Thread-safe** : Yes +**Scope:** 4D application. +**Kept between two sessions:** No. -**スコープ**: 4Dローカル、4D Server +**Possible values:** `0`: Disabled (default), `1`: Enabled. -**異なるセッション間で値を保持**: No +**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). -**取りうる値**: 倍長整数 > 1 (秒) -**詳細**: 秒単位で指定された、キャッシュ保存頻度を取得あるいは設定します。この値を変更すると、データベース設定の[XML DECODE](xml-decode.md)内の**キャッシュを保存: X秒毎**オプションをセッション中の間上書きします(これはデータベース設定には保存されません)。 @@ -714,247 +783,242 @@ PHPインタプリタに関する詳細は*Design Reference*マニュアルを -### Tips enabled (101) -**スコープ:** 4D アプリケーション +### Server base process stack size (53) -**異なるセッション間で値を保持:** No +**スコープ**: 4D Server -**取りうる値:** 0 = tips無効化、1 = tips有効化(デフォルト) + 2セッション間で設定を保持: No -**詳細:** 4DアプリケーションのTipsのカレントの表示状態を設定あるいは取得します。デフォルトでは、Tipsは有効化されています。 + **とりうる値**:正の倍長整数 -この引数は全ての4DTipsに影響するという点に注意してください。つまり、フォームヘルプメッセージとデザインモードのエディターTipsに影響します。 +**説明**: サーバ上のプリエンプティブシステムプロセス毎に割り当てるスタックのサイズ (バイト単位) です。デフォルトでの値はシステムによって決定されます。 +プ リエンプティブシステムプロセスはメインの4D クライアントプロセスを制御するためにロードされます。デフォルトでそれぞれのプリエンプティブプロセスに割り当てられるサイズはおよその場合最適なサイ ズですが、何百ものプロセスが作成されるようなケースではこのサイズが適切かどうか検討する必要が出てくるかもしれません。 +データベースが実行する処理がそれを許す限り、最適化の目的でこのサイズを大幅に減らすことができます ( 例えばデータベースで大量のレコードの並び替えなどを行わない場合)。512 や256 KB でさえも設定可能です。スタックサイズを小さくしすぎることは致命的であり、4D Server の動作に害を及ぼすことになるので注意してください。このパラメタの設定は注意を持って行い、データベースの利用状況 (レコード数や行う処理など) を考慮しながら行わなければなりません。 -### Tips delay (102) +このパラメタの設定を行うには、*On Server Startupデータベースメソッド* などにおいてサーバ上でコマンドが実行されなければなりません。 -**スコープ:** 4Dアプリケーション -**異なるセッション間で値を保持:** No -**取りうる値:** 倍調整数 >= 0 (ティック) -**詳細:** マウスカーソルがヘルプメッセージが関連づけられたオブジェクト内で停止してからTipsが表示されるまでの遅延時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は45ティック(=0.75秒)です。 +### SMTP Log (110) +**Thread-safe** : Yes +**スコープ**: 4D ローカル、4D Server -### Tips duration (103) +**異なるセッション間で値を保持**: しない** -**スコープ:** 4Dアプリケーション +取りうる値**: 0 あるいは1 からX まで(0 = 記録しない、1 から X = ファイル名に追加されるシーケンシャルな数字)。デフォルトでは、値は0(SMTP 通信は記録されない)です。 -**異なるセッション間で値を保持:** No +: *transporter* オブジェクトが*transporter.send( )* または *SMTP\_transporter.checkConnection( )* を通して処理される際、4D とSMTP サーバー間の通信の記録を開始、あるいは停止します。デフォルトでは、値は0です(通信は記録されない)。このログが有効化されると、データベースのLogs フォルダ内にログファイルが作成されます。ファイル名は4DSMTPLog\_X.txt で、この*X* はログのシーケンシャルな番号です。4DSMTPLog のファイルのサイズが10MB に達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャルな番号は数字がインクリメントされます。同じ名前のファイルが既に存在していた場合、そのファイルは直接上書きされます。*value* 引数を使用してシーケンスの開始番号を設定することができます。デフォルトでは全てのファイルが残されますが、Circular log limitation パラメータを使用することで保存しておくファイルの数を管理することができます。 -**取りうる値:** 倍調整数 >= 60 (ティック) +4DSMTPLog\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -**詳細:** Tipsの最大表示時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は720ティック(=12秒)です。 -### Min TLS version (105) +### Spellchecker (81) -**スコープ**: 4D Server、4D Web サーバーおよび4D SQL サーバー +**スコープ**: 4D アプリケーション** -**異なるセッション間で値を保持**: No +2セッション間で設定を保持**: No -**詳細**: Transport Layer Security (TLS) レベルを指定するのに使用します。これはデータ暗号化とアプリケーションとサーバー間での認証を可能にします。これによって定義された最小値を下回るバージョンしかサポートしないクライアントからの接続は拒否されます。この設定はネットワークレイヤー全体に適用されます。変更した後にその新しい値を使用するためには、サーバーを再起動する必要があります。 + **とりうる値**: 0 (default) = macOSのシステムのスペルチェッカー(ハンスペルは無効化されます), 1 = ハンスペルスペルチェッカー有効化** -**デフォルトの値**: TLSv1\_3 +説明**: macOS環境下においてハンスペルスペルチェッカーを有効化します。デフォルトでは、このプラットフォームではシステムのスペルチェッカーが有効化されています。例えば、クロスプラットフォームアプリケーションのインターフェースを統一するためにハンスペルを使用したいという場面があるかもしれません(Windowsでは、ハンスペルチェッカーのみが動作します)。詳細な情報に関しては、*スペルチェック*を参照して下さい。 -**取りうる値**: TLSv1\_2 (TLS 1.2、2008年に導入) TLSv1\_3 (TLS 1.3、2018年に導入) **注**: -- 4D Internet Commands プラグインは異るネットワークレイヤーを使用するため、ここのセレクターは4DICのTLSバージョンには影響しません。 -- TLS を旧式ネットワークレイヤーに適用しても反映されません。 +### SQL Autocommit (43) +**スコープ**:データベース -### User param value (108) + **2セッション間で設定を保持**: Yes -**スコープ:** 4D スタンドアロン、4D Server + **とりうる値**: 0 (無効) または 1 (有効) -**2セッション間で値を保持:** No +**説明**: SQLの自動コミットモードを有効または無効にするために使用します。デフォルトは 0 (無効モード) です。 -**取りうる値**: 任意のカスタムの文字列 -**説明:** 4D アプリケーションが再起動される際に、ひとつのセッションから次のセッションへと渡されるカスタムの文字列です。このセレクターは異なる引数を使用してアプリケーションを再起動する必要がある、自動化されたユニットテストなどのコンテキストで有用です。[SET DATABASE PARAMETER](set-database-parameter.md) で使用された場合、手動で、あるいは[OPEN DATABASE](open-database.md)(\*)、 [OPEN DATA FILE](open-data-file.md)、 または [RESTART 4D](restart-4d.md) コマンドを使用して4D が再起動したあとに開かれるデータベースで利用可能となる新しい値を定義します。[Get database parameter](get-database-parameter.md) で使用された場合、コマンドライン(*コマンドラインインターフェース* 参照)、4DLink ファイル(*4DLinkファイルを使用する* 参照)、あるいは前のセッションでの[SET DATABASE PARAMETER](set-database-parameter.md) への呼び出しなどを使用して定義された、現在利用可能なユーザー引数値を取得します。(\*) [SET DATABASE PARAMETER](set-database-parameter.md)がUser param value を設定した後に、[OPEN DATABASE](open-database.md)にuser-param xml 属性を含む.4DLink ファイル渡して呼び出した場合、4D は[SET DATABASE PARAMETER](set-database-parameter.md)で提供された引数のみを考慮します。 +自動コミットモードは、データベースの参照整合性を強化するために使用されます。このモードが有効の時、すべての*SELECT*, INSERT, *UPDATE* そして *DELETE* (SIUD) クエリは、これらがトランザクション内で実行されていない場合、自動でアドホックなトランザクションに含められます。このモードはデータベースの環境設定でも設定できます。 -### Times inside objects (109) -スコープ: 4D ローカル、4D Server (全てのプロセス) - 異なるセッション間で値を保持: No +### SQL Engine case sensitivity (44) - **取りうる値**: Times in seconds (0) (デフォルト)、 Times in milliseconds (1) +**スコープ**: データベース** -**詳細**: オブジェクトプロパティ内およびコレクション要素内で時間値がどのように変換され保存されるかを定義するとともに、JSONおよびWeb エリアへの読込/書出の方法を定義します。デフォルトでは、4D v17 以降、時間はオブジェクト内では秒数として変換・保管されます。 +2セッション間で設定を保持**: Yes** -以前のリリースでは、時間値はこれらのコンテキストにおいてはミリ秒数として変換・保管されていました。このセレクターを使用することで、必要であれば以前の設定に戻すことで、移行がスムーズになります。 +とりうる値**: 0 (大文字小文字を区別しない) または 1 (区別する) -**注**: ORDA メソッドとSQL エンジンはこの設定を無視し、時間値は常に秒数であるとみなします。 +: SQLエンジンが文字列比較を行う際に、大文字と小文字の違いを考慮させるかどうかを設定します。 デフォルトで値は1 (大文字小文字を区別する) です。SQLエンジンは文字列比較 (並び替えやクエリ) の際に大文字と小文字とアクセント付き文字を異なる文字として扱います。例えば“ABC”= “ABC”ですが“ABC” # “Abc”であり、"abc" # "âbc"です。SQLエンジンと4Dエンジンの動作をそろえたいなど特定の場合では、大文字と小文字を区別しない文字列比較 (“ABC”=“Abc"="âbc") を使用できます。 +**警告:* このオプションはデータベースのストラクチャーファイルと全てのプロセスを変更するため、パフォーマンス上の観点から、データベースのスタートアップ時にのみ設定することが強く推奨されます。* + + + +このオプションはアプリケーション環境設定の[CALL SUBFORM CONTAINER](call-subform-container.md) で設定できます。 -### SMTP Log (110) -**Thread-safe** : Yes + +### SQL Server Port ID (88) **スコープ**: 4D ローカル、4D Server -**異なるセッション間で値を保持**: しない** +**2セッション間で設定を保持**: Yes -取りうる値**: 0 あるいは1 からX まで(0 = 記録しない、1 から X = ファイル名に追加されるシーケンシャルな数字)。デフォルトでは、値は0(SMTP 通信は記録されない)です。 +**説明**: 4Dローカル、または4D Server の統合されたSQLサーバーで使用されるTCPポート番号を取得、または設定します。デフォルトの値は19812です。このセレクターが設定されると、データベース設定は更新されます。TCPポート番号はデータベース設定ダイアログボックスの"SQL"ページにおいても設定可能です。 -: *transporter* オブジェクトが*transporter.send( )* または *SMTP\_transporter.checkConnection( )* を通して処理される際、4D とSMTP サーバー間の通信の記録を開始、あるいは停止します。デフォルトでは、値は0です(通信は記録されない)。このログが有効化されると、データベースのLogs フォルダ内にログファイルが作成されます。ファイル名は4DSMTPLog\_X.txt で、この*X* はログのシーケンシャルな番号です。4DSMTPLog のファイルのサイズが10MB に達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャルな番号は数字がインクリメントされます。同じ名前のファイルが既に存在していた場合、そのファイルは直接上書きされます。*value* 引数を使用してシーケンスの開始番号を設定することができます。デフォルトでは全てのファイルが残されますが、Circular log limitation パラメータを使用することで保存しておくファイルの数を管理することができます。 +**とりうる値**: 0 から 65535 -4DSMTPLog\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 +**デフォルト値**: 19812 -### Current process debug log recording (111) -**スコープ:** 4D アプリケーション +### SSL cipher list (64) -**異なるセッション間で値を保持:** No +**スコープ**: 4Dアプリケーション **2セッション間で設定を保持**: No -**詳細**: **カレントプロセスにおける**プログラミングイベントの、別のログファイルへのシーケンシャルな記録を開始または停止します。このログはDebug log recording (セレクター34)に似ていますが、こちらはカレントプロセスにのみを対象とします。ログファイル名はアルファベットの"p"とプロセス番号を含みます: 4DDebugLog\[\_p*N*_*n*].txt ここでのNはプロセスの固有のIDです。 +**とりうる値**: コロンで区切られた一連の文字列 (例 "ECDHE-RSA-AES128-....") -このフォーマットと*4DDebugLog* ファイルの使用についての詳細な情報については、デザインリファレンスの*ログファイルの詳細* を参照してください。 +**説明**: 安全なプロトコルのために4Dが使用する暗号リストです。このリストを使用して4Dによって実装された暗号化アルゴリズムの順位を変更することができます。例えば、以下の文字列を *value* 引数に渡す事ができます:"HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". 暗号リストのシンタックスの完全な詳細については、*OpenSSL の暗号ページ* *のサイト* を参照して下さい。 -**注:** このセレクターはデバッグ目的のためだけに提供されており、使用する際には注意が必要です。特に、アプリケーションのパフォーマンスに影響しうるため、製品で使用してはいけません。 Debug log recording および Current process debug log recording セレクターは同時に併用することができ、その場合にはメインのログファイルにはカレントプロセスのアクションは記録されません。 +この設定はメインWebサーバー(ただしWebサーバーオブジェクトは除く)、SQLサーバー、クライアント/サーバー接続、そしてHTTPクライアントと、安全なプロトコルを使用する4D コマンドの全てに対して適用されます。この変更は一時的な物です(つまり異なるセッション間で設定は保持されません)。 +暗号リストが変更された場合、新しい設定が使用されるようにするためには関係するサーバーを再起動する必要があります。 +暗号リストを (SLIファイルに恒久的に格納された) デフォルト値に再設定するには、*value*引数に空の文字列 ("") を渡して [SET DATABASE PARAMETER](set-database-parameter.md) コマンドを呼び出します。 -### Is current database a project (112) +**注**: [Get database parameter](get-database-parameter.md) コマンドで暗号リストはオプションの *stringValue* 引数に返され、戻り値は常に0となります。 -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 -: 4D アプリケーション** -詳細**: カレントのデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 +### Table sequence number (31) +**スコープ**:4D アプリケーション -### Is host database a project (113) + **2セッション間で設定を保持**: Yes -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 + **とりうる値**: 任意の倍長整数値 -: 4D アプリケーション** +**説明**: Command SET DATABASE PARAMETERこのセレクタは、引数に渡したテーブルのレコードの、カレントのユニーク番号を取得あるいは設定するために使用します。“カレントの数値”とは“最後に使用された数値”を意味します。SET DATABASE PARAMETERコマンドを使用してこの値を変更すると、渡された値+1の番号を使用して次のレコードが作成されます。この新しい番号は、[Sequence number](sequence-number.md "Sequence number")コマンドによって返される、さらにはストラクチャエディタやSQLで自動インクリメントが設定されたフィールドに返される番号です。 -詳細**: ホストデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 +デフォルトで、この固有の番号は4Dが設定し、レコードの作成順に対応します。詳細は[Sequence number](sequence-number.md "Sequence number")コマンドのドキュメントを参照してください。 -### Libldap version (114) -**スコープ**: カレント4D マシン -**異なるセッション間で値を保持**: No -**詳細**: カレントマシン上の4D アプリケーション内のLDAP ライブラリーのバージョン番号を返します(読み出し専用) +### TCPUDP log recording (131) +**Scope:** 4D application. +**Kept between two sessions:** No. -### Libsasl version (115) +**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. -**スコープ**: カレント4D マシン** +**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -異なるセッション間で値を保持**: No** -詳細**: カレントマシン上の4D アプリケーション内のSASL ライブラリーのバージョン番号を返します(読み出し専用) +### Times inside objects (109) -### POP3 Log (116) +スコープ: 4D ローカル、4D Server (全てのプロセス) -**Thread-safe** : Yes + 異なるセッション間で値を保持: No -**スコープ:** 4D ローカル、4D Server + **取りうる値**: Times in seconds (0) (デフォルト)、 Times in milliseconds (1) -**2セッション間で設定を保持:** No +**詳細**: オブジェクトプロパティ内およびコレクション要素内で時間値がどのように変換され保存されるかを定義するとともに、JSONおよびWeb エリアへの読込/書出の方法を定義します。デフォルトでは、4D v17 以降、時間はオブジェクト内では秒数として変換・保管されます。 -**取りうる値:** 0 または1からXまでの数字(0= 記録を取らない、1からX=シーケンシャルな数字、ファイル名に追加される)。デフォルトでは、値は0です(POP3通信は記録されません)。 +以前のリリースでは、時間値はこれらのコンテキストにおいてはミリ秒数として変換・保管されていました。このセレクターを使用することで、必要であれば以前の設定に戻すことで、移行がスムーズになります。 -**説明**: トランスポーターオブジェクトが*POP3\_transporter.getMail( )* または *POP3\_transporter.checkConnection( )*で処理されたとき、4D とPOP3 サーバー間の通信の記録を開始または停止します。デフォルトでは値は0 です(通信は記録されません)。この機構か有効化されている時、データベースのLogs フォルダにログファイルが作成されます。ファイル名は4DPOP3Log\_X.txt という形式となっており、X はログのシーケンシャル番号です。4DPOP3Log のサイズが10MBに到達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャル番号は1つ増加します。同じ名前のファイルが既に存在する場合、それは上書きされます。シーケンシャル番号の開始番号を、value 引数を用いて指定することができます。デフォルトでは全てのファイルが保持されますが、Circular log limitation 定数を使用することで残すファイルの数を制限することもできます。 +**注**: ORDA メソッドとSQL エンジンはこの設定を無視し、時間値は常に秒数であるとみなします。 -4DPOP3Log\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -### Is host database writable (117) +### Tips delay (102) -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでしか使用できず、この値を設定することはできません。 +**スコープ:** 4Dアプリケーション -**スコープ**: 4D アプリケーション +**異なるセッション間で値を保持:** No -**詳細**: ホストのプロジェクトファイル/ストラクチャーが書き込み可能なら1を、読み出し専用なら0を返します。 +**取りうる値:** 倍調整数 >= 0 (ティック) +**詳細:** マウスカーソルがヘルプメッセージが関連づけられたオブジェクト内で停止してからTipsが表示されるまでの遅延時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は45ティック(=0.75秒)です。 -### IMAP Log (119) -**Thread-safe** : Yes -**スコープ**: 4D ローカル、4D Server +### Tips duration (103) -**異なるセッション間で値を保持**: No +**スコープ:** 4Dアプリケーション -**取りうる値**: 0 または1 から X(0= 記録しない、1からX= シーケンシャル番号、ファイル名に追加される)。デフォルトでは値は0 です(IMAP の交換は記録されない)。 +**異なるセッション間で値を保持:** No -**詳細**: transporter オブジェクトが*IMAP\_transporter.getMail( )* または *IMAP\_transporter.checkConnection( )* で処理される際の4D とIMAP サーバーとの間の通信記録を開始または停止します。デフォルトでは、値は0です(通信は記録されません)。この機構が有効化されている場合、ログファイルがデータベースのLogフォルダに作成されます。ファイルは4DIMAPLog\_X.txt と名前がつけられ、このX はログのシーケンシャル番号です。ファイルのサイズが10MB に到達すると、ファイルは閉じられ、インクリメントされたシーケンシャル番号を持った新しいファイルが生成されます。同じ名前のファイルが既に存在する場合、それは直接置き換えられます。value 引数を使用するとシーケンス番号の開始番号を設定することができます。デフォルトで、全てのファイルは保持されますが、Circular log limitation 引数を使用することで保持するファイルの数をコントロールすることができます。 +**取りうる値:** 倍調整数 >= 60 (ティック) -ファイルの詳細については、*ログファイルの詳細* の章を参照してください。 +**詳細:** Tipsの最大表示時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は720ティック(=12秒)です。 -### Libzip version (120) -**スコープ:** カレントの4D マシン** +### Tips enabled (101) -2セッション間で設定を保持:** n/a** +**スコープ:** 4D アプリケーション -説明:** カレントマシン上の4D アプリケーションのlibzip ライブラリのバージョン番号を返します(読み出し専用) +**異なるセッション間で値を保持:** No +**取りうる値:** 0 = tips無効化、1 = tips有効化(デフォルト) +**詳細:** 4DアプリケーションのTipsのカレントの表示状態を設定あるいは取得します。デフォルトでは、Tipsは有効化されています。 -### Pause logging (121) +この引数は全ての4DTipsに影響するという点に注意してください。つまり、フォームヘルプメッセージとデザインモードのエディターTipsに影響します。 -**Thread-safe** : Yes -**スコープ**: 4D アプリケーション** -異なるセッション間で値を設定を保持**: No** -取り得る値**: 0 (ログを再開)、1 (ログを停止) +### Use legacy network layer (87) -このセレクターを使用するとアプリケーション上で開始された全てのログオペレーションを停止/再開させることができます(ただしORDAログは除く)。この機能は4Dアプリケーションのタスクを一時的に軽くしたり、あるいはログオペレーションのスケジュールを設定することに有用です。 +**スコープ**: 4D ローカル、4D Server +**異なるセッション間で値を保持**: Yes +**詳細:** クライアント/サーバー間の通信のネットワークレイヤーのカレントの状態を設定・取得します。旧式ネットワークレイヤーは4D v14 R5以降廃止予定となり、お使いのアプリケーションにおいて*ServerNet* ネットワークレイヤーへと積極的に置き換えられてい行くべきです。*ServerNet* は、将来のネットワークの進化の恩恵を受けるために、今後の4Dのリリースの中で必須要項となって行きます。互換性の理由から、既存のアプリケーションの速やかな移行をサポートするために、旧式のネットワークレイヤーは引き続きサポートされます(v14 R5以前のリリースから変換されたアプリケーションにおいてはデフォルトで旧式ネットワークレイヤーが使用されます)。クライアント/サーバー通信において旧式ネットワークレイヤーを使用するためにはこの引数に1を渡します(*ServerNet* が無効化されます)。0を渡すと旧式ネットワークレイヤーが無効化されます(そして*ServerNet* が使用されます)。 -### TCPUDP log recording (131) +このプロパティはデータベース設定の*互換性ページ* の"旧式ネットワークレイヤー"オプションを使用することによっても設定できます(*ネットワーク/クライアント-サーバー通信*参照)。この章では、移行戦略についての議論を読むこともできます。*ServerNet* の速やかな有効化が推奨されます。 -**Scope:** 4D application. +この引数が有効になるためには、アプリケーションを再起動する必要があります。OS X版の4D Server 64-bit 版においては*ServerNet* のみをサポートするため、このオプションはご利用いただけません(常に0を返します)。 -**Kept between two sessions:** No. +**取り得る値:** 0 または 1 (0 = 旧式ネットワークレイヤーを使用しない、1 = 旧式ネットワークレイヤーを使用する) -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**デフォルトの値:** 4D v14 R5以降で作成されたデータベースにおいては0、4D v14 R4以前のものから変換されたデータベースにおいては1 -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -### RDP optimization (133) +### User param value (108) -**Scope:** 4D application. +**スコープ:** 4D スタンドアロン、4D Server -**Kept between two sessions:** No. +**2セッション間で値を保持:** No -**Possible values:** `0`: Disabled (default), `1`: Enabled. +**取りうる値**: 任意のカスタムの文字列 -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). +**説明:** 4D アプリケーションが再起動される際に、ひとつのセッションから次のセッションへと渡されるカスタムの文字列です。このセレクターは異なる引数を使用してアプリケーションを再起動する必要がある、自動化されたユニットテストなどのコンテキストで有用です。[SET DATABASE PARAMETER](set-database-parameter.md) で使用された場合、手動で、あるいは[OPEN DATABASE](open-database.md)(\*)、 [OPEN DATA FILE](open-data-file.md)、 または [RESTART 4D](restart-4d.md) コマンドを使用して4D が再起動したあとに開かれるデータベースで利用可能となる新しい値を定義します。[Get database parameter](get-database-parameter.md) で使用された場合、コマンドライン(*コマンドラインインターフェース* 参照)、4DLink ファイル(*4DLinkファイルを使用する* 参照)、あるいは前のセッションでの[SET DATABASE PARAMETER](set-database-parameter.md) への呼び出しなどを使用して定義された、現在利用可能なユーザー引数値を取得します。(\*) [SET DATABASE PARAMETER](set-database-parameter.md)がUser param value を設定した後に、[OPEN DATABASE](open-database.md)にuser-param xml 属性を含む.4DLink ファイル渡して呼び出した場合、4D は[SET DATABASE PARAMETER](set-database-parameter.md)で提供された引数のみを考慮します。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md index 560a5127fd9c6c..72a44938ecd316 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/get-database-parameter.md @@ -22,6 +22,36 @@ displayed_sidebar: docs *selector* 引数には、知りたいパラメーターを指定します。4Dは*Database Parameters* テーマで、定義済み定数を提供しています: +### 4D Remote mode timeout (14) + +**スコープ**(旧式ネットワークレイヤーのみ): *value* が正数の場合4D アプリケーション + +**2セッション間で設定を保持**: *value* が正数の場合Yes + +**説明**: 非常に特殊な場合においてのみ使用されるべき定数です。この引数を使用して、4D Serverに接続したリモートの4Dマシンが参照するタイムアウト値を設定できます。リモートモードの4Dが使用するデフォルトのタイムアウト値は、リモートマシン上の環境設定の“クライアント-サーバ/設定”ページで設定されます。 + +4D Remote Mode Timeout セレクターは旧式ネットワークレイヤーを使用している場合のみ考慮されます。*ServerNet* レイヤーが有効化されている場合には無視されます。この設定は4D Server Timeout (13) によって完全に管理されています。 + + + + +### 4D Server log recording (28) + +**Thread-safe** : Yes + +**Scope**: 4D Server, 4D リモート + +**2セッション間で設定を保持**: No** + +とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 + +: 4D Serverが受け取る標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 + +サーバマシンが受信した各リクエストをログファイルに記録するよう、4D Serverに指示することができます。このメカニズムが有効になると、データベースストラクチャと同じ階層に2つのログファイルが作成されます。サーバー側では*4DRequestsLogServer\_X*.txt および *4DRequestsLog\_ProcessInfoServer\_X*.txt 、リモート側では*4DRequestsLog\_X*.txt および *4DRequestsLog\_ProcessInfo\_X*.txt on the と名付けられたファイルが作成されます(Xはログのシーケンシャル番号)。ファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、*value*引数を使用して指定できます。このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、ユーザ、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestLog ファイルのより詳細な情報については、*ログファイルの詳細* の章を参照してください。 + + + + ### 4D Server timeout (13) **スコープ**: *value* が正数なら4Dアプリケーション @@ -42,53 +72,76 @@ displayed_sidebar: docs -### 4D Remote mode timeout (14) -**スコープ**(旧式ネットワークレイヤーのみ): *value* が正数の場合4D アプリケーション +### Auto synchro resources folder (48) -**2セッション間で設定を保持**: *value* が正数の場合Yes +**スコープ**:4D リモートマシン -**説明**: 非常に特殊な場合においてのみ使用されるべき定数です。この引数を使用して、4D Serverに接続したリモートの4Dマシンが参照するタイムアウト値を設定できます。リモートモードの4Dが使用するデフォルトのタイムアウト値は、リモートマシン上の環境設定の“クライアント-サーバ/設定”ページで設定されます。 + **2セッション間で設定を保持**: No -4D Remote Mode Timeout セレクターは旧式ネットワークレイヤーを使用している場合のみ考慮されます。*ServerNet* レイヤーが有効化されている場合には無視されます。この設定は4D Server Timeout (13) によって完全に管理されています。 + **とりうる値**: 0 (同期しない), 1 (自動同期) または2 (確認する). + +**説明**: このコマンドを実行する4DクライアントマシンのResourcesフォルダの動的な同期モード。 +サーバ上のResourcesフォルダの内容が更新されたり、(リソースエクスプローラや SET DATABASE LOCALIZATION コマンドで) ユーザが同期をリクエストすると、サーバは接続されたユーザに通知を行います。 +クライアント側では3つの同期モードを選択できます。Auto Synchro Resources Folderセレクタはカレントセッションでクライアントマシンが使用するモードを指定できます: -### Port ID (15) +0 (デフォルト値): 動的な同期を行わない (同期リクエストは無視される)1: 自動の動的同期2: クライアントマシンにダイアログを表示し、同期の受け入れ回避を確認するアプリケーションの環境設定で、同期モードをグローバルに設定できます。 -**スコープ**: 4D ローカル, 4D Server -**2セッション間で設定を保持**: No -**説明**: Command SET DATABASE この引数を使用して、ローカルモードの4Dおよび4D Serverによる4D Webサーバが使用するTCPポートをオンザフライで変更することができます。デフォルト値は80で、この値は環境設定ダイアログボックスの“Web/設定”ページで設定できます。*TCP Port Numbers*テーマの定数を*value*引数に使用できます。 +### Cache flush periodicity (95) +**Thread-safe** : Yes -Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Webサーバで役立ちます(この場合、デザインモードへのアクセス手段がありません)。TCPポートIDに関する詳細は*Webサーバー設定*を参照してください。 +**スコープ**: 4Dローカル、4D Server +**異なるセッション間で値を保持**: No -### Character set (17) +**取りうる値**: 倍長整数 > 1 (秒) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +**詳細**: 秒単位で指定された、キャッシュ保存頻度を取得あるいは設定します。この値を変更すると、データベース設定の[XML DECODE](xml-decode.md)内の**キャッシュを保存: X秒毎**オプションをセッション中の間上書きします(これはデータベース設定には保存されません)。 -### Max concurrent Web processes (18) + +### Cache unload minimum size (66) + +**スコープ**:4Dアプリケーション + + **2セッション間で設定を保持**: No + + **とりうる値**: 1より大きい正の倍長整数 + +**説明**: エンジンがオブジェクトをデータベースキャッシュに配置する際に空き空間を作成する必要が出た場合、データベースキャッシュからリリースするメモリの最小サイズ (バイト単位)。 + +このセレクタの目的はキャッシュからデータをリリースする時間を減らし、よりパフォーマンスを得ることにあります。キャッシュのサイズやデータベース中で処理されるデータのブロックサイズに応じてこの値を変更できます。 + +このセレクタが使用されないとデフォルトで、4Dは空間が必要になった時最低10%のキャッシュをアンロードします。 + + + + +### Character set (17) **説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### Client port ID (22) -**スコープ**: すべての4Dリモートマシン +### Circular log limitation (90) - **2セッション間で設定を保持**: Yes +**Thread-safe** : Yes - **とりうる値**: セレクタ15参照 +**スコープ**: 4Dローカル、4D Server **異なるセッション間で値を保持**: No** + +取りうる値**: 任意の整数値、0 = 全てのログを保持** + +詳細**: 各タイプのロゴのローテーションに保存するファイル数の最大値。デフォルトでは、直近の50 ファイルが保持されます。*X* という値を渡した場合、直近の*X* 個のファイルのみが保持され、最も古いファイルは新しいファイルが作成されたときに自動的に削除されます。この設定は全てのログファイルに対して適用されます:リクエストログ(セレクター28と45)、デバッグログ(セレクター34)、イベントログ(セレクター79)、Web ログ([WEB SET OPTION](web-set-option.md)コマンドのセレクター29と84)、などです。 -**説明**: このセレクタを使用して、Webサーバとして使用する4Dクライアントマシンの動作パラメタを指定できます。これらのセレクタを用いて指定された値は、 Webサーバとして使用するすべての4D Clientマシンに対して適用されます。特定の4D Clientマシンに対してのみ値を指定したい場合には、4D Clientの環境設定ダイアログボックスを使用してください。 @@ -104,6 +157,43 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web + +### Client HTTPS port ID (40) + +**スコープ**:すべての4Dリモートマシン + + **2セッション間で設定を保持**: Yes + + **とりうる値**: 0 ~ 65535 + +**説明**: このセレクタは、クライアントマシンのWebサーバがSSLによるセキュアな接続(HTTPSプロトコル)で使用するTCP ポート番号を、プログラムで変更するために使用できます。デフォルトの値は443(標準ポート番号)です。 + +このセレクタの動作はセレクタ39と同じですが、Web サーバとして使用されるすべてのクライアントマシンに適用されます。特定のクライアントマシンの設定だけを変更するのであれば、4Dリモートの環境設定ダイアログ画面を使用してください。 + + + + +### Client log recording (45) + +**スコープ**: リモート4Dマシン + +2セッション間で設定を保持: No + +**とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 + +**説明**: コマンドを実行した4Dクライアントマシンが実行した標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 + + + +クライアントマシンが実行したリクエストをログファイルに記録するよう、4Dに指示することができます。このメカニズムが有効になると、クライアントマシンのデータベースのローカルフォルダ内、Logsサブフォルダに2つのログファイルが作成されます。ファイルには"4DRequestsLog\_X.txt"と"4DRequestsLog\_ProcessInfo\_X.txt"(Xはログのシーケンシャル番号)の名前が付けられます。4DRequestsLogファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、value引数を使用して指定できます。 + + + +このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestsLogについての詳細な情報については、*ログファイルの詳細* の章を参照してください。 + + + + ### Client max concurrent Web proc (25) **スコープ**: すべての4Dリモートマシン @@ -116,25 +206,42 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web -### Maximum Web requests size (27) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +### Client port ID (22) +**スコープ**: すべての4Dリモートマシン + **2セッション間で設定を保持**: Yes -### 4D Server log recording (28) + **とりうる値**: セレクタ15参照 -**Thread-safe** : Yes +**説明**: このセレクタを使用して、Webサーバとして使用する4Dクライアントマシンの動作パラメタを指定できます。これらのセレクタを用いて指定された値は、 Webサーバとして使用するすべての4D Clientマシンに対して適用されます。特定の4D Clientマシンに対してのみ値を指定したい場合には、4D Clientの環境設定ダイアログボックスを使用してください。 -**Scope**: 4D Server, 4D リモート -**2セッション間で設定を保持**: No** -とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 -: 4D Serverが受け取る標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 +### Client Server port ID (35) + +**スコープ**:データベース + + **2セッション間で設定を保持**: Yes + + **とりうる値**: 0~65535 + +**説明**: 4D Server が(4D Client に対して)データベースを公開するために使用されるTCPポート番号をプログラムで変更するために使用します。デフォルト値は19813 です。 + + + +この値を変更すれば、TCPプロトコルを使用して、複数の4D クライアント/サーバアプリケーションを同じマシンで同時に使用することができます。その場合、それぞれのアプリケーションごとに異なるポート番号を設定します。 + + + +公開ポート番号は、ストラクチャファイルに記録されています。ローカルモードの4Dで設定することもできますが、クライアント/サーバ環境でのみ考慮されます。 + + + +値を変更した場合、新しい設定が有効になるためには、アプリケーションを再起動する必要があります。 -サーバマシンが受信した各リクエストをログファイルに記録するよう、4D Serverに指示することができます。このメカニズムが有効になると、データベースストラクチャと同じ階層に2つのログファイルが作成されます。サーバー側では*4DRequestsLogServer\_X*.txt および *4DRequestsLog\_ProcessInfoServer\_X*.txt 、リモート側では*4DRequestsLog\_X*.txt および *4DRequestsLog\_ProcessInfo\_X*.txt on the と名付けられたファイルが作成されます(Xはログのシーケンシャル番号)。ファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、*value*引数を使用して指定できます。このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、ユーザ、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestLog ファイルのより詳細な情報については、*ログファイルの詳細* の章を参照してください。 @@ -154,19 +261,36 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web -### Table sequence number (31) -**スコープ**:4D アプリケーション +### Current process debug log recording (111) - **2セッション間で設定を保持**: Yes +**スコープ:** 4D アプリケーション - **とりうる値**: 任意の倍長整数値 +**異なるセッション間で値を保持:** No -**説明**: Command SET DATABASE PARAMETERこのセレクタは、引数に渡したテーブルのレコードの、カレントのユニーク番号を取得あるいは設定するために使用します。“カレントの数値”とは“最後に使用された数値”を意味します。[SET DATABASE PARAMETER](set-database-parameter.md "SET DATABASE PARAMETER")コマンドを使用してこの値を変更すると、渡された値+1の番号を使用して次のレコードが作成されます。この新しい番号は、[Sequence number](sequence-number.md "Sequence number")コマンドによって返される、さらにはストラクチャエディタやSQLで自動インクリメントが設定されたフィールドに返される番号です。 +**詳細**: **カレントプロセスにおける**プログラミングイベントの、別のログファイルへのシーケンシャルな記録を開始または停止します。このログはDebug log recording (セレクター34)に似ていますが、こちらはカレントプロセスにのみを対象とします。ログファイル名はアルファベットの"p"とプロセス番号を含みます: 4DDebugLog\[\_p*N*_*n*].txt ここでのNはプロセスの固有のIDです。 +このフォーマットと*4DDebugLog* ファイルの使用についての詳細な情報については、デザインリファレンスの*ログファイルの詳細* を参照してください。 +**注:** このセレクターはデバッグ目的のためだけに提供されており、使用する際には注意が必要です。特に、アプリケーションのパフォーマンスに影響しうるため、製品で使用してはいけません。 Debug log recording および Current process debug log recording セレクターは同時に併用することができ、その場合にはメインのログファイルにはカレントプロセスのアクションは記録されません。 + + + + +### Dates inside objects (85) + +スコープ: カレントプロセス + + 2セッション間で設定を保持: No + + **取り得る値**: String type without time zone (0), String type with time zone (1), Date type (2) (デフォルト) + +**説明**: 日付がオブジェクトにどのように保存されるかを定義するとともに、どのようにJSON に読み込み/書き出しされるかも定義します。 + +セレクターの値がDate type (4D v17以降で作成されたデータベースにおけるデフォルト)のとき、4D 日付はオブジェクト内で日付型として保存され、ローカルの日付設定に準拠します。JSON フォーマットに変換された時、日付属性は、時間を含まない文字列へと変換されます(**注:** この設定は、データベース設定のにある"オブジェクト内ではISO日付フォーマットの代わりに日付型を使用"オプションによって設定することができます)。 + +セレクターにを渡した場合、4D 日付はローカルなタイムゾーンを考慮に入れつつISO 文字列に変換されます。例えば、例えば、23/08/2013という日付の変 換を、フランスのサマータイム(GMT+2)にて実行した場合、JSONフォーマットの"2013-08-22T22:00:00Z"という結 果が返されます。この原理はJavaScriptの標準のオペレーションに従うものです。これは異なるタイムゾーンにいる人にJSON日付の値を 送る場合には、エラーの原因となりかねません。例えば、[Selection to JSON](selection-to-json.md)を使ってフランスでエクスポートされたテーブルを[JSON TO SELECTION](json-to-selection.md) を使用してアメリカで再インポートする、というような場合です。日付の値は、デフォルトではそれぞれのタイムゾーンにおいて再変換 されるため、データベース内に保存された値は異なってしまいます。こういった場合には、このセレクターにString type without time zoneを渡す事によって、タイムゾーンを考慮しないよ うに日付の変換モードを変更することができます。すると、23/08/2013という日付を変換した場合に は、"2013-08-23T00:00:00Z"という値を返すようになります。 -デフォルトで、この固有の番号は4Dが設定し、レコードの作成順に対応します。詳細は[Sequence number](sequence-number.md "Sequence number")コマンドのドキュメントを参照してください。 @@ -218,486 +342,431 @@ SET DATABASE PARAMETER (34;0) // ファイルを無効化 -### Client Server port ID (35) -**スコープ**:データベース +### Diagnostic log level (86) - **2セッション間で設定を保持**: Yes +**Thread-safe** : Yes - **とりうる値**: 0~65535 +**スコープ:** 4D アプリケーション** -**説明**: 4D Server が(4D Client に対して)データベースを公開するために使用されるTCPポート番号をプログラムで変更するために使用します。デフォルト値は19813 です。 +** **異なるセッション間で設定を保持:** No** +** **説明:** 診断ログが有効化された際に、そこに含まれるメッセージのレベル(Diagnostic log recording セレクターを参照)。各レベルは診断メッセージのカテゴリを指定し、それより重要なカテゴリのメッセージも自動的に含まれます。カテゴリの詳細については、*developer.4d.com* 上の*Diagnostic log levels* の章を参照してください。 + **取りうる値:** 以下の定数のいづれか(デフォルトは Log info ): Log trace: ERROR、WARN、INFO、DEBUG、TRACE を有効化します(最も詳細なレベル) Log debug: ERROR、WARN、INFO、DEBUG を有効化します Log info: ERROR、WARN、INFO を有効化します(デフォルト) Log warn: ERROR、WARN を有効化します Log error: ERROR を有効化します(最も簡略なレベル) -この値を変更すれば、TCPプロトコルを使用して、複数の4D クライアント/サーバアプリケーションを同じマシンで同時に使用することができます。その場合、それぞれのアプリケーションごとに異なるポート番号を設定します。 -公開ポート番号は、ストラクチャファイルに記録されています。ローカルモードの4Dで設定することもできますが、クライアント/サーバ環境でのみ考慮されます。 +### Diagnostic log recording (79) +**Thread-safe** : Yes +**スコープ**: 4Dアプリケーション -値を変更した場合、新しい設定が有効になるためには、アプリケーションを再起動する必要があります。 +2セッション間で設定を保持: No +取りうる値: 0 または 1 (0 = 記録しない, 1 = 記録する) +: 4D診断ファイルの記録を開始または停止する。デフォルトの値は0(記録しない)です。 -### HTTPS Port ID (39) +4Dは診断ファイルの中に内部的なアプリケーション処理に関連するイベントを継続的に記録することができます。このファイルに含まれる情報は4Dアプリケーション開発のために使用され、4D社の技術サポート担当により解析されます。このセレクターに1を渡すと、データベースの**Logs** フォルダ内に診断ファイルが自動的に作成されます(またはすでに存在する場合には開かれます)。ファイルには*4DDiagnosticLog\_X*.txt (あるいはサーバー側で生成された場合には *4DDiagnosticLogServer\_X*.txt) という名前が付けられます。このファイルのサイズが10MBに達するとそのファイルは閉じられ、DatabaseName\_N.txtが生成されます (Nは連番)。 -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +[LOG EVENT](log-event.md)コマンドを使用してカスタム情報をこのファイルに書き込むこともできます。 -### Client HTTPS port ID (40) -**スコープ**:すべての4Dリモートマシン +### Direct2D get active status (74) - **2セッション間で設定を保持**: Yes +**注:** このセレクターは[Get database parameter](get-database-parameter.md)コマンドでのみ使用することができ、設定することはできません。 - **とりうる値**: 0 ~ 65535 +説明: WindowsにおいてDirect2Dのアクティブな実装を返します。 -**説明**: このセレクタは、クライアントマシンのWebサーバがSSLによるセキュアな接続(HTTPSプロトコル)で使用するTCP ポート番号を、プログラムで変更するために使用できます。デフォルトの値は443(標準ポート番号)です。 +取りうる値: 0, 1, 2, 3, 4 または 5 (セレクター69の値参照)。返される値はDirect2Dが利用可能かどうか、およびハードウェア、OSによってサポートされるDirec2Dの品質に基づきます。 -このセレクタの動作はセレクタ39と同じですが、Web サーバとして使用されるすべてのクライアントマシンに適用されます。特定のクライアントマシンの設定だけを変更するのであれば、4Dリモートの環境設定ダイアログ画面を使用してください。 +例えば以下のコードを実行した場合、 -### SQL Autocommit (43) + SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) -**スコープ**:データベース - **2セッション間で設定を保持**: Yes - **とりうる値**: 0 (無効) または 1 (有効) +- Windows 7以降、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは3に設定されます (ソフトウェアコンテキスト)。 -**説明**: SQLの自動コミットモードを有効または無効にするために使用します。デフォルトは 0 (無効モード) です。 +- Windows Vistaでは、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは0に設定されます (Direct2D無効)。 +- Windows XPでは、$modeは常に0です (Direct2D非互換)。 -自動コミットモードは、データベースの参照整合性を強化するために使用されます。このモードが有効の時、すべての*SELECT*, INSERT, *UPDATE* そして *DELETE* (SIUD) クエリは、これらがトランザクション内で実行されていない場合、自動でアドホックなトランザクションに含められます。このモードはデータベースの環境設定でも設定できます。 +### Direct2D status (69) -### SQL Engine case sensitivity (44) +**スコープ*: 4Dアプリケーション* -**スコープ**: データベース** + *(Direct2D Software) のみが許可されます。* -2セッション間で設定を保持**: Yes** -とりうる値**: 0 (大文字小文字を区別しない) または 1 (区別する) -: SQLエンジンが文字列比較を行う際に、大文字と小文字の違いを考慮させるかどうかを設定します。 デフォルトで値は1 (大文字小文字を区別する) です。SQLエンジンは文字列比較 (並び替えやクエリ) の際に大文字と小文字とアクセント付き文字を異なる文字として扱います。例えば“ABC”= “ABC”ですが“ABC” # “Abc”であり、"abc" # "âbc"です。SQLエンジンと4Dエンジンの動作をそろえたいなど特定の場合では、大文字と小文字を区別しない文字列比較 (“ABC”=“Abc"="âbc") を使用できます。 -**警告:* このオプションはデータベースのストラクチャーファイルと全てのプロセスを変更するため、パフォーマンス上の観点から、データベースのスタートアップ時にのみ設定することが強く推奨されます。* +### HTTP compression level (50) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -このオプションはアプリケーション環境設定の[CALL SUBFORM CONTAINER](call-subform-container.md) で設定できます。 +### HTTP compression threshold (51) -### Client log recording (45) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -**スコープ**: リモート4Dマシン -2セッション間で設定を保持: No -**とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 -**説明**: コマンドを実行した4Dクライアントマシンが実行した標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 +### HTTPS Port ID (39) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -クライアントマシンが実行したリクエストをログファイルに記録するよう、4Dに指示することができます。このメカニズムが有効になると、クライアントマシンのデータベースのローカルフォルダ内、Logsサブフォルダに2つのログファイルが作成されます。ファイルには"4DRequestsLog\_X.txt"と"4DRequestsLog\_ProcessInfo\_X.txt"(Xはログのシーケンシャル番号)の名前が付けられます。4DRequestsLogファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、value引数を使用して指定できます。 +### Idle connections timeout (54) -このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestsLogについての詳細な情報については、*ログファイルの詳細* の章を参照してください。 - - - -### Query by formula on server (46) - -**スコープ**: カレントテーブルおよびプロセス - - **2セッション間で設定を保持**: No - - **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) - -**説明**: 引数に渡された*table*に対して実行される[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの実行場所。 +**スコープ**: 値が負数でないなら4Dアプリケーション -クライアント/サーバモードでデータベースを使用するとき、フォーミュラを使用したクエリをサーバ上またはクライアント上で実行させることができます: +**2セッション間で設定を保持**: No -4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、これらのコマンドは、以前のバージョンの4Dと同様、クライアントマシン上で実行されます。変換されたデータベースでは、環境設定のアプリケーション/互換性ページで、これらのコマンドの実行場所をグローバルに変更できます。この実行場所の違いは、アプリケーションのパフォーマンス (通常サーバ上で実行したほうが早い) だけでなく、プログラミングにも影響します。実際フォーミュラの部品の値 (特にメソッドから呼ばれる変数) は、実行コンテキストにより異なります。このセレクタを使用して開発者は、アプリケーションの動作を適応させられます。 +**とりうる値**: 持続時間を秒で表す値。値は正数 (新規接続) または負数 (既存の接続)をとることができます。デフォルト値は20です。 -*value* 引数に0を渡すと、フォーミュラを使用するクエリの実行場所は、データベースの設定に基づきます: 4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、データベース環境設定に基づき、クライアントマシンまたはサーバマシンで実行されます。*value*に1または2を渡すと、これらのコマンドの実行場所をクライアントマシンまたはサーバマシンに強制できます。 +**説明**: この引数を使用して、4DデータベースエンジンとSQLエンジン両方への動きのない接続の最大時間 (タイムアウト) を設定できます。また*ServerNet* (新しいネットワークレイヤー)モードにおいては4Dアプリケーションサーバーへの接続のタイムアウトも設定します。 -例題2を参照してください。 -**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 +動作していない接続がこの制限時間に達すると、接続は自動でスタンバイ状態に置かれます。つまりクライアント/サーバセッションがフリーズされ、ネットワー クソケットが閉じられます。サーバー管理ウィンドウでは、ユーザープロセスの状態は"延期"と表示されます。この動作はユーザに対し完全に透過的です。スタンバイ状態の接続でリクエストが開始されると、ソケットが自動で再び開かれ、クライアント/サーバセッションが再び有効になります。 -### Order by formula on server (47) -**スコープ**:カレントテーブルおよびプロセス +この設定によりサーバのリソースを節約できます。スタンバイ状態の接続はソケットを 閉じ、サーバ上のプロセスを解放します。他方これにより、ファイアウォールがアイドルなソケットを閉じてしまうことに伴い接続が失われることを避けること ができます。このためには、アイドル接続のタイムアウト値はファイアウォールのタイムアウト値よりも小さくなくてはなりません。 - **2セッション間で設定を保持**: No - **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) -**説明**: 引数に渡されたtableに対して実行される[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドの実行場所。 +*value*に正数を渡すと、設定はすべてのプロセスのすべての新規接続に適用されます。負数を渡すと、設定はカレントプロセスの開かれた接続に適用されます。0を渡すと、アイドル接続のタイムアウトは行われません。 -クライアント/サーバモードでデータベースを使用するとき、[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドをサーバ上またはクライアント上で実行させることができます。このセレクタを使用して、このコマンドの実行場所 (サーバまたはクライアント) を指定できます。このモードはデータベース環境設定でも設定できます。詳細はセレクタ46、Query By Formula On Serverの説明を参照してください。 +このパラメターはクライアント側で設定する必要があります。通常この値を変更する必要はありません。 -**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュ ラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -### Auto synchro resources folder (48) +### IMAP Log (119) -**スコープ**:4D リモートマシン +**Thread-safe** : Yes - **2セッション間で設定を保持**: No +**スコープ**: 4D ローカル、4D Server - **とりうる値**: 0 (同期しない), 1 (自動同期) または2 (確認する). +**異なるセッション間で値を保持**: No -**説明**: このコマンドを実行する4DクライアントマシンのResourcesフォルダの動的な同期モード。 +**取りうる値**: 0 または1 から X(0= 記録しない、1からX= シーケンシャル番号、ファイル名に追加される)。デフォルトでは値は0 です(IMAP の交換は記録されない)。 -サーバ上のResourcesフォルダの内容が更新されたり、(リソースエクスプローラや SET DATABASE LOCALIZATION コマンドで) ユーザが同期をリクエストすると、サーバは接続されたユーザに通知を行います。 +**詳細**: transporter オブジェクトが*IMAP\_transporter.getMail( )* または *IMAP\_transporter.checkConnection( )* で処理される際の4D とIMAP サーバーとの間の通信記録を開始または停止します。デフォルトでは、値は0です(通信は記録されません)。この機構が有効化されている場合、ログファイルがデータベースのLogフォルダに作成されます。ファイルは4DIMAPLog\_X.txt と名前がつけられ、このX はログのシーケンシャル番号です。ファイルのサイズが10MB に到達すると、ファイルは閉じられ、インクリメントされたシーケンシャル番号を持った新しいファイルが生成されます。同じ名前のファイルが既に存在する場合、それは直接置き換えられます。value 引数を使用するとシーケンス番号の開始番号を設定することができます。デフォルトで、全てのファイルは保持されますが、Circular log limitation 引数を使用することで保持するファイルの数をコントロールすることができます。 -クライアント側では3つの同期モードを選択できます。Auto Synchro Resources Folderセレクタはカレントセッションでクライアントマシンが使用するモードを指定できます: +ファイルの詳細については、*ログファイルの詳細* の章を参照してください。 -0 (デフォルト値): 動的な同期を行わない (同期リクエストは無視される)1: 自動の動的同期2: クライアントマシンにダイアログを表示し、同期の受け入れ回避を確認するアプリケーションの環境設定で、同期モードをグローバルに設定できます。 -### Query by formula joins (49) +### Is current database a project (112) -**スコープ**:カレントプロセス +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 - **2セッション間で設定を保持**: No +: 4D アプリケーション** - **とりうる値**: 0 (データベース設定を使用), 1 (常に自動リレーションを使用) または 2 (可能ならSQL JOINを使用) +詳細**: カレントのデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 -**説明**: "SQL JOIN"の利用に関連する、[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")と[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの動作モード。 -4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、これらのコマンドはSQL JOINモデルに基づくJOINを実行します。このメカニズムを使用して、(以前のバージョンでは必要な条件だった) 自動リレーションで接続されていない他のテーブルに対して実行されたクエリに基づき、テーブルのセレクションを変更できます。 -QUERY BY FORMULA Joinsセレクタで、カレントプロセスの、フォーミュラによるクエリの動作モードを指定できます: -0: データベースの現在の設定を使用する (デフォルト値)。4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、"SQL JOIN"はフォーミュラによるクエリに対し常に有効です。変換されたデータベースでは、互換性のためデフォルトでこのメカニズムは有効になっていません。しかし環境設定で実装できます。1: 常に自動リレーションを使用 (= 以前のバージョンの4Dの動作)。このモードでは、他のテーブルに対して行われたクエリに基づきテーブルのセレクションを作成するためには、リレーションが必要です。4Dは"SQL JOIN"を行いません。2: 可能であればSQL JOINを使用 (= 4D v11 SQLのバージョン11.2以降で作成されたデータベースのデフォルト動作)。このモードでは、フォーミュラが適合する限り、4Dはフォーミュラによるクエリに"SQL JOIN"を使用します (2つの例外があります。[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") コマンドの説明を参照)。**Note:** 4Dのリモートモードにおいて、"SQL JOIN"はフォーミュラがサーバ上で実行されているときにのみ使用できます (レコードへのアクセスが必要なため)。フォーミュラの実行場所を設定するには、セレクタ46と47を参照してください。 +### Is host database a project (113) +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 +: 4D アプリケーション** -### HTTP compression level (50) +詳細**: ホストデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### HTTP compression threshold (51) +### Is host database writable (117) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでしか使用できず、この値を設定することはできません。 +**スコープ**: 4D アプリケーション +**詳細**: ホストのプロジェクトファイル/ストラクチャーが書き込み可能なら1を、読み出し専用なら0を返します。 -### Server base process stack size (53) -**スコープ**: 4D Server - 2セッション間で設定を保持: No - **とりうる値**:正の倍長整数 +### Libldap version (114) -**説明**: サーバ上のプリエンプティブシステムプロセス毎に割り当てるスタックのサイズ (バイト単位) です。デフォルトでの値はシステムによって決定されます。 +**スコープ**: カレント4D マシン -プ リエンプティブシステムプロセスはメインの4D クライアントプロセスを制御するためにロードされます。デフォルトでそれぞれのプリエンプティブプロセスに割り当てられるサイズはおよその場合最適なサイ ズですが、何百ものプロセスが作成されるようなケースではこのサイズが適切かどうか検討する必要が出てくるかもしれません。 +**異なるセッション間で値を保持**: No -データベースが実行する処理がそれを許す限り、最適化の目的でこのサイズを大幅に減らすことができます ( 例えばデータベースで大量のレコードの並び替えなどを行わない場合)。512 や256 KB でさえも設定可能です。スタックサイズを小さくしすぎることは致命的であり、4D Server の動作に害を及ぼすことになるので注意してください。このパラメタの設定は注意を持って行い、データベースの利用状況 (レコード数や行う処理など) を考慮しながら行わなければなりません。 +**詳細**: カレントマシン上の4D アプリケーション内のLDAP ライブラリーのバージョン番号を返します(読み出し専用) -このパラメタの設定を行うには、*On Server Startupデータベースメソッド* などにおいてサーバ上でコマンドが実行されなければなりません。 -### Idle connections timeout (54) +### Libsasl version (115) -**スコープ**: 値が負数でないなら4Dアプリケーション +**スコープ**: カレント4D マシン** -**2セッション間で設定を保持**: No +異なるセッション間で値を保持**: No** -**とりうる値**: 持続時間を秒で表す値。値は正数 (新規接続) または負数 (既存の接続)をとることができます。デフォルト値は20です。 +詳細**: カレントマシン上の4D アプリケーション内のSASL ライブラリーのバージョン番号を返します(読み出し専用) -**説明**: この引数を使用して、4DデータベースエンジンとSQLエンジン両方への動きのない接続の最大時間 (タイムアウト) を設定できます。また*ServerNet* (新しいネットワークレイヤー)モードにおいては4Dアプリケーションサーバーへの接続のタイムアウトも設定します。 -動作していない接続がこの制限時間に達すると、接続は自動でスタンバイ状態に置かれます。つまりクライアント/サーバセッションがフリーズされ、ネットワー クソケットが閉じられます。サーバー管理ウィンドウでは、ユーザープロセスの状態は"延期"と表示されます。この動作はユーザに対し完全に透過的です。スタンバイ状態の接続でリクエストが開始されると、ソケットが自動で再び開かれ、クライアント/サーバセッションが再び有効になります。 +### Libzip version (120) +**スコープ:** カレントの4D マシン** +2セッション間で設定を保持:** n/a** -この設定によりサーバのリソースを節約できます。スタンバイ状態の接続はソケットを 閉じ、サーバ上のプロセスを解放します。他方これにより、ファイアウォールがアイドルなソケットを閉じてしまうことに伴い接続が失われることを避けること ができます。このためには、アイドル接続のタイムアウト値はファイアウォールのタイムアウト値よりも小さくなくてはなりません。 +説明:** カレントマシン上の4D アプリケーションのlibzip ライブラリのバージョン番号を返します(読み出し専用) -*value*に正数を渡すと、設定はすべてのプロセスのすべての新規接続に適用されます。負数を渡すと、設定はカレントプロセスの開かれた接続に適用されます。0を渡すと、アイドル接続のタイムアウトは行われません。 +### Log command list (80) +**スコープ**: 4D アプリケーション -このパラメターはクライアント側で設定する必要があります。通常この値を変更する必要はありません。 +**2セッション間で設定を保持**: No +**取りうる値**: 記録する4Dコマンドの番号リスト。型は文字列で各コマンド番号をセミコロンで区切ります。"all"を渡すとすべてのコマンドが記録され、"" (空の文字列) を渡すとなにも記録されません。 +**説明**: デバッグファイルに記録する4Dコマンドのリスト (セレクター 34, Debug Log Recording参照)。デフォルトではすべての4Dコマンドが記録されます。 -### PHP interpreter IP address (55) +このセレクターを使用すれば、記録に残したい4Dコマンドを指定することで、デバッグファイルに保存される情報の量を制限することができます。例えば以下のようにコードを記述できます: -**スコープ**: 4D アプリケーション + SET DATABASE PARAMETER(Log command list;"277;341")   // QUERY および QUERY SELECTION コマンドのみを記録する -2セッション間で設定を保持: No** -値**: IPv4 型にフォーマットされた文字列(例 "127.0.0.1") あるいはIPv6 型にフォーマットされた文字列(例 "2001:0db8:0000:0000:0000:ff00:0042:8329") -: FastCGI を経由してPHPインタプリタと通信を行うために、4D がローカルで使用するIP アドレス。デフォルトで値は"127.0.0.1" です(IPv5 フォーマットのアドレスは4D v16 R4 以降でサポートされます)。このアドレスは4D が配置されているマシンに対応しなければなりません。このパラメタはデータベース設定を使用してすべてのマシン用にグローバルに設定できます。 -PHPインタプリタに関する詳細は*Design Reference*マニュアルを参照してください。 +### Max concurrent Web processes (18) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### PHP interpreter port (56) -**スコープ**:4D アプリケーション - **2セッション間で設定を保持**: No +### Maximum Web requests size (27) -**値**: 正の倍長整数値。デフォルト値は8002。 +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -**説明**: 4DのPHPインタプリタが使用するTCPポート番号。データベース設定でこの値をすべてのマシン用にグローバルに変更できます。PHPインタープリタに関する詳細は*Design Reference* マニュアルを参照してください。 -### SSL cipher list (64) +### Min TLS version (105) -**スコープ**: 4Dアプリケーション **2セッション間で設定を保持**: No +**スコープ**: 4D Server、4D Web サーバーおよび4D SQL サーバー -**とりうる値**: コロンで区切られた一連の文字列 (例 "ECDHE-RSA-AES128-....") +**異なるセッション間で値を保持**: No -**説明**: 安全なプロトコルのために4Dが使用する暗号リストです。このリストを使用して4Dによって実装された暗号化アルゴリズムの順位を変更することができます。例えば、以下の文字列を *value* 引数に渡す事ができます:"HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". 暗号リストのシンタックスの完全な詳細については、*OpenSSL の暗号ページ* *のサイト* を参照して下さい。 +**詳細**: Transport Layer Security (TLS) レベルを指定するのに使用します。これはデータ暗号化とアプリケーションとサーバー間での認証を可能にします。これによって定義された最小値を下回るバージョンしかサポートしないクライアントからの接続は拒否されます。この設定はネットワークレイヤー全体に適用されます。変更した後にその新しい値を使用するためには、サーバーを再起動する必要があります。 -この設定はメインWebサーバー(ただしWebサーバーオブジェクトは除く)、SQLサーバー、クライアント/サーバー接続、そしてHTTPクライアントと、安全なプロトコルを使用する4D コマンドの全てに対して適用されます。この変更は一時的な物です(つまり異なるセッション間で設定は保持されません)。 +**デフォルトの値**: TLSv1\_3 -暗号リストが変更された場合、新しい設定が使用されるようにするためには関係するサーバーを再起動する必要があります。 +**取りうる値**: TLSv1\_2 (TLS 1.2、2008年に導入) TLSv1\_3 (TLS 1.3、2018年に導入) **注**: -暗号リストを (SLIファイルに恒久的に格納された) デフォルト値に再設定するには、*value*引数に空の文字列 ("") を渡して [SET DATABASE PARAMETER](set-database-parameter.md) コマンドを呼び出します。 +- 4D Internet Commands プラグインは異るネットワークレイヤーを使用するため、ここのセレクターは4DICのTLSバージョンには影響しません。 -**注**: [Get database parameter](get-database-parameter.md) コマンドで暗号リストはオプションの *stringValue* 引数に返され、戻り値は常に0となります。 +- TLS を旧式ネットワークレイヤーに適用しても反映されません。 -### Cache unload minimum size (66) -**スコープ**:4Dアプリケーション +### Number of formulas in cache (92) - **2セッション間で設定を保持**: No +**スコープ**: 4Dアプリケーション - **とりうる値**: 1より大きい正の倍長整数 +**異なるセッション間で保持**: No -**説明**: エンジンがオブジェクトをデータベースキャッシュに配置する際に空き空間を作成する必要が出た場合、データベースキャッシュからリリースするメモリの最小サイズ (バイト単位)。 +**取りうる値**: 正の倍長整数 -このセレクタの目的はキャッシュからデータをリリースする時間を減らし、よりパフォーマンスを得ることにあります。キャッシュのサイズやデータベース中で処理されるデータのブロックサイズに応じてこの値を変更できます。 +**デフォルト値**: 0 (キャッシュなし) -このセレクタが使用されないとデフォルトで、4Dは空間が必要になった時最低10%のキャッシュをアンロードします。 +**詳細**: フォーミュラのキャッシュに保存されるフォーミュラの最大数を設定あるいは取得します。これは[EXECUTE FORMULA](execute-formula.md)コマンドで使用されます。この上限は全てのプロセスに適用されますが、各プロセスにはそれぞれ独自のフォーミュラ用キャッシュがあります。フォーミュラをキャッシュすると、それぞれのフォーミュラはこの場合1度しかトークン化されないため、コンパイル済みモードでの[EXECUTE FORMULA](execute-formula.md)コマンドの実行が速くなります。キャッシュ値を変化させると、例え新しいサイズが以前のものより大きくても、既存の中身は全てリセットされます。キャッシュ内のフォーミュラ数が上限値に達すると、その後新しく実行されたフォーミュラはキャッシュ内の一番古いものを消去します(FIFOモード)。この引数は、コンパイルされたデータベース、あるいはコンパイルされたコンポーネントでのみ考慮されます。 -### Direct2D status (69) -**スコープ*: 4Dアプリケーション* +### OpenSSL version (94) - *(Direct2D Software) のみが許可されます。* +**スコープ**: 4D マシン全体* +* **2セッション間で設定を保持**: No +**説明**: マシン上で使用されているOpenSSL ライブラリーのバージョン番号を返します(読み込みのみ) -### Direct2D get active status (74) -**注:** このセレクターは[Get database parameter](get-database-parameter.md)コマンドでのみ使用することができ、設定することはできません。 -説明: WindowsにおいてDirect2Dのアクティブな実装を返します。 -取りうる値: 0, 1, 2, 3, 4 または 5 (セレクター69の値参照)。返される値はDirect2Dが利用可能かどうか、およびハードウェア、OSによってサポートされるDirec2Dの品質に基づきます。 +### Order by formula on server (47) -例えば以下のコードを実行した場合、 +**スコープ**:カレントテーブルおよびプロセス + **2セッション間で設定を保持**: No + **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) - SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) +**説明**: 引数に渡されたtableに対して実行される[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドの実行場所。 -- Windows 7以降、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは3に設定されます (ソフトウェアコンテキスト)。 +クライアント/サーバモードでデータベースを使用するとき、[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドをサーバ上またはクライアント上で実行させることができます。このセレクタを使用して、このコマンドの実行場所 (サーバまたはクライアント) を指定できます。このモードはデータベース環境設定でも設定できます。詳細はセレクタ46、Query By Formula On Serverの説明を参照してください。 -- Windows Vistaでは、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは0に設定されます (Direct2D無効)。 +**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュ ラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -- Windows XPでは、$modeは常に0です (Direct2D非互換)。 -### Diagnostic log recording (79) +### Pause logging (121) **Thread-safe** : Yes -**スコープ**: 4Dアプリケーション - -2セッション間で設定を保持: No +**スコープ**: 4D アプリケーション** -取りうる値: 0 または 1 (0 = 記録しない, 1 = 記録する) +異なるセッション間で値を設定を保持**: No** -: 4D診断ファイルの記録を開始または停止する。デフォルトの値は0(記録しない)です。 +取り得る値**: 0 (ログを再開)、1 (ログを停止) -4Dは診断ファイルの中に内部的なアプリケーション処理に関連するイベントを継続的に記録することができます。このファイルに含まれる情報は4Dアプリケーション開発のために使用され、4D社の技術サポート担当により解析されます。このセレクターに1を渡すと、データベースの**Logs** フォルダ内に診断ファイルが自動的に作成されます(またはすでに存在する場合には開かれます)。ファイルには*4DDiagnosticLog\_X*.txt (あるいはサーバー側で生成された場合には *4DDiagnosticLogServer\_X*.txt) という名前が付けられます。このファイルのサイズが10MBに達するとそのファイルは閉じられ、DatabaseName\_N.txtが生成されます (Nは連番)。 +このセレクターを使用するとアプリケーション上で開始された全てのログオペレーションを停止/再開させることができます(ただしORDAログは除く)。この機能は4Dアプリケーションのタスクを一時的に軽くしたり、あるいはログオペレーションのスケジュールを設定することに有用です。 -[LOG EVENT](log-event.md)コマンドを使用してカスタム情報をこのファイルに書き込むこともできます。 -### Log command list (80) +### PHP interpreter IP address (55) **スコープ**: 4D アプリケーション -**2セッション間で設定を保持**: No - -**取りうる値**: 記録する4Dコマンドの番号リスト。型は文字列で各コマンド番号をセミコロンで区切ります。"all"を渡すとすべてのコマンドが記録され、"" (空の文字列) を渡すとなにも記録されません。 - -**説明**: デバッグファイルに記録する4Dコマンドのリスト (セレクター 34, Debug Log Recording参照)。デフォルトではすべての4Dコマンドが記録されます。 - -このセレクターを使用すれば、記録に残したい4Dコマンドを指定することで、デバッグファイルに保存される情報の量を制限することができます。例えば以下のようにコードを記述できます: - - SET DATABASE PARAMETER(Log command list;"277;341")   // QUERY および QUERY SELECTION コマンドのみを記録する - - - -### Spellchecker (81) - -**スコープ**: 4D アプリケーション** +2セッション間で設定を保持: No** -2セッション間で設定を保持**: No +値**: IPv4 型にフォーマットされた文字列(例 "127.0.0.1") あるいはIPv6 型にフォーマットされた文字列(例 "2001:0db8:0000:0000:0000:ff00:0042:8329") - **とりうる値**: 0 (default) = macOSのシステムのスペルチェッカー(ハンスペルは無効化されます), 1 = ハンスペルスペルチェッカー有効化** +: FastCGI を経由してPHPインタプリタと通信を行うために、4D がローカルで使用するIP アドレス。デフォルトで値は"127.0.0.1" です(IPv5 フォーマットのアドレスは4D v16 R4 以降でサポートされます)。このアドレスは4D が配置されているマシンに対応しなければなりません。このパラメタはデータベース設定を使用してすべてのマシン用にグローバルに設定できます。 -説明**: macOS環境下においてハンスペルスペルチェッカーを有効化します。デフォルトでは、このプラットフォームではシステムのスペルチェッカーが有効化されています。例えば、クロスプラットフォームアプリケーションのインターフェースを統一するためにハンスペルを使用したいという場面があるかもしれません(Windowsでは、ハンスペルチェッカーのみが動作します)。詳細な情報に関しては、*スペルチェック*を参照して下さい。 +PHPインタプリタに関する詳細は*Design Reference*マニュアルを参照してください。 -### Dates inside objects (85) -スコープ: カレントプロセス +### PHP interpreter port (56) - 2セッション間で設定を保持: No +**スコープ**:4D アプリケーション - **取り得る値**: String type without time zone (0), String type with time zone (1), Date type (2) (デフォルト) + **2セッション間で設定を保持**: No -**説明**: 日付がオブジェクトにどのように保存されるかを定義するとともに、どのようにJSON に読み込み/書き出しされるかも定義します。 +**値**: 正の倍長整数値。デフォルト値は8002。 -セレクターの値がDate type (4D v17以降で作成されたデータベースにおけるデフォルト)のとき、4D 日付はオブジェクト内で日付型として保存され、ローカルの日付設定に準拠します。JSON フォーマットに変換された時、日付属性は、時間を含まない文字列へと変換されます(**注:** この設定は、データベース設定のにある"オブジェクト内ではISO日付フォーマットの代わりに日付型を使用"オプションによって設定することができます)。 +**説明**: 4DのPHPインタプリタが使用するTCPポート番号。データベース設定でこの値をすべてのマシン用にグローバルに変更できます。PHPインタープリタに関する詳細は*Design Reference* マニュアルを参照してください。 -セレクターにを渡した場合、4D 日付はローカルなタイムゾーンを考慮に入れつつISO 文字列に変換されます。例えば、例えば、23/08/2013という日付の変 換を、フランスのサマータイム(GMT+2)にて実行した場合、JSONフォーマットの"2013-08-22T22:00:00Z"という結 果が返されます。この原理はJavaScriptの標準のオペレーションに従うものです。これは異なるタイムゾーンにいる人にJSON日付の値を 送る場合には、エラーの原因となりかねません。例えば、[Selection to JSON](selection-to-json.md)を使ってフランスでエクスポートされたテーブルを[JSON TO SELECTION](json-to-selection.md) を使用してアメリカで再インポートする、というような場合です。日付の値は、デフォルトではそれぞれのタイムゾーンにおいて再変換 されるため、データベース内に保存された値は異なってしまいます。こういった場合には、このセレクターにString type without time zoneを渡す事によって、タイムゾーンを考慮しないよ うに日付の変換モードを変更することができます。すると、23/08/2013という日付を変換した場合に は、"2013-08-23T00:00:00Z"という値を返すようになります。 -### Diagnostic log level (86) +### POP3 Log (116) **Thread-safe** : Yes -**スコープ:** 4D アプリケーション** - -** **異なるセッション間で設定を保持:** No** - -** **説明:** 診断ログが有効化された際に、そこに含まれるメッセージのレベル(Diagnostic log recording セレクターを参照)。各レベルは診断メッセージのカテゴリを指定し、それより重要なカテゴリのメッセージも自動的に含まれます。カテゴリの詳細については、*developer.4d.com* 上の*Diagnostic log levels* の章を参照してください。 - - **取りうる値:** 以下の定数のいづれか(デフォルトは Log info ): Log trace: ERROR、WARN、INFO、DEBUG、TRACE を有効化します(最も詳細なレベル) Log debug: ERROR、WARN、INFO、DEBUG を有効化します Log info: ERROR、WARN、INFO を有効化します(デフォルト) Log warn: ERROR、WARN を有効化します Log error: ERROR を有効化します(最も簡略なレベル) +**スコープ:** 4D ローカル、4D Server +**2セッション間で設定を保持:** No +**取りうる値:** 0 または1からXまでの数字(0= 記録を取らない、1からX=シーケンシャルな数字、ファイル名に追加される)。デフォルトでは、値は0です(POP3通信は記録されません)。 -### Use legacy network layer (87) +**説明**: トランスポーターオブジェクトが*POP3\_transporter.getMail( )* または *POP3\_transporter.checkConnection( )*で処理されたとき、4D とPOP3 サーバー間の通信の記録を開始または停止します。デフォルトでは値は0 です(通信は記録されません)。この機構か有効化されている時、データベースのLogs フォルダにログファイルが作成されます。ファイル名は4DPOP3Log\_X.txt という形式となっており、X はログのシーケンシャル番号です。4DPOP3Log のサイズが10MBに到達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャル番号は1つ増加します。同じ名前のファイルが既に存在する場合、それは上書きされます。シーケンシャル番号の開始番号を、value 引数を用いて指定することができます。デフォルトでは全てのファイルが保持されますが、Circular log limitation 定数を使用することで残すファイルの数を制限することもできます。 -**スコープ**: 4D ローカル、4D Server +4DPOP3Log\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -**異なるセッション間で値を保持**: Yes -**詳細:** クライアント/サーバー間の通信のネットワークレイヤーのカレントの状態を設定・取得します。旧式ネットワークレイヤーは4D v14 R5以降廃止予定となり、お使いのアプリケーションにおいて*ServerNet* ネットワークレイヤーへと積極的に置き換えられてい行くべきです。*ServerNet* は、将来のネットワークの進化の恩恵を受けるために、今後の4Dのリリースの中で必須要項となって行きます。互換性の理由から、既存のアプリケーションの速やかな移行をサポートするために、旧式のネットワークレイヤーは引き続きサポートされます(v14 R5以前のリリースから変換されたアプリケーションにおいてはデフォルトで旧式ネットワークレイヤーが使用されます)。クライアント/サーバー通信において旧式ネットワークレイヤーを使用するためにはこの引数に1を渡します(*ServerNet* が無効化されます)。0を渡すと旧式ネットワークレイヤーが無効化されます(そして*ServerNet* が使用されます)。 -このプロパティはデータベース設定の*互換性ページ* の"旧式ネットワークレイヤー"オプションを使用することによっても設定できます(*ネットワーク/クライアント-サーバー通信*参照)。この章では、移行戦略についての議論を読むこともできます。*ServerNet* の速やかな有効化が推奨されます。 -この引数が有効になるためには、アプリケーションを再起動する必要があります。OS X版の4D Server 64-bit 版においては*ServerNet* のみをサポートするため、このオプションはご利用いただけません(常に0を返します)。 +### Port ID (15) -**取り得る値:** 0 または 1 (0 = 旧式ネットワークレイヤーを使用しない、1 = 旧式ネットワークレイヤーを使用する) +**スコープ**: 4D ローカル, 4D Server -**デフォルトの値:** 4D v14 R5以降で作成されたデータベースにおいては0、4D v14 R4以前のものから変換されたデータベースにおいては1 +**2セッション間で設定を保持**: No +**説明**: Command SET DATABASE この引数を使用して、ローカルモードの4Dおよび4D Serverによる4D Webサーバが使用するTCPポートをオンザフライで変更することができます。デフォルト値は80で、この値は環境設定ダイアログボックスの“Web/設定”ページで設定できます。*TCP Port Numbers*テーマの定数を*value*引数に使用できます。 -### SQL Server Port ID (88) -**スコープ**: 4D ローカル、4D Server +Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Webサーバで役立ちます(この場合、デザインモードへのアクセス手段がありません)。TCPポートIDに関する詳細は*Webサーバー設定*を参照してください。 -**2セッション間で設定を保持**: Yes -**説明**: 4Dローカル、または4D Server の統合されたSQLサーバーで使用されるTCPポート番号を取得、または設定します。デフォルトの値は19812です。このセレクターが設定されると、データベース設定は更新されます。TCPポート番号はデータベース設定ダイアログボックスの"SQL"ページにおいても設定可能です。 -**とりうる値**: 0 から 65535 -**デフォルト値**: 19812 +### Query by formula joins (49) +**スコープ**:カレントプロセス + **2セッション間で設定を保持**: No -### Circular log limitation (90) + **とりうる値**: 0 (データベース設定を使用), 1 (常に自動リレーションを使用) または 2 (可能ならSQL JOINを使用) -**Thread-safe** : Yes +**説明**: "SQL JOIN"の利用に関連する、[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")と[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの動作モード。 -**スコープ**: 4Dローカル、4D Server **異なるセッション間で値を保持**: No** +4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、これらのコマンドはSQL JOINモデルに基づくJOINを実行します。このメカニズムを使用して、(以前のバージョンでは必要な条件だった) 自動リレーションで接続されていない他のテーブルに対して実行されたクエリに基づき、テーブルのセレクションを変更できます。 -取りうる値**: 任意の整数値、0 = 全てのログを保持** +QUERY BY FORMULA Joinsセレクタで、カレントプロセスの、フォーミュラによるクエリの動作モードを指定できます: -詳細**: 各タイプのロゴのローテーションに保存するファイル数の最大値。デフォルトでは、直近の50 ファイルが保持されます。*X* という値を渡した場合、直近の*X* 個のファイルのみが保持され、最も古いファイルは新しいファイルが作成されたときに自動的に削除されます。この設定は全てのログファイルに対して適用されます:リクエストログ(セレクター28と45)、デバッグログ(セレクター34)、イベントログ(セレクター79)、Web ログ([WEB SET OPTION](web-set-option.md)コマンドのセレクター29と84)、などです。 +0: データベースの現在の設定を使用する (デフォルト値)。4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、"SQL JOIN"はフォーミュラによるクエリに対し常に有効です。変換されたデータベースでは、互換性のためデフォルトでこのメカニズムは有効になっていません。しかし環境設定で実装できます。1: 常に自動リレーションを使用 (= 以前のバージョンの4Dの動作)。このモードでは、他のテーブルに対して行われたクエリに基づきテーブルのセレクションを作成するためには、リレーションが必要です。4Dは"SQL JOIN"を行いません。2: 可能であればSQL JOINを使用 (= 4D v11 SQLのバージョン11.2以降で作成されたデータベースのデフォルト動作)。このモードでは、フォーミュラが適合する限り、4Dはフォーミュラによるクエリに"SQL JOIN"を使用します (2つの例外があります。[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") コマンドの説明を参照)。**Note:** 4Dのリモートモードにおいて、"SQL JOIN"はフォーミュラがサーバ上で実行されているときにのみ使用できます (レコードへのアクセスが必要なため)。フォーミュラの実行場所を設定するには、セレクタ46と47を参照してください。 -### Number of formulas in cache (92) -**スコープ**: 4Dアプリケーション +### Query by formula on server (46) -**異なるセッション間で保持**: No +**スコープ**: カレントテーブルおよびプロセス -**取りうる値**: 正の倍長整数 + **2セッション間で設定を保持**: No -**デフォルト値**: 0 (キャッシュなし) + **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) -**詳細**: フォーミュラのキャッシュに保存されるフォーミュラの最大数を設定あるいは取得します。これは[EXECUTE FORMULA](execute-formula.md)コマンドで使用されます。この上限は全てのプロセスに適用されますが、各プロセスにはそれぞれ独自のフォーミュラ用キャッシュがあります。フォーミュラをキャッシュすると、それぞれのフォーミュラはこの場合1度しかトークン化されないため、コンパイル済みモードでの[EXECUTE FORMULA](execute-formula.md)コマンドの実行が速くなります。キャッシュ値を変化させると、例え新しいサイズが以前のものより大きくても、既存の中身は全てリセットされます。キャッシュ内のフォーミュラ数が上限値に達すると、その後新しく実行されたフォーミュラはキャッシュ内の一番古いものを消去します(FIFOモード)。この引数は、コンパイルされたデータベース、あるいはコンパイルされたコンポーネントでのみ考慮されます。 +**説明**: 引数に渡された*table*に対して実行される[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの実行場所。 +クライアント/サーバモードでデータベースを使用するとき、フォーミュラを使用したクエリをサーバ上またはクライアント上で実行させることができます: +4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、これらのコマンドは、以前のバージョンの4Dと同様、クライアントマシン上で実行されます。変換されたデータベースでは、環境設定のアプリケーション/互換性ページで、これらのコマンドの実行場所をグローバルに変更できます。この実行場所の違いは、アプリケーションのパフォーマンス (通常サーバ上で実行したほうが早い) だけでなく、プログラミングにも影響します。実際フォーミュラの部品の値 (特にメソッドから呼ばれる変数) は、実行コンテキストにより異なります。このセレクタを使用して開発者は、アプリケーションの動作を適応させられます。 -### OpenSSL version (94) +*value* 引数に0を渡すと、フォーミュラを使用するクエリの実行場所は、データベースの設定に基づきます: 4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、データベース環境設定に基づき、クライアントマシンまたはサーバマシンで実行されます。*value*に1または2を渡すと、これらのコマンドの実行場所をクライアントマシンまたはサーバマシンに強制できます。 -**スコープ**: 4D マシン全体* +例題2を参照してください。 -* **2セッション間で設定を保持**: No +**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -**説明**: マシン上で使用されているOpenSSL ライブラリーのバージョン番号を返します(読み込みのみ) -### Cache flush periodicity (95) +### RDP optimization (133) -**Thread-safe** : Yes +**Scope:** 4D application. +**Kept between two sessions:** No. -**スコープ**: 4Dローカル、4D Server +**Possible values:** `0`: Disabled (default), `1`: Enabled. -**異なるセッション間で値を保持**: No +**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). -**取りうる値**: 倍長整数 > 1 (秒) -**詳細**: 秒単位で指定された、キャッシュ保存頻度を取得あるいは設定します。この値を変更すると、データベース設定の[XML DECODE](xml-decode.md)内の**キャッシュを保存: X秒毎**オプションをセッション中の間上書きします(これはデータベース設定には保存されません)。 @@ -715,246 +784,243 @@ PHPインタプリタに関する詳細は*Design Reference*マニュアルを -### Tips enabled (101) -**スコープ:** 4D アプリケーション +### Server base process stack size (53) -**異なるセッション間で値を保持:** No +**スコープ**: 4D Server -**取りうる値:** 0 = tips無効化、1 = tips有効化(デフォルト) + 2セッション間で設定を保持: No -**詳細:** 4DアプリケーションのTipsのカレントの表示状態を設定あるいは取得します。デフォルトでは、Tipsは有効化されています。 + **とりうる値**:正の倍長整数 -この引数は全ての4DTipsに影響するという点に注意してください。つまり、フォームヘルプメッセージとデザインモードのエディターTipsに影響します。 +**説明**: サーバ上のプリエンプティブシステムプロセス毎に割り当てるスタックのサイズ (バイト単位) です。デフォルトでの値はシステムによって決定されます。 + +プ リエンプティブシステムプロセスはメインの4D クライアントプロセスを制御するためにロードされます。デフォルトでそれぞれのプリエンプティブプロセスに割り当てられるサイズはおよその場合最適なサイ ズですが、何百ものプロセスが作成されるようなケースではこのサイズが適切かどうか検討する必要が出てくるかもしれません。 +データベースが実行する処理がそれを許す限り、最適化の目的でこのサイズを大幅に減らすことができます ( 例えばデータベースで大量のレコードの並び替えなどを行わない場合)。512 や256 KB でさえも設定可能です。スタックサイズを小さくしすぎることは致命的であり、4D Server の動作に害を及ぼすことになるので注意してください。このパラメタの設定は注意を持って行い、データベースの利用状況 (レコード数や行う処理など) を考慮しながら行わなければなりません。 +このパラメタの設定を行うには、*On Server Startupデータベースメソッド* などにおいてサーバ上でコマンドが実行されなければなりません。 -### Tips delay (102) -**スコープ:** 4Dアプリケーション -**異なるセッション間で値を保持:** No -**取りうる値:** 倍調整数 >= 0 (ティック) +### SMTP Log (110) -**詳細:** マウスカーソルがヘルプメッセージが関連づけられたオブジェクト内で停止してからTipsが表示されるまでの遅延時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は45ティック(=0.75秒)です。 +**Thread-safe** : Yes +**スコープ**: 4D ローカル、4D Server +**異なるセッション間で値を保持**: しない** -### Tips duration (103) +取りうる値**: 0 あるいは1 からX まで(0 = 記録しない、1 から X = ファイル名に追加されるシーケンシャルな数字)。デフォルトでは、値は0(SMTP 通信は記録されない)です。 -**スコープ:** 4Dアプリケーション +: *transporter* オブジェクトが*transporter.send( )* または *SMTP\_transporter.checkConnection( )* を通して処理される際、4D とSMTP サーバー間の通信の記録を開始、あるいは停止します。デフォルトでは、値は0です(通信は記録されない)。このログが有効化されると、データベースのLogs フォルダ内にログファイルが作成されます。ファイル名は4DSMTPLog\_X.txt で、この*X* はログのシーケンシャルな番号です。4DSMTPLog のファイルのサイズが10MB に達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャルな番号は数字がインクリメントされます。同じ名前のファイルが既に存在していた場合、そのファイルは直接上書きされます。*value* 引数を使用してシーケンスの開始番号を設定することができます。デフォルトでは全てのファイルが残されますが、Circular log limitation パラメータを使用することで保存しておくファイルの数を管理することができます。 -**異なるセッション間で値を保持:** No +4DSMTPLog\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -**取りうる値:** 倍調整数 >= 60 (ティック) -**詳細:** Tipsの最大表示時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は720ティック(=12秒)です。 +### Spellchecker (81) -### Min TLS version (105) +**スコープ**: 4D アプリケーション** -**スコープ**: 4D Server、4D Web サーバーおよび4D SQL サーバー +2セッション間で設定を保持**: No -**異なるセッション間で値を保持**: No + **とりうる値**: 0 (default) = macOSのシステムのスペルチェッカー(ハンスペルは無効化されます), 1 = ハンスペルスペルチェッカー有効化** -**詳細**: Transport Layer Security (TLS) レベルを指定するのに使用します。これはデータ暗号化とアプリケーションとサーバー間での認証を可能にします。これによって定義された最小値を下回るバージョンしかサポートしないクライアントからの接続は拒否されます。この設定はネットワークレイヤー全体に適用されます。変更した後にその新しい値を使用するためには、サーバーを再起動する必要があります。 +説明**: macOS環境下においてハンスペルスペルチェッカーを有効化します。デフォルトでは、このプラットフォームではシステムのスペルチェッカーが有効化されています。例えば、クロスプラットフォームアプリケーションのインターフェースを統一するためにハンスペルを使用したいという場面があるかもしれません(Windowsでは、ハンスペルチェッカーのみが動作します)。詳細な情報に関しては、*スペルチェック*を参照して下さい。 -**デフォルトの値**: TLSv1\_3 -**取りうる値**: TLSv1\_2 (TLS 1.2、2008年に導入) TLSv1\_3 (TLS 1.3、2018年に導入) **注**: -- 4D Internet Commands プラグインは異るネットワークレイヤーを使用するため、ここのセレクターは4DICのTLSバージョンには影響しません。 -- TLS を旧式ネットワークレイヤーに適用しても反映されません。 +### SQL Autocommit (43) +**スコープ**:データベース + **2セッション間で設定を保持**: Yes -### User param value (108) + **とりうる値**: 0 (無効) または 1 (有効) -**スコープ:** 4D スタンドアロン、4D Server +**説明**: SQLの自動コミットモードを有効または無効にするために使用します。デフォルトは 0 (無効モード) です。 -**2セッション間で値を保持:** No -**取りうる値**: 任意のカスタムの文字列 -**説明:** 4D アプリケーションが再起動される際に、ひとつのセッションから次のセッションへと渡されるカスタムの文字列です。このセレクターは異なる引数を使用してアプリケーションを再起動する必要がある、自動化されたユニットテストなどのコンテキストで有用です。[SET DATABASE PARAMETER](set-database-parameter.md) で使用された場合、手動で、あるいは[OPEN DATABASE](open-database.md)(\*)、 [OPEN DATA FILE](open-data-file.md)、 または [RESTART 4D](restart-4d.md) コマンドを使用して4D が再起動したあとに開かれるデータベースで利用可能となる新しい値を定義します。[Get database parameter](get-database-parameter.md) で使用された場合、コマンドライン(*コマンドラインインターフェース* 参照)、4DLink ファイル(*4DLinkファイルを使用する* 参照)、あるいは前のセッションでの[SET DATABASE PARAMETER](set-database-parameter.md) への呼び出しなどを使用して定義された、現在利用可能なユーザー引数値を取得します。(\*) [SET DATABASE PARAMETER](set-database-parameter.md)がUser param value を設定した後に、[OPEN DATABASE](open-database.md)にuser-param xml 属性を含む.4DLink ファイル渡して呼び出した場合、4D は[SET DATABASE PARAMETER](set-database-parameter.md)で提供された引数のみを考慮します。 +自動コミットモードは、データベースの参照整合性を強化するために使用されます。このモードが有効の時、すべての*SELECT*, INSERT, *UPDATE* そして *DELETE* (SIUD) クエリは、これらがトランザクション内で実行されていない場合、自動でアドホックなトランザクションに含められます。このモードはデータベースの環境設定でも設定できます。 -### Times inside objects (109) -スコープ: 4D ローカル、4D Server (全てのプロセス) +### SQL Engine case sensitivity (44) - 異なるセッション間で値を保持: No +**スコープ**: データベース** - **取りうる値**: Times in seconds (0) (デフォルト)、 Times in milliseconds (1) +2セッション間で設定を保持**: Yes** -**詳細**: オブジェクトプロパティ内およびコレクション要素内で時間値がどのように変換され保存されるかを定義するとともに、JSONおよびWeb エリアへの読込/書出の方法を定義します。デフォルトでは、4D v17 以降、時間はオブジェクト内では秒数として変換・保管されます。 +とりうる値**: 0 (大文字小文字を区別しない) または 1 (区別する) -以前のリリースでは、時間値はこれらのコンテキストにおいてはミリ秒数として変換・保管されていました。このセレクターを使用することで、必要であれば以前の設定に戻すことで、移行がスムーズになります。 +: SQLエンジンが文字列比較を行う際に、大文字と小文字の違いを考慮させるかどうかを設定します。 デフォルトで値は1 (大文字小文字を区別する) です。SQLエンジンは文字列比較 (並び替えやクエリ) の際に大文字と小文字とアクセント付き文字を異なる文字として扱います。例えば“ABC”= “ABC”ですが“ABC” # “Abc”であり、"abc" # "âbc"です。SQLエンジンと4Dエンジンの動作をそろえたいなど特定の場合では、大文字と小文字を区別しない文字列比較 (“ABC”=“Abc"="âbc") を使用できます。 -**注**: ORDA メソッドとSQL エンジンはこの設定を無視し、時間値は常に秒数であるとみなします。 +**警告:* このオプションはデータベースのストラクチャーファイルと全てのプロセスを変更するため、パフォーマンス上の観点から、データベースのスタートアップ時にのみ設定することが強く推奨されます。* -### SMTP Log (110) +このオプションはアプリケーション環境設定の[CALL SUBFORM CONTAINER](call-subform-container.md) で設定できます。 -**Thread-safe** : Yes + + + +### SQL Server Port ID (88) **スコープ**: 4D ローカル、4D Server -**異なるセッション間で値を保持**: しない** +**2セッション間で設定を保持**: Yes -取りうる値**: 0 あるいは1 からX まで(0 = 記録しない、1 から X = ファイル名に追加されるシーケンシャルな数字)。デフォルトでは、値は0(SMTP 通信は記録されない)です。 +**説明**: 4Dローカル、または4D Server の統合されたSQLサーバーで使用されるTCPポート番号を取得、または設定します。デフォルトの値は19812です。このセレクターが設定されると、データベース設定は更新されます。TCPポート番号はデータベース設定ダイアログボックスの"SQL"ページにおいても設定可能です。 -: *transporter* オブジェクトが*transporter.send( )* または *SMTP\_transporter.checkConnection( )* を通して処理される際、4D とSMTP サーバー間の通信の記録を開始、あるいは停止します。デフォルトでは、値は0です(通信は記録されない)。このログが有効化されると、データベースのLogs フォルダ内にログファイルが作成されます。ファイル名は4DSMTPLog\_X.txt で、この*X* はログのシーケンシャルな番号です。4DSMTPLog のファイルのサイズが10MB に達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャルな番号は数字がインクリメントされます。同じ名前のファイルが既に存在していた場合、そのファイルは直接上書きされます。*value* 引数を使用してシーケンスの開始番号を設定することができます。デフォルトでは全てのファイルが残されますが、Circular log limitation パラメータを使用することで保存しておくファイルの数を管理することができます。 +**とりうる値**: 0 から 65535 -4DSMTPLog\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 +**デフォルト値**: 19812 -### Current process debug log recording (111) -**スコープ:** 4D アプリケーション +### SSL cipher list (64) -**異なるセッション間で値を保持:** No +**スコープ**: 4Dアプリケーション **2セッション間で設定を保持**: No -**詳細**: **カレントプロセスにおける**プログラミングイベントの、別のログファイルへのシーケンシャルな記録を開始または停止します。このログはDebug log recording (セレクター34)に似ていますが、こちらはカレントプロセスにのみを対象とします。ログファイル名はアルファベットの"p"とプロセス番号を含みます: 4DDebugLog\[\_p*N*_*n*].txt ここでのNはプロセスの固有のIDです。 +**とりうる値**: コロンで区切られた一連の文字列 (例 "ECDHE-RSA-AES128-....") -このフォーマットと*4DDebugLog* ファイルの使用についての詳細な情報については、デザインリファレンスの*ログファイルの詳細* を参照してください。 +**説明**: 安全なプロトコルのために4Dが使用する暗号リストです。このリストを使用して4Dによって実装された暗号化アルゴリズムの順位を変更することができます。例えば、以下の文字列を *value* 引数に渡す事ができます:"HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". 暗号リストのシンタックスの完全な詳細については、*OpenSSL の暗号ページ* *のサイト* を参照して下さい。 -**注:** このセレクターはデバッグ目的のためだけに提供されており、使用する際には注意が必要です。特に、アプリケーションのパフォーマンスに影響しうるため、製品で使用してはいけません。 Debug log recording および Current process debug log recording セレクターは同時に併用することができ、その場合にはメインのログファイルにはカレントプロセスのアクションは記録されません。 +この設定はメインWebサーバー(ただしWebサーバーオブジェクトは除く)、SQLサーバー、クライアント/サーバー接続、そしてHTTPクライアントと、安全なプロトコルを使用する4D コマンドの全てに対して適用されます。この変更は一時的な物です(つまり異なるセッション間で設定は保持されません)。 +暗号リストが変更された場合、新しい設定が使用されるようにするためには関係するサーバーを再起動する必要があります。 +暗号リストを (SLIファイルに恒久的に格納された) デフォルト値に再設定するには、*value*引数に空の文字列 ("") を渡して [SET DATABASE PARAMETER](set-database-parameter.md) コマンドを呼び出します。 -### Is current database a project (112) +**注**: [Get database parameter](get-database-parameter.md) コマンドで暗号リストはオプションの *stringValue* 引数に返され、戻り値は常に0となります。 -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 -: 4D アプリケーション** -詳細**: カレントのデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 +### Table sequence number (31) +**スコープ**:4D アプリケーション -### Is host database a project (113) + **2セッション間で設定を保持**: Yes -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 + **とりうる値**: 任意の倍長整数値 -: 4D アプリケーション** +**説明**: Command SET DATABASE PARAMETERこのセレクタは、引数に渡したテーブルのレコードの、カレントのユニーク番号を取得あるいは設定するために使用します。“カレントの数値”とは“最後に使用された数値”を意味します。SET DATABASE PARAMETERコマンドを使用してこの値を変更すると、渡された値+1の番号を使用して次のレコードが作成されます。この新しい番号は、[Sequence number](sequence-number.md "Sequence number")コマンドによって返される、さらにはストラクチャエディタやSQLで自動インクリメントが設定されたフィールドに返される番号です。 -詳細**: ホストデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 +デフォルトで、この固有の番号は4Dが設定し、レコードの作成順に対応します。詳細は[Sequence number](sequence-number.md "Sequence number")コマンドのドキュメントを参照してください。 -### Libldap version (114) -**スコープ**: カレント4D マシン -**異なるセッション間で値を保持**: No -**詳細**: カレントマシン上の4D アプリケーション内のLDAP ライブラリーのバージョン番号を返します(読み出し専用) +### TCPUDP log recording (131) +**Scope:** 4D application. +**Kept between two sessions:** No. -### Libsasl version (115) +**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. -**スコープ**: カレント4D マシン** +**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -異なるセッション間で値を保持**: No** -詳細**: カレントマシン上の4D アプリケーション内のSASL ライブラリーのバージョン番号を返します(読み出し専用) +### Times inside objects (109) -### POP3 Log (116) +スコープ: 4D ローカル、4D Server (全てのプロセス) -**Thread-safe** : Yes + 異なるセッション間で値を保持: No -**スコープ:** 4D ローカル、4D Server + **取りうる値**: Times in seconds (0) (デフォルト)、 Times in milliseconds (1) -**2セッション間で設定を保持:** No +**詳細**: オブジェクトプロパティ内およびコレクション要素内で時間値がどのように変換され保存されるかを定義するとともに、JSONおよびWeb エリアへの読込/書出の方法を定義します。デフォルトでは、4D v17 以降、時間はオブジェクト内では秒数として変換・保管されます。 -**取りうる値:** 0 または1からXまでの数字(0= 記録を取らない、1からX=シーケンシャルな数字、ファイル名に追加される)。デフォルトでは、値は0です(POP3通信は記録されません)。 +以前のリリースでは、時間値はこれらのコンテキストにおいてはミリ秒数として変換・保管されていました。このセレクターを使用することで、必要であれば以前の設定に戻すことで、移行がスムーズになります。 -**説明**: トランスポーターオブジェクトが*POP3\_transporter.getMail( )* または *POP3\_transporter.checkConnection( )*で処理されたとき、4D とPOP3 サーバー間の通信の記録を開始または停止します。デフォルトでは値は0 です(通信は記録されません)。この機構か有効化されている時、データベースのLogs フォルダにログファイルが作成されます。ファイル名は4DPOP3Log\_X.txt という形式となっており、X はログのシーケンシャル番号です。4DPOP3Log のサイズが10MBに到達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャル番号は1つ増加します。同じ名前のファイルが既に存在する場合、それは上書きされます。シーケンシャル番号の開始番号を、value 引数を用いて指定することができます。デフォルトでは全てのファイルが保持されますが、Circular log limitation 定数を使用することで残すファイルの数を制限することもできます。 +**注**: ORDA メソッドとSQL エンジンはこの設定を無視し、時間値は常に秒数であるとみなします。 -4DPOP3Log\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -### Is host database writable (117) +### Tips delay (102) -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでしか使用できず、この値を設定することはできません。 +**スコープ:** 4Dアプリケーション -**スコープ**: 4D アプリケーション +**異なるセッション間で値を保持:** No -**詳細**: ホストのプロジェクトファイル/ストラクチャーが書き込み可能なら1を、読み出し専用なら0を返します。 +**取りうる値:** 倍調整数 >= 0 (ティック) +**詳細:** マウスカーソルがヘルプメッセージが関連づけられたオブジェクト内で停止してからTipsが表示されるまでの遅延時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は45ティック(=0.75秒)です。 -### IMAP Log (119) -**Thread-safe** : Yes -**スコープ**: 4D ローカル、4D Server +### Tips duration (103) -**異なるセッション間で値を保持**: No +**スコープ:** 4Dアプリケーション -**取りうる値**: 0 または1 から X(0= 記録しない、1からX= シーケンシャル番号、ファイル名に追加される)。デフォルトでは値は0 です(IMAP の交換は記録されない)。 +**異なるセッション間で値を保持:** No -**詳細**: transporter オブジェクトが*IMAP\_transporter.getMail( )* または *IMAP\_transporter.checkConnection( )* で処理される際の4D とIMAP サーバーとの間の通信記録を開始または停止します。デフォルトでは、値は0です(通信は記録されません)。この機構が有効化されている場合、ログファイルがデータベースのLogフォルダに作成されます。ファイルは4DIMAPLog\_X.txt と名前がつけられ、このX はログのシーケンシャル番号です。ファイルのサイズが10MB に到達すると、ファイルは閉じられ、インクリメントされたシーケンシャル番号を持った新しいファイルが生成されます。同じ名前のファイルが既に存在する場合、それは直接置き換えられます。value 引数を使用するとシーケンス番号の開始番号を設定することができます。デフォルトで、全てのファイルは保持されますが、Circular log limitation 引数を使用することで保持するファイルの数をコントロールすることができます。 +**取りうる値:** 倍調整数 >= 60 (ティック) -ファイルの詳細については、*ログファイルの詳細* の章を参照してください。 +**詳細:** Tipsの最大表示時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は720ティック(=12秒)です。 -### Libzip version (120) -**スコープ:** カレントの4D マシン** +### Tips enabled (101) -2セッション間で設定を保持:** n/a** +**スコープ:** 4D アプリケーション -説明:** カレントマシン上の4D アプリケーションのlibzip ライブラリのバージョン番号を返します(読み出し専用) +**異なるセッション間で値を保持:** No +**取りうる値:** 0 = tips無効化、1 = tips有効化(デフォルト) +**詳細:** 4DアプリケーションのTipsのカレントの表示状態を設定あるいは取得します。デフォルトでは、Tipsは有効化されています。 -### Pause logging (121) +この引数は全ての4DTipsに影響するという点に注意してください。つまり、フォームヘルプメッセージとデザインモードのエディターTipsに影響します。 -**Thread-safe** : Yes -**スコープ**: 4D アプリケーション** -異なるセッション間で値を設定を保持**: No** -取り得る値**: 0 (ログを再開)、1 (ログを停止) +### Use legacy network layer (87) -このセレクターを使用するとアプリケーション上で開始された全てのログオペレーションを停止/再開させることができます(ただしORDAログは除く)。この機能は4Dアプリケーションのタスクを一時的に軽くしたり、あるいはログオペレーションのスケジュールを設定することに有用です。 +**スコープ**: 4D ローカル、4D Server +**異なるセッション間で値を保持**: Yes -### TCPUDP log recording (131) +**詳細:** クライアント/サーバー間の通信のネットワークレイヤーのカレントの状態を設定・取得します。旧式ネットワークレイヤーは4D v14 R5以降廃止予定となり、お使いのアプリケーションにおいて*ServerNet* ネットワークレイヤーへと積極的に置き換えられてい行くべきです。*ServerNet* は、将来のネットワークの進化の恩恵を受けるために、今後の4Dのリリースの中で必須要項となって行きます。互換性の理由から、既存のアプリケーションの速やかな移行をサポートするために、旧式のネットワークレイヤーは引き続きサポートされます(v14 R5以前のリリースから変換されたアプリケーションにおいてはデフォルトで旧式ネットワークレイヤーが使用されます)。クライアント/サーバー通信において旧式ネットワークレイヤーを使用するためにはこの引数に1を渡します(*ServerNet* が無効化されます)。0を渡すと旧式ネットワークレイヤーが無効化されます(そして*ServerNet* が使用されます)。 -**Scope:** 4D application. +このプロパティはデータベース設定の*互換性ページ* の"旧式ネットワークレイヤー"オプションを使用することによっても設定できます(*ネットワーク/クライアント-サーバー通信*参照)。この章では、移行戦略についての議論を読むこともできます。*ServerNet* の速やかな有効化が推奨されます。 -**Kept between two sessions:** No. +この引数が有効になるためには、アプリケーションを再起動する必要があります。OS X版の4D Server 64-bit 版においては*ServerNet* のみをサポートするため、このオプションはご利用いただけません(常に0を返します)。 -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**取り得る値:** 0 または 1 (0 = 旧式ネットワークレイヤーを使用しない、1 = 旧式ネットワークレイヤーを使用する) -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. +**デフォルトの値:** 4D v14 R5以降で作成されたデータベースにおいては0、4D v14 R4以前のものから変換されたデータベースにおいては1 -### RDP optimization (133) -**Scope:** 4D application. +### User param value (108) -**Kept between two sessions:** No. +**スコープ:** 4D スタンドアロン、4D Server -**Possible values:** `0`: Disabled (default), `1`: Enabled. +**2セッション間で値を保持:** No + +**取りうる値**: 任意のカスタムの文字列 + +**説明:** 4D アプリケーションが再起動される際に、ひとつのセッションから次のセッションへと渡されるカスタムの文字列です。このセレクターは異なる引数を使用してアプリケーションを再起動する必要がある、自動化されたユニットテストなどのコンテキストで有用です。[SET DATABASE PARAMETER](set-database-parameter.md) で使用された場合、手動で、あるいは[OPEN DATABASE](open-database.md)(\*)、 [OPEN DATA FILE](open-data-file.md)、 または [RESTART 4D](restart-4d.md) コマンドを使用して4D が再起動したあとに開かれるデータベースで利用可能となる新しい値を定義します。[Get database parameter](get-database-parameter.md) で使用された場合、コマンドライン(*コマンドラインインターフェース* 参照)、4DLink ファイル(*4DLinkファイルを使用する* 参照)、あるいは前のセッションでの[SET DATABASE PARAMETER](set-database-parameter.md) への呼び出しなどを使用して定義された、現在利用可能なユーザー引数値を取得します。(\*) [SET DATABASE PARAMETER](set-database-parameter.md)がUser param value を設定した後に、[OPEN DATABASE](open-database.md)にuser-param xml 属性を含む.4DLink ファイル渡して呼び出した場合、4D は[SET DATABASE PARAMETER](set-database-parameter.md)で提供された引数のみを考慮します。 -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md index a65c682040218a..cd85497e741d91 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/set-database-parameter.md @@ -21,6 +21,36 @@ displayed_sidebar: docs *selector*には、変更するデータベースのパラメーターを指定します。4Dは*Database Parameters*テーマに定義済の下記のような定数があります。次の表は、各定数とその有効範囲、またその設定が2つの異なるセッションで保持されるかを示しています: +### 4D Remote mode timeout (14) + +**スコープ**(旧式ネットワークレイヤーのみ): *value* が正数の場合4D アプリケーション + +**2セッション間で設定を保持**: *value* が正数の場合Yes + +**説明**: 非常に特殊な場合においてのみ使用されるべき定数です。この引数を使用して、4D Serverに接続したリモートの4Dマシンが参照するタイムアウト値を設定できます。リモートモードの4Dが使用するデフォルトのタイムアウト値は、リモートマシン上の環境設定の“クライアント-サーバ/設定”ページで設定されます。 + +4D Remote Mode Timeout セレクターは旧式ネットワークレイヤーを使用している場合のみ考慮されます。*ServerNet* レイヤーが有効化されている場合には無視されます。この設定は4D Server Timeout (13) によって完全に管理されています。 + + + + +### 4D Server log recording (28) + +**Thread-safe** : Yes + +**Scope**: 4D Server, 4D リモート + +**2セッション間で設定を保持**: No** + +とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 + +: 4D Serverが受け取る標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 + +サーバマシンが受信した各リクエストをログファイルに記録するよう、4D Serverに指示することができます。このメカニズムが有効になると、データベースストラクチャと同じ階層に2つのログファイルが作成されます。サーバー側では*4DRequestsLogServer\_X*.txt および *4DRequestsLog\_ProcessInfoServer\_X*.txt 、リモート側では*4DRequestsLog\_X*.txt および *4DRequestsLog\_ProcessInfo\_X*.txt on the と名付けられたファイルが作成されます(Xはログのシーケンシャル番号)。ファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、*value*引数を使用して指定できます。このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、ユーザ、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestLog ファイルのより詳細な情報については、*ログファイルの詳細* の章を参照してください。 + + + + ### 4D Server timeout (13) **スコープ**: *value* が正数なら4Dアプリケーション @@ -41,53 +71,76 @@ displayed_sidebar: docs -### 4D Remote mode timeout (14) -**スコープ**(旧式ネットワークレイヤーのみ): *value* が正数の場合4D アプリケーション +### Auto synchro resources folder (48) -**2セッション間で設定を保持**: *value* が正数の場合Yes +**スコープ**:4D リモートマシン -**説明**: 非常に特殊な場合においてのみ使用されるべき定数です。この引数を使用して、4D Serverに接続したリモートの4Dマシンが参照するタイムアウト値を設定できます。リモートモードの4Dが使用するデフォルトのタイムアウト値は、リモートマシン上の環境設定の“クライアント-サーバ/設定”ページで設定されます。 + **2セッション間で設定を保持**: No -4D Remote Mode Timeout セレクターは旧式ネットワークレイヤーを使用している場合のみ考慮されます。*ServerNet* レイヤーが有効化されている場合には無視されます。この設定は4D Server Timeout (13) によって完全に管理されています。 + **とりうる値**: 0 (同期しない), 1 (自動同期) または2 (確認する). + +**説明**: このコマンドを実行する4DクライアントマシンのResourcesフォルダの動的な同期モード。 +サーバ上のResourcesフォルダの内容が更新されたり、(リソースエクスプローラや SET DATABASE LOCALIZATION コマンドで) ユーザが同期をリクエストすると、サーバは接続されたユーザに通知を行います。 +クライアント側では3つの同期モードを選択できます。Auto Synchro Resources Folderセレクタはカレントセッションでクライアントマシンが使用するモードを指定できます: -### Port ID (15) +0 (デフォルト値): 動的な同期を行わない (同期リクエストは無視される)1: 自動の動的同期2: クライアントマシンにダイアログを表示し、同期の受け入れ回避を確認するアプリケーションの環境設定で、同期モードをグローバルに設定できます。 -**スコープ**: 4D ローカル, 4D Server -**2セッション間で設定を保持**: No -**説明**: Command SET DATABASE この引数を使用して、ローカルモードの4Dおよび4D Serverによる4D Webサーバが使用するTCPポートをオンザフライで変更することができます。デフォルト値は80で、この値は環境設定ダイアログボックスの“Web/設定”ページで設定できます。*TCP Port Numbers*テーマの定数を*value*引数に使用できます。 +### Cache flush periodicity (95) +**Thread-safe** : Yes -Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Webサーバで役立ちます(この場合、デザインモードへのアクセス手段がありません)。TCPポートIDに関する詳細は*Webサーバー設定*を参照してください。 +**スコープ**: 4Dローカル、4D Server +**異なるセッション間で値を保持**: No -### Character set (17) +**取りうる値**: 倍長整数 > 1 (秒) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +**詳細**: 秒単位で指定された、キャッシュ保存頻度を取得あるいは設定します。この値を変更すると、データベース設定の[XML DECODE](xml-decode.md)内の**キャッシュを保存: X秒毎**オプションをセッション中の間上書きします(これはデータベース設定には保存されません)。 -### Max concurrent Web processes (18) + +### Cache unload minimum size (66) + +**スコープ**:4Dアプリケーション + + **2セッション間で設定を保持**: No + + **とりうる値**: 1より大きい正の倍長整数 + +**説明**: エンジンがオブジェクトをデータベースキャッシュに配置する際に空き空間を作成する必要が出た場合、データベースキャッシュからリリースするメモリの最小サイズ (バイト単位)。 + +このセレクタの目的はキャッシュからデータをリリースする時間を減らし、よりパフォーマンスを得ることにあります。キャッシュのサイズやデータベース中で処理されるデータのブロックサイズに応じてこの値を変更できます。 + +このセレクタが使用されないとデフォルトで、4Dは空間が必要になった時最低10%のキャッシュをアンロードします。 + + + + +### Character set (17) **説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### Client port ID (22) -**スコープ**: すべての4Dリモートマシン +### Circular log limitation (90) - **2セッション間で設定を保持**: Yes +**Thread-safe** : Yes - **とりうる値**: セレクタ15参照 +**スコープ**: 4Dローカル、4D Server **異なるセッション間で値を保持**: No** + +取りうる値**: 任意の整数値、0 = 全てのログを保持** + +詳細**: 各タイプのロゴのローテーションに保存するファイル数の最大値。デフォルトでは、直近の50 ファイルが保持されます。*X* という値を渡した場合、直近の*X* 個のファイルのみが保持され、最も古いファイルは新しいファイルが作成されたときに自動的に削除されます。この設定は全てのログファイルに対して適用されます:リクエストログ(セレクター28と45)、デバッグログ(セレクター34)、イベントログ(セレクター79)、Web ログ([WEB SET OPTION](web-set-option.md)コマンドのセレクター29と84)、などです。 -**説明**: このセレクタを使用して、Webサーバとして使用する4Dクライアントマシンの動作パラメタを指定できます。これらのセレクタを用いて指定された値は、 Webサーバとして使用するすべての4D Clientマシンに対して適用されます。特定の4D Clientマシンに対してのみ値を指定したい場合には、4D Clientの環境設定ダイアログボックスを使用してください。 @@ -103,6 +156,43 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web + +### Client HTTPS port ID (40) + +**スコープ**:すべての4Dリモートマシン + + **2セッション間で設定を保持**: Yes + + **とりうる値**: 0 ~ 65535 + +**説明**: このセレクタは、クライアントマシンのWebサーバがSSLによるセキュアな接続(HTTPSプロトコル)で使用するTCP ポート番号を、プログラムで変更するために使用できます。デフォルトの値は443(標準ポート番号)です。 + +このセレクタの動作はセレクタ39と同じですが、Web サーバとして使用されるすべてのクライアントマシンに適用されます。特定のクライアントマシンの設定だけを変更するのであれば、4Dリモートの環境設定ダイアログ画面を使用してください。 + + + + +### Client log recording (45) + +**スコープ**: リモート4Dマシン + +2セッション間で設定を保持: No + +**とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 + +**説明**: コマンドを実行した4Dクライアントマシンが実行した標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 + + + +クライアントマシンが実行したリクエストをログファイルに記録するよう、4Dに指示することができます。このメカニズムが有効になると、クライアントマシンのデータベースのローカルフォルダ内、Logsサブフォルダに2つのログファイルが作成されます。ファイルには"4DRequestsLog\_X.txt"と"4DRequestsLog\_ProcessInfo\_X.txt"(Xはログのシーケンシャル番号)の名前が付けられます。4DRequestsLogファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、value引数を使用して指定できます。 + + + +このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestsLogについての詳細な情報については、*ログファイルの詳細* の章を参照してください。 + + + + ### Client max concurrent Web proc (25) **スコープ**: すべての4Dリモートマシン @@ -115,25 +205,42 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web -### Maximum Web requests size (27) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +### Client port ID (22) +**スコープ**: すべての4Dリモートマシン + **2セッション間で設定を保持**: Yes -### 4D Server log recording (28) + **とりうる値**: セレクタ15参照 -**Thread-safe** : Yes +**説明**: このセレクタを使用して、Webサーバとして使用する4Dクライアントマシンの動作パラメタを指定できます。これらのセレクタを用いて指定された値は、 Webサーバとして使用するすべての4D Clientマシンに対して適用されます。特定の4D Clientマシンに対してのみ値を指定したい場合には、4D Clientの環境設定ダイアログボックスを使用してください。 -**Scope**: 4D Server, 4D リモート -**2セッション間で設定を保持**: No** -とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 -: 4D Serverが受け取る標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 +### Client Server port ID (35) + +**スコープ**:データベース + + **2セッション間で設定を保持**: Yes + + **とりうる値**: 0~65535 + +**説明**: 4D Server が(4D Client に対して)データベースを公開するために使用されるTCPポート番号をプログラムで変更するために使用します。デフォルト値は19813 です。 + + + +この値を変更すれば、TCPプロトコルを使用して、複数の4D クライアント/サーバアプリケーションを同じマシンで同時に使用することができます。その場合、それぞれのアプリケーションごとに異なるポート番号を設定します。 + + + +公開ポート番号は、ストラクチャファイルに記録されています。ローカルモードの4Dで設定することもできますが、クライアント/サーバ環境でのみ考慮されます。 + + + +値を変更した場合、新しい設定が有効になるためには、アプリケーションを再起動する必要があります。 -サーバマシンが受信した各リクエストをログファイルに記録するよう、4D Serverに指示することができます。このメカニズムが有効になると、データベースストラクチャと同じ階層に2つのログファイルが作成されます。サーバー側では*4DRequestsLogServer\_X*.txt および *4DRequestsLog\_ProcessInfoServer\_X*.txt 、リモート側では*4DRequestsLog\_X*.txt および *4DRequestsLog\_ProcessInfo\_X*.txt on the と名付けられたファイルが作成されます(Xはログのシーケンシャル番号)。ファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、*value*引数を使用して指定できます。このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、ユーザ、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestLog ファイルのより詳細な情報については、*ログファイルの詳細* の章を参照してください。 @@ -153,19 +260,36 @@ Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Web -### Table sequence number (31) -**スコープ**:4D アプリケーション +### Current process debug log recording (111) - **2セッション間で設定を保持**: Yes +**スコープ:** 4D アプリケーション - **とりうる値**: 任意の倍長整数値 +**異なるセッション間で値を保持:** No -**説明**: Command SET DATABASE PARAMETERこのセレクタは、引数に渡したテーブルのレコードの、カレントのユニーク番号を取得あるいは設定するために使用します。“カレントの数値”とは“最後に使用された数値”を意味します。SET DATABASE PARAMETERコマンドを使用してこの値を変更すると、渡された値+1の番号を使用して次のレコードが作成されます。この新しい番号は、[Sequence number](sequence-number.md "Sequence number")コマンドによって返される、さらにはストラクチャエディタやSQLで自動インクリメントが設定されたフィールドに返される番号です。 +**詳細**: **カレントプロセスにおける**プログラミングイベントの、別のログファイルへのシーケンシャルな記録を開始または停止します。このログはDebug log recording (セレクター34)に似ていますが、こちらはカレントプロセスにのみを対象とします。ログファイル名はアルファベットの"p"とプロセス番号を含みます: 4DDebugLog\[\_p*N*_*n*].txt ここでのNはプロセスの固有のIDです。 + +このフォーマットと*4DDebugLog* ファイルの使用についての詳細な情報については、デザインリファレンスの*ログファイルの詳細* を参照してください。 +**注:** このセレクターはデバッグ目的のためだけに提供されており、使用する際には注意が必要です。特に、アプリケーションのパフォーマンスに影響しうるため、製品で使用してはいけません。 Debug log recording および Current process debug log recording セレクターは同時に併用することができ、その場合にはメインのログファイルにはカレントプロセスのアクションは記録されません。 -デフォルトで、この固有の番号は4Dが設定し、レコードの作成順に対応します。詳細は[Sequence number](sequence-number.md "Sequence number")コマンドのドキュメントを参照してください。 + + +### Dates inside objects (85) + +スコープ: カレントプロセス + + 2セッション間で設定を保持: No + + **取り得る値**: String type without time zone (0), String type with time zone (1), Date type (2) (デフォルト) + +**説明**: 日付がオブジェクトにどのように保存されるかを定義するとともに、どのようにJSON に読み込み/書き出しされるかも定義します。 + +セレクターの値がDate type (4D v17以降で作成されたデータベースにおけるデフォルト)のとき、4D 日付はオブジェクト内で日付型として保存され、ローカルの日付設定に準拠します。JSON フォーマットに変換された時、日付属性は、時間を含まない文字列へと変換されます(**注:** この設定は、データベース設定のにある"オブジェクト内ではISO日付フォーマットの代わりに日付型を使用"オプションによって設定することができます)。 + +セレクターにを渡した場合、4D 日付はローカルなタイムゾーンを考慮に入れつつISO 文字列に変換されます。例えば、例えば、23/08/2013という日付の変 換を、フランスのサマータイム(GMT+2)にて実行した場合、JSONフォーマットの"2013-08-22T22:00:00Z"という結 果が返されます。この原理はJavaScriptの標準のオペレーションに従うものです。これは異なるタイムゾーンにいる人にJSON日付の値を 送る場合には、エラーの原因となりかねません。例えば、[Selection to JSON](selection-to-json.md)を使ってフランスでエクスポートされたテーブルを[JSON TO SELECTION](json-to-selection.md) を使用してアメリカで再インポートする、というような場合です。日付の値は、デフォルトではそれぞれのタイムゾーンにおいて再変換 されるため、データベース内に保存された値は異なってしまいます。こういった場合には、このセレクターにString type without time zoneを渡す事によって、タイムゾーンを考慮しないよ うに日付の変換モードを変更することができます。すると、23/08/2013という日付を変換した場合に は、"2013-08-23T00:00:00Z"という値を返すようになります。 + @@ -217,486 +341,431 @@ SET DATABASE PARAMETER (34;0) // ファイルを無効化 -### Client Server port ID (35) -**スコープ**:データベース +### Diagnostic log level (86) - **2セッション間で設定を保持**: Yes +**Thread-safe** : Yes - **とりうる値**: 0~65535 +**スコープ:** 4D アプリケーション** -**説明**: 4D Server が(4D Client に対して)データベースを公開するために使用されるTCPポート番号をプログラムで変更するために使用します。デフォルト値は19813 です。 +** **異なるセッション間で設定を保持:** No** +** **説明:** 診断ログが有効化された際に、そこに含まれるメッセージのレベル(Diagnostic log recording セレクターを参照)。各レベルは診断メッセージのカテゴリを指定し、それより重要なカテゴリのメッセージも自動的に含まれます。カテゴリの詳細については、*developer.4d.com* 上の*Diagnostic log levels* の章を参照してください。 + **取りうる値:** 以下の定数のいづれか(デフォルトは Log info ): Log trace: ERROR、WARN、INFO、DEBUG、TRACE を有効化します(最も詳細なレベル) Log debug: ERROR、WARN、INFO、DEBUG を有効化します Log info: ERROR、WARN、INFO を有効化します(デフォルト) Log warn: ERROR、WARN を有効化します Log error: ERROR を有効化します(最も簡略なレベル) -この値を変更すれば、TCPプロトコルを使用して、複数の4D クライアント/サーバアプリケーションを同じマシンで同時に使用することができます。その場合、それぞれのアプリケーションごとに異なるポート番号を設定します。 -公開ポート番号は、ストラクチャファイルに記録されています。ローカルモードの4Dで設定することもできますが、クライアント/サーバ環境でのみ考慮されます。 +### Diagnostic log recording (79) +**Thread-safe** : Yes +**スコープ**: 4Dアプリケーション -値を変更した場合、新しい設定が有効になるためには、アプリケーションを再起動する必要があります。 +2セッション間で設定を保持: No +取りうる値: 0 または 1 (0 = 記録しない, 1 = 記録する) +: 4D診断ファイルの記録を開始または停止する。デフォルトの値は0(記録しない)です。 -### HTTPS Port ID (39) +4Dは診断ファイルの中に内部的なアプリケーション処理に関連するイベントを継続的に記録することができます。このファイルに含まれる情報は4Dアプリケーション開発のために使用され、4D社の技術サポート担当により解析されます。このセレクターに1を渡すと、データベースの**Logs** フォルダ内に診断ファイルが自動的に作成されます(またはすでに存在する場合には開かれます)。ファイルには*4DDiagnosticLog\_X*.txt (あるいはサーバー側で生成された場合には *4DDiagnosticLogServer\_X*.txt) という名前が付けられます。このファイルのサイズが10MBに達するとそのファイルは閉じられ、DatabaseName\_N.txtが生成されます (Nは連番)。 -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +[LOG EVENT](log-event.md)コマンドを使用してカスタム情報をこのファイルに書き込むこともできます。 -### Client HTTPS port ID (40) -**スコープ**:すべての4Dリモートマシン +### Direct2D get active status (74) - **2セッション間で設定を保持**: Yes +**注:** このセレクターは[Get database parameter](get-database-parameter.md)コマンドでのみ使用することができ、設定することはできません。 - **とりうる値**: 0 ~ 65535 +説明: WindowsにおいてDirect2Dのアクティブな実装を返します。 -**説明**: このセレクタは、クライアントマシンのWebサーバがSSLによるセキュアな接続(HTTPSプロトコル)で使用するTCP ポート番号を、プログラムで変更するために使用できます。デフォルトの値は443(標準ポート番号)です。 +取りうる値: 0, 1, 2, 3, 4 または 5 (セレクター69の値参照)。返される値はDirect2Dが利用可能かどうか、およびハードウェア、OSによってサポートされるDirec2Dの品質に基づきます。 -このセレクタの動作はセレクタ39と同じですが、Web サーバとして使用されるすべてのクライアントマシンに適用されます。特定のクライアントマシンの設定だけを変更するのであれば、4Dリモートの環境設定ダイアログ画面を使用してください。 +例えば以下のコードを実行した場合、 -### SQL Autocommit (43) + SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) -**スコープ**:データベース - **2セッション間で設定を保持**: Yes - **とりうる値**: 0 (無効) または 1 (有効) +- Windows 7以降、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは3に設定されます (ソフトウェアコンテキスト)。 -**説明**: SQLの自動コミットモードを有効または無効にするために使用します。デフォルトは 0 (無効モード) です。 +- Windows Vistaでは、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは0に設定されます (Direct2D無効)。 +- Windows XPでは、$modeは常に0です (Direct2D非互換)。 -自動コミットモードは、データベースの参照整合性を強化するために使用されます。このモードが有効の時、すべての*SELECT*, INSERT, *UPDATE* そして *DELETE* (SIUD) クエリは、これらがトランザクション内で実行されていない場合、自動でアドホックなトランザクションに含められます。このモードはデータベースの環境設定でも設定できます。 +### Direct2D status (69) -### SQL Engine case sensitivity (44) +**スコープ*: 4Dアプリケーション* -**スコープ**: データベース** + *(Direct2D Software) のみが許可されます。* -2セッション間で設定を保持**: Yes** -とりうる値**: 0 (大文字小文字を区別しない) または 1 (区別する) -: SQLエンジンが文字列比較を行う際に、大文字と小文字の違いを考慮させるかどうかを設定します。 デフォルトで値は1 (大文字小文字を区別する) です。SQLエンジンは文字列比較 (並び替えやクエリ) の際に大文字と小文字とアクセント付き文字を異なる文字として扱います。例えば“ABC”= “ABC”ですが“ABC” # “Abc”であり、"abc" # "âbc"です。SQLエンジンと4Dエンジンの動作をそろえたいなど特定の場合では、大文字と小文字を区別しない文字列比較 (“ABC”=“Abc"="âbc") を使用できます。 -**警告:* このオプションはデータベースのストラクチャーファイルと全てのプロセスを変更するため、パフォーマンス上の観点から、データベースのスタートアップ時にのみ設定することが強く推奨されます。* +### HTTP compression level (50) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -このオプションはアプリケーション環境設定の[CALL SUBFORM CONTAINER](call-subform-container.md) で設定できます。 +### HTTP compression threshold (51) -### Client log recording (45) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -**スコープ**: リモート4Dマシン -2セッション間で設定を保持: No -**とりうる値**: 0 または 1 から X (0 = 記録しない, 1 から X = ファイル名に付加するシーケンス値)。 -**説明**: コマンドを実行した4Dクライアントマシンが実行した標準的なリクエスト(Webリクエストを除く)の記録を開始または停止します。デフォルト値は0(リクエストを記録しない)です。 +### HTTPS Port ID (39) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -クライアントマシンが実行したリクエストをログファイルに記録するよう、4Dに指示することができます。このメカニズムが有効になると、クライアントマシンのデータベースのローカルフォルダ内、Logsサブフォルダに2つのログファイルが作成されます。ファイルには"4DRequestsLog\_X.txt"と"4DRequestsLog\_ProcessInfo\_X.txt"(Xはログのシーケンシャル番号)の名前が付けられます。4DRequestsLogファイルサイズが10MBに達するとそのファイルは閉じられ、インクリメントしたシーケンス番号を使用して新しいファイルが作成されます。もし同じ名前のファイルが存在する場合は置き換えられます。シーケンシャル番号の開始番号を、value引数を使用して指定できます。 - - - -このテキストファイルにはそれぞれのリクエストに関する様々な情報(時間、プロセス番号、リクエストサイズ、処理時間など)がシンプルな表形式のフォーマットで保存されます。4DRequestsLogについての詳細な情報については、*ログファイルの詳細* の章を参照してください。 - - - -### Query by formula on server (46) - -**スコープ**: カレントテーブルおよびプロセス - **2セッション間で設定を保持**: No - **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) +### Idle connections timeout (54) -**説明**: 引数に渡された*table*に対して実行される[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの実行場所。 +**スコープ**: 値が負数でないなら4Dアプリケーション -クライアント/サーバモードでデータベースを使用するとき、フォーミュラを使用したクエリをサーバ上またはクライアント上で実行させることができます: +**2セッション間で設定を保持**: No -4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、これらのコマンドは、以前のバージョンの4Dと同様、クライアントマシン上で実行されます。変換されたデータベースでは、環境設定のアプリケーション/互換性ページで、これらのコマンドの実行場所をグローバルに変更できます。この実行場所の違いは、アプリケーションのパフォーマンス (通常サーバ上で実行したほうが早い) だけでなく、プログラミングにも影響します。実際フォーミュラの部品の値 (特にメソッドから呼ばれる変数) は、実行コンテキストにより異なります。このセレクタを使用して開発者は、アプリケーションの動作を適応させられます。 +**とりうる値**: 持続時間を秒で表す値。値は正数 (新規接続) または負数 (既存の接続)をとることができます。デフォルト値は20です。 -*value* 引数に0を渡すと、フォーミュラを使用するクエリの実行場所は、データベースの設定に基づきます: 4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、データベース環境設定に基づき、クライアントマシンまたはサーバマシンで実行されます。*value*に1または2を渡すと、これらのコマンドの実行場所をクライアントマシンまたはサーバマシンに強制できます。 +**説明**: この引数を使用して、4DデータベースエンジンとSQLエンジン両方への動きのない接続の最大時間 (タイムアウト) を設定できます。また*ServerNet* (新しいネットワークレイヤー)モードにおいては4Dアプリケーションサーバーへの接続のタイムアウトも設定します。 -例題2を参照してください。 -**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 +動作していない接続がこの制限時間に達すると、接続は自動でスタンバイ状態に置かれます。つまりクライアント/サーバセッションがフリーズされ、ネットワー クソケットが閉じられます。サーバー管理ウィンドウでは、ユーザープロセスの状態は"延期"と表示されます。この動作はユーザに対し完全に透過的です。スタンバイ状態の接続でリクエストが開始されると、ソケットが自動で再び開かれ、クライアント/サーバセッションが再び有効になります。 -### Order by formula on server (47) -**スコープ**:カレントテーブルおよびプロセス +この設定によりサーバのリソースを節約できます。スタンバイ状態の接続はソケットを 閉じ、サーバ上のプロセスを解放します。他方これにより、ファイアウォールがアイドルなソケットを閉じてしまうことに伴い接続が失われることを避けること ができます。このためには、アイドル接続のタイムアウト値はファイアウォールのタイムアウト値よりも小さくなくてはなりません。 - **2セッション間で設定を保持**: No - **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) -**説明**: 引数に渡されたtableに対して実行される[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドの実行場所。 +*value*に正数を渡すと、設定はすべてのプロセスのすべての新規接続に適用されます。負数を渡すと、設定はカレントプロセスの開かれた接続に適用されます。0を渡すと、アイドル接続のタイムアウトは行われません。 -クライアント/サーバモードでデータベースを使用するとき、[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドをサーバ上またはクライアント上で実行させることができます。このセレクタを使用して、このコマンドの実行場所 (サーバまたはクライアント) を指定できます。このモードはデータベース環境設定でも設定できます。詳細はセレクタ46、Query By Formula On Serverの説明を参照してください。 +このパラメターはクライアント側で設定する必要があります。通常この値を変更する必要はありません。 -**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュ ラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -### Auto synchro resources folder (48) +### IMAP Log (119) -**スコープ**:4D リモートマシン +**Thread-safe** : Yes - **2セッション間で設定を保持**: No +**スコープ**: 4D ローカル、4D Server - **とりうる値**: 0 (同期しない), 1 (自動同期) または2 (確認する). +**異なるセッション間で値を保持**: No -**説明**: このコマンドを実行する4DクライアントマシンのResourcesフォルダの動的な同期モード。 +**取りうる値**: 0 または1 から X(0= 記録しない、1からX= シーケンシャル番号、ファイル名に追加される)。デフォルトでは値は0 です(IMAP の交換は記録されない)。 -サーバ上のResourcesフォルダの内容が更新されたり、(リソースエクスプローラや SET DATABASE LOCALIZATION コマンドで) ユーザが同期をリクエストすると、サーバは接続されたユーザに通知を行います。 +**詳細**: transporter オブジェクトが*IMAP\_transporter.getMail( )* または *IMAP\_transporter.checkConnection( )* で処理される際の4D とIMAP サーバーとの間の通信記録を開始または停止します。デフォルトでは、値は0です(通信は記録されません)。この機構が有効化されている場合、ログファイルがデータベースのLogフォルダに作成されます。ファイルは4DIMAPLog\_X.txt と名前がつけられ、このX はログのシーケンシャル番号です。ファイルのサイズが10MB に到達すると、ファイルは閉じられ、インクリメントされたシーケンシャル番号を持った新しいファイルが生成されます。同じ名前のファイルが既に存在する場合、それは直接置き換えられます。value 引数を使用するとシーケンス番号の開始番号を設定することができます。デフォルトで、全てのファイルは保持されますが、Circular log limitation 引数を使用することで保持するファイルの数をコントロールすることができます。 -クライアント側では3つの同期モードを選択できます。Auto Synchro Resources Folderセレクタはカレントセッションでクライアントマシンが使用するモードを指定できます: +ファイルの詳細については、*ログファイルの詳細* の章を参照してください。 -0 (デフォルト値): 動的な同期を行わない (同期リクエストは無視される)1: 自動の動的同期2: クライアントマシンにダイアログを表示し、同期の受け入れ回避を確認するアプリケーションの環境設定で、同期モードをグローバルに設定できます。 -### Query by formula joins (49) +### Is current database a project (112) -**スコープ**:カレントプロセス +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 - **2セッション間で設定を保持**: No +: 4D アプリケーション** - **とりうる値**: 0 (データベース設定を使用), 1 (常に自動リレーションを使用) または 2 (可能ならSQL JOINを使用) +詳細**: カレントのデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 -**説明**: "SQL JOIN"の利用に関連する、[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")と[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの動作モード。 -4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、これらのコマンドはSQL JOINモデルに基づくJOINを実行します。このメカニズムを使用して、(以前のバージョンでは必要な条件だった) 自動リレーションで接続されていない他のテーブルに対して実行されたクエリに基づき、テーブルのセレクションを変更できます。 -QUERY BY FORMULA Joinsセレクタで、カレントプロセスの、フォーミュラによるクエリの動作モードを指定できます: -0: データベースの現在の設定を使用する (デフォルト値)。4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、"SQL JOIN"はフォーミュラによるクエリに対し常に有効です。変換されたデータベースでは、互換性のためデフォルトでこのメカニズムは有効になっていません。しかし環境設定で実装できます。1: 常に自動リレーションを使用 (= 以前のバージョンの4Dの動作)。このモードでは、他のテーブルに対して行われたクエリに基づきテーブルのセレクションを作成するためには、リレーションが必要です。4Dは"SQL JOIN"を行いません。2: 可能であればSQL JOINを使用 (= 4D v11 SQLのバージョン11.2以降で作成されたデータベースのデフォルト動作)。このモードでは、フォーミュラが適合する限り、4Dはフォーミュラによるクエリに"SQL JOIN"を使用します (2つの例外があります。[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") コマンドの説明を参照)。**Note:** 4Dのリモートモードにおいて、"SQL JOIN"はフォーミュラがサーバ上で実行されているときにのみ使用できます (レコードへのアクセスが必要なため)。フォーミュラの実行場所を設定するには、セレクタ46と47を参照してください。 +### Is host database a project (113) +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 +: 4D アプリケーション** -### HTTP compression level (50) +詳細**: ホストデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### HTTP compression threshold (51) +### Is host database writable (117) -**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 +**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでしか使用できず、この値を設定することはできません。 +**スコープ**: 4D アプリケーション +**詳細**: ホストのプロジェクトファイル/ストラクチャーが書き込み可能なら1を、読み出し専用なら0を返します。 -### Server base process stack size (53) -**スコープ**: 4D Server - 2セッション間で設定を保持: No - **とりうる値**:正の倍長整数 +### Libldap version (114) -**説明**: サーバ上のプリエンプティブシステムプロセス毎に割り当てるスタックのサイズ (バイト単位) です。デフォルトでの値はシステムによって決定されます。 +**スコープ**: カレント4D マシン -プ リエンプティブシステムプロセスはメインの4D クライアントプロセスを制御するためにロードされます。デフォルトでそれぞれのプリエンプティブプロセスに割り当てられるサイズはおよその場合最適なサイ ズですが、何百ものプロセスが作成されるようなケースではこのサイズが適切かどうか検討する必要が出てくるかもしれません。 +**異なるセッション間で値を保持**: No -データベースが実行する処理がそれを許す限り、最適化の目的でこのサイズを大幅に減らすことができます ( 例えばデータベースで大量のレコードの並び替えなどを行わない場合)。512 や256 KB でさえも設定可能です。スタックサイズを小さくしすぎることは致命的であり、4D Server の動作に害を及ぼすことになるので注意してください。このパラメタの設定は注意を持って行い、データベースの利用状況 (レコード数や行う処理など) を考慮しながら行わなければなりません。 +**詳細**: カレントマシン上の4D アプリケーション内のLDAP ライブラリーのバージョン番号を返します(読み出し専用) -このパラメタの設定を行うには、*On Server Startupデータベースメソッド* などにおいてサーバ上でコマンドが実行されなければなりません。 -### Idle connections timeout (54) +### Libsasl version (115) -**スコープ**: 値が負数でないなら4Dアプリケーション +**スコープ**: カレント4D マシン** -**2セッション間で設定を保持**: No +異なるセッション間で値を保持**: No** -**とりうる値**: 持続時間を秒で表す値。値は正数 (新規接続) または負数 (既存の接続)をとることができます。デフォルト値は20です。 +詳細**: カレントマシン上の4D アプリケーション内のSASL ライブラリーのバージョン番号を返します(読み出し専用) -**説明**: この引数を使用して、4DデータベースエンジンとSQLエンジン両方への動きのない接続の最大時間 (タイムアウト) を設定できます。また*ServerNet* (新しいネットワークレイヤー)モードにおいては4Dアプリケーションサーバーへの接続のタイムアウトも設定します。 -動作していない接続がこの制限時間に達すると、接続は自動でスタンバイ状態に置かれます。つまりクライアント/サーバセッションがフリーズされ、ネットワー クソケットが閉じられます。サーバー管理ウィンドウでは、ユーザープロセスの状態は"延期"と表示されます。この動作はユーザに対し完全に透過的です。スタンバイ状態の接続でリクエストが開始されると、ソケットが自動で再び開かれ、クライアント/サーバセッションが再び有効になります。 +### Libzip version (120) +**スコープ:** カレントの4D マシン** +2セッション間で設定を保持:** n/a** -この設定によりサーバのリソースを節約できます。スタンバイ状態の接続はソケットを 閉じ、サーバ上のプロセスを解放します。他方これにより、ファイアウォールがアイドルなソケットを閉じてしまうことに伴い接続が失われることを避けること ができます。このためには、アイドル接続のタイムアウト値はファイアウォールのタイムアウト値よりも小さくなくてはなりません。 +説明:** カレントマシン上の4D アプリケーションのlibzip ライブラリのバージョン番号を返します(読み出し専用) -*value*に正数を渡すと、設定はすべてのプロセスのすべての新規接続に適用されます。負数を渡すと、設定はカレントプロセスの開かれた接続に適用されます。0を渡すと、アイドル接続のタイムアウトは行われません。 +### Log command list (80) +**スコープ**: 4D アプリケーション -このパラメターはクライアント側で設定する必要があります。通常この値を変更する必要はありません。 +**2セッション間で設定を保持**: No +**取りうる値**: 記録する4Dコマンドの番号リスト。型は文字列で各コマンド番号をセミコロンで区切ります。"all"を渡すとすべてのコマンドが記録され、"" (空の文字列) を渡すとなにも記録されません。 +**説明**: デバッグファイルに記録する4Dコマンドのリスト (セレクター 34, Debug Log Recording参照)。デフォルトではすべての4Dコマンドが記録されます。 -### PHP interpreter IP address (55) +このセレクターを使用すれば、記録に残したい4Dコマンドを指定することで、デバッグファイルに保存される情報の量を制限することができます。例えば以下のようにコードを記述できます: -**スコープ**: 4D アプリケーション + SET DATABASE PARAMETER(Log command list;"277;341")   // QUERY および QUERY SELECTION コマンドのみを記録する -2セッション間で設定を保持: No** -値**: IPv4 型にフォーマットされた文字列(例 "127.0.0.1") あるいはIPv6 型にフォーマットされた文字列(例 "2001:0db8:0000:0000:0000:ff00:0042:8329") -: FastCGI を経由してPHPインタプリタと通信を行うために、4D がローカルで使用するIP アドレス。デフォルトで値は"127.0.0.1" です(IPv5 フォーマットのアドレスは4D v16 R4 以降でサポートされます)。このアドレスは4D が配置されているマシンに対応しなければなりません。このパラメタはデータベース設定を使用してすべてのマシン用にグローバルに設定できます。 -PHPインタプリタに関する詳細は*Design Reference*マニュアルを参照してください。 +### Max concurrent Web processes (18) +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -### PHP interpreter port (56) -**スコープ**:4D アプリケーション - **2セッション間で設定を保持**: No +### Maximum Web requests size (27) -**値**: 正の倍長整数値。デフォルト値は8002。 +**説明**: 廃止 (互換性のために保持)。HTTPサーバー設定を変更するためには[WEB SET OPTION](web-set-option.md)と[WEB GET OPTION](web-get-option.md)コマンドを使用してください。 -**説明**: 4DのPHPインタプリタが使用するTCPポート番号。データベース設定でこの値をすべてのマシン用にグローバルに変更できます。PHPインタープリタに関する詳細は*Design Reference* マニュアルを参照してください。 -### SSL cipher list (64) +### Min TLS version (105) -**スコープ**: 4Dアプリケーション **2セッション間で設定を保持**: No +**スコープ**: 4D Server、4D Web サーバーおよび4D SQL サーバー -**とりうる値**: コロンで区切られた一連の文字列 (例 "ECDHE-RSA-AES128-....") +**異なるセッション間で値を保持**: No -**説明**: 安全なプロトコルのために4Dが使用する暗号リストです。このリストを使用して4Dによって実装された暗号化アルゴリズムの順位を変更することができます。例えば、以下の文字列を *value* 引数に渡す事ができます:"HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". 暗号リストのシンタックスの完全な詳細については、*OpenSSL の暗号ページ* *のサイト* を参照して下さい。 +**詳細**: Transport Layer Security (TLS) レベルを指定するのに使用します。これはデータ暗号化とアプリケーションとサーバー間での認証を可能にします。これによって定義された最小値を下回るバージョンしかサポートしないクライアントからの接続は拒否されます。この設定はネットワークレイヤー全体に適用されます。変更した後にその新しい値を使用するためには、サーバーを再起動する必要があります。 -この設定はメインWebサーバー(ただしWebサーバーオブジェクトは除く)、SQLサーバー、クライアント/サーバー接続、そしてHTTPクライアントと、安全なプロトコルを使用する4D コマンドの全てに対して適用されます。この変更は一時的な物です(つまり異なるセッション間で設定は保持されません)。 +**デフォルトの値**: TLSv1\_3 -暗号リストが変更された場合、新しい設定が使用されるようにするためには関係するサーバーを再起動する必要があります。 +**取りうる値**: TLSv1\_2 (TLS 1.2、2008年に導入) TLSv1\_3 (TLS 1.3、2018年に導入) **注**: -暗号リストを (SLIファイルに恒久的に格納された) デフォルト値に再設定するには、*value*引数に空の文字列 ("") を渡して [SET DATABASE PARAMETER](set-database-parameter.md) コマンドを呼び出します。 +- 4D Internet Commands プラグインは異るネットワークレイヤーを使用するため、ここのセレクターは4DICのTLSバージョンには影響しません。 -**注**: [Get database parameter](get-database-parameter.md) コマンドで暗号リストはオプションの *stringValue* 引数に返され、戻り値は常に0となります。 +- TLS を旧式ネットワークレイヤーに適用しても反映されません。 -### Cache unload minimum size (66) -**スコープ**:4Dアプリケーション +### Number of formulas in cache (92) - **2セッション間で設定を保持**: No +**スコープ**: 4Dアプリケーション - **とりうる値**: 1より大きい正の倍長整数 +**異なるセッション間で保持**: No -**説明**: エンジンがオブジェクトをデータベースキャッシュに配置する際に空き空間を作成する必要が出た場合、データベースキャッシュからリリースするメモリの最小サイズ (バイト単位)。 +**取りうる値**: 正の倍長整数 -このセレクタの目的はキャッシュからデータをリリースする時間を減らし、よりパフォーマンスを得ることにあります。キャッシュのサイズやデータベース中で処理されるデータのブロックサイズに応じてこの値を変更できます。 +**デフォルト値**: 0 (キャッシュなし) -このセレクタが使用されないとデフォルトで、4Dは空間が必要になった時最低10%のキャッシュをアンロードします。 +**詳細**: フォーミュラのキャッシュに保存されるフォーミュラの最大数を設定あるいは取得します。これは[EXECUTE FORMULA](execute-formula.md)コマンドで使用されます。この上限は全てのプロセスに適用されますが、各プロセスにはそれぞれ独自のフォーミュラ用キャッシュがあります。フォーミュラをキャッシュすると、それぞれのフォーミュラはこの場合1度しかトークン化されないため、コンパイル済みモードでの[EXECUTE FORMULA](execute-formula.md)コマンドの実行が速くなります。キャッシュ値を変化させると、例え新しいサイズが以前のものより大きくても、既存の中身は全てリセットされます。キャッシュ内のフォーミュラ数が上限値に達すると、その後新しく実行されたフォーミュラはキャッシュ内の一番古いものを消去します(FIFOモード)。この引数は、コンパイルされたデータベース、あるいはコンパイルされたコンポーネントでのみ考慮されます。 -### Direct2D status (69) -**スコープ*: 4Dアプリケーション* +### OpenSSL version (94) - *(Direct2D Software) のみが許可されます。* +**スコープ**: 4D マシン全体* +* **2セッション間で設定を保持**: No +**説明**: マシン上で使用されているOpenSSL ライブラリーのバージョン番号を返します(読み込みのみ) -### Direct2D get active status (74) -**注:** このセレクターは[Get database parameter](get-database-parameter.md)コマンドでのみ使用することができ、設定することはできません。 -説明: WindowsにおいてDirect2Dのアクティブな実装を返します。 -取りうる値: 0, 1, 2, 3, 4 または 5 (セレクター69の値参照)。返される値はDirect2Dが利用可能かどうか、およびハードウェア、OSによってサポートされるDirec2Dの品質に基づきます。 +### Order by formula on server (47) -例えば以下のコードを実行した場合、 +**スコープ**:カレントテーブルおよびプロセス + **2セッション間で設定を保持**: No + **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) - SET DATABASE PARAMETER(Direct2D status;Direct2D Hardware)  $mode:=Get database parameter(Direct2D get active status) +**説明**: 引数に渡されたtableに対して実行される[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドの実行場所。 -- Windows 7以降、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは3に設定されます (ソフトウェアコンテキスト)。 +クライアント/サーバモードでデータベースを使用するとき、[ORDER BY FORMULA](order-by-formula.md "ORDER BY FORMULA")コマンドをサーバ上またはクライアント上で実行させることができます。このセレクタを使用して、このコマンドの実行場所 (サーバまたはクライアント) を指定できます。このモードはデータベース環境設定でも設定できます。詳細はセレクタ46、Query By Formula On Serverの説明を参照してください。 -- Windows Vistaでは、システムがDirect2D互換のハードウェアを検知すると、$modeに1が設定されます。そうでなければ$modeは0に設定されます (Direct2D無効)。 +**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュ ラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -- Windows XPでは、$modeは常に0です (Direct2D非互換)。 -### Diagnostic log recording (79) +### Pause logging (121) **Thread-safe** : Yes -**スコープ**: 4Dアプリケーション +**スコープ**: 4D アプリケーション** -2セッション間で設定を保持: No +異なるセッション間で値を設定を保持**: No** -取りうる値: 0 または 1 (0 = 記録しない, 1 = 記録する) +取り得る値**: 0 (ログを再開)、1 (ログを停止) -: 4D診断ファイルの記録を開始または停止する。デフォルトの値は0(記録しない)です。 +このセレクターを使用するとアプリケーション上で開始された全てのログオペレーションを停止/再開させることができます(ただしORDAログは除く)。この機能は4Dアプリケーションのタスクを一時的に軽くしたり、あるいはログオペレーションのスケジュールを設定することに有用です。 -4Dは診断ファイルの中に内部的なアプリケーション処理に関連するイベントを継続的に記録することができます。このファイルに含まれる情報は4Dアプリケーション開発のために使用され、4D社の技術サポート担当により解析されます。このセレクターに1を渡すと、データベースの**Logs** フォルダ内に診断ファイルが自動的に作成されます(またはすでに存在する場合には開かれます)。ファイルには*4DDiagnosticLog\_X*.txt (あるいはサーバー側で生成された場合には *4DDiagnosticLogServer\_X*.txt) という名前が付けられます。このファイルのサイズが10MBに達するとそのファイルは閉じられ、DatabaseName\_N.txtが生成されます (Nは連番)。 -[LOG EVENT](log-event.md)コマンドを使用してカスタム情報をこのファイルに書き込むこともできます。 - -### Log command list (80) +### PHP interpreter IP address (55) **スコープ**: 4D アプリケーション -**2セッション間で設定を保持**: No - -**取りうる値**: 記録する4Dコマンドの番号リスト。型は文字列で各コマンド番号をセミコロンで区切ります。"all"を渡すとすべてのコマンドが記録され、"" (空の文字列) を渡すとなにも記録されません。 - -**説明**: デバッグファイルに記録する4Dコマンドのリスト (セレクター 34, Debug Log Recording参照)。デフォルトではすべての4Dコマンドが記録されます。 - -このセレクターを使用すれば、記録に残したい4Dコマンドを指定することで、デバッグファイルに保存される情報の量を制限することができます。例えば以下のようにコードを記述できます: - - SET DATABASE PARAMETER(Log command list;"277;341")   // QUERY および QUERY SELECTION コマンドのみを記録する - - - -### Spellchecker (81) - -**スコープ**: 4D アプリケーション** +2セッション間で設定を保持: No** -2セッション間で設定を保持**: No +値**: IPv4 型にフォーマットされた文字列(例 "127.0.0.1") あるいはIPv6 型にフォーマットされた文字列(例 "2001:0db8:0000:0000:0000:ff00:0042:8329") - **とりうる値**: 0 (default) = macOSのシステムのスペルチェッカー(ハンスペルは無効化されます), 1 = ハンスペルスペルチェッカー有効化** +: FastCGI を経由してPHPインタプリタと通信を行うために、4D がローカルで使用するIP アドレス。デフォルトで値は"127.0.0.1" です(IPv5 フォーマットのアドレスは4D v16 R4 以降でサポートされます)。このアドレスは4D が配置されているマシンに対応しなければなりません。このパラメタはデータベース設定を使用してすべてのマシン用にグローバルに設定できます。 -説明**: macOS環境下においてハンスペルスペルチェッカーを有効化します。デフォルトでは、このプラットフォームではシステムのスペルチェッカーが有効化されています。例えば、クロスプラットフォームアプリケーションのインターフェースを統一するためにハンスペルを使用したいという場面があるかもしれません(Windowsでは、ハンスペルチェッカーのみが動作します)。詳細な情報に関しては、*スペルチェック*を参照して下さい。 +PHPインタプリタに関する詳細は*Design Reference*マニュアルを参照してください。 -### Dates inside objects (85) -スコープ: カレントプロセス +### PHP interpreter port (56) - 2セッション間で設定を保持: No +**スコープ**:4D アプリケーション - **取り得る値**: String type without time zone (0), String type with time zone (1), Date type (2) (デフォルト) + **2セッション間で設定を保持**: No -**説明**: 日付がオブジェクトにどのように保存されるかを定義するとともに、どのようにJSON に読み込み/書き出しされるかも定義します。 +**値**: 正の倍長整数値。デフォルト値は8002。 -セレクターの値がDate type (4D v17以降で作成されたデータベースにおけるデフォルト)のとき、4D 日付はオブジェクト内で日付型として保存され、ローカルの日付設定に準拠します。JSON フォーマットに変換された時、日付属性は、時間を含まない文字列へと変換されます(**注:** この設定は、データベース設定のにある"オブジェクト内ではISO日付フォーマットの代わりに日付型を使用"オプションによって設定することができます)。 +**説明**: 4DのPHPインタプリタが使用するTCPポート番号。データベース設定でこの値をすべてのマシン用にグローバルに変更できます。PHPインタープリタに関する詳細は*Design Reference* マニュアルを参照してください。 -セレクターにを渡した場合、4D 日付はローカルなタイムゾーンを考慮に入れつつISO 文字列に変換されます。例えば、例えば、23/08/2013という日付の変 換を、フランスのサマータイム(GMT+2)にて実行した場合、JSONフォーマットの"2013-08-22T22:00:00Z"という結 果が返されます。この原理はJavaScriptの標準のオペレーションに従うものです。これは異なるタイムゾーンにいる人にJSON日付の値を 送る場合には、エラーの原因となりかねません。例えば、[Selection to JSON](selection-to-json.md)を使ってフランスでエクスポートされたテーブルを[JSON TO SELECTION](json-to-selection.md) を使用してアメリカで再インポートする、というような場合です。日付の値は、デフォルトではそれぞれのタイムゾーンにおいて再変換 されるため、データベース内に保存された値は異なってしまいます。こういった場合には、このセレクターにString type without time zoneを渡す事によって、タイムゾーンを考慮しないよ うに日付の変換モードを変更することができます。すると、23/08/2013という日付を変換した場合に は、"2013-08-23T00:00:00Z"という値を返すようになります。 -### Diagnostic log level (86) +### POP3 Log (116) **Thread-safe** : Yes -**スコープ:** 4D アプリケーション** - -** **異なるセッション間で設定を保持:** No** - -** **説明:** 診断ログが有効化された際に、そこに含まれるメッセージのレベル(Diagnostic log recording セレクターを参照)。各レベルは診断メッセージのカテゴリを指定し、それより重要なカテゴリのメッセージも自動的に含まれます。カテゴリの詳細については、*developer.4d.com* 上の*Diagnostic log levels* の章を参照してください。 - - **取りうる値:** 以下の定数のいづれか(デフォルトは Log info ): Log trace: ERROR、WARN、INFO、DEBUG、TRACE を有効化します(最も詳細なレベル) Log debug: ERROR、WARN、INFO、DEBUG を有効化します Log info: ERROR、WARN、INFO を有効化します(デフォルト) Log warn: ERROR、WARN を有効化します Log error: ERROR を有効化します(最も簡略なレベル) +**スコープ:** 4D ローカル、4D Server +**2セッション間で設定を保持:** No +**取りうる値:** 0 または1からXまでの数字(0= 記録を取らない、1からX=シーケンシャルな数字、ファイル名に追加される)。デフォルトでは、値は0です(POP3通信は記録されません)。 -### Use legacy network layer (87) +**説明**: トランスポーターオブジェクトが*POP3\_transporter.getMail( )* または *POP3\_transporter.checkConnection( )*で処理されたとき、4D とPOP3 サーバー間の通信の記録を開始または停止します。デフォルトでは値は0 です(通信は記録されません)。この機構か有効化されている時、データベースのLogs フォルダにログファイルが作成されます。ファイル名は4DPOP3Log\_X.txt という形式となっており、X はログのシーケンシャル番号です。4DPOP3Log のサイズが10MBに到達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャル番号は1つ増加します。同じ名前のファイルが既に存在する場合、それは上書きされます。シーケンシャル番号の開始番号を、value 引数を用いて指定することができます。デフォルトでは全てのファイルが保持されますが、Circular log limitation 定数を使用することで残すファイルの数を制限することもできます。 -**スコープ**: 4D ローカル、4D Server +4DPOP3Log\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -**異なるセッション間で値を保持**: Yes -**詳細:** クライアント/サーバー間の通信のネットワークレイヤーのカレントの状態を設定・取得します。旧式ネットワークレイヤーは4D v14 R5以降廃止予定となり、お使いのアプリケーションにおいて*ServerNet* ネットワークレイヤーへと積極的に置き換えられてい行くべきです。*ServerNet* は、将来のネットワークの進化の恩恵を受けるために、今後の4Dのリリースの中で必須要項となって行きます。互換性の理由から、既存のアプリケーションの速やかな移行をサポートするために、旧式のネットワークレイヤーは引き続きサポートされます(v14 R5以前のリリースから変換されたアプリケーションにおいてはデフォルトで旧式ネットワークレイヤーが使用されます)。クライアント/サーバー通信において旧式ネットワークレイヤーを使用するためにはこの引数に1を渡します(*ServerNet* が無効化されます)。0を渡すと旧式ネットワークレイヤーが無効化されます(そして*ServerNet* が使用されます)。 -このプロパティはデータベース設定の*互換性ページ* の"旧式ネットワークレイヤー"オプションを使用することによっても設定できます(*ネットワーク/クライアント-サーバー通信*参照)。この章では、移行戦略についての議論を読むこともできます。*ServerNet* の速やかな有効化が推奨されます。 -この引数が有効になるためには、アプリケーションを再起動する必要があります。OS X版の4D Server 64-bit 版においては*ServerNet* のみをサポートするため、このオプションはご利用いただけません(常に0を返します)。 +### Port ID (15) -**取り得る値:** 0 または 1 (0 = 旧式ネットワークレイヤーを使用しない、1 = 旧式ネットワークレイヤーを使用する) +**スコープ**: 4D ローカル, 4D Server -**デフォルトの値:** 4D v14 R5以降で作成されたデータベースにおいては0、4D v14 R4以前のものから変換されたデータベースにおいては1 +**2セッション間で設定を保持**: No +**説明**: Command SET DATABASE この引数を使用して、ローカルモードの4Dおよび4D Serverによる4D Webサーバが使用するTCPポートをオンザフライで変更することができます。デフォルト値は80で、この値は環境設定ダイアログボックスの“Web/設定”ページで設定できます。*TCP Port Numbers*テーマの定数を*value*引数に使用できます。 -### SQL Server Port ID (88) -**スコープ**: 4D ローカル、4D Server +Port IDセレクタは、コンパイルして4D Desktopを組み込んだ4D Webサーバで役立ちます(この場合、デザインモードへのアクセス手段がありません)。TCPポートIDに関する詳細は*Webサーバー設定*を参照してください。 -**2セッション間で設定を保持**: Yes -**説明**: 4Dローカル、または4D Server の統合されたSQLサーバーで使用されるTCPポート番号を取得、または設定します。デフォルトの値は19812です。このセレクターが設定されると、データベース設定は更新されます。TCPポート番号はデータベース設定ダイアログボックスの"SQL"ページにおいても設定可能です。 -**とりうる値**: 0 から 65535 -**デフォルト値**: 19812 +### Query by formula joins (49) +**スコープ**:カレントプロセス + **2セッション間で設定を保持**: No -### Circular log limitation (90) + **とりうる値**: 0 (データベース設定を使用), 1 (常に自動リレーションを使用) または 2 (可能ならSQL JOINを使用) -**Thread-safe** : Yes +**説明**: "SQL JOIN"の利用に関連する、[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")と[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの動作モード。 -**スコープ**: 4Dローカル、4D Server **異なるセッション間で値を保持**: No** +4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、これらのコマンドはSQL JOINモデルに基づくJOINを実行します。このメカニズムを使用して、(以前のバージョンでは必要な条件だった) 自動リレーションで接続されていない他のテーブルに対して実行されたクエリに基づき、テーブルのセレクションを変更できます。 -取りうる値**: 任意の整数値、0 = 全てのログを保持** +QUERY BY FORMULA Joinsセレクタで、カレントプロセスの、フォーミュラによるクエリの動作モードを指定できます: -詳細**: 各タイプのロゴのローテーションに保存するファイル数の最大値。デフォルトでは、直近の50 ファイルが保持されます。*X* という値を渡した場合、直近の*X* 個のファイルのみが保持され、最も古いファイルは新しいファイルが作成されたときに自動的に削除されます。この設定は全てのログファイルに対して適用されます:リクエストログ(セレクター28と45)、デバッグログ(セレクター34)、イベントログ(セレクター79)、Web ログ([WEB SET OPTION](web-set-option.md)コマンドのセレクター29と84)、などです。 +0: データベースの現在の設定を使用する (デフォルト値)。4D v11 SQLのバージョン11.2以降で作成されたデータベースでは、"SQL JOIN"はフォーミュラによるクエリに対し常に有効です。変換されたデータベースでは、互換性のためデフォルトでこのメカニズムは有効になっていません。しかし環境設定で実装できます。1: 常に自動リレーションを使用 (= 以前のバージョンの4Dの動作)。このモードでは、他のテーブルに対して行われたクエリに基づきテーブルのセレクションを作成するためには、リレーションが必要です。4Dは"SQL JOIN"を行いません。2: 可能であればSQL JOINを使用 (= 4D v11 SQLのバージョン11.2以降で作成されたデータベースのデフォルト動作)。このモードでは、フォーミュラが適合する限り、4Dはフォーミュラによるクエリに"SQL JOIN"を使用します (2つの例外があります。[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA") コマンドの説明を参照)。**Note:** 4Dのリモートモードにおいて、"SQL JOIN"はフォーミュラがサーバ上で実行されているときにのみ使用できます (レコードへのアクセスが必要なため)。フォーミュラの実行場所を設定するには、セレクタ46と47を参照してください。 -### Number of formulas in cache (92) -**スコープ**: 4Dアプリケーション +### Query by formula on server (46) -**異なるセッション間で保持**: No +**スコープ**: カレントテーブルおよびプロセス -**取りうる値**: 正の倍長整数 + **2セッション間で設定を保持**: No -**デフォルト値**: 0 (キャッシュなし) + **とりうる値**: 0 (データベース設定を使用), 1 (クライアント上で実行) または 2 (サーバ上で実行) -**詳細**: フォーミュラのキャッシュに保存されるフォーミュラの最大数を設定あるいは取得します。これは[EXECUTE FORMULA](execute-formula.md)コマンドで使用されます。この上限は全てのプロセスに適用されますが、各プロセスにはそれぞれ独自のフォーミュラ用キャッシュがあります。フォーミュラをキャッシュすると、それぞれのフォーミュラはこの場合1度しかトークン化されないため、コンパイル済みモードでの[EXECUTE FORMULA](execute-formula.md)コマンドの実行が速くなります。キャッシュ値を変化させると、例え新しいサイズが以前のものより大きくても、既存の中身は全てリセットされます。キャッシュ内のフォーミュラ数が上限値に達すると、その後新しく実行されたフォーミュラはキャッシュ内の一番古いものを消去します(FIFOモード)。この引数は、コンパイルされたデータベース、あるいはコンパイルされたコンポーネントでのみ考慮されます。 +**説明**: 引数に渡された*table*に対して実行される[QUERY BY FORMULA](query-by-formula.md "QUERY BY FORMULA")や[QUERY SELECTION BY FORMULA](query-selection-by-formula.md "QUERY SELECTION BY FORMULA")コマンドの実行場所。 +クライアント/サーバモードでデータベースを使用するとき、フォーミュラを使用したクエリをサーバ上またはクライアント上で実行させることができます: +4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、これらのコマンドは、以前のバージョンの4Dと同様、クライアントマシン上で実行されます。変換されたデータベースでは、環境設定のアプリケーション/互換性ページで、これらのコマンドの実行場所をグローバルに変更できます。この実行場所の違いは、アプリケーションのパフォーマンス (通常サーバ上で実行したほうが早い) だけでなく、プログラミングにも影響します。実際フォーミュラの部品の値 (特にメソッドから呼ばれる変数) は、実行コンテキストにより異なります。このセレクタを使用して開発者は、アプリケーションの動作を適応させられます。 -### OpenSSL version (94) +*value* 引数に0を渡すと、フォーミュラを使用するクエリの実行場所は、データベースの設定に基づきます: 4D v11 SQLで作成されたデータベースでは、これらのコマンドはサーバ上で実行されます。変換されたデータベースでは、データベース環境設定に基づき、クライアントマシンまたはサーバマシンで実行されます。*value*に1または2を渡すと、これらのコマンドの実行場所をクライアントマシンまたはサーバマシンに強制できます。 -**スコープ**: 4D マシン全体* +例題2を参照してください。 -* **2セッション間で設定を保持**: No +**Note:** "SQLタイプ"のJOINを有効にしたい場合 (QUERY BY FORMULA Joins (49) セレクタ参照) は、フォーミュラがレコードにアクセスすることができるよう、常にフォーミュラをサーバ上で実行しなければなりません。このコンテキストでは、フォーミュラはいかなるメソッド呼び出しも含んではいけないことに注意してください。そうでない場合、自動でリモートマシンでの実行に切り替わります。 -**説明**: マシン上で使用されているOpenSSL ライブラリーのバージョン番号を返します(読み込みのみ) -### Cache flush periodicity (95) +### RDP optimization (133) -**Thread-safe** : Yes +**Scope:** 4D application. +**Kept between two sessions:** No. -**スコープ**: 4Dローカル、4D Server +**Possible values:** `0`: Disabled (default), `1`: Enabled. -**異なるセッション間で値を保持**: No +**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). -**取りうる値**: 倍長整数 > 1 (秒) -**詳細**: 秒単位で指定された、キャッシュ保存頻度を取得あるいは設定します。この値を変更すると、データベース設定の[XML DECODE](xml-decode.md)内の**キャッシュを保存: X秒毎**オプションをセッション中の間上書きします(これはデータベース設定には保存されません)。 @@ -714,247 +783,242 @@ PHPインタプリタに関する詳細は*Design Reference*マニュアルを -### Tips enabled (101) -**スコープ:** 4D アプリケーション +### Server base process stack size (53) -**異なるセッション間で値を保持:** No +**スコープ**: 4D Server -**取りうる値:** 0 = tips無効化、1 = tips有効化(デフォルト) + 2セッション間で設定を保持: No -**詳細:** 4DアプリケーションのTipsのカレントの表示状態を設定あるいは取得します。デフォルトでは、Tipsは有効化されています。 + **とりうる値**:正の倍長整数 -この引数は全ての4DTipsに影響するという点に注意してください。つまり、フォームヘルプメッセージとデザインモードのエディターTipsに影響します。 +**説明**: サーバ上のプリエンプティブシステムプロセス毎に割り当てるスタックのサイズ (バイト単位) です。デフォルトでの値はシステムによって決定されます。 +プ リエンプティブシステムプロセスはメインの4D クライアントプロセスを制御するためにロードされます。デフォルトでそれぞれのプリエンプティブプロセスに割り当てられるサイズはおよその場合最適なサイ ズですが、何百ものプロセスが作成されるようなケースではこのサイズが適切かどうか検討する必要が出てくるかもしれません。 +データベースが実行する処理がそれを許す限り、最適化の目的でこのサイズを大幅に減らすことができます ( 例えばデータベースで大量のレコードの並び替えなどを行わない場合)。512 や256 KB でさえも設定可能です。スタックサイズを小さくしすぎることは致命的であり、4D Server の動作に害を及ぼすことになるので注意してください。このパラメタの設定は注意を持って行い、データベースの利用状況 (レコード数や行う処理など) を考慮しながら行わなければなりません。 -### Tips delay (102) +このパラメタの設定を行うには、*On Server Startupデータベースメソッド* などにおいてサーバ上でコマンドが実行されなければなりません。 -**スコープ:** 4Dアプリケーション -**異なるセッション間で値を保持:** No -**取りうる値:** 倍調整数 >= 0 (ティック) -**詳細:** マウスカーソルがヘルプメッセージが関連づけられたオブジェクト内で停止してからTipsが表示されるまでの遅延時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は45ティック(=0.75秒)です。 +### SMTP Log (110) +**Thread-safe** : Yes +**スコープ**: 4D ローカル、4D Server -### Tips duration (103) +**異なるセッション間で値を保持**: しない** -**スコープ:** 4Dアプリケーション +取りうる値**: 0 あるいは1 からX まで(0 = 記録しない、1 から X = ファイル名に追加されるシーケンシャルな数字)。デフォルトでは、値は0(SMTP 通信は記録されない)です。 -**異なるセッション間で値を保持:** No +: *transporter* オブジェクトが*transporter.send( )* または *SMTP\_transporter.checkConnection( )* を通して処理される際、4D とSMTP サーバー間の通信の記録を開始、あるいは停止します。デフォルトでは、値は0です(通信は記録されない)。このログが有効化されると、データベースのLogs フォルダ内にログファイルが作成されます。ファイル名は4DSMTPLog\_X.txt で、この*X* はログのシーケンシャルな番号です。4DSMTPLog のファイルのサイズが10MB に達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャルな番号は数字がインクリメントされます。同じ名前のファイルが既に存在していた場合、そのファイルは直接上書きされます。*value* 引数を使用してシーケンスの開始番号を設定することができます。デフォルトでは全てのファイルが残されますが、Circular log limitation パラメータを使用することで保存しておくファイルの数を管理することができます。 -**取りうる値:** 倍調整数 >= 60 (ティック) +4DSMTPLog\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -**詳細:** Tipsの最大表示時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は720ティック(=12秒)です。 -### Min TLS version (105) +### Spellchecker (81) -**スコープ**: 4D Server、4D Web サーバーおよび4D SQL サーバー +**スコープ**: 4D アプリケーション** -**異なるセッション間で値を保持**: No +2セッション間で設定を保持**: No -**詳細**: Transport Layer Security (TLS) レベルを指定するのに使用します。これはデータ暗号化とアプリケーションとサーバー間での認証を可能にします。これによって定義された最小値を下回るバージョンしかサポートしないクライアントからの接続は拒否されます。この設定はネットワークレイヤー全体に適用されます。変更した後にその新しい値を使用するためには、サーバーを再起動する必要があります。 + **とりうる値**: 0 (default) = macOSのシステムのスペルチェッカー(ハンスペルは無効化されます), 1 = ハンスペルスペルチェッカー有効化** -**デフォルトの値**: TLSv1\_3 +説明**: macOS環境下においてハンスペルスペルチェッカーを有効化します。デフォルトでは、このプラットフォームではシステムのスペルチェッカーが有効化されています。例えば、クロスプラットフォームアプリケーションのインターフェースを統一するためにハンスペルを使用したいという場面があるかもしれません(Windowsでは、ハンスペルチェッカーのみが動作します)。詳細な情報に関しては、*スペルチェック*を参照して下さい。 -**取りうる値**: TLSv1\_2 (TLS 1.2、2008年に導入) TLSv1\_3 (TLS 1.3、2018年に導入) **注**: -- 4D Internet Commands プラグインは異るネットワークレイヤーを使用するため、ここのセレクターは4DICのTLSバージョンには影響しません。 -- TLS を旧式ネットワークレイヤーに適用しても反映されません。 +### SQL Autocommit (43) +**スコープ**:データベース -### User param value (108) + **2セッション間で設定を保持**: Yes -**スコープ:** 4D スタンドアロン、4D Server + **とりうる値**: 0 (無効) または 1 (有効) -**2セッション間で値を保持:** No +**説明**: SQLの自動コミットモードを有効または無効にするために使用します。デフォルトは 0 (無効モード) です。 -**取りうる値**: 任意のカスタムの文字列 -**説明:** 4D アプリケーションが再起動される際に、ひとつのセッションから次のセッションへと渡されるカスタムの文字列です。このセレクターは異なる引数を使用してアプリケーションを再起動する必要がある、自動化されたユニットテストなどのコンテキストで有用です。[SET DATABASE PARAMETER](set-database-parameter.md) で使用された場合、手動で、あるいは[OPEN DATABASE](open-database.md)(\*)、 [OPEN DATA FILE](open-data-file.md)、 または [RESTART 4D](restart-4d.md) コマンドを使用して4D が再起動したあとに開かれるデータベースで利用可能となる新しい値を定義します。[Get database parameter](get-database-parameter.md) で使用された場合、コマンドライン(*コマンドラインインターフェース* 参照)、4DLink ファイル(*4DLinkファイルを使用する* 参照)、あるいは前のセッションでの[SET DATABASE PARAMETER](set-database-parameter.md) への呼び出しなどを使用して定義された、現在利用可能なユーザー引数値を取得します。(\*) [SET DATABASE PARAMETER](set-database-parameter.md)がUser param value を設定した後に、[OPEN DATABASE](open-database.md)にuser-param xml 属性を含む.4DLink ファイル渡して呼び出した場合、4D は[SET DATABASE PARAMETER](set-database-parameter.md)で提供された引数のみを考慮します。 +自動コミットモードは、データベースの参照整合性を強化するために使用されます。このモードが有効の時、すべての*SELECT*, INSERT, *UPDATE* そして *DELETE* (SIUD) クエリは、これらがトランザクション内で実行されていない場合、自動でアドホックなトランザクションに含められます。このモードはデータベースの環境設定でも設定できます。 -### Times inside objects (109) -スコープ: 4D ローカル、4D Server (全てのプロセス) - 異なるセッション間で値を保持: No +### SQL Engine case sensitivity (44) - **取りうる値**: Times in seconds (0) (デフォルト)、 Times in milliseconds (1) +**スコープ**: データベース** -**詳細**: オブジェクトプロパティ内およびコレクション要素内で時間値がどのように変換され保存されるかを定義するとともに、JSONおよびWeb エリアへの読込/書出の方法を定義します。デフォルトでは、4D v17 以降、時間はオブジェクト内では秒数として変換・保管されます。 +2セッション間で設定を保持**: Yes** -以前のリリースでは、時間値はこれらのコンテキストにおいてはミリ秒数として変換・保管されていました。このセレクターを使用することで、必要であれば以前の設定に戻すことで、移行がスムーズになります。 +とりうる値**: 0 (大文字小文字を区別しない) または 1 (区別する) -**注**: ORDA メソッドとSQL エンジンはこの設定を無視し、時間値は常に秒数であるとみなします。 +: SQLエンジンが文字列比較を行う際に、大文字と小文字の違いを考慮させるかどうかを設定します。 デフォルトで値は1 (大文字小文字を区別する) です。SQLエンジンは文字列比較 (並び替えやクエリ) の際に大文字と小文字とアクセント付き文字を異なる文字として扱います。例えば“ABC”= “ABC”ですが“ABC” # “Abc”であり、"abc" # "âbc"です。SQLエンジンと4Dエンジンの動作をそろえたいなど特定の場合では、大文字と小文字を区別しない文字列比較 (“ABC”=“Abc"="âbc") を使用できます。 +**警告:* このオプションはデータベースのストラクチャーファイルと全てのプロセスを変更するため、パフォーマンス上の観点から、データベースのスタートアップ時にのみ設定することが強く推奨されます。* + + + +このオプションはアプリケーション環境設定の[CALL SUBFORM CONTAINER](call-subform-container.md) で設定できます。 -### SMTP Log (110) -**Thread-safe** : Yes + +### SQL Server Port ID (88) **スコープ**: 4D ローカル、4D Server -**異なるセッション間で値を保持**: しない** +**2セッション間で設定を保持**: Yes -取りうる値**: 0 あるいは1 からX まで(0 = 記録しない、1 から X = ファイル名に追加されるシーケンシャルな数字)。デフォルトでは、値は0(SMTP 通信は記録されない)です。 +**説明**: 4Dローカル、または4D Server の統合されたSQLサーバーで使用されるTCPポート番号を取得、または設定します。デフォルトの値は19812です。このセレクターが設定されると、データベース設定は更新されます。TCPポート番号はデータベース設定ダイアログボックスの"SQL"ページにおいても設定可能です。 -: *transporter* オブジェクトが*transporter.send( )* または *SMTP\_transporter.checkConnection( )* を通して処理される際、4D とSMTP サーバー間の通信の記録を開始、あるいは停止します。デフォルトでは、値は0です(通信は記録されない)。このログが有効化されると、データベースのLogs フォルダ内にログファイルが作成されます。ファイル名は4DSMTPLog\_X.txt で、この*X* はログのシーケンシャルな番号です。4DSMTPLog のファイルのサイズが10MB に達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャルな番号は数字がインクリメントされます。同じ名前のファイルが既に存在していた場合、そのファイルは直接上書きされます。*value* 引数を使用してシーケンスの開始番号を設定することができます。デフォルトでは全てのファイルが残されますが、Circular log limitation パラメータを使用することで保存しておくファイルの数を管理することができます。 +**とりうる値**: 0 から 65535 -4DSMTPLog\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 +**デフォルト値**: 19812 -### Current process debug log recording (111) -**スコープ:** 4D アプリケーション +### SSL cipher list (64) -**異なるセッション間で値を保持:** No +**スコープ**: 4Dアプリケーション **2セッション間で設定を保持**: No -**詳細**: **カレントプロセスにおける**プログラミングイベントの、別のログファイルへのシーケンシャルな記録を開始または停止します。このログはDebug log recording (セレクター34)に似ていますが、こちらはカレントプロセスにのみを対象とします。ログファイル名はアルファベットの"p"とプロセス番号を含みます: 4DDebugLog\[\_p*N*_*n*].txt ここでのNはプロセスの固有のIDです。 +**とりうる値**: コロンで区切られた一連の文字列 (例 "ECDHE-RSA-AES128-....") -このフォーマットと*4DDebugLog* ファイルの使用についての詳細な情報については、デザインリファレンスの*ログファイルの詳細* を参照してください。 +**説明**: 安全なプロトコルのために4Dが使用する暗号リストです。このリストを使用して4Dによって実装された暗号化アルゴリズムの順位を変更することができます。例えば、以下の文字列を *value* 引数に渡す事ができます:"HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!RSA:!DH:!RC4". 暗号リストのシンタックスの完全な詳細については、*OpenSSL の暗号ページ* *のサイト* を参照して下さい。 -**注:** このセレクターはデバッグ目的のためだけに提供されており、使用する際には注意が必要です。特に、アプリケーションのパフォーマンスに影響しうるため、製品で使用してはいけません。 Debug log recording および Current process debug log recording セレクターは同時に併用することができ、その場合にはメインのログファイルにはカレントプロセスのアクションは記録されません。 +この設定はメインWebサーバー(ただしWebサーバーオブジェクトは除く)、SQLサーバー、クライアント/サーバー接続、そしてHTTPクライアントと、安全なプロトコルを使用する4D コマンドの全てに対して適用されます。この変更は一時的な物です(つまり異なるセッション間で設定は保持されません)。 +暗号リストが変更された場合、新しい設定が使用されるようにするためには関係するサーバーを再起動する必要があります。 +暗号リストを (SLIファイルに恒久的に格納された) デフォルト値に再設定するには、*value*引数に空の文字列 ("") を渡して [SET DATABASE PARAMETER](set-database-parameter.md) コマンドを呼び出します。 -### Is current database a project (112) +**注**: [Get database parameter](get-database-parameter.md) コマンドで暗号リストはオプションの *stringValue* 引数に返され、戻り値は常に0となります。 -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 -: 4D アプリケーション** -詳細**: カレントのデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 +### Table sequence number (31) +**スコープ**:4D アプリケーション -### Is host database a project (113) + **2セッション間で設定を保持**: Yes -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでのみ使用可能で、その値を設定することはできません。 + **とりうる値**: 任意の倍長整数値 -: 4D アプリケーション** +**説明**: Command SET DATABASE PARAMETERこのセレクタは、引数に渡したテーブルのレコードの、カレントのユニーク番号を取得あるいは設定するために使用します。“カレントの数値”とは“最後に使用された数値”を意味します。SET DATABASE PARAMETERコマンドを使用してこの値を変更すると、渡された値+1の番号を使用して次のレコードが作成されます。この新しい番号は、[Sequence number](sequence-number.md "Sequence number")コマンドによって返される、さらにはストラクチャエディタやSQLで自動インクリメントが設定されたフィールドに返される番号です。 -詳細**: ホストデータベースアーキテクチャーがプロジェクトモードなら1を、それ以外の場合には0を返します。詳細な情報については、*データベースのプロジェクトモードとバイナリーモード* の章を参照してください。 +デフォルトで、この固有の番号は4Dが設定し、レコードの作成順に対応します。詳細は[Sequence number](sequence-number.md "Sequence number")コマンドのドキュメントを参照してください。 -### Libldap version (114) -**スコープ**: カレント4D マシン -**異なるセッション間で値を保持**: No -**詳細**: カレントマシン上の4D アプリケーション内のLDAP ライブラリーのバージョン番号を返します(読み出し専用) +### TCPUDP log recording (131) +**Scope:** 4D application. +**Kept between two sessions:** No. -### Libsasl version (115) +**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. -**スコープ**: カレント4D マシン** +**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -異なるセッション間で値を保持**: No** -詳細**: カレントマシン上の4D アプリケーション内のSASL ライブラリーのバージョン番号を返します(読み出し専用) +### Times inside objects (109) -### POP3 Log (116) +スコープ: 4D ローカル、4D Server (全てのプロセス) -**Thread-safe** : Yes + 異なるセッション間で値を保持: No -**スコープ:** 4D ローカル、4D Server + **取りうる値**: Times in seconds (0) (デフォルト)、 Times in milliseconds (1) -**2セッション間で設定を保持:** No +**詳細**: オブジェクトプロパティ内およびコレクション要素内で時間値がどのように変換され保存されるかを定義するとともに、JSONおよびWeb エリアへの読込/書出の方法を定義します。デフォルトでは、4D v17 以降、時間はオブジェクト内では秒数として変換・保管されます。 -**取りうる値:** 0 または1からXまでの数字(0= 記録を取らない、1からX=シーケンシャルな数字、ファイル名に追加される)。デフォルトでは、値は0です(POP3通信は記録されません)。 +以前のリリースでは、時間値はこれらのコンテキストにおいてはミリ秒数として変換・保管されていました。このセレクターを使用することで、必要であれば以前の設定に戻すことで、移行がスムーズになります。 -**説明**: トランスポーターオブジェクトが*POP3\_transporter.getMail( )* または *POP3\_transporter.checkConnection( )*で処理されたとき、4D とPOP3 サーバー間の通信の記録を開始または停止します。デフォルトでは値は0 です(通信は記録されません)。この機構か有効化されている時、データベースのLogs フォルダにログファイルが作成されます。ファイル名は4DPOP3Log\_X.txt という形式となっており、X はログのシーケンシャル番号です。4DPOP3Log のサイズが10MBに到達すると、そのファイルは閉じられて新しいファイルが生成され、シーケンシャル番号は1つ増加します。同じ名前のファイルが既に存在する場合、それは上書きされます。シーケンシャル番号の開始番号を、value 引数を用いて指定することができます。デフォルトでは全てのファイルが保持されますが、Circular log limitation 定数を使用することで残すファイルの数を制限することもできます。 +**注**: ORDA メソッドとSQL エンジンはこの設定を無視し、時間値は常に秒数であるとみなします。 -4DPOP3Log\_X.txt ファイルの詳細な情報については、*ログファイルの詳細* の章を参照してください。 -### Is host database writable (117) +### Tips delay (102) -**注:** このセレクターは[Get database parameter](get-database-parameter.md) コマンドでしか使用できず、この値を設定することはできません。 +**スコープ:** 4Dアプリケーション -**スコープ**: 4D アプリケーション +**異なるセッション間で値を保持:** No -**詳細**: ホストのプロジェクトファイル/ストラクチャーが書き込み可能なら1を、読み出し専用なら0を返します。 +**取りうる値:** 倍調整数 >= 0 (ティック) +**詳細:** マウスカーソルがヘルプメッセージが関連づけられたオブジェクト内で停止してからTipsが表示されるまでの遅延時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は45ティック(=0.75秒)です。 -### IMAP Log (119) -**Thread-safe** : Yes -**スコープ**: 4D ローカル、4D Server +### Tips duration (103) -**異なるセッション間で値を保持**: No +**スコープ:** 4Dアプリケーション -**取りうる値**: 0 または1 から X(0= 記録しない、1からX= シーケンシャル番号、ファイル名に追加される)。デフォルトでは値は0 です(IMAP の交換は記録されない)。 +**異なるセッション間で値を保持:** No -**詳細**: transporter オブジェクトが*IMAP\_transporter.getMail( )* または *IMAP\_transporter.checkConnection( )* で処理される際の4D とIMAP サーバーとの間の通信記録を開始または停止します。デフォルトでは、値は0です(通信は記録されません)。この機構が有効化されている場合、ログファイルがデータベースのLogフォルダに作成されます。ファイルは4DIMAPLog\_X.txt と名前がつけられ、このX はログのシーケンシャル番号です。ファイルのサイズが10MB に到達すると、ファイルは閉じられ、インクリメントされたシーケンシャル番号を持った新しいファイルが生成されます。同じ名前のファイルが既に存在する場合、それは直接置き換えられます。value 引数を使用するとシーケンス番号の開始番号を設定することができます。デフォルトで、全てのファイルは保持されますが、Circular log limitation 引数を使用することで保持するファイルの数をコントロールすることができます。 +**取りうる値:** 倍調整数 >= 60 (ティック) -ファイルの詳細については、*ログファイルの詳細* の章を参照してください。 +**詳細:** Tipsの最大表示時間です。値はティック(1/60秒)単位で表現されます。デフォルトの値は720ティック(=12秒)です。 -### Libzip version (120) -**スコープ:** カレントの4D マシン** +### Tips enabled (101) -2セッション間で設定を保持:** n/a** +**スコープ:** 4D アプリケーション -説明:** カレントマシン上の4D アプリケーションのlibzip ライブラリのバージョン番号を返します(読み出し専用) +**異なるセッション間で値を保持:** No +**取りうる値:** 0 = tips無効化、1 = tips有効化(デフォルト) +**詳細:** 4DアプリケーションのTipsのカレントの表示状態を設定あるいは取得します。デフォルトでは、Tipsは有効化されています。 -### Pause logging (121) +この引数は全ての4DTipsに影響するという点に注意してください。つまり、フォームヘルプメッセージとデザインモードのエディターTipsに影響します。 -**Thread-safe** : Yes -**スコープ**: 4D アプリケーション** -異なるセッション間で値を設定を保持**: No** -取り得る値**: 0 (ログを再開)、1 (ログを停止) +### Use legacy network layer (87) -このセレクターを使用するとアプリケーション上で開始された全てのログオペレーションを停止/再開させることができます(ただしORDAログは除く)。この機能は4Dアプリケーションのタスクを一時的に軽くしたり、あるいはログオペレーションのスケジュールを設定することに有用です。 +**スコープ**: 4D ローカル、4D Server +**異なるセッション間で値を保持**: Yes +**詳細:** クライアント/サーバー間の通信のネットワークレイヤーのカレントの状態を設定・取得します。旧式ネットワークレイヤーは4D v14 R5以降廃止予定となり、お使いのアプリケーションにおいて*ServerNet* ネットワークレイヤーへと積極的に置き換えられてい行くべきです。*ServerNet* は、将来のネットワークの進化の恩恵を受けるために、今後の4Dのリリースの中で必須要項となって行きます。互換性の理由から、既存のアプリケーションの速やかな移行をサポートするために、旧式のネットワークレイヤーは引き続きサポートされます(v14 R5以前のリリースから変換されたアプリケーションにおいてはデフォルトで旧式ネットワークレイヤーが使用されます)。クライアント/サーバー通信において旧式ネットワークレイヤーを使用するためにはこの引数に1を渡します(*ServerNet* が無効化されます)。0を渡すと旧式ネットワークレイヤーが無効化されます(そして*ServerNet* が使用されます)。 -### TCPUDP log recording (131) +このプロパティはデータベース設定の*互換性ページ* の"旧式ネットワークレイヤー"オプションを使用することによっても設定できます(*ネットワーク/クライアント-サーバー通信*参照)。この章では、移行戦略についての議論を読むこともできます。*ServerNet* の速やかな有効化が推奨されます。 -**Scope:** 4D application. +この引数が有効になるためには、アプリケーションを再起動する必要があります。OS X版の4D Server 64-bit 版においては*ServerNet* のみをサポートするため、このオプションはご利用いただけません(常に0を返します)。 -**Kept between two sessions:** No. +**取り得る値:** 0 または 1 (0 = 旧式ネットワークレイヤーを使用しない、1 = 旧式ネットワークレイヤーを使用する) -**Possible values:** `0`: Logging disabled (default), `1`: Logging enabled. +**デフォルトの値:** 4D v14 R5以降で作成されたデータベースにおいては0、4D v14 R4以前のものから変換されたデータベースにおいては1 -**Description:** Enables or disables the `4DTCPUDPLog.txt` file for logging TCP events. -### RDP optimization (133) +### User param value (108) -**Scope:** 4D application. +**スコープ:** 4D スタンドアロン、4D Server -**Kept between two sessions:** No. +**2セッション間で値を保持:** No -**Possible values:** `0`: Disabled (default), `1`: Enabled. +**取りうる値**: 任意のカスタムの文字列 -**Description:** Enables or disables optimizations for RDP (Remote Desktop Protocol). When enabled, optimizes in particular the use of shared clipboard in RDP connections, which can otherwise lead to freezing issues. Note that this selector disables the support in clipboard for images encoded as data uri in raw text (only concerns images dropped or explicitly copied as text from a browser). +**説明:** 4D アプリケーションが再起動される際に、ひとつのセッションから次のセッションへと渡されるカスタムの文字列です。このセレクターは異なる引数を使用してアプリケーションを再起動する必要がある、自動化されたユニットテストなどのコンテキストで有用です。[SET DATABASE PARAMETER](set-database-parameter.md) で使用された場合、手動で、あるいは[OPEN DATABASE](open-database.md)(\*)、 [OPEN DATA FILE](open-data-file.md)、 または [RESTART 4D](restart-4d.md) コマンドを使用して4D が再起動したあとに開かれるデータベースで利用可能となる新しい値を定義します。[Get database parameter](get-database-parameter.md) で使用された場合、コマンドライン(*コマンドラインインターフェース* 参照)、4DLink ファイル(*4DLinkファイルを使用する* 参照)、あるいは前のセッションでの[SET DATABASE PARAMETER](set-database-parameter.md) への呼び出しなどを使用して定義された、現在利用可能なユーザー引数値を取得します。(\*) [SET DATABASE PARAMETER](set-database-parameter.md)がUser param value を設定した後に、[OPEN DATABASE](open-database.md)にuser-param xml 属性を含む.4DLink ファイル渡して呼び出した場合、4D は[SET DATABASE PARAMETER](set-database-parameter.md)で提供された引数のみを考慮します。 From 0cb0233167b39e2c5707fc4ed1f8b2a7436be86b Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Dec 2025 10:03:41 +0100 Subject: [PATCH 70/75] fix integer operator --- docs/Concepts/dt_number.md | 2 +- versioned_docs/version-19/Concepts/dt_number.md | 2 +- versioned_docs/version-20-R10/Concepts/dt_number.md | 2 +- versioned_docs/version-20/Concepts/dt_number.md | 2 +- versioned_docs/version-21/Concepts/dt_number.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/Concepts/dt_number.md b/docs/Concepts/dt_number.md index f09cf91eec8830..f2e98290af7122 100644 --- a/docs/Concepts/dt_number.md +++ b/docs/Concepts/dt_number.md @@ -81,7 +81,7 @@ The modulo operator % returns significant values with numbers that are in the Lo ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Real comparison diff --git a/versioned_docs/version-19/Concepts/dt_number.md b/versioned_docs/version-19/Concepts/dt_number.md index f9502a3a391ae3..fcbe2d5ce02da5 100644 --- a/versioned_docs/version-19/Concepts/dt_number.md +++ b/versioned_docs/version-19/Concepts/dt_number.md @@ -75,7 +75,7 @@ The modulo operator % returns significant values with numbers that are in the Lo ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Real comparison diff --git a/versioned_docs/version-20-R10/Concepts/dt_number.md b/versioned_docs/version-20-R10/Concepts/dt_number.md index f3e140835167e7..059ddecfaea7e3 100644 --- a/versioned_docs/version-20-R10/Concepts/dt_number.md +++ b/versioned_docs/version-20-R10/Concepts/dt_number.md @@ -81,7 +81,7 @@ The modulo operator % returns significant values with numbers that are in the Lo ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Real comparison diff --git a/versioned_docs/version-20/Concepts/dt_number.md b/versioned_docs/version-20/Concepts/dt_number.md index f9502a3a391ae3..fcbe2d5ce02da5 100644 --- a/versioned_docs/version-20/Concepts/dt_number.md +++ b/versioned_docs/version-20/Concepts/dt_number.md @@ -75,7 +75,7 @@ The modulo operator % returns significant values with numbers that are in the Lo ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Real comparison diff --git a/versioned_docs/version-21/Concepts/dt_number.md b/versioned_docs/version-21/Concepts/dt_number.md index f3e140835167e7..059ddecfaea7e3 100644 --- a/versioned_docs/version-21/Concepts/dt_number.md +++ b/versioned_docs/version-21/Concepts/dt_number.md @@ -81,7 +81,7 @@ The modulo operator % returns significant values with numbers that are in the Lo ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Real comparison From 0fc38cbbac8de760e27773d2e186643293134ebf Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Dec 2025 10:33:50 +0100 Subject: [PATCH 71/75] fix log warn --- docs/commands-legacy/get-database-parameter.md | 3 ++- docs/commands-legacy/set-database-parameter.md | 3 ++- .../version-21/commands-legacy/get-database-parameter.md | 3 ++- .../version-21/commands-legacy/set-database-parameter.md | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/commands-legacy/get-database-parameter.md b/docs/commands-legacy/get-database-parameter.md index 2a7c402eb8d55a..16b58bb86a66db 100644 --- a/docs/commands-legacy/get-database-parameter.md +++ b/docs/commands-legacy/get-database-parameter.md @@ -350,7 +350,8 @@ For any type of interpreted or compiled 4D application (4D all modes, 4D Server, **Possible values:** One of the following constants (Log info by default): - Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) - Log debug: activates ERROR, WARN, INFO, DEBUG -- Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN +- Log info: activates ERROR, WARN, INFO (default) +- Log warn: activates ERROR, WARN - Log error: activates ERROR (least detailed level) diff --git a/docs/commands-legacy/set-database-parameter.md b/docs/commands-legacy/set-database-parameter.md index 9cd57b0a22d0ab..4a555bb40666fb 100644 --- a/docs/commands-legacy/set-database-parameter.md +++ b/docs/commands-legacy/set-database-parameter.md @@ -350,7 +350,8 @@ For any type of interpreted or compiled 4D application (4D all modes, 4D Server, **Possible values:** One of the following constants (Log info by default): - Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) - Log debug: activates ERROR, WARN, INFO, DEBUG -- Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN +- Log info: activates ERROR, WARN, INFO (default) +- Log warn: activates ERROR, WARN - Log error: activates ERROR (least detailed level) diff --git a/versioned_docs/version-21/commands-legacy/get-database-parameter.md b/versioned_docs/version-21/commands-legacy/get-database-parameter.md index d17f67f25c816c..7910e919c82933 100644 --- a/versioned_docs/version-21/commands-legacy/get-database-parameter.md +++ b/versioned_docs/version-21/commands-legacy/get-database-parameter.md @@ -348,7 +348,8 @@ For any type of interpreted or compiled 4D application (4D all modes, 4D Server, **Possible values:** One of the following constants (Log info by default): - Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) - Log debug: activates ERROR, WARN, INFO, DEBUG -- Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN +- Log info: activates ERROR, WARN, INFO (default) +- Log warn: activates ERROR, WARN - Log error: activates ERROR (least detailed level) diff --git a/versioned_docs/version-21/commands-legacy/set-database-parameter.md b/versioned_docs/version-21/commands-legacy/set-database-parameter.md index 9cd57b0a22d0ab..4a555bb40666fb 100644 --- a/versioned_docs/version-21/commands-legacy/set-database-parameter.md +++ b/versioned_docs/version-21/commands-legacy/set-database-parameter.md @@ -350,7 +350,8 @@ For any type of interpreted or compiled 4D application (4D all modes, 4D Server, **Possible values:** One of the following constants (Log info by default): - Log trace: activates ERROR, WARN, INFO, DEBUG, TRACE (most detailed level) - Log debug: activates ERROR, WARN, INFO, DEBUG -- Log info: activates ERROR, WARN, INFO (default) Log warn: activates ERROR, WARN +- Log info: activates ERROR, WARN, INFO (default) +- Log warn: activates ERROR, WARN - Log error: activates ERROR (least detailed level) From 77f92d0c97e5952838f618f6b082f13015e32af6 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Dec 2025 10:46:31 +0100 Subject: [PATCH 72/75] New Crowdin updates (#3020) * New translations cryptokeyclass.md (Spanish) * New translations cryptokeyclass.md (Spanish) * New translations cryptokeyclass.md (Spanish) * New translations parameters.md (Spanish) * New translations collectionclass.md (Japanese) * New translations dataclassclass.md (Japanese) * New translations entityselectionclass.md (Japanese) * New translations webformclass.md (Japanese) * New translations webformitemclass.md (Japanese) * New translations openaimessage.md (Japanese) * New translations overview.md (Japanese) * New translations collectionclass.md (Japanese) * New translations dataclassclass.md (Japanese) * New translations collectionclass.md (Japanese) * New translations dataclassclass.md (Japanese) * New translations webformclass.md (Japanese) * New translations webformitemclass.md (Japanese) * New translations dt_number.md (French) * New translations dt_number.md (French) * New translations develop-components.md (French) * New translations updates.md (French) * New translations write-class-method.md (French) * New translations dt_number.md (French) * New translations dt_number.md (French) * New translations properties_action.md (French) * New translations project-method-properties.md (French) * New translations dt_number.md (French) * New translations dt_number.md (Spanish) * New translations dt_number.md (Spanish) * New translations develop-components.md (Spanish) * New translations updates.md (Spanish) * New translations write-class-method.md (Spanish) * New translations dt_number.md (Spanish) * New translations dt_number.md (Spanish) * New translations properties_action.md (Spanish) * New translations project-method-properties.md (Spanish) * New translations dt_number.md (Spanish) * New translations dt_number.md (Japanese) * New translations dt_number.md (Japanese) * New translations develop-components.md (Japanese) * New translations updates.md (Japanese) * New translations write-class-method.md (Japanese) * New translations command-index.md (Japanese) * New translations dt_number.md (Japanese) * New translations dt_number.md (Japanese) * New translations properties_action.md (Japanese) * New translations project-method-properties.md (Japanese) * New translations dt_number.md (Japanese) * New translations dt_number.md (Portuguese, Brazilian) * New translations dt_number.md (Portuguese, Brazilian) * New translations develop-components.md (Portuguese, Brazilian) * New translations updates.md (Portuguese, Brazilian) * New translations write-class-method.md (Portuguese, Brazilian) * New translations dt_number.md (Portuguese, Brazilian) * New translations dt_number.md (Portuguese, Brazilian) * New translations properties_action.md (Portuguese, Brazilian) * New translations project-method-properties.md (Portuguese, Brazilian) * New translations dt_number.md (Portuguese, Brazilian) * New translations search-replace.md (French) * New translations find-components-results.png (French) * New translations find-components.png (French) * New translations find-in-design-expanded.png (French) * New translations find-in-design.png (French) * New translations rename-dial.png (French) * New translations rename.png (French) * New translations replace-content.png (French) * New translations result-window-menu.png (French) * New translations result-window-re.png (French) * New translations result-window.png (French) * New translations search-icon.png (French) * New translations openaifiledeleted.md (French) * New translations search-replace.md (Spanish) * New translations find-components-results.png (Spanish) * New translations find-components.png (Spanish) * New translations find-in-design-expanded.png (Spanish) * New translations find-in-design.png (Spanish) * New translations rename-dial.png (Spanish) * New translations rename.png (Spanish) * New translations replace-content.png (Spanish) * New translations result-window-menu.png (Spanish) * New translations result-window-re.png (Spanish) * New translations result-window.png (Spanish) * New translations search-icon.png (Spanish) * New translations openaifiledeleted.md (Spanish) * New translations search-replace.md (Japanese) * New translations find-components-results.png (Japanese) * New translations find-components.png (Japanese) * New translations find-in-design-expanded.png (Japanese) * New translations find-in-design.png (Japanese) * New translations rename-dial.png (Japanese) * New translations rename.png (Japanese) * New translations replace-content.png (Japanese) * New translations result-window-menu.png (Japanese) * New translations result-window-re.png (Japanese) * New translations result-window.png (Japanese) * New translations search-icon.png (Japanese) * New translations openaifiledeleted.md (Japanese) * New translations search-replace.md (Portuguese, Brazilian) * New translations find-components-results.png (Portuguese, Brazilian) * New translations find-components.png (Portuguese, Brazilian) * New translations find-in-design-expanded.png (Portuguese, Brazilian) * New translations find-in-design.png (Portuguese, Brazilian) * New translations rename-dial.png (Portuguese, Brazilian) * New translations rename.png (Portuguese, Brazilian) * New translations replace-content.png (Portuguese, Brazilian) * New translations result-window-menu.png (Portuguese, Brazilian) * New translations result-window-re.png (Portuguese, Brazilian) * New translations result-window.png (Portuguese, Brazilian) * New translations search-icon.png (Portuguese, Brazilian) * New translations openaifiledeleted.md (Portuguese, Brazilian) --- .../current/API/CryptoKeyClass.md | 2 +- .../current/Concepts/dt_number.md | 26 +- .../current/Extensions/develop-components.md | 6 + .../current/Notes/updates.md | 2 + .../Project/project-method-properties.md | 6 +- .../current/Project/search-replace.md | 283 ++++++++++++++++++ .../aikit/Classes/OpenAIFileDeleted.md | 34 +++ .../en/Project/find-components-results.png | Bin 0 -> 99711 bytes .../assets/en/Project/find-components.png | Bin 0 -> 12825 bytes .../en/Project/find-in-design-expanded.png | Bin 0 -> 18202 bytes .../assets/en/Project/find-in-design.png | Bin 0 -> 9894 bytes .../current/assets/en/Project/rename-dial.png | Bin 0 -> 14946 bytes .../current/assets/en/Project/rename.png | Bin 0 -> 11403 bytes .../assets/en/Project/replace-content.png | Bin 0 -> 6356 bytes .../assets/en/Project/result-window-menu.png | Bin 0 -> 5548 bytes .../assets/en/Project/result-window-re.png | Bin 0 -> 537 bytes .../assets/en/Project/result-window.png | Bin 0 -> 50640 bytes .../current/assets/en/Project/search-icon.png | Bin 0 -> 428 bytes .../current/code-editor/write-class-method.md | 4 + .../version-19/API/CryptoKeyClass.md | 2 +- .../version-19/Concepts/dt_number.md | 4 +- .../version-20-R10/Concepts/dt_number.md | 4 +- .../version-20-R10/Concepts/parameters.md | 2 +- .../FormObjects/properties_Action.md | 8 +- .../version-20/API/CryptoKeyClass.md | 2 +- .../version-20/Concepts/dt_number.md | 4 +- .../version-21/Concepts/dt_number.md | 4 +- .../current/Concepts/dt_number.md | 26 +- .../current/Extensions/develop-components.md | 6 + .../current/Notes/updates.md | 2 + .../Project/project-method-properties.md | 6 +- .../current/Project/search-replace.md | 283 ++++++++++++++++++ .../aikit/Classes/OpenAIFileDeleted.md | 34 +++ .../en/Project/find-components-results.png | Bin 0 -> 99711 bytes .../assets/en/Project/find-components.png | Bin 0 -> 12825 bytes .../en/Project/find-in-design-expanded.png | Bin 0 -> 18202 bytes .../assets/en/Project/find-in-design.png | Bin 0 -> 9894 bytes .../current/assets/en/Project/rename-dial.png | Bin 0 -> 14946 bytes .../current/assets/en/Project/rename.png | Bin 0 -> 11403 bytes .../assets/en/Project/replace-content.png | Bin 0 -> 6356 bytes .../assets/en/Project/result-window-menu.png | Bin 0 -> 5548 bytes .../assets/en/Project/result-window-re.png | Bin 0 -> 537 bytes .../assets/en/Project/result-window.png | Bin 0 -> 50640 bytes .../current/assets/en/Project/search-icon.png | Bin 0 -> 428 bytes .../current/code-editor/write-class-method.md | 4 + .../version-19/Concepts/dt_number.md | 4 +- .../version-20-R10/Concepts/dt_number.md | 4 +- .../FormObjects/properties_Action.md | 8 +- .../version-20/Concepts/dt_number.md | 4 +- .../version-21/Concepts/dt_number.md | 4 +- .../current/API/CollectionClass.md | 2 +- .../current/API/DataClassClass.md | 58 ++-- .../current/API/EntitySelectionClass.md | 14 +- .../current/API/WebFormClass.md | 76 ++--- .../current/API/WebFormItemClass.md | 20 +- .../current/Concepts/dt_number.md | 26 +- .../current/Extensions/develop-components.md | 6 + .../current/Notes/updates.md | 2 + .../Project/project-method-properties.md | 6 +- .../current/Project/search-replace.md | 283 ++++++++++++++++++ .../aikit/Classes/OpenAIFileDeleted.md | 34 +++ .../current/aikit/Classes/OpenAIMessage.md | 22 +- .../current/aikit/overview.md | 10 +- .../en/Project/find-components-results.png | Bin 0 -> 99711 bytes .../assets/en/Project/find-components.png | Bin 0 -> 12825 bytes .../en/Project/find-in-design-expanded.png | Bin 0 -> 18202 bytes .../assets/en/Project/find-in-design.png | Bin 0 -> 9894 bytes .../current/assets/en/Project/rename-dial.png | Bin 0 -> 14946 bytes .../current/assets/en/Project/rename.png | Bin 0 -> 11403 bytes .../assets/en/Project/replace-content.png | Bin 0 -> 6356 bytes .../assets/en/Project/result-window-menu.png | Bin 0 -> 5548 bytes .../assets/en/Project/result-window-re.png | Bin 0 -> 537 bytes .../assets/en/Project/result-window.png | Bin 0 -> 50640 bytes .../current/assets/en/Project/search-icon.png | Bin 0 -> 428 bytes .../current/code-editor/write-class-method.md | 4 + .../current/commands/command-index.md | 2 +- .../version-19/Concepts/dt_number.md | 4 +- .../version-20-R10/API/CollectionClass.md | 2 +- .../version-20-R10/API/DataClassClass.md | 4 +- .../version-20-R10/Concepts/dt_number.md | 4 +- .../FormObjects/properties_Action.md | 8 +- .../version-20/Concepts/dt_number.md | 4 +- .../version-21/API/CollectionClass.md | 2 +- .../version-21/API/DataClassClass.md | 12 +- .../version-21/API/WebFormClass.md | 76 ++--- .../version-21/API/WebFormItemClass.md | 20 +- .../version-21/Concepts/dt_number.md | 4 +- .../current/Concepts/dt_number.md | 26 +- .../current/Extensions/develop-components.md | 6 + .../current/Notes/updates.md | 2 + .../Project/project-method-properties.md | 6 +- .../current/Project/search-replace.md | 283 ++++++++++++++++++ .../aikit/Classes/OpenAIFileDeleted.md | 34 +++ .../en/Project/find-components-results.png | Bin 0 -> 99711 bytes .../assets/en/Project/find-components.png | Bin 0 -> 12825 bytes .../en/Project/find-in-design-expanded.png | Bin 0 -> 18202 bytes .../assets/en/Project/find-in-design.png | Bin 0 -> 9894 bytes .../current/assets/en/Project/rename-dial.png | Bin 0 -> 14946 bytes .../current/assets/en/Project/rename.png | Bin 0 -> 11403 bytes .../assets/en/Project/replace-content.png | Bin 0 -> 6356 bytes .../assets/en/Project/result-window-menu.png | Bin 0 -> 5548 bytes .../assets/en/Project/result-window-re.png | Bin 0 -> 537 bytes .../assets/en/Project/result-window.png | Bin 0 -> 50640 bytes .../current/assets/en/Project/search-icon.png | Bin 0 -> 428 bytes .../current/code-editor/write-class-method.md | 4 + .../version-19/Concepts/dt_number.md | 4 +- .../version-20-R10/Concepts/dt_number.md | 4 +- .../FormObjects/properties_Action.md | 8 +- .../version-20/Concepts/dt_number.md | 4 +- .../version-21/Concepts/dt_number.md | 4 +- 110 files changed, 1584 insertions(+), 284 deletions(-) create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/Project/search-replace.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design-expanded.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-re.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/search-icon.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/Project/search-replace.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design-expanded.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-re.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png create mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/search-icon.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/Project/search-replace.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design-expanded.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-re.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png create mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/search-icon.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/Project/search-replace.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design-expanded.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-re.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png create mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/search-icon.png diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/CryptoKeyClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/CryptoKeyClass.md index 7899bcb34a4cb3..e77b3e64c5a4c4 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/API/CryptoKeyClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/API/CryptoKeyClass.md @@ -63,7 +63,7 @@ La función `4D.CryptoKey.new()` crea un #### *CryptoKey* -El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. It is a shared object and can therefore be used by multiple 4D processes simultaneously. +El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. Es un objeto compartido y, por tanto, puede ser utilizado por varios procesos 4D simultáneamente. #### Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_number.md index d273e88f96b557..14c4d9fa5b530b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_number.md @@ -49,7 +49,7 @@ Los números negativos se especifican con el signo menos (-). Por ejemplo: | Resta | Número - Número | Number | 3 – 2 | 1 | | Multiplicación | Número \* Número | Number | 5 \* 2 | 10 | | División | Número / Número | Number | 5 / 2 | 2.5 | -| División entera | Número \ Número | Number | 5 \ 2 | 2 | +| Integer division | Número \ Número | Number | 5 \ 2 | 2 | | Módulo | Número % Número | Number | 5 % 2 | 1 | | Exponenciación | Número ^ Número | Number | 2 ^ 3 | 8 | | Igual | Número = Número | Boolean | 10 = 10 | True | @@ -79,9 +79,9 @@ El operador modulo % devuelve valores significativos con números que están en ::: -### División entera +### Integer division -El operador de división entero largo \ devuelve valores significativos sólo con números enteros. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Comparación real @@ -125,16 +125,16 @@ Dado que cada bit puede ser igual a 0 o 1, también se puede pensar en un valor Una expresión que utiliza un operador de bits devuelve un valor de tipo Long, excepto para el operador Bit Test, donde la expresión devuelve un valor booleano. La siguiente tabla lista los operadores a nivel de bits y su sintaxis: -| Operación | Operador | Sintaxis | Devuelve | -| -------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------- | -| Y | & | Long & Long | Long | -| O (inclusive) | | | Long | Long | Long | -| O (exclusivo) | ^ | | Long ^ | Long | Long | -| Left Bit Shift | << | Long << Long | Long (ver nota 1) | -| Right Bit Shift | > > | Long >> Long | Long (ver nota 1) | -| Bit Set | ?+ | Long ?+ Long | Long (ver nota 2) | -| Poner el bit en 0 | ?- | Long ?- Long | Long (ver nota 2) | -| Probar bit | ?? | Long ?? Long Long | Boolean (ver nota 2) | +| Operación | Operador | Sintaxis | Devuelve | +| -------------------------------- | ----------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------- | +| Y | & | Long & Long | Long | +| O (inclusive) | | | Long | Long | Long | +| O (exclusivo) | ^ | | Long ^ | Long | Long | +| Left Bit Shift | << | Long << Long | Long (ver nota 1) | +| Right Bit Shift | > > | Long >> Long | Long (ver nota 1) | +| Bit Set | ?+ | Long ?+ Long | Long (ver nota 2) | +| Poner el bit en 0 | ?- | Long ?- Long | Long (ver nota 2) | +| Probar bit | ?? | Long ?? Long Long | Boolean (ver nota 2) | #### Notas diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Extensions/develop-components.md b/i18n/es/docusaurus-plugin-content-docs/current/Extensions/develop-components.md index 3185eccbab7faf..3f0c6709b1233e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Extensions/develop-components.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Extensions/develop-components.md @@ -114,6 +114,12 @@ Las funcionalidades estándar del IDE 4D están disponibles para el componente. - ejecutar métodos, - restaurar desde la papelera o vaciar la papelera. +### Search and replace + +You can use the [**Search and replace** features](../Project/search-replace.md) of the host project to search elements within the code or the forms of your editable components. The **Search in project** menu allows you to select one or all components as search target: + +![](../assets/en/Project/find-components.png) + ## Alcance de los comandos del lenguaje A excepción de los [comandos no utilizables](#unusable-commands), un componente puede utilizar cualquier comando del lenguaje 4D. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md index ee03b6c212ed57..3d5948bfa59404 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,8 +10,10 @@ Lea [**Novedades en 4D 21 R2**](https://blog.4d.com/en-whats-new-in-4d-21-r2/), #### Lo más destacado - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). +- [4D Write Pro standard actions](../WritePro/user-legacy/standard-actions.md) that apply [lists](../WritePro/user-legacy/using-a-4d-write-pro-area.md#lists) now automatically adjust paragraph margins to keep markers positioned inside it. - Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. +- [**Find in Design**](../Project/search-replace.md#search-in-components) and [**Replace in contents**](../Project/search-replace.md#replace-in-contents) features can now support editable components. - [**Lista de bugs corregidos**](https://bugs.4d.fr/fixedbugslist?version=21_R2): lista de todos los bugs que se han corregido en 4D 21 R2. #### Cambios de comportamiento diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Project/project-method-properties.md b/i18n/es/docusaurus-plugin-content-docs/current/Project/project-method-properties.md index bb85e03cf5b992..46704bfe40f4fd 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Project/project-method-properties.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Project/project-method-properties.md @@ -22,9 +22,9 @@ El nuevo nombre debe cumplir con las reglas de denominación de 4D (ver [Identif :::caution -Cambiar el nombre de un método ya utilizado en la base de datos puede invalidar cualquier método o fórmula que utilice el antiguo nombre de método y corre el riesgo de interrumpir el funcionamiento de la aplicación. Puede cambiar el nombre del método manualmente, pero se recomienda utilizar la función de cambio de nombre de los métodos proyecto, descrita en [Renombrar](https://doc.4d.com/4Dv20/4D/20.2/Renaming.300-6750165.en.html). Con esta función, puede actualizar automáticamente el nombre siempre que se llame al método en todo el entorno Diseño. +Changing the name of a method already used in the project can invalidate any methods or formulas that use the old method name and runs the risk of disrupting application functioning. It is strongly recommended to use the [renaming function for project methods](../Project/search-replace.md#renaming-project-methods-and-variables). Con esta función, puede actualizar automáticamente el nombre siempre que se llame al método en todo el entorno Diseño. -Con 4D Server, el nombre del método se cambia en el servidor cuando se termina de editar. Si más de un usuario está modificando el nombre del método al mismo tiempo, el nombre final del método será el especificado por el último usuario en terminar de editarlo. Es posible que desee designar un propietario del método para que sólo ciertos usuarios puedan cambiar su nombre +Con 4D Server, el nombre del método se cambia en el servidor cuando se termina de editar. Si más de un usuario está modificando el nombre del método al mismo tiempo, el nombre final del método será el especificado por el último usuario en terminar de editarlo. Es posible que desee designar un propietario del método para que sólo ciertos usuarios puedan cambiar su nombre. ::: @@ -103,7 +103,7 @@ Para más información, consulte [Implementación del motor SQL de 4D](https://d *Esta opción es obsoleta. La llamada a código a través de llamadas REST sólo es compatible con las [funciones de clase del modelo de datos ORDA](../REST/ClassFunctions.md).* -### Modificar de atributos globalmente +## Modificar de atributos globalmente Mediante el cuadro de diálogo "Atributos de los métodos", puede modificar un atributo (Invisible, Ofrecido como servicio web, etc.) para todos o parte de los métodos proyecto base en una sola operación. Esta funcionalidad es especialmente útil para modificar los atributos de un gran número de métodos proyecto. También puede utilizarse durante el desarrollo para aplicar rápidamente los atributos comunes a grupos de métodos similares. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Project/search-replace.md b/i18n/es/docusaurus-plugin-content-docs/current/Project/search-replace.md new file mode 100644 index 00000000000000..90d57d07ff1c3d --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/Project/search-replace.md @@ -0,0 +1,283 @@ +--- +id: search-replace +title: Search and Replace +--- + +4D provides several search and replace functions for elements in all of the Design environment. + +- You can search for a string or a type of object (variable, comment, expression, etc.) in part of or in the entire project on the basis of custom criteria ("starts with", "contains", etc.). You can, for example, search for all the variables containing the string "MyVar", only in methods whose name begins with "HR_". +- The results are displayed in a results window, where it is possible to perform replacements in the contents. You can also export these results in a text file that can be imported into a spreadsheet. +- You can detect variables and methods that are not used in your code and then remove them to free up memory. +- You can rename a project method or a variable throughout the Design environment in a single operation. + +:::note + +There are also functions for searching among the methods of your project in the context menu of the Methods Page in the Explorer: **Search Callers** (aussi available in the [Code editor](../code-editor/write-class-method.md#search-callers) and **Search Dependencies**. Both functions display the items found in a [Results window](#results-window). + +::: + +## Search Location + +When you search the Design environment, the following elements are searched: + +- Names of project methods and classes +- Contents of all methods and classes +- Names of tables, fields and forms +- Contents of forms: + - object names and titles + - names of help tips, pictures, variables, style sheets, + - formatting strings + - expresiones +- Menus (names and items) and commands associated with menu items +- Choice lists (names and items) +- Help tips (names and content) +- Formats / filters (names and content) +- Comments in the Explorer and in the code + +## Find in Design + +### Starting a search + +Specify your search criteria in the "Find in design" window: + +1. Click on the Search button (![](../assets/en/Project/search-icon.png)) in the 4D toolbar. + OR + Select the **Find in Design...** command from the **Edit** menu. + +The "Find in design" window appears: + +![](../assets/en/Project/find-in-design.png) + +The areas of the "Find in design" vary dynamically depending on the selections made in the menus. You can expand this window so that all options are visible: + +![](../assets/en/Project/find-in-design-expanded.png) + +2. Build your search using the different menus and entry areas of the dialog box and if necessary enter the character string to be searched for. These items are described in the following sections. + +3. Set the [search options](#search-options) (if necessary). + +4. Click **OK** or press the **Enter** key. + When the search is finished, the [Results window](#results-window) appears, listing the elements found. + +:::note + +You can cancel an extensive search that is underway using the **x** button; this does not close the window or remove any results that were found. + +::: + +Once you have executed a search, the value entered in the search area is saved in memory. This value, as well as all the other values entered during the same session, can be selected from the combo box. + +### Buscar + +You specify the type of element to look for using the **Find** menu. The following choices are available: + +- **Text**: In this case, 4D looks for a character string throughout the Design environment. The search is done in plain text mode, without taking the context into account. For example, you can look for the text "ALERT("Error number:"+" or "button27". In this mode, you cannot use the wildcard character because "@" is considered to be a standard character. +- **Comment**: This search is basically the same as the previous one, but it is restricted to the contents of comments (lines beginning with //) in the code and in the Explorer window. For example, you can search for any comments containing the string "To be verified". + +:::note + +The end result of both types of searches depends on the [search mode](#search-mode) selected. + +::: + +- **Language expression**: Used to search for any valid 4D expression; the search is performed in the "contains" search mode. Validity is important because 4D must be able to evaluate an expression to be able to search for it. For example, a search for "[clients" (invalid expression) will not return any result whereas "[clients]" is correct. This option is particularly suitable for searches for value assignments and comparisons. Por ejemplo: + - Search for "myvar:=" (assignment) + - Search for "myvar=" (comparison) +- **Language element**: Used to search for a specific language element by its name. 4D can distinguish between the following elements: + - **Any language element**: Any element from the list below. + - **Project method or Class**: Name of a project method or class, for example "M_Add" or "EmployeeEntity". + - **Form:** Form name, for example "Input". The command searches among project forms and table forms. + - **Field or Table**: Name of a table or field, for example "Customers". + - **Variable**: Any variable name, such as "$myvar". + **4D constant**: Any constant, such as "Is Picture". + **String in quotes**: Literal text constant; i.e. any value within quotes in the code editor or inserted into text areas of the Form editor (static text or group boxes). For example, a search for "Martin" will return results if your code contains the line: `ds.Customer.query("name = :1"; "Martin")` + - **4D command**: Any 4D command, for example "Alert". + - **Plug-in command**: Plug-in command installed in the application. + - **Properties**: An object property name (includes ORDA attribute names). For example "lastname" will find "$o.lastname" and "ds.Employee.lastname". +- **Any object**: This option searches among all the elements in the Design environment. Only the modification date filter is available. Use this option, for example, to search for "anything modified today". + +### Search mode + +The search mode menu (i.e. "which", "that is" or "whose name") specifies how to search for the value that is entered. The contents of this menu vary according to the type of element to search for as selected in the **Find** dropdown list. + +- Search options for Text or Comment: + - **contains**: Searches all text in the Design environment for the specified string. Search results for "var" can include "myvar", "variable1" or "aVariable". + - **contains whole word**: Searches all text of the Design environment for the string as a whole word. Search results for "var" only include exact occurrences. They will not include "myvar" but will include, for example, "var:=10" or "ID+var" because the symbols : or + are word separators. + - **begins with / ends with**: Searches for the string at the beginning or end of the word (text search) or at the beginning or end of the comment line (comment search). In "Text ends with" mode, searching for "var" will find "myvar". +- Search options for Language element: The menu offers standard options (matches, contains, begins with, ends with). Note that you can use the search wildcard (@) with the matches option (returns all objects of the type specified). + +### Search in components + +When your current project references [editable components](../Extensions/develop-components.md#editing-components), you can designate one or all your components as a target for the search. By default, a search is executed in the host only. To modify the target for a search, deploy the **in the project** menu: + +![](../assets/en/Project/find-components.png) + +You can select as target: + +- the **host project** (default option, top of the list): the search will only be executed within the host project code and forms, excluding components. +- the **host project and all its components**: the search will be executed in the host project and in all its loaded components. +- a **specific component**, among the list of all searchable components: the search will be restricted to this component only, excluding the host and other components. + +:::note + +When no searchable component is found, no menu is available. + +::: + +The **in the folder** menu (see below) is updated when you select a project since the availability of folders depends on the selected search target(s). The menu is hidden when you select the "host project and all its components" option. + +### Folder + +The **in the folder** menu restricts the search to a specific folder of the project. By default ("Top Level" option), the search takes place in all the folders. + +:::note + +Folders are defined on the Home Page of the Explorer. + +::: + +### Modification date of the parent + +This menu restricts the search with respect to the creation/modification date of its parent (for example, the method containing the string being searched for). In addition to standard date criteria (is, is before, is after, is not), this menu also contains several options to let you quickly specify a standard search period: + +- **is today**: Period beginning at midnight (00:00 h) of the current day. +- **is since yesterday**: Period including the current day and the previous one. +- **is this week**: Period beginning on Monday of the current week. +- **is this month**: Period beginning on the 1st day of the current month. + +### Searching options + +You can select options that can help speed up your searches: + +- **Search in forms**: When this option is deselected, the search is done throughout the project, except in forms. +- **Search in methods**: When this option is deselected, the search is done throughout the project, except in methods. +- **Case Sensitive**: When this option is selected, the search uses the case of the characters as they have been entered in the Find area. + +## Results window + +The Results window lists all elements found that match the search criteria set using different types of searches: + +- [standard search](#starting-a-search) +- [search for unused elements](#find-unused-methods-and-global-variables) +- [search for callers](../code-editor/write-class-method.md#search-callers) +- search for dependencies +- [renaming of project methods and variables](#renaming-project-methods-and-variables) + +It shows the results as a hierarchical list organized by type of elements found. You can expand or collapse all the hierarchical items in the list using the options menu (found at the bottom left of the window) or in the context menu. + +![](../assets/en/Project/result-window.png) + +You can double-click on a line in this window to view the element in its editor, such as the [code editor](../code-editor/write-class-method.md). If you do several searches, each search opens its own result window, leaving previous result windows open. + +When more than one occurrence has been found, the list indicates their **count** next to the element name. + +Each line can display a tip that provides additional information, for example the element property that matches the criteria, or the number of the form page that contains the occurrence. + +When an element found belongs to a component, the **component name** is displayed in parenthesis at the right side of the element name: + +![](../assets/en/Project/find-components-results.png) + +Once a search is completed, you can use the ![](../assets/en/Project/result-window-re.png) button to perform the search again with the same criteria and options. + +### Options menu + +You can perform various actions using the options menu: + +![](../assets/en/Project/result-window-menu.png) + +- **Remove from list**: removes selected item(s) from the results window. More specifically, this lets you keep only items targeted by a replacement operation in the contents or used for drag and drop between applications. +- **Remove all items from list except selection**: clears everything from the results window except for the selected item(s). +- [**Replace in content**](#replace-in-contents): replaces a character string within the selected item(s). +- **Select >**: selects one type of item (project methods, object names, and so on) from among all the items found in the Results window. The hierarchical sub-menu also provides commands to select (All) or deselect (None) all the items at once. +- **Collapse all/Expand all**: expands or collapses all the hierarchical items in the list of results. +- **Export Results**: exports information about the search criteria and elements listed in the Results window. This text file can then be imported into a spreadsheet such as Excel, for example. For each item, the following information is exported as tab-separated values in a text file: + - Host project or component name + - Type (method, Class, formObject, trigger...) + - Path + - Property (if accurate): provides the property of the object that matches the criteria. For example, a string could be found in a variable name (variable property) and an object name (name property) within in the same form. This field is empty when the matching element is the object itself. + - Contents (if accurate): provides the contents that actually matches the criteria; for example, the code line that contains the requested string. + - Line number (for code) or page number (for form objects) + +## Replace in content + +The Replace in content function allows you to replace one character string with another within the listed objects in the Results window. It is available in the [options menu](#options-menu) of the window. + +:::note + +The **Replace in content** menu item is disabled if you work in a read-only database (e.g. in a .4dz file). + +::: + +When you select this command, a dialog box appears where you enter the character string that will replace all the occurrences found by the initial search: + +![](../assets/en/Project/replace-content.png) + +Replacing operations work as follows: + +- Replacing is always carried out among all items found in the list and not just for a selection. However, it is possible to narrow the replacing operation by first reducing the contents of the list using the **Remove from list** or **Remove all items from list except selection** commands in the [options menu](#options-menu) or the contextual menu. +- If the Results window includes elements from components, the replacing will be done in the component(s) also. +- Only the occurrences shown in the list will be replaced and only after checking the initial search criteria for cases where objects were modified between the initial search and the replacing operation. +- Replacing is done in the code, properties of form objects, contents of help messages, entry filters, menu items (item text and method calls), choice lists, comments. +- For each object modified, 4D checks whether it is already loaded by another machine or in another window. In the case of conflict, a standard dialog box appears indicating that the object is locked. You can close the object and then try again or cancel its replacement. The replacing operation will then continue with the other objects in the list. +- If a method or form concerned by a "replace in content" operation is currently being edited by the same 4D application, it will be modified directly in the open editor (no warning appears). Forms and methods modified in this way are not saved automatically: you will need to use the **Save** or **Save All** command explicitly to validate the changes. +- After a replacement is made in a list item, it will appear in italics. A count of replacements made in real time appears at the bottom of the window. +- Elements are never renamed themselves by the **Replace in content** feature, except for form objects. Hence it is possible that certain items in the list may not be affected by the replacing operation. This can occur when only the item name corresponds to the initial search criteria. In this case, the list items do not necessarily all appear in italics and the final replacement count may be less than the number of occurrences found by the initial search. + +## Renaming project methods and variables + +4D provides a dedicated renaming function with distribution throughout the entire project for project methods and variables. + +The **Rename...** command is available from the [Code editor] (for project methods and variables) and the Explorer context menu (for project methods). + +![](../assets/en/Project/rename.png) + +When you select this command, a dialog box appears where you enter the new name for the object: + +![](../assets/en/Project/rename-dial.png) + +The new name must comply with [naming rules](../Concepts/identifiers.md); otherwise a warning appears when you validate the dialog box. For example, you cannot rename a method with a command name such as "Alert". + +Depending on the type of object you are renaming (project method or variable), the renaming dialog box may also contain a distribution option: + +- Project method: The **Update callers in whole database** option renames the method in all the project code that references it. You can also uncheck this option in order, for example, to rename the method only in the Explorer itself. +- Process variable: The **Rename variable in whole database** option renames the variable in all the project code that references it. If you uncheck this option, the variable is only renamed in the current method. +- Local variable: No distribution option for this object; the variable is only renamed in the current method or class. + +## Searching for unused elements + +Two specific search commands allow you to detect variables and methods that are not used in the code of your host project. You can then remove them to free up memory. These commands are found in the **Edit** menu of the Design environment. + +### Find Unused Methods and Global Variables + +This command looks for project methods as well as "global" variables (process and interprocess variables) that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A project method is considered to be unused when: + +- it is not in the Trash, +- it is not called anywhere in the 4D code, +- it is not called by a menu command, +- it is not called as a string constant in the 4D code (4D detects a method name in a string even when it is followed by parameters in parentheses). + +A process or interprocess variable is considered to be unused when: + +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else in the 4D code, +- it is not used in any form object. + +Note that certain uses cannot be detected by the function - i.e. an element considered unused may in fact be used. This is the case in the following code: + +```4d +var v : Text :="method" +EXECUTE FORMULA("my"+v+String(42)) +``` + +This code builds a method name. The *mymethod42* project method is considered unused when in fact it is called. Therefore, it is advisable to check that the elements declared as unused are in fact unnecessary before you remove them. + +### Find Unused Local Variables + +This command looks for local variables that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A local variable is considered to be unused when: + +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else within the same method. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md new file mode 100644 index 00000000000000..6f79e1d309c787 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md @@ -0,0 +1,34 @@ +--- +id: openaifiledeleted +title: OpenAIFileDeleted +--- + +# OpenAIFileDeleted + +The `OpenAIFileDeleted` class represents the deletion status of a file in the OpenAI API. + +## Propiedades + +| Nombre de la propiedad | Tipo | Descripción | +| ---------------------- | ------- | -------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | The ID of the deleted file (e.g., "file-abc123"). | +| `deleted` | Boolean | Whether the file was successfully deleted. `True` if deletion succeeded. | +| `object` | Text | El tipo de objeto, que siempre es "file". | + +## Example Response + +```json +{ + "id": "file-abc123", + "object": "file", + "deleted": true +} +``` + +## Used by + +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) + +## Ver también + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png new file mode 100644 index 0000000000000000000000000000000000000000..96a5080c02477c29154f3aa239e64abafd26cccd GIT binary patch literal 99711 zcmZU)1yEc~v@Qxkf_rcs2KT|;-Ccq+KyY^r1h?Ss?(Xg$JV0=VV8I<8{O8nt_tmSZ zsolG~cgyPTCEr>drlcT=jDU{-0Re$5EhVM`0Rg%H{%3`Qeb3o7%u#)RKsu>Nia=ET zB0PG3fi@SG7lweSjX``if_Z<3x0lj(f`CBj{rE$+#9E!ce-L7!rsb?9FUMnIXTxX& zwlg+mbhoj8uMGjgC+Kc(WMXCNOloXuZehz$b>7}hMQQ=&r_yAXXO_1YHT`BG<>_du z>Zzb+;%Q~V4W<$lKt|wm=Xr0z#?;w})ZNC~)``cRAMjtpJn!j`Y$kvJpCj0eM@3BH ze`~zI@dLg&JKOUxF}b<9F}krb+Buptv2b&9GckjhKp=+q8VpVzw$4WG47N_>|J#6= zsgsGLg}t+doh|7{gGR=7F3$V_7Z(dKkC~AfyD=Ed&R}fB3T9wo0UI$GfmvA?z^trb zPIeY9kQs|H;D5V!wlMpD`?q!aUoyNCgz2M%iG`8*W5^$A9z{nB)Avz)bSc2X_h0${ zCy$TmV<7+6zy$s$=Y6j4ssBTn4>J89>YCcVlho~cK8##fBdxk^f*Vw#m9+tJyRP2C=cTJM2&31@vwrAOBZ4gPhba=QqTPQofu;6g9E#9}q96-9-p>50S=vVjDqRuf{X)D)VR~^&nNz7T@5?y9S z@K1AY^{C~)_F8#uR}wnw4qYK##d$J|8XFV$_swKvWgU1jo!#6_8g)ubONFZ!^QjR~ zLIR(ky{|p_%gVrar3j?{X(%ky>%IRnWb|)fe`~feLs&Y8uSdHMQ(1=N<~RrwUfT=QVBkU zm6g%c)1x85vZPN+#Wmn(V1z->&COAV2aJMs)|m059FJxxl9H0#cVi{B+Fcp?`}^Oi zR9jOcM2(e~pC8!UD?BznUaM1CzJd?{abyZRMQrp|EwDNL;OQBt{H)%Hm1@GKw={KZ z*FD&Z$PhWPGRjolW0#Bu{l&32Rqn@@thu|>+Y_O{V$Y#Fl9xEegIVgo6F!STym7Y*%L(f3e?~tloanU(yw;X-v&o zmKB$Wr2L_4`jw1lt?%m-f!6Km9%}a;7O#~L*VUyIa?`Z;BS_hg1~LX&T3s0nMjS>M z%eE4^Tspu+)8j^jDMAG@{c_SDJAwVb^&tD7^`H)?XJmBT9YJR_=#nEv%gM>{HyMt; zsLy^u@(&^Q3>6}UXx-OW#=3ZV!HtqgOHV&KJuNIM3LYl$BP?GS8;rn#hYj34IA8^V z`nI^{iYKf$y1zrGA=P!|*0$k$78It-A0!hmpjKqQyVMD|c zJ7%9Car&N-_>63)aIw{yxwnOK>^I^K~2De=H1J_&0MD8m6pZiin?%>1Q*qGxxY z(5%T#dl(JER!c{kAl%aB@5}2m8T!uie}1psuN#DR>7=D_V2p9-G|S z@!96(a=!QdZ{a@@R4FH|6JCB#tm}d+W4nDAx%LSovw-pX`X71H3CE7J|LsOw9UncJ z;<<~%{Fuufk~duGxTS7CLEGkZ!IwEf)2S@}R?0&wqW%$N>NqLj&pqqu2{5Sq*i@S` zew1_^R7amr%^A!qtfV}6?5PhAs9@ucKP3##0faA;RG;S-eF`9pshsi-6uciJ$0~T_ zy7^<3ah6!xaxU9(xjOFsMlf};l;(Z%U1S2L5OLE->j^5ZWaxSb8{g(^<#Q} z9nWeKm?_948*Mj3g+bDV#6H-xO%&yV;Zto6PAVNlu;i+(^#wVU(3Iq zY`hShF-6(8RDIt)5Ggs_tfp_ik(*Ttb^s=#?g_5r8V_vX$k=k$Be3y_pGc1! zKt?D_0}|pFSC)q)Rhj)_cZ*|AzM9TDP52sB5+>H9&7TCwRDdE4r%gRlh9%HRg&$IC zz^|8h7gD~G1=-K7~zN4wdU2oVvHjgu1-At-cs zXTX@HL!W6%@Qtsqu&{h`3l4xC0p;Z!8c&6KWwb^rvaF!*dyD>C6FO9}$!Y85u62nc z#-yK>@8y~}+E16zCOIml*P7x-eP<6$Pl!s;D|= zSLWxsWRwU?4*ImyBux|~f4OW{k2?qD$Injax5^z43QQ!jt0lNkZ+NzSh}D_r-|&{d zZJ^Gp=a!a6X7VMM>&;OWisPLQevyR(-dV3`@mwVevx>rv*huJ|*r zqr~ki*MwZc2wo()K%f_i6+oez%lV?ZaXCKrxw?^VH;rG0mpUHkPAPjyJ7l0x57I-qZfx|Ini8 zMdCYmrb2x~gBTz2XQArF9oKd{Tr%rH^GPVucwIAJnCEfcl!Ut7pP0wi6OE5Av#Y)6nKuae9P^{sTBujHj`vNodxoR-8$mzE z7%u3V?M+|olHaunPD1nB(YHpECpnF=<6v88k=w?`mBhWVx)pEi>}bywlh^B~|IQsr zw`OMde7eaTgPJ3zz?*{Z8#mAd9$Go1HzD)xagpSSXmz?$k1ReKZ8$)^x?S>Ytd5g> zvCG%e6(Y@Gg~;H2P_GVc2cPQ83gG3VF%^y-zTg-wBIXRF5R;gLm&HuQ(FLq*i^8UW z(f|yy3S6`=UzFLl9C6WX5qxBn zT81+tatTBR{zJ#lV?Xiw=Rmxs<1g=)PP7kF*`vnn#H25pNT{akGrFhG ze=XpB;Ko z_NShJDCFIZ(t0mElH!}Q86JL3<}aqHs;iUn^UB%vTj;c=9ww_p3VsD8gAJzBMN3YOb`M~8&+K$ zZO~c^Qw>X9d=xB2feDPmLlXxoi+!nM5s7tT)eXalBlXV!pInCMo}~_T9Z~3e-;&*0 zuL)%>1PEuZNhwsG$c6yTK5Hn?(Zq#8kIHfQDUSq`lDT!DnG_t;o*Sg(xnE%ud!CK+ zwX_DPRHFxynoS`JjlxtVI`#SU3JO`YqPB}?uVu%PrOL&{!Z^2`_+*mqzN)C#<-R@^ z9dThsWnQ}s()b!Oz$lQHARIZzfpsKikI?4fI){JR|LymUJeK*_J{j6N1xk|3C(Vs_ z#B|F489pps@C8~~45OOJjxv=rODYdx`T7$rEv+MuJS{nSD8{zlW7hkLpEP$_gmMC9 z?HAiQUv+!8^vnn+ZmnzI+BhpK8IDu_jF)q3WKFJ9YBR<3jevGcxwtU;g9A-C#z&q% zIj>iG(3gwKz1|f{QynVOjP7CaBiQ80<2*m#d8)u3TINElKsQG%^s`s%>hHnL4m??1 z%C3Z=&Zgi-_JxF2$NtbV3=KCHt3~X%i2*G%geA?d{%bWV0yNkXPc6EF(Z-IO4!Ama^IIMtV%26+bbEWDlV-atYgkF?%GwyZo*MJh}h<8P;-lu9i%0Q{-suyFrxxNqZwm=4<>TZBvWt+X7#(f>+m`Gw8Ka> z*x0x`8lS=aNNh*Kr+D5Wq_0e-AR1o#nBQ?be#fORI5H1r8kfP3D25PqPoO*R9`_>2 zEVNT5t8RgFGWLJmzslgzmprz|`syp-kz}x#Q1#AhyT7{eGZ)8Mpk$|RuExcS`9ek? zVi^3{%PSd3l_#Z2wX`$hF)9F4FjJYAmh(=&LK3MD(fmc}80#%!=7^sFyCII72@d*V zib~!&mE}fU>~RMZNNPuWQg7%+%3~;*;t9{^H!s!TROB`_WX$Fv^F8(TThrd;;ndl5 zm64Ll@La3>SkEOJ+V#F&z&7HnN>B_KJ)?}yOzlxt5fShD@)I5<<6zCn=f@RC{b;LL ze=k&nq;&!`-w#-wqrVn~jedADs67p%hVe+*xeKo<1>r*g0}`jEL=5(N#BTcMI7!OB$zIKe=f!i_0+1jWoU#<434J! zyI*NtP2Xn=F>S(<#ysKdbT&fqhmu~+u52*=X!|9eK@QH;Iw#EF<=I6+Yp50j3g*plwlJ(g77pJaSE8*)7;2aSM$$M2qjh)g8Mpg29(ETo0BnUuc#HuRYd z>4>JRGPkJ?u33AG-C`s2y!~DDc#!s;ORUCrz#hx?63MO@7YgrwDbjFVL{qvv*yQ-VaM=}>>HzOB)TAc4rb#2W z*)**~kLlvnPCzDgyau24x(On2PymD6hK;=$lkH1w(RBZ|6r%hEpzHBeaH~AVPFQel z@LCKmo?C833~i%{%HyI|59=vY%Z5<~F`W8Jhh>+i@`&DcjF!KIm0!0FG?rjp>=_uN zw!ybmipBUs{nG1ERN0tN=CF+^d|5U=LO%>&NK`?Sd}K*1T;Uxj_}VM0rX|95S3q4| zmbYXB0S)X#&hGx%DDHb{{iv%=nR-NM=!hV5d#`PMVy0WVOYrvm#HW60_HP21h0H#W zy=SD(@o$!dUsCx5;CF{=H^Wz0yh?+CBwwFXZ={uC1XP)jeLMN=eG@A)5kUk^!Ku*M zle&m9jUjD(cbr0?1EBe$q}(v^PcH4R>)*`<321wvjfqUFG&VOW@LR zZ4L95O`?AJ_To$S)-0$aX|dcmN>G2!fOv>RN&kD*$-EOqIbk~N6X`Z}d5)(jgFp2;{KRzu=B)w z*W#>vVi-%CvIv)X&n~B;04s)u00^!2F868k4ga0)A051gYPu$}E^|s*ZSaLJD+(WJ zl*wkMtO{ICl2T%{SY{tQ8F&RDm&$fL)OT+gx;W{kHQAKR||ZzIC29U6B_TCPV4W@X?PZb~0o*E-xE( zYjaqJa-Rjr&?eI1Kn5;|x;T&pG49CcDnh7Jk_Yyx_3f9j&ttXN>vUk5Lp!GeX`r2X z5IO4Ml@)S0J(gNLm{0{C02{CUBo~sXmBTrhVPEEzl#PcsN65RU1IKAei!lo_h%K8= z_hKcx2ku^XQ6Gv8)}^}CLptfRx5prESIsMez)=!T)$PaMwXtA+FM7HkJ>Yj;Ug{8g zhwsk zaWQF5t;Hj}ml>m>W*mq;o}<9itMEF+(|;I3z5l(~J-Vp>fU)sb>^G83vMk)C*Vd@n zT=r9;Sh`>@{gYEbX%^4A`zad(RPKUoXHK(HTXB+_Sw?;FKHP4is#%tKO=D&(3}RCU z1a|TF>oIO%JP?z{@#U9OBUe!BjD~{GHJyTir75ko_~m0QPbBU(`hNN`m)j=L9MyYd zhAc>K57rw6zI^mYiVQQ)AK9sUI80gL{eJk_v9X!LFa>9a+x+|vzp|iFDZ=XUpy9uH z-+TnZLE~VQE_r?lM*4AnYiU+n5(-a9kun1@pY3PQuaL)AK(Ki4 zNx5m|lpKI>Jnyf`&OXunc7E&lzM~{0dW2;X>l@g91)Xzv)8{k+8SpO$O*q zPuw?s$Dk-@$A$kMr+>puC6yQ8U98S`t<2Pt8vLpzCSDu3P@EMY)M1|gF}&%|F^HKnVC+9i+mHZOy_-#_K9vAo*_F#4jlx<2c-zPvVw4%orRL4g+WX))H5NK8V)6n(zVA5K; zwq^+x7lA~>V+lPw=GR}F)YN%J6A}O{U_zZrV-s}u9K^@~&hR(F7{hTo6QA$wZi~re zpk_G?0`c@K^gwuMN#ZZ*2s0GP+8I-5OASevBB`UjJG!Y~sF&~Ic%dBH(iI#pSHE~l z6tR4M< zV^#96%2{IWowa(c@N@RSl>o^RChb zCwzo<2sPN?1QL=R4{Y2L|M=)&uW`|1vT}iE#^rj=uYc@z85OmV;GV%1F-CKXH!5a^ zi%)FMVmhFy``s%yo(`F)=E{OtN7bLg?VBUdkhdRQrC#R55@)UX6pAGwfEwY#FqF-+ zLZ84ABn(XG-DNfcl??#kXK`y%)V6D}0@foZE66iLG35Q1Er&{`y3!J)2jPcUaU(Sd z&ESP$z9g!#Nq}G^LeRPKB{iJ2bj?P9VL@?+)~<3xzz9`QIq}I|9QB{(;mquyi6v{S z88Ah6LAY^Dsv0=@VwrT@DPNb{FAa6e}URHNK;x7Z-4t3TYMGgDCIP9yewoDy2b>Cju zM5~?WbeJJ3R?zj4RYoQ?)xF%nt6Q5UT6?;Grm(f*pf>QMhoBSI?!0i+-c5WtQbtMgF~s@sE>^4V9EGz(R{!I_0=- zTgm)DgS;IqzCY-@rEfky-FTF?E*HLOF-Kx{~ha}vFNBoJ&>V9u*xAlIRu0@rKj^Fi{#|N=*)$zxh1tauR zzv^qyexcYrqzk-hE}T?p>Jznjyx8?Jn7WOB_L{sg_1%ea%b$4fcz@k-%H>sM4~Qrl zNKbjatFF1t5=JVCOG22#`^{*r%`yC>b(BFM9(qRU=TB=16|mT7^puZHg{>5e;8Nd( z(@o?Qfp-0=FR`~fGNW{hY-g^j97oo+=GzOD1OsH&{cksSXIU7Hi}>y@4W1d6jMIpq z*ix1@9&Cqs4JEz5l$=NNc7v9$N8+BxF-}z$kxFAi!lxRy{4Fsm?LyWTaj&_!zXC*L zE;WPCq1lPdDjL(5e`JoGvb#@^xE0XxH#v3hAxO2jM!XY;&4A0TbEu+>7EhZjRVqHT zP^xfO*M?S;b8G;w)jJ%qn30ue61j+sxX_xLC14Efhtnwv6?y08xcyHWMHi1U4?JAg#hsn*_Xf0W7H4$J zi`OjW_3{s{B9j>Q!XwTmC!8vJ01D$d?)cK-VL$#kvN@*;{vj3Y4pabnTon*2N*7J?&SWkVlwVfF@|fosL>si~9LNj;UrMIZBrcJslAh^%mY?BlBLTA3P^jYmQX zp&o1At~n_BJ_f|KD>J9h%XdEBKk=RjATA%5)K(_8txrLoALWWIqySi;X9{PhW2lgI zbx7H>h+)77D#whBJx9S8dHuThJLNY@aGsslo*($`Wzb1>-c43hI$}4kSEPkY;%hqh z`Y}vWO35W4v{I5~lRj?0JM>j!7pXKdk~B2bxXCO{nqmYD7LyJkEuoePPM{~J!u*k( z1Q$dOMq|Of4lR@6A&(Ca36qE~i6ia=24sM*`yd%nVK2^KVGW*UcTU#Yuw#}(^*>wE zPV|ZVRN@LMV9i^Er!EtbQ62#%!NZ6GK>)LOVhRq$@en)vCR4&vZ)6w&lEJ-)U5`^- zAS64cse^zNb%xM10rR1lnz-;UYH%ESlE`=g2ty(tMcCh&uWz;wu%(4BY%Wy&70*kD zEPnK7tT2{l(&&V9=FUL~zVc$%NVfOESH8RZ7d5Xq=S*v=gp0U?sJZ3ZALJV`Q?X>R z8q6t?QgP_%Q;InQG5uwdYAQbh5TTQIr~@G5g(sSBi?@I5BZl>|&UUzwu3oM50E z5C;tsBk>$zZjAf~>Frj1-UssyPHp_%@e?H4d(Mb0{mxCiev(%+o%MksoLQSNnihd& z8JUZd50C8*whO|)rWRHo^A-Qn-`;-5j#jw>do^WRr$ju9(q%ty?5~Lqeg^o$wM79UA?QlzH=fpvoG9hUtin3HA#mDs?uJed zw!x)9)d3-E;<8p&wr&y9B(lAf!^zx+IZ2#lU%CgF-Xtk;|eT?J9Vfyp- z%^jCRUf@w=e4M3VpE2j>U;0I_v*-#WTq8lzrq=50DLCm|&vS2ME6Go(b&nT^s*!h7 zxmvnhgQPCQ8++#lej)Kx1S!!=G*z@>y7;>%wGp~DT%)m~A+7U`Kk7SRyV(@`XPWN^ znNaLYZQ!kh;Rk&Y0XYQ+-?~=iObkBx#p2ZK`|r~0-AH~5RliteovLr_30ODm-MNYX zdu+sk+pBg6ZZrRp8b7`f`49&@&1JqZPt+d7kn@#dEPl2EI7cT>M>+jQ3 z>ojOW#WS@kpNjkWw`mc^@~s?2yl_Ite8uv>?bB_I@11Rvt)Ksao2`+L?^zK9B-vdg z=u1}qg%s44D&T8#(w0^xg)k*XMq#yiz=IN~ITbDyO*6f%b+%oMvPPReN(p;M#IS*&^*qo7qRBi_XOED5aBjJtv)*45a7nZQ5wCpzCZIIPmod{X8iTx(8Ktd}YxgbeD3_aW zl$qcYK#^bT$AAFQ(<19*v&#tpwGnK{=R?K&<$ZZ(PTnYs@x_ODJAUy( z-;{Sy2sdi_qCDmsTq&-P>vp_sX!NJw=gXl}z@K3Xjt`pEmyhM=N*jyvQ$nbxf&B$h zDB1;~BEnj4 z(N(s98h03{CK&2gZmP$6X2umkTSpW_ZSg4?gB5z@pn1$9`}6VVUQJi@nnTh%ByICs zC1suH7A^?`Nkmplf4=+?Z#VwnsHv-v4e!(t*9Fq3CT7+)|6lNH=!m?;Zzz7(WASQ7 z2e_7hhZ`Mu3nkFq3>l_;Pw~7*rPDm)?mOU($JYkNvUc0wb}5M0I#Is<<9oT9qlU$q z!=ybXe!|~)`RjAoUyr1SPjfYxlBFYL&=TR})ug0O?))Qil45(C_3Dx@n@66zQ9CklZ zWZ_*AWcu0u)kH)68aAxDLuqv5`8evixw~Sk+OHw(60~>|rlkJm9s4eW4QaufzaNBW7k>%ck9ipsTDGw#(358vb9{8$r zK%SrfQ|~K1IEm5mFrTO3StVRocAm&13Z*c-xa--4SkK@G4K`WT-|5zJxLps;16gcn zCG}KyTJb-+y=PAbTdhP3^a_fz>=1@YDZ8|$WLy_D2iou zeOy;;F!o@u0@EKlzY@pesnZr(5wg%%*7d7$%wT3-?F9g*N`~)#iPidMQq}JSt#bU~ zz5{lsy;w>+V!38?zl$XKGI=U*w2*XII^Wf3|bD z>=Z+`NN{g_aL><-oUMQ4 z&Ims~6-%Xit5wkqTcFiXr6gmgBFkWDU@LF3m>Nt93l-N3eM4udPGj(LQ`)T;<`Gwv zq&l68NXb|@S!v7qt3&0eqv-2^P66Xuuu32lKnh^Gp7DM_3sH1qWzxKypi{hB+E+o) z<-mxSpI>aAWvx(Y+Huf#cg0K^AT{@tfRBl+WoDBH*%lo( z-4NaV;?k!&ztwihn4Fb1ro}ewfAl0ty6-lg?AxtOPSq>q|nY9^(72y80>KvM|n_Dy#!|oPe*u1B#zAc_+w`1vpNYuGQoyE>~ zaZ_#o#=~SxDNKz|)wHDOcTQ>~%Mj!9K;eod6RB%$!n0?3e08U6p`X*a1#&^Ilnb7{ zw{)#{(t}sAPodMq$4v>}X4D%_lOd6*NWCpZ3l6xM$L5*d$o!vmtvaiPl&FJ}7#W2d zmzDitLW3n8vT!tHHXBH4^ivJw2n)od%=FKY`KbmSNr@SkM#jfGE&`0EPj&F*b3dUJ z6EL&vA&@v#Qr=^mDI}HM;<6Bj1j?as5;te+MsU2lZ~=umocPnSpG3}rKdFl={0JjA zV%BDX`zbB1o${45Pilz)MHd^BhrA#T6i_gnV_;$YiztGSoQqRI@qkSWajBsaKV2DG zZFanVf?h(Z1pCq(Qnv}ZU!LS&cSb~=Nxu)D-sym$Q|!Sc@=`8P8vz!+_=f9L11ZnH zgwuFhn5U`dS~s-8xM%Nbs}@gr59{Jb0C?VH9=<@;0u&xvFr=-YMwO7j%=^4-J}Tl0 zW`hh;1IbH#VZlQVH9lKA)AcY1)XOpbkRHL{NXE&g@*>Zp#(R$zz4(VQqXnBe8Mt9Z z&b~4FRgibQ!-invrPpWo$Yers3NyTLCbgpF>X|DNaCDDR&l&+_*}Q)Iw-i;7??g{u z%(8T4{}nmZyANIaBdn9yF$TtLvKZ5>WQ+8zP+@OoSbulis)Cd1{?jP)f_M1c`g15{ zZTN8at9(}ncg*oH_ygD5`0UnvmAvm{)~DK#$aK0sptFecoUf(|RKZiTVnID!o6J9M z$a#+v^A)sU-}i&An;KcrEkDJ%c2ZLZbBpri8%`6T3)+TSe?Uf(a)=WKYJVrEChan& zw-CkEm8%Kv9@_?+=|8&iJ89_o2sgu@pX6>ZdFOZoEW9#zX!TpnG{C7@GvhWZCY?XBb@?+vJu8UAtnO9>$lX3y2(HupX65*V7J?2S5Va%&*;>Q7r zmFZU0F8Z8_n^g8MQfg@AAi?nfOK~+U;HbEfzANMYNsT^wu#SS`p&BOU1s}(`SAaQj z#bD{Ue4fLK$s6D9rDi@-mf!%>>#dJOrEk{j8LEfbxlYEc`Gi38%Dp$!0ZMj}g?(@& zFpm~g)|g;}$~R=vE~7~`*FvPOj;@v%nFoLa(3p^%!99GRy%0Yt-ClGJGdvQasmEj zXvD2jFNr%yj1;j8aN}Fl7h)Wf)u?057Plb_pr6+gyVGcTF6XmsAW;?Oyu~8{Gr6Ng zY#2yx7SWwT*FT^8-~#;Zhdch8Kzhq@yjH;+=yMF}6=(I$<;=3Q=VPE+(vkyr)G~A` zFuqb=ZU{NSdM#iB012Q>k9hXSDOM)SFA5DwPDxKO6ks%NNMVus^wY@0Ga+_H8c-HG zXekWPY*)pQbIaU4=zjjZ&Z8x1=k=KZdD2-NX*XG2Io=#rNW*0bik&#%)q80 ztB>QC_OdG$>1Bv)X{xZn*^;~;Kr<*yT6_SWA~}APRDc|1CTW^XY61|jH~)=dI!_hae_7o8CFl6} zMU+s$IVE}vu4x+qVT}@+l!tSqFj@n4UreU_9bXxW5e^Wu4~-}37@JzZ_rL0gw|+3? zI#6^x8F?b)nwxU|BO>jAjuQCp8j4kQIXIGipt&=R`HEI|C5;%%5-jN%i+FD0WI-HO zDiKZS9rGf|I9p2{f6fkCamvEXH2MUIC_8Ch+CDGtW=AI}z$Lagk91b%qL%!qor$9T z!2+|>+x;xm$>Nnqr6jQGgOC7a-t8R9H#&&57)HhwA#^YG^uH9RUH9QMgF$Mif8-mN zB)ug0*PzyPy|3hdH7drlg&}1Mj7wH$n({3YG8S(S1b|%g(}koVG%e7(@?@G4zNjXd zYmcJ)AIg!K>%Y(ldcCkAKC1jq^r)>!N)X}sVs1er0Z6p6#Gyc<{Jx&$pwoseB_Zm} zd0SgUy-7!tUpEmf4maai^<5PwSW6eb@MW9kF{wh$ZbhPWF~dd*#|6vUE1>w?AQ1Eq zMbPVtT>+IIU@me!PqZ`tb0F<0Yp+o9u4bKyWzH`#KDj;i%5u3a7b!$|v&4=0n0WRxI zTuw->t4tqdjUWxd!^bON+A{yD9~U%@(L`i$5W;ktFNL4ST16_heck007v1t>*@~(@ zqen$)s7R0CUmA465}T&JU*e)~WA^VYNLY!-L;Q3x4j!7)GKwicrK?%owZzFf#6u9a zndESaeuIj-y1z7)Kdq6=LA{wCH^qaiGY>i>eEgtDiBqV%J>F=S&|N?jyH%5_HGZL8 zNn-3WoGL$!b(Qh&Do$pel)US%gNHFz0tbS^g=oFFUIhzj_M$_+owZ6iYW)nAjIiHV zha4Rvf)9VdCXyU78MYH9eV0Dpxx z*9A>wWyfby#E_{)7v*;ELOllvuU>=8I>=cZ~3pIoYgrNJ&sVjhUZqsSc zOd&_Hdn{`6#%-A3Xv5Gb@w?S z&8%*Z{(wn8*Ty=$H&)qr6c{0kh*a!teKC-dolbhTI&k}m9I^kV0lISj_xz@LLf4Eq zV2ir9B%t@Gn0e~m27=2&DPId4R+ZQb)}f`7S*o#NI!5fob)h?`iqpj}cpXtz$Y>i0 zqMN)Ps+?bKPR?BD(*0cjKSpn$fOD6~*r%igvv2jXxs?|fnk#aA_XDiflLmP=Cp3Sl zZb&I{kJ7~tsEzt5S^G1caJ>gB%5U}q>LEttZuGY9zb|roRzydKAwAx-yE~u5UhZ1_ z$`+JW^}^|NqJgf5vZ%`1GKKnHwwAD@Ii^Ix?iveqpfJslTvs(6wbiy#eccD)^I`+M zx~u7G2%Wyh?N_Y_8Y=^oi5Nq&W|9IkPGgs!mRz4>ZDFx9u%N9c*fR55%L!_868iij z6z^u!-c8MK0%7gMDd+Te0&&!N1<9$Ina19p(SzUc%c~RW@&KQ@L@d2E=&?V0JnSX3 z$(1<5_UaD&aY-*>sHvTq_^t|&*eVJrM8IDJUty!q zqEoixf3rR|qBkxyTg3D}szr83raQt?x!{6d7O^me6evbF+H(Pp29PE8>Fe|lou>cu zBEr4l847{LL!lU@TkRp|$W>;ky6|pKHjMJ80r!cq6Qq$88n|8Po%g{=2k#GM~SJ`UJ!_<()QJ2mS zHPa0`E}^c>8L7e`v?wfeiVO-xQOttk#sp?|r%Docp>}5&ky#gjZN5Bg)6cPDmb~he z$v~x?dwNB@lkR!PZSgbiL!;UkaRu}Ui7+Y^>Hw7Zh2Z59Q6Vvm59jI^it9XofcXgZ zC!S6e^hB|5VfKJ9di+`~nGg9A5ic*n;~D)PnVEYGj&E7rmK* zjRqY>x-*KQ}JevH&VNGb(}P-NM_T*VkWLANj?(WBlZ#x(@csE= zvi;w84*q{xcUp#BE+9m9PNV~QM7#LQMb(94%AuCgG4Ef^yDpi$Qx6$VAv=%2r`HpW zv4j20^2N$`Gwa=NJ;;CGmhkR3%_k*2x(@x6GX}(TFvf!~A50*?zp7VJR{x?siGmL( zAw9C~5PY|~YxmH$+%dGx`^?-nnU4kc`L_uu$Yr6E0VS~HD9t$KuZ(MN)Og0d6vk!5 z<#WN>-5}WiZc=nnpLrT~IqA0=v49*Ts`Sn1ZSyRrY!NCjz#`YpjVglX=2KNSYAwi| zcF(o8BdW-l8EJ<4HTm)CVx2K{{wxGF=x8I%?_$esgG+Al8bf3mo7ndeMt?~qB~$sx zgNB+cab&ji`-d-M*=WQ;hEM&fyDD!2s zk;$dP4;zpvvRy5)Jxk~t_vq3g2Dxa&#Dti1apHn~u^GmMGsn#O^r$x=LS`(-GDmUc(|!quPx}$8=i?KAsYuHqcQg-xyctwJWsF8{up5Aiu7_LR+wYA zIyY7JAQThVpD`;9h~?#ziy+z41CP66l4-8uV#gH@%kV4ZWE?oE*?+Aa(cV_C<--i0 z@rWz(zp`x7(e;{Wr#i@d=za#k54W(h%>F49)N{4q`BrEBoU;p4P0{T4VVg0^k%E*D zr-VhG^SIeFHayx-IkOW+Dh0hbcUlp9-{6aNfgusYx@DGQ7^UqA6zAC)_8t+Pfo(@a ztPy1CRKvDoT)~&UYWFuW0&+e62F_*{(y!E2y8ZYDRj#QS<~7B!zYDT6zmn{R5v7;X zG?=H)LkcTN4+7|6cSw(z59_Xo%#Gu9m;91$xdo?QH&;3??|rN{+QI8=ujyO zClq`9%jI@28lBZGG%N&{-da2@lAW*+8K3@?q}~;mo8aVl z`={k1IN{O!&ok> zrN?l4DSpuA!@;qUz~E2q4=jPB4h?ub4h+dKG;)osdcP4V>x9InUnqEDbnZ0e`5f2xK5~v)~pb{k^98HhjTq*_mB$NMaIahBu zo?p{_ji#o`gcz(oq4;6^SCdW#kf{v`f7v#$qBr%}Nr#@%o`72{{lSzMPd-RUW>xiqEr^+$6 zFuind!g8prq<^2zd?(t6?`2HWqpAqQY6`2@{g#^rmqw>O!p`^Ds7a&MQCLgN+{Gki z3XM2}3cj_h45CELtT^Q)C8*%XAR}{a%>Y;`#BUAuHgwvMKBxNZz1Lcw^g~p$E=JThT3?r zGGvss75$Z)2Sg?CbjIZtQ}&6bo0;P1jeR`8@r@o?I(f3o{NPDV6JD={CV&VdqFQaaL07j2#++A5D19 z7AuQKIOVi{3-puhMNLs4;(eFCyJ$6=ASN&W8CxB23j%wRlWSZz(8oGm?`f{YU*cxa%M@Dqi|vmFO3cCwzAWh@6MAuEga;zS2*clUo>F{$v!c0JeqIm+a@`j&)#b42|B~!|n-F;n39k|4(bs z;{{!kEv{_sCj&*%Bo!sc5K+zVnc*F~Fw|pXRO8ddvsZmPw~C0Axjh!b^H??9k)@TI zzfHmsOl(sC+sFzuX{dFzXRteyVBTX_nJW=AMI_|EGpVhadb(34XQ&u}(R0R)4AfT)bCt?`uT;N{8R zw6vm3Z;SON)A{Em&LoqMvpl?^3Jo!Q^8AB7T8ql3%!z;uW9l@)_;rviqL^j|O6^=3 zA)xL$oNAS zNS!D*4tfAeAv;;2?Ki;X;Y*Dbsi9(Ns0pFYNX<5OQiJph2vSigLFD>j`;Vi75es86 z!P&D*Uy1)TVi4E+UqCQq_3Q|wiwlh2Eyn(CuDdMSX|G~v-|E1%`}NB4+VbJ|p7OtK zV_wVfkN;84tle7;Y6|~-!T-qA|7(}{|JqAB#&*&d=9R@s4M@@afT+ikQuq#VC+%~T z?mMY5SadjgiWU%mUk0YI^!u+SDebKbr`YnzJl%W|0% z$0{HxAVVX^ljilutPlotOq}ndMl#`%OW=e1QVgw2>a4zvWM?m2HR77sdZrf^e3us@ z(oK}%#FkiGv&Sx6gTwxB@#^Mr^O2n58P~yOae!a|7Bsp+7#Tp*CkBDKHh%8t2>&7zb1sg%lMXt%0}hhVs&!IzQgL`iWrI$5J<^tReF9^vV&a<6 zm6WqWZ`ku=H^R$c2%(^Yuu6CaPv%I{#%b(FVH<$%fgF$Bqy8we&eJ9Ck-taWun~Rx zuXD<%e=y&eCz)#t&7L6z%R8|+WNukjjQt|bH%%Bw?JrP)?vxX5@o=Bt>S@dY<{X_O z`QD6Y-)xSSPmuDexU)2HWFF3jNoyE0$gccCDplaYsKlE>#SXtSCc!t$9 z@_Q#eM#`+>t2|z=5p9Uyo!SpIXhcLYKK4*pzbusBuI%ABPhP{E36-rd#$mK_|6CuT zBz_U(`M9TTcHwgen!?=rxK9|e$59i7oW?lquK&1%Ut8| z`5AqX+K%*%`L0vD(>_K>8BNRb;Xcbf1A%^OTcbPl;%uDiTC;}xZq!NZ-&Y6%dfjl1 zjF}EBJRh?dnn#*TpC#eD3c*dW)LW@ZELkI`&~P}*#K|os6eptNxB$XR-AE0ub4qgz zJBqVr<{tvQjV#)wPmNqOP$TC70;`@wYKhXfR#1R0Sps2YuJZlBcv>2ydF~~V> zrir_XwSgH8vVAF1V{9P_ghzTs__?3)#c1Oi7WsvBJ@Oa9%SqELDV&WTW@ix;ecVId z)2MkTAE2UvQ_|7&ZI!)*cC=o=^=6 zLMY~N$)r{Q_~8(bg|($2Z&L5clM!*RvpUT~>e&e}jmX4xrwK4ZOV7l^IkEjrI5*BL zZ5^?>IL_)C#gyH!?YPEhjIN=HZD#2VtQw+6XEG#|H2Xl~4(c=y78H z$0`)5)vU8z83V>{JIqIi7hM|M1KX``CowJV=NSU~<4>t^X%>Y57*{n<$%zLR8R#?V zJI2ot4zd4sW*)6?{#;qRnIa?|ES9EyYJ#S=@x{&Ul=QB~C?iru+?oKXbjp=FDx9>r zde-^uoekaO9|i#-b9Q%|;UIJsM8z~BtmsIa)F$h%X~+=>^sT&lwt1o>MUy2ZwK>-R z4o{=?RH?_4m~m}NQBzcG@h|SaXIv|TsllpGlpGj>Y<1ix#v6Bni*^3z-kM=Q^xMOP zQ2i~6W%0jN_gBu{f%0iH;kR&og3zsQnI~ZUD%!**J-xqO?wed$_$&L>x5?PGhRa>%T7DLyo{@8TUh-lb z$*N!#aoS(w@$)(Xa*I5x=HUsG(F|f^9nLF%&ObyO(ovaRth%^Q{)jUzyCbgt+V!D# zY5ce87(6s&VPBbFrlS8oixq>%H8t2IM~;!1r2ZPlp1qU#^-6wJWEvOk!I`9(PLF%E zyu$uUet46lz8%rz z%k#1RF-jeeZN0xdqud}d>0Z95L`-N? zC5vIKEu!VhO)xQ2E4J5yg`xx4Kt}KGrCu}`$bIcelOq)C#}oy(FyY_lQB(>_F~!me zLyV+n+Fa_-s|_*hzT@j^AQ~KSXSv9v1NuJTO}Wwe&-Gd>|19Qj>G`Aboe%|<`Oj9b zpc8^JOFtZ#8K#ydDSiaeN!_&DccogakkGxbO^N46x38dTTSgRXUhyLt)+I`M!@71V z+Q*%SV|4^Y);~8#ZzI$7HJ;p~P()k;c(D%W*9LDz^j4@bvlbX)I< ze*N9gGwM{bPYQmItRMBTGPDw5g=h+iwDfe0SkehmlPt4alN}~B3|~70H~WuZE*l~P zKu|fttp>i|>srV2F~2n4692BTIdJn+iqa$M>SI*z);Ze$^S8u_9=mdf0ldkXH`F++ zGj5mQ(m&M5UMcb;mZU4sh+=|GX<0EkGBK;0FoUADUrx17X|4KUH(3S=pOqcg8yMH} z@Ut_Od%1Sr8O4`Qv+TTm`tm48zdDEF9|_6x{Z)>HEeP5#u|gVgg2kQGy#odFMN z(=4rS?^~czFKJhjcA&Vni^CQqGDcvk5?D_)^2WLSD{i3L*9Ca+d? z5GJ_uvwYfbUwUnS3RHyOOoo1d!8kP@th1PdT=>nuqiL|-+<4r9_<^Lvgu4|bCgc4G z^>)+0T&=4G8wLQl8Txq)!rF~HV>AYnRk9UpDX|(OnRyAub@{>N!}2W49>HC`YHa~1 zaB|bNz@+Mf*cjgI>`WfFo9!XG^R@WcajsrrS~2zk9B38Wok4~x6Cc3O?`W#3Ov}IB zuK}U%@1M*QG)_e2)F7W+PH=X`9x{Q}r0qC6+;r*ahr6XmOiPmCg$Tm+@*|t|dVMG# zP9kZ(j!dX195<|KJyMi-6gPB!Ne+xB?E%k1tXRVtkPU5pG>-8!eJ zW4p}*z%r7M`Cj(sz7IOSv>EWkoCuj%5i*od3*}SrS<1*J=YZg2G=>~C@YmH#7melj+PN1e^ z>pA&F#o0mEs=)MvpMBoCpy!HgOK+f!?Tm7IjtK+Tj1tg$K9yf$N`g>Po&!40UecO8 zEnZkxRv2DX(VhEP@+~goRz~whO^Gpi(zrht+Fb_8aFrzIfa_V_ITjYsKL;gp2t*nvMMTjS3ss90FNtu=N-Ij5)XDZ$-5RpAcfTWTJ&*lF)u?}4Sb<%69f0k)-Q{@cul5bL^V{R{ea83-xaztkMVqo3+`h(8 zYMB|kzx}2|lHcGW{zp1F;fQe`hNge^9#Ng%g^3$uoX-t?WZ=-;?l`B_E5?{TAaL_9 z7R%xbDYf{Ivxs=5P9UFi!qklzItB#*_oB#8kqkW^)8Zn>$Q~`DWz$0MJ zh;}M=jxUZF0EdXjJ+)Kb$=Td7(cFED%EnLP$SlQ8LO9|H_X<}#iq8LjOg%S6=l!v! zcd*mw>+Bey!W~=!87L(vMW)E?DHHHZQ7S>ENNSuqU^IZukIw3ecPjPky8Zno_KR%G z>-PJY3|30&5g;wg(3dN4aM$dvO^5g6*6sO|;0w#|C3L#3c;b6F95D=Zk6KrtS@#W` z72O{0*9j!Bn^T&VU1BXbvE%EJr=#9az^?o5m&6nYa|V079-clwr>uyVfDzwDR5N&~ zYx|9cYRUksLnxYvYrub@pH_xz)x^5Cm%235VxjC)l~+bcx+>ycE(M-m#B z({vg*X&`uLb5KBp((N5=2_?<285=Rol5TQBh3kD0=7lA=jYEJ4y)A9&J4_<3PfLdh^hR)E#z z9DY|!?~q%XHI*Z+xPUGVhs8~gzdJAptIfAH;oKInG0i(X#r$(zU0`=VxW2*7`5ysu zf_h_OCpea8k#L&N!a4N}3k$#CQeEQ38TC!bTZ`u_V<6Q}F*d7f?E1#R!qV@jQ;Tx~ z%c4$mXshCM6<*iiuBxV(cGh`~E@7X&(83Ns8=q|YGQ*I7s#Kfp=-FJolJa2RwST?xi2UMmPY8-bcf%oFt>&+%8xZ(F;PN0nwHcb1Fu!LGv!x~ zxn@xL%8Zc3-AfMWtfPpS}VQ-R-+6xp}wY^abO6OY;l^YI8R>;FP`*9Vp5FA7z# z@~Y|s?N87jtttER-deIg{yY3Utv~d5A9*{biYfM)vl%sLGNn%}Z|K5|S(Q{)6ctfs zGiPH|SBLGs3*T0V!;w>DbtqAfms2v(4T0D^1(o}$Z)9kNNnp6GJ#Zj(q5o>=Wq=RK_vmMYxlzs9V4H%H2v38DRY65m9HLKgrM zQWl>s(|`v|7Fe0+CguvxQp(DL3R5~VdKSPRumynpN(kTihJu)d$9FM&e-&KXOUFyE zSA)wnwSfLh!s%)e)t()#@hKnqS~DNCLR}nudH!T@UvKuG;`y2Hg8XRUzPB5u72;@t z%|WvXO6%lElC_L%a!X-R-T%aNbN;fmUmeX1b130b5>4xiE2`oao-IH9vu(02A)Vgq zRmbkpJ0G-kQ$DZPS27XRg3fs2o4Bkzqk8bPfBQX(khIO3QRBXjI*+>hu)>r9M16%R zp{FmZVEikAL6P#$pyrjbin6$);aloj6s^WJ>SCSOnkI}7gy9SrcOtl+0~s3GASya4 zA|*|)6-PYGG!t8G*eR|4+gxm&nHigHdE|c~p|>9X#|=M$H~i({CYJ^G3F5pNF^4Ry zKw#go)^Ha_wt*EOK6jj=wO|L7(JJDeFHC<8s4^#BbyB*8Qz88wdmCwi*t? zE4u`|ibcIo-TW7{;k8F5{@LGu!{D*zy`N;LEhK%?T-Hh8fg=6razk1Bc>u{u77yHkEGM57~M7^s7@| z`0SnwWZzqFens(Y(#hhSO;f*S`j>m#`n9!oqrUS$CvMYrS*dNWOT%wqQkUBFZhyQd zGm+QZ-WSQbMclZzrngxxPWEoUT3p=h@6gNAGxa_bUs0v5j^*B3=5DtNwPK_?FJ{+X zSr0syyiB(EtF0s|%3wwh5TP~t&YkrU!NHV*&@lk9XE!hFoNzx*;j25mJCb=-1r=C~ zXQ_}Qf^w*#0`TjlLgT!m#lgYIr0fe~dso2J{HRpXeD7EAHl8m*dG`4hB-jF|9*6r+-A9pK>mfcugF{EUqtxrxmDbmE4Z z5pUtxt*as1mKR^?$?$PF`QwNnVWskkn?+9P;){07%@ZJ0xQhS3IFTRVR!-AI{1N#`o59O#O#tlpSQ}O z`D|{%Y>6k1|13MHbmg!1P{U#ZMK0D60@Noqlb`%o&&@9V0L2#J)G~ z%xO`BDPJ&q@XL)a1VyT#nP998Gd#H-^n%HEnQ)Mw;t%03w+uys0!!))0hcFC z4Nh+Mx6c~~LeQ?!fcY2^)JMiV@^1hadM2Q_C1KSNgPRZqfk}Ws#LjKc1yHvYfVJr0uXo#$b7AvI}!Y+T&n( zz>bUBFST$K;JKN##(=7VRQz~SC6jN2)%(VO@?D(vFJ_MHf%7|1dDiyp*Ia8v(q9>8 z-?-cr&Y})!=?`|e>^$J*YaDQ$ondD++d1m9Uc%xs9fU=M50iqhq?Y#N$Pb707yb_P z4LXA5i=X`EM1~LCDL^B~oalIk0DbfD!65kVxi}gS8KL&Hjkfu6An$P%IM)zO!Gx}= zw97^U-ADJb{@ngI4w_}rIRZh`jOkUHs_884qP1rQHZ{DhjOyl(KK(_MbDTUYncSN7?2l>KmAfnJ9VIa=#rv>&Km%}N`s;OT^H5la zM5j{y7&~3eC21RhlM$M^Hy76X`f_^N@0iy`9R~|DTgVwhKMKL|G{4#7Y@;8@YacQW z4}U)q%5md^F~#JT`nDDdmKC@;&9L?U zSNW)Fc6Fn_Adh02o_WPPVQI@dJD&jWaJ>~)`vl)qEp_@eo!9V!;C5UOXgUQdL@R_4 zpCZ`JT-w~}DHXx(vhq(4KA~MDWZ=1 z%IS7wY~CS$&uf0$&jrB|@CWYqKf+fGxT}GtnvQ#uPPx;%+*kHQ?TsDkUFxMTy4cg5 zpo40xU>8B8yOl!M&4=}Op>P)OOFZ3=D}jUU1GRK59`nmA^1|_a#;s_LW=E!02Z?eC zA}GRXr-Pp9mzOj65)Z2q`Z^-&ahdx?2S>{Ajf_|c?VP)Lo{pO#-xxjfoYKP3LCTg5 zaZ{d{>&y15>rDwWE{|K{Xd4?^Xx9iDt7{EMl+bnO)gM$vnwxvxUIhCK$TgL4BTnrZ z>00CG>9HDa8LBJ0<5h@Y$@8~xKJdjJXN^Yl2%|}r41+ca3VU~~Spq`>9WVI9n&OHb z$<|aMDY2XTc3+oxQ+hT9r5ck|6SXW62UX^a1n6G5$<%{l795_H|6SL5*tS)GA6 zrnCel2J)N5>cz>W^7YwdEgl7A8TN}K!zZXbH#*-l7nC+_f&-^780ny$soxzNb$=Jo za{f7-xkEKmZEEQ>UyT?;hU&g`bN*uvE;UD4_)atXAoOB%$!_cCo1K*Y_H+m;wF=ax z2_Phd!b%D8EbV3uIDbUE*0k#wf?1J@p3PO9>U!GpxRb$wzQP7Mr>!1iPYW=6HgZ>0 zkfvh6x$!3H8O0}Odd3D+{{6On<|95tvrG`v*+pL5V!elSU=_$v#1M(_dReJ|*J5ti z6Tfe~JUa<#$RYvHclvUlUbcIPRv}+cPS0~}dIf!j_`iEy!lL8v?*iOffF--}p>9O7 zu`?`1Mw5rgxUX7Qn|7akNVo^LH^0FOy_@Vxd&y+xTpy6(mHFANHRQWwV+pbCpMO&} zoGOwR-Pn2o&9eQXWP^!6qC4S2wXHWaqiha%7{V|o*uA@Wf8gVU;2c(Wea5iy#5DI` zkuYrcdOJ;Owzvi+WZ4~hTe0-+Lb|{9RwnIhR8Nv*%6fk=ELG6TP0apV9XR-d#lZi@ zD}Pxjo_1MuxeoW3fc+x`X>;R?9e&g>%l%dif200;Hn-4tvTxpDO0pS9yWMZ< zYvhcos=JYm4(9`*xR=UQmD>G9#5{mjq&BV7Fn1a%x_i*^jo^u|Gw@zmfX*c}t-)4b z)`Y4l14qVjtN$!CQ*{mrbn{Ia%?-~|yZTVx*mq*!>>G1ajeV(-!R6}mJGRUV51_u8 z#1Fxmy$JTW&4mwKk(UA~? z#S&0Pwg~k;l}{C-<6b;D&ybNhXUO#FY_l1M(C!C+G?L| z`97`qO*d@ROrF~7go$`phelC`IXyga6IFUrLKhRv_q40&Xpc6WE5if^=a_|3H$BXvCb zVG+|~{DG<&RqaPQNLhOjNiRm;SG_1)cK8^4Si}*W$0XTs@n((7t*c0&wrl!0@Z_*_ z)G8lFEADOt++85!TzaMXXi?i&4g_e;Zk{JX9;|_PTXU`3el>q)byAIe(qct%cIbM) z*j6;diWdMb?GE-27{xLOwr4ueu8$5?T67=TKVET8tw8xPIWlA47d3{jmqvrlYQ3Uj zs~Eg9;ImKb3)TVYT&B%L5p9y~M${Iue>yQJr5gp^UNh0ROZmaa*PzQQzbA>C$b%3o z207{h0@C;QTWO+b$Co?5TZbek%GGjuhr1zUZyT;5*M@5hK~jXZ{Zv_)SIPuY9PsdS zi=OfNGke}Aqn*d5;#hi&bsiFE^od|2K}W^MING8!88sUUUb1zJt3An5@vC%i%et0i zT$^HUN0f_nv9;yw2>Ch0m=*3F-^aAcl~^Ld9{DGgy_WWx$xf~?&1{)us8>a_-YBsW zA-jiVc$;J-*>+gQWgZuujz_4l-vYy289aU&Rn`BMA;u-aN2~RW5*==Du|LK<(h8Bp z2D*1Xo(JIr5IZrp_9jstCRW&;zG7riHB(MH+*9%;1U^5BdVwruln~+RM}enFYCJ~*2NMn6Cq>uDK6RO{^>2EIY;Sitf; z)CQjr&=(Sd3ktk(J_SQjK`~4fU^vy3HJs%Rq#LB4HR6k!9CE0nBX-|G<-7ZZ|GwGm z;cZ1mR+v2hoERnNJd;SD(}!Mu?9ntVKYyG=Y*S~)^v_&+&nn=d<2Z6r#}D8u;oi?m(WpXDrwM1_umuMZIr@nm zz9|!t;WXcmKSaj6GA^!2&8l@*2N=t0s-v&e6tye#+=p~3YUHaM^2OwP;d7mXS)Har-&5mKO z&mz;QAKF)U#`<_!#`hTzzq0Xu-R94uax$Gb#zr9`#z99nJDiU&O*P9VqFNvC^2vzh ziJGE9Xs%&O0=;$Vzm==_lKov z=hT1FhEC1TFrg9GH$;I5#@ckrNqGB*WvQv9C*+h0_gf%lkhO`Fn4q1*F2m?>7f`5} zyR@qsJ(gZ_PvQtm3&z0pl<|ZXH6?j(Hu&T`O+v3OwYsAv19_a)<|oy=Nix{(9&6@_ z>8N3^hOV5Lhei{cy%@LXm%hLU6@k|hdM?40p|MnfyAj>%fo_{Hxik&C(#e>PS%R{5 zhvu|GQ5r+%JFC``s^WgL(M)8RW6(^~91xV@oC1KE+I?%5BF4kr9(zdy+MXN9HSRg_ zFjjeMB*FF8mPdsoh?*tbb2R@WNVtCO_yhMNe9$0$8vjV!heoJZsB3L()|o&ylAOI# z<99HdLBC8F6}dLCbDRSQG;D z>YTWb8$*2^TCA8s-3cnF8^)M0t?v|i`%mR1s6&rQSgHn~A{-C?3IT~}&f6bczBgjZ z;IT-Uis0P?Nil4%YHfUVX&DvIlrB%O`~2d$dSp_8Pk`^#gtqS*ZQdQ&13c{CGs4xZ zsZUdnvZWfS=K-Q(@YF-^lPcp?PLRqZS+69)PmF4uR)OqV-FPL3fVTeXx-S`mdJ;ZX zR_8e96a`R8*Xx*~TqeJ~j~nF1#oP$0g4$j`Wk6X(+PT^Uy+Bt4o^^F;VUaT|L&rVk zTG@Nrfc0F0K5Kjoq=j9Z@Y{lGh%v*$n`?b>U$h*UB;%?p;OQ5qHcy{+^H44OTuVDeUMnKeE`FLFt64el-L}$Sxr6XT?$aj!jK{$23CZNw1ez)fm}Y zh{TO^dXjwiM|sz{;seg^aezu%=HK%SPsbXkxQwH+rlPn*R`9ux7BIIymD9~0td>w_ z_yED>xZ9qV5)$b!^k9PAv9Q&TflD&6|Oy_TZV^DK-!Ln`)IPNU@b zn~lL8>#~g{90^%AhP>EAovt{G*Qh$F;*3?5IUVbnJfXB)O(W(<-=u}$#j3!?J<;ux zG4g3cHL`w&T1C8;$jlrne!&U-#gG_x`SYC&!x9==c7=Owvk z{{nAIb(D-@`i%MCRcQiKvc7pil+1DVvGGMkYgMRU&P+@=Lu#i+b$n52&EcW=Ra5*{ zV9w~tC#4<`X0%B>!n7lvFuyJJt0IX8g=)uTtjl5>szYWMdMc1{Tl?M!x~58B`N@Zh zjsfWudo;O=oZ~xBx_cPI)peZgl4}PL=;tq}M;XwujrG>{%nLK}ZrQ?P4#C+R-*^qou*hQPzt+uI4P!@|1Hl7&7bFR<`jE<$$Q+1vUHO4H|W|J5g(fEz48V; zNIbs?;1>8A#;lYIrB5{xLrPz-F+2OYN3md>nxCEJy72}Ns!Nw{C0M1P#@&Px*qW&FMU+(>8n7-UWCoWiQ?m9*?rYS_687a*69|K`pwh?HG-t0sr7R~TI3 zu$x{Y&yZCMTU#@F>%x{gu%oeH-Ec-ew$YArGc6OQ*A*nwIpkm*YDNihEa?_XDjf*` zN$RG4A5dGr?u0iQ4{sm}KSKIFZ63-#b~!yGuljPqwY3~@00FOla0F)j(nEnm8|??gZZ0&@rQ(`-2GKc;84E%4)J!K zl<#9sRLLO)1sa_^Gz|-0seTXq^EkU}WHX)j{&cJ!IoX+4juw@oiBV|lob)v04b+v} zHIBkVT@&7#wIoh}(bKRby07xVYYc@i=|}&NDFP%xqDVRsR8-X;s-+h0NZPmjb6fEgTxt8MzJ!5g69%zUMZq-)P{{5|0)iz?V5dr+e+nYYZPP->^m{EGcH>k*a;%DY zU#BgF{P`Hg+`OpBFs?->er8%F(T|dFve)S)maK~1-vX}$FR^|f(;l_rhTHZ(MNpi; zQja88o3Hy2KH0v`wH78O5ayV$g}%#VDJ^=^EeBjg(bF=n2neqlG$$5S%9NuUO_;T{F@Gnx(@hVgh&hDC(iK+ zu~JqYpot!T|3g|_T!m}`Lg!I9VO-pGLpQy91^mvov`F##-;~Xf4d^t+i7fGa) z0;Bu9M{qNpwH55ukl1_a8PgaWU*?_S_fh>t_jP-)@$5pC(k~QpI(2u+bA+itIuXOl zcU0|oa7w7i<@KjLI|WFdn4;*|_%=UFJcpt<(a3Ne*!>Lc_db9gG{yZogf1CQT)GXW z1AoLhi`$D%Sv*kHuU40w`nk}3K=E}VaNQ626YOo;!Noj$LK;hw{D(hr6Z-y6oDAj$ z8EO*7cFn0n%WdfdL$8HqtBI;mP5omp#>*oIei7k9{|SfQ!SaiNX;Ek?&oe|Z_EB6k ze%fi#!8$1P_HPZdoE3zB{d19L` zjvN9t)i}e~J+NKizufaeXBE`_1^1a{4jp z`PLA@`%3n0!MIRMV}^gOc$G~5D#Hhp--o~##pizTtGs)j zOzumi8`nltkfmGg`cnTvVk(x7E)`?44D;x%BhZ;z%Gn|$?$1D1^(UF%O<hkMIBJayChsQx7!*4KXZ%Uv-wlnbl!5?AU+(Z+lBqZ?8h{Lq(x z*B2h?sLPQ@0D&6<9Sbotv1&m|a&jRX3^t)4A}M9MaiaAGA0Nk>jSovbi&;HOvy%jm zNt3HhMKw@Du58mb$ED! zr9WHXV0vR~$xpsD-i)An*Y7zX)bFds-|zDPn>w(n9iR0ZQs7De-%^Dst3D$plk|@; zVzSA~b8gqPm_yHWEi1%xEH&Zrim6D<4YYZ7m+Rxytb_0)w{4cwVoE4P4LGKSHF;Xr zQB&hAmwG`~lEf4zw2-mBYZtjJK;G_i_Vvcqr$pCWivH;=&V7)f=OQag;erkC!vsF| zn2np5S`70Rhv0xgv8x{6FJpAmB7kN?ZFMVpH=P%b%^GuVdujTQDNoI{*xK&=;I<(( z>RLjH-I0W_?<`q(5?r4LN2T(zj-LmK+60=Ujmfaz6;YAI;I&R{vwU~SVv;N8Tuz69 z7uaO9W*HCQ(B&Kc!$-OEdjsU;QmK#@oQ`3ddQ>j$t5A!@fS3wI-;YHlAMn4Jjj8@I(-THA&GV92dpNL7PincB3JxpsHe%;Y(X5 zmPbWd2TIQgNMu1FV{s2YWLYFYz}m`VHJ!j8dKHHqfNN#znL4cqCXa`R%_=ll^OHr7 z?4oi^ukZHBcMa=(4EpUXG;i*T%TxT!C6y#LT-=?Im?0%Ck90iyVRgqRV+$$)Q{X_? z2oGXZZL$9&TXKRLQ5ux;b9(kN%;{hiEhGg66W(oHR+d7lLc^kLWqRh((i^Sv9C}fS zyLRH$6I6OJ=X(w9+Qg(F=&mR21auRBB1*m^W{V`Qt$;p^Qxn zbw`3ECiFOJ^UoeUGWct8ThAW zVwmex#dK}&oT`X0FOpU*mp7J$yj1Znc*-d2tLj^k$SkV%mes$KzOJvn;29Q*|6pI3 zk-Ap}b1?vMRx*nyp&(YzQmU8n&MoS$FXWn8X#PPeF}FPNVq^-jgTj$r9Yy+BINM#C-28Y z@v>VEOnI4q3NgN%QDMA@7lIPOwc=83;$aY$#H{d(0Zw2d$vu4extA+J^aGA|H&dv_ zjbqJ1v+82NOho>GNO&=7tSYf7_27nY*iW7@==sZ{*2=6w^QhKFQvWiTNBnguqvW3= zRk6B>ij}tS?f3`VpFbNGl4hFnlQQ45K>6#u#l7B4X+-&91sp94fsRNRd2l>0Y-%N!Pku*{x(8aXW*@1)&Z3{b7e28x%Qa&bCdIr_0*Tg=1;7z^JYI# zjlz`r%N(f6@MWW#UreV80EMQQC{xoYY3XxQqT=ZkLXcjG5sV{Pz9|jV&aQ>3v9AvB;_N_=9VEc zpm|GF`IMl!OH#D)-^|$PLJ9IKsVDyd+*+Lrv+W;c30UW4(m_7Fxbxh)YgGP&t}x%# z-Q@#)5qtAF`@D04IcuM(rWj*;?Nro^+aYfAusBxB?C5-0yk;{(dr5qR$;dv;_9f3Z zX~V>S_naakMo|b`+ZXD-0|#7`TMw9!tFF5`U6UZ7czbb#a?hv}=yxOmJcTx@TKU~W zOk|c&fNa5x_3&AywXh|l9L`BKBPsj#{a1VbdYgU9)F5Wl?XMWM5!y}fz@=$d7H*~~ z$)mUT=Z)WRg;wU&Zbpl!38SQSWeHLh%uHN8nyRpLHj`jJg$=mt65+UoZ`KS}QiyR< zCd~VrbF5@y%%C6oy5i81u&hZ@-R+v5H3K~)(e80|;MTgCkyBgvqga*1aYJB z+@}nB+>qjk9!>lZ82hfBPkPfV zD<6jZ3{P7`eN*(%n6&WG=H9@lR#Z$Z%c@UA^Ok$6g9x+<+jmhS5$a^(42mHGR1DE~&MGWSKayQE1HV@-W;?cY9p#13laC7Ly0t zin4TB=*(Zj{qwip9u9*~GzCwY19sh#Frosp1G(wYaTi~oMj?Wk^n^6W(Ttq2qSf=ru!_vn)JT4(A#!?%`#H z5F`2X+*N^bo}=MEzg1_BYxfrdnM>W1q9-w>dIJRN2Tm*JfSqg;BR#6GZ4xEU+$FbZ zlH@2O0M;=zA4qfRh%y0|y1WEAGD#XNR#lQjxr8VRNmz1PQ^>w;JX>J~XKGpQd?LW)vldAHXwRm|_K4qluB^U$XMrqfz-l_B6pNQ4n;WT<5m%L> z28C5l9$YkuNXCto9P;8RYYV;?lZaSH~} zP!fi{QXai0feV?~ypv;0XYP0(;n^a{#vxB&!b9v1F}uE?<<-i9UCFs7Yc0b?Gsj>5 zt2HBtzErjKwGVMJV{j<+i;pSqu9ixonm=8F3TA9Dq5$O0vp9z3Hdpj|w93-{ha*mZT4h}8_FF0lQscJwraI_8&V(Q7-IDnc#G@8Srw)FlZ z1Fgo2P}%pRdFunoZXHt$p55_znaNe^^OBQkZ%wYV|s>-F|_=|spHxma<}hCITMSE1kR1d zCEhVQ_T}OE=-vHB%T#80bDHd{`#lcB&9lEIFFnD*A!U6h#mja7Z|yE;|IZcFXnEiG zX})%pY^+_Y$cY%yYiCv^EvGBlGV=VOAqvU%@)8@X9+QXNq+Pg&hlH}@?fAWRi!vv| zP)IJX*Z(SNcBR!BGCuiuUxFFzbB2P`q-t2%g=RH`Gyu^D{z%%8y4!18pD^-xJYze7 zUN?4fbuB456|GoKh7kZ~=xCQpl@$Xg-++Ib={;3H8yea5=ZNpMIs03kFj}1}6MOBU z-w57_8F0&n5V6eMxuT2f0#lfIY-3?9e1obqO1SKSd<$f4oH#On@Tg2Z=^Y*iu;_Iz z47BO@M%1$o?7>0vIpSRBomzUs>zD?6%91s+@zgD2qWm~28y7f<`+?oQk?xaB{9lqZ zhl7e$T??`3a7t_2{ZLQ=eM9p$^g6u5ty8+T>uqAwMbRIzewhsTw)qwFlAQD7g>C}d z>xCKXKp6#xcd0DD26(%sOhsjO0N@WXQOfM5Zt(a?-T<0ug;h{cee`h5RdFNnUk{5o zD>H%Z^Mi8j)_IBf&7L{E7hK46Ud#o~JLSj<6YcYL)j&6^UxZNNkn|aW3SVTKU)MfW zzbbMy$F8wOtW7JDmadBXFwGoHg9_|0*a}UB1CLrg%Ck>e$&$uQU0K<7we^UVHAQTc z(SnLVPc22?XXtb~MbD|OF)xnx<8)1;u9DfBFDQve^?qRjGyaaA7ptWfH0d4s^1>k_ z@oJblmxL5jR?guf!{SE;l0te8Tf3;ys=1E4xybuU&*SGlSl-(Hso7=T3}NUCo^mRe z6#&+$F=u>lu8sZ0Lh8#+h8L z#cFtiV_>t_(ha0r4M~m`WJWMsn7SBtt|CCG4TL1jI5XWjdtK`xFj8{x7{M>r0wBPDgOmxXN6HW}* z$5}AURwCLSS8zwwy2V!9(arOb!Hh2`-pH|Cm1P85V2ufB- z8rjFhr#Ab?H~E~YkXU+AGxq0LkMnIv4=@-Fq%`%gwBi*F=T`ZXsRp;NVw=8Syy|wF zgvL;}>rT`4OBwpMw#bv+sYUu+T6;$gtUHAoAsn;~iyVq1Q!Jf`eSciSAgTe$pIAy+ zggmkAMwu5o`=yD%F6WruQm_Zet`U~d^7tchjec2^wO?a=>~OQhon{PY%37KO4d>{$b%h!JIr8bx%N6q&ilb9?3;XL7@?Ym*#sKxKGv9hcXMHpRJv( ztDdJ(%B59iR0werYeT)=moIh2{yAda84WG12_+T6wp+%(eMX<7Y9=Iynyc15uu2Eh zw`xbg?E}7p8>ESG+23K5mIic0s32Ud;g^@$oVkigx zOs3tGTFE@Do0`iGEj7h{T+k(@J2~wb=l!+{T4J;Af^$M?KEaAMgl=#$*P~g`om=eq z&Q{ykw+c~L8DJR;Pt+>V@I+~@XALhp_qnczKhh@TDl_Ne`af^CkqXex2i z#v*FY7h-M?I*!Ep;4Q3x(|%*??b}AHdYVL*!lANT9{v2;egnAYoQ-Gv|7d#W=(xV` zf4FIrG;C~ZVjE4G#%^p+Y}>YN+l|%Owr!h}{O0}rJkKAq)~q`->)wMoXYYMpkYYuV z#_;ysT>sK!IW6t~(CQX1inR&X-SsSCkaTmy%t61vwxF`j^vm5aQj^n~wF|lLkAmo$ zUxA}iTkIEQi3Vl?vEP6995q838OYqns2+IgQ+`vR;2M#9y}Z>JPZRkqfu^GiMVKJ! z$==2z?EkEEBBY;_)@ou z&&mr;@99;&QNF*NHQ)SvnR+guJYyPMOvQ`QV_+1#An|IwS?I$ZMLj(j*VkT3-MVH{Lv5FgxfD9WK|}j6Kq+3s%FZO%kDA-W z96I*p_7&a5dK2i%{9}=26$xL@q*JatTO)j7K)F|f>_D0SymeB<%YX`o#X_;Ub&ra!H~R$sEE`z3_`5gRhs%LNZnjW zE3dGmMy|zj4ZdQS0v8?}wPm28Ls%HA{^R>#irdZ#rUHE5ddup7C0kToeh|pRd2Y9P z^Dfg|BmH_DHACXtCXaw~Lg26Xf$X#Ob3_v5^WEV(j*dg}2v%D1T1DlP9&%%~bUYw~ zb)j(Jz>eUcDhIXI=7b;E@4FEuHY25qLM=PTgu}R~dNGEYZ=^R^Qo;!FaGrEe9|qE2 zX@3GMnlXBIZDHUzJ(6O2a3_EO@~5bH73-!`RP_zA-GW$OH3)xMF|2lWDhh8Sk}+UT zwXZtBqm0o3n8TU0ze=7LTU6X z(XyJ35jQDvDcpAbFdf21af3x@ttm;%9aG3^MP1Pn3_X4Ra=`OX1~2C@Xks)(MrJgO zo43*H`roEbP(8|GWiq6E1f)ie3Ob7Z_51@585`1c!c=9}23tKskXc{jR&Y3!ShK_7 z@J0WiN+D=>N?eVzNND2FUwEvv7vM+amS7>(G}IRF-la>JaHx-QmC-sF%GR*7rT3m* zZ&QexvIopvmCPHF*Rf4rSZGJu6f!M2+q!PamJ=xSynb_eiG;m#j)3t*-Ipo#p+b`K zc{5BeergU>MWsrI()}0yEB*P9$D*8|X3kG$9{%%^wOd9jy$gA|N#YZM|Mp?--mL(= zi_B7Bau3`7G3H?a%UQ0^5o-7dqgotHAB+|;%n@0 zw|^LIl){hRp0)@AluyFhBz&v`^ZTTDX zF^3|Rp?pvmh~V%)Fw}HEk_buE&YvHy)O7UUwU^gPAXSM)puZ$3q92lqcq2};A<9HI zG@+7)2h`twS`xbWdI_5E#Wlr}J6lwTfNROr7-L-aackfRSmr@o~vrWzLsM}H9; ze&nbtR&{@BCcvb=#o1NNVNfmW2#T` zLI&D_BhSReT63%O1+KQXwpN>C*u%ra?<-9{y2+fFbG{~@{Qc1zYaGw}+voji!T;UX zsJ3cAt0hOSi^|2t#o_JI3Ktjm+LiDA{$7tG!_3UA$CNF1 z5h}xUOS{4+v7Kp07Y%MG3&4qq-M%q3uYqo21y8`MSqH$v(H+}2;+%`6I9l8~_JpbUZv(WVYBwWv>~I zS6e*$D=WR6BYDEURFYA0fSp4~{Gdvd^}C+HrZMjfCe}Lowse7}bYjv74!iSE9Bhme zjou)Uwr}N#Wt)|28)}TyF~s%LA>gqsz*u70S>731RW5ocX0S)9LCN zCfB>{iyI5`%?o?T5NzlopB&Z1Fyf-Lo2%wD<$V2OHugIgbCoGdit2}h*MFE7LZi2~ zrMK7&F7%yOj$AJ$nvW$GZ)a7z2BfA4b2*NC^d03-oruG8sae9y{ira9lY`4kH80Ea zb4iIYi)+e;-9BzNFhm5`;1W!#%E5{F3DJEE-WO$+KWxYjIUHjI@)$}ojCc@1jb+w4 zFC)so%OjHAzf00ZRhbFI{B(j`+T|($(I);~G}LUF5Ed@@Yxe!4YGEq^om!!A*aYRI zeG7EyA|ekoGz?HIk+s|Dh5G9EB`GN>lgrM(8?@FvV99aUk0yr<1KIR7JU?{nYRJ5C zc41*)dK&rS;(`x!KbJaT%%IisiwhrsjljaqJ#uIbgaKyvubBe$zYRo6RDEHZhrq#ii@ z5w}5bGTz>vLwl8@&z1RGDyYSN*NMM{&kr0^1x*dUE^`$uy&V&F^lMV`15HKp{?@}a zs}mFA9`wrT9!#K7wsJT6&)^mIQq=N0M117wv`y+9%&$~L8sX0?B^jV#V7^t~^w8Sa zKOQpKHN>#wgk8TASU(_5J6w_zX`LHF5wUNwb(ZKHb%QoE5g4leD9njVY4XajCn+T+ zp%CF3m<#3|l#$J^E*|4Y={YXVD5Sml3jJ@6f)E$nCD{UV3?T2xdN*r(5uhA{Q>37;b)YGFay-Q9h;(E>~Nbv6a; z^!o7Nw7R-lyK-;CXhI4GmLlXsYF@+Ld0wmf42;xKmAQucU2?NjoBJ=aSA#Z;4lxjw zvkRLoGSzaE9yi*}V3*?vuLYqf*ryg)y#f`K9nYQWT<^Y8gN-5hyy@PI$i6_xC#GG# z`f}>}1gtf{qSh$`N6@v+}s#eVL#c37(-4oE%&eSIkU?u%c|$=M2@F2J~nY+|G&qU4Y*!?kwv! ztuCI>^V?aw>n~M}-jP&+L*QI#l_1{eJJ+Kct26uPcA8u5o2gaJKP4sb&IH~q#_Nq7 z;r#y<#PE;ifL3z!>(pHLqByVLK<_6xA15kvY;FPFkb=LIl@02!!}E#5Nz0Vr!1DQ! zAiRX|{MZrTeewGDNNCLIKP=R{X5ZMq^G|g@FMS5vI3~v9o)|GClP3)muT(6%?Q`qA zuS>np*mU(f@Pb}Vy6ayUgrz7$;b`nq&?0(5$wR5q(~n5r1R6$vEn(A+GITxqyvMw6 zeGd7I*jzd@+va6d??CNR!(93VZ@o4M?D{VJcHfvv`FNgs?yR{orpGsMc0%J$Afb3& z{yew26ZpvaK-}Ux*0VpxFR6B%ZPnAi;`~Vcyx#bv{d~+A`lA}+_Bly9V~RSXG&*DR zPV)IE*F8cuDIpr%*7~@EBb#|b4rDW617NqV2wiO>>9Jy}EtxQL&T^Zq+<;JsP4^f8w;gZtZ-wLiINtY)lhej!ba>=S1~? zJ8cf)efCDjiF^nW(V;G=!e^lS&E+#%;H^Qxa4P%f{`()|z=(*5j*r)~^$xd$n;SbF zw*!p9!9nnD>dHsh*53ZI`P4NOg~!R1CY>s+d00-E0-au*Z;)5smL~L;QASshTf8nA z=9Z9HNrD@NEe%axfRZp0++0Y$Mg&3@MnOSlfm12LlbaqnJ}2)qw0O0H0DW7VfvNjT zAZG?Y@leF&$qqRdP#VW(VUdwIuTuXM_rsjFg4%(7PG{zqwh=X94N=5OcyT$5e?Z%* z%8zr)fxQ|swIgB7MRhH?JlC^Qo9dw}>b$0=9}OG*y{CZu5y`PUXXi`H!nR&9H>+T9 zMUXztKOBzdk#NT$=M&fGeTea9{}Qg!8H?S+rJRRWS;5wM1kiG?bhK9rT_p46cIszVv~2Zz4Q6sdLnJB`;#8#>wi7_->D-DRlz>rZMA)f=z()j11#*9z9m4xgxlDj=#dBFf^8I%Xwnxt2^bBiyS zl4g*xbU`RYI-PCwbKq!Ni0@7Bhtt z$dSUzBlawE9J$zdWhKGiiTT1R?k!FibSaFP+r0-yT1^D!Hgp37Z6hl#TL zq&L{-Rd*z?W~gc8IR96i7N?MxR(U_rIsHaB`t^aW=>oWP^8?qPP})8n2#Cs5875aG zpTz<9*Ds-{aVBQhkew49Yi;iYyb9*RS%v($PRGX|b?CCBl$>f$>2Z?UsaH07|KDsS zX?jhC&j@TjlVbpSduNN2_hNNFi)d(QsOjh&K3=Q|lcIo~TfmXVFXDe#UDr@Fw6x9X zeGrNJ0E;|j>4m6gZBf)S=FF%I$WG(@y9V+~!mm9n^F`#7!S3lA=arG#2b~`jY(A{* z{uJ1R(?fJHs9`4%02L0VX2)qAMX{`H7@^C$f`i3RiI2YS#5FI}^^d zJIS-!pVw2m#^VSu)OK05cs;TmQfgR`F^^sEr8*p2g6~hcD#~MC4}U%fB4T1;GDF4K zTdMxlD9xEGVYEGYBoH-F@ju|N9OXe#jBRSe%}m2EUNmSaf1H&+AZK<9;tl8%Mr25Q z5QHuk#W}y&TWq9_?2iQNB9ck#6zOuzIq#!rNL3B==>A`1ietP6CCX0&4zxY5d%zGo zN0{cdiGc_#<}_)(kLNvX1Zbf8;DNooyu2Uz$y^~M1e?sS39xN4=by?SmC#W@^5Fg3 z-CA+-r6qAwRO5`ad-ty+JO2())pLl9Oqqk)^Ro}(u%KmHY$U7saU{rC-2J*e&e&#d zhhC0!y>WA7Ncgz_UEhDjOHZiRBdbF69`_e@)DNG@vrA^)DYGgn*o>h-)2Hw7(?i;3 zi4aa%l88{@^Ts<_hPI&o#@{SG6(f7y)2_(o>G56JTi_$y7}w%kDg;IAr0Xa0odtMy z5l>XnC#ox>?og1{LzJ|m!%L9vD5FOp<;+Psn#K3@z%Cj=SmY)zuCko>FDs2Fa%EvB zQCY-c`&XgYC=+Ai8rge)D=UOc!Pa*(OS9DyoDPNx*fN+l(hdZu6pMSgsOjeQQL^U?DB?rsijW)WaKl1f8c+j8-ka5%g z-;LJp>H@isbXCwf8YULgi@|Y;El-xFLlXQ<-w9>|F>uKR^Hx+M;YcTx_}}7aTHE)Z z*}r4BGjQhnp>GQPO&NQP=Tk7-&p?}wm)YIHqRw7_K;que&9{DEzRHU-IJ0sk=7EZY z*j@?T5z@22U1YmnU0@FT$WsH`nO=r2o!T{_pQNfK0VouiD79-@%Y_&3{{^_qM(_;AK#rhbm)7N-LXg33! zX=8OsTF*W6k97YpiS$;72`@Jri4@gXpx>TKt^D6Jk$!@aoAt#asJLbMOj!T-n55nI zfudzAA&HwvrNEE<3C=gw~SJWt7sa(AtU!03y zR#G#<<(dOSe)>eNAHMoF(0}8GSg;?u71fF`u%2WumE_Px5@+RH#V2XsFG`J4g;Jg) zWO9FB!j7uy@$xU##iIA<(p;jmNqqZhRBfhS;v)_9zlnq2&7$AsQm*g;fgI&-R0FKX z@KT|oKvCkRog^Y_;MT^Z@S<1HjujlKzM=-Q3$gjmrB?55ZlaTSK3N3qvX%f5}*NYV^U(u*Db@BBM!r zTd{ML)}~%KEFjA7q`%09D1kaWK{xwFdGY9-6eibrIW@zW)#@Kc<)9Tt91HWINpV`F zTA2-u!XaBO4Uu+cGaVPKw0XFxV}i^=U~YM6eimv8Gw+q!KPsSF2Eq2}1TS3>{rm;r z@Q08S7v!JBi}ZJPNcmsCj1AjjHrKqyD+l5%32`6sOFHxLGa$JO-V%Pt{`#t<>|^$P zf6CICDJ(%&$1-sJAS;@(I3mtauK84N;lgT-Rx0T%nw6V3sH&!=O=bwMaL`~l-qqsi z?$$Ndx%f^=Ii91$_qqJcMcTgcK&`N!gGyw#dqEiz+vqK#BrG$dnvV*}CNoX1PSSJU zh}7!-3MT~%HS#4Mkg%?1q;D3`Qb~gIPY<#HN4nTjvAj4#KORNec*A}n=g3mArI;iX zE^Pr;)F!*Q`4jV7fXi_PELjC^J~6TQFPg#kKUi5=s>faK(MX&8BPZ3|ySSkS&ib*H zP*gxHDHKFvbGu@O&b~0B&(sE0n^{h-VQ`efLX30Imo}ltbZkSWvACf(&nYo_iRb7O zU#R&AV8w1Yim$kZ5+vzbo?3PlurT{Mu9AlRkPO9)7qe2B!kPYYn=lqJ0vYeRG?7Wq zDnES%HxkR+{X1_)S2_|it#L_Vr%G`stB{y;)LndaqgSpCv?qAaMi7aMhWO zoi}-4r5}YRCg9sjksjQg$Yat47Fo*EyTfppiS@TX3n5;pB4TrFO3Gf_gJO|KL})Ju zZ@E>qnN4fAHBc+|cXjvt?-A|G|PWg6r0koEa?6%KK{E|?=grLRV^guH}>9pk|? zzQi`RcOE`6Q{fpxKG*H%Kd|NJXv(DH|I!(-WH6;c#j*lf%wp-V$pbd|X#7csV&~xU zNBn#AevfHbL$iy z)#V+;Y{vNcjzmOx94lTTh^*XM$p)ePEkNW~M2#)z>LWc{9QJ!RNO_e{6!{#R9)R#W zSc%0iUlN;M1;IZw-+XU=^0n`ggF%E`=?*J#{J~Fp$^1nO}1ws>>@# z*hJ5<@(sQh!>7>Y_Cra!G|jBf3nz_L!pHRZ_F)mL?ev&PPOk~{l-H#fc$C{=Ln0WY zCyfYJ>tqNvwqCo9yKlJwWJ_yOlm`SCCOJmw00_qL!NAmyG0NuX-J9D%;=d)zwl%;~B%t*fqo9z^%`C{wYi?Y$l~9RmmQI5x@{MHJAHr2WPo zTyLkk*Q+7l#!YB$RuC$;PWJ~F8XRS;@~P#E+ctMEnx`BbY!Q3ZMU9FO=~+e^n?L+i zb=@K^(`4{5qMnPKtTVkbRJWdEH&4*3^}g5{g>NDaiF;%%U(nPYuyc?y=V!?0&p=X( z^qK};ACt2dP=5`{D7#&*O+^qsvT=CrKkEQpI*AS?aQP>3sT&(O6ArXzxc}Djc>4bS zoF#Q%qgh&B-CIC6>v2ih@h}XUadKS-*DwQf0t{9>I&7&sAx5L> zBZR*@_hxK#vId&~DbPKx8&m5S+dnaUWq@@s2+QD{x|u9YbD#UFP3iqF?Sq^lc1w3v4xRkoX3qO=9QHdbrwexas)=B z)4v#4*Va<$vH7Qm+a8UJTq1~;azDbfTdarrN=Vi-El;dS-Emo1lvVsCgYZuVIKHu& z$aYP&W_-IxtTME36_4E7&3bBAjr?IY$G5ez^y7t}gF>?F!I z7(MULPA$G#lrcslg?5W-_2Z@51e~6J<%*1ru4Gzq@vCEpKOm5sKG!NbBhop1wTITV z_)afKS+)Qh{7RXMeMxFgO`@jWGa5zY@VdxF?LeK>1I}>bHrI}xw_jmK7Lf1e0s`q& z#?SPPC#UpIN`*Df4gx+wZygSgUze)2_E)3U0{<$U;?n4Mr9{+pj<)hHwYX6V|Grn0 zCquy{(yufL9a*vC=zN%OW38+lkE>PrH!-HgH78Wx7M)CRF~5pBzW)4u(m9H``|n8a z^cOrkGz@wf*9+2BF;fEX*e~d9M^~Tu817wEHhBl4j~1V7O}!4HHDZ@9pYkh%JRelO zZ?%RZ;qPs?;ISq@m09^FR3RNxZ4hBIy}jsq>WX26;jE1r4Ak>R1V8<-Fu&n1SZ! z*OTk7oZjzbIz9*NZDPSVx_2Lq9(6-cVHdHPy4QPPo!_GZWs zm!n9_i}TD;p)(>z+syry`7MLbk!`@zkyG@>i^}g8Z>HAfdBx;Cz56mMAUUuG$}_!= zdk4YXsPbUSkvu&`V6noyz>QPa%|Zao9_SuX68{afb-)>&-pY>OTYHxAJ|pE}SECE; z`6DM|_{|#+yV4mUOa$RThVNrxD}SN3|6h>0WX=b!?%S(;c@&LQ!q~X%WGyN#`8m~q zAq%UE-PfTV#=9zkcYxf5MbBU71XbNP63!tEnhVs79d*n=nnxn8!8{?vXWC9|B^=1G z_)$rkfFv+YSy6jQ*r_OMqE0`!E!ocT@AUklw3QGdMDs78Ui!faETDiy#ftu%HYL=O z0l5*n3=;NKb-bnX19)84y zv4as@dUM)SBzR96@uk9X+i4a3u=(r=`aHT?yfx`=PAES`RVZtBNMuJ84uGhb@RfmV zkpGPi<&_%?(5tB|Zfo`PT?;Ol|ArYVwo8?$(D1|+9YDLn*xCC-g#YuPbKVspRMJ_e zp2ncbqqOvXw;s3YluS8Jp6&aChrkf$=YYVGi_aai^P(Dxxc;5nO)^Xi0fXc^X+9=^ zL9_N*qpT7}FF}cIL8i7csY!!KB?Qeu2L59dj!%VEB?YHIgcwbxwhbMSK072T74JJh zLkz28nT(6;uk4DD;n?Mq&dP~4FYrhg!(We8B53U81v-KL_(?{gBW2RBw!A0{^jb3#82T>9|uc@`gQgbq9tKSKcy#E zw*$Fx!U=Pyw3U~a);1ml9uloNPqkve)W*^;Rc#R&jlE1IS0r<$GPro%)i~t+I?}zn z2y7RR)1~BB)>mN%L6}=H>f`n0^C@KdVgkYz2v z0oXt)&~6)Sda@a^o()5m+E5V6j!2P2jv*H>Neg6SS{}0trHIUOkMemAae1B@tFgbW z_Z{&{#Lbc9sgvM~6BHGkENsx9E1Z*12!lNN%m0r)Nisi-rsA7+=I2bt{S-OV>UpJX zl--UNry)EZ5bS`CgQFbHEFjQ(Z2+@kIwSCqx@ZeI3ai36?Q}cz-UqHUd_3qRFTj;| z$SgyNXGAV%Qp_*4gdw@yeE9J6OrNt%?a6!3r>W5JP}rKG+SNrB!Kh6COo=#^*+NCqVX(G%a?+ZjZ~}v*vywg& zb*Q)+9fqrx5!c0QN`ZsZx$|y@uEY`9q1SCfmW04$HVq17U)p)Qw z92Qb;ZT0j5600{W_ue#r91x$lq+NRkm1ZP+j3_Aod4Nc6wWvG@v$IBn)Taf}`#?SY zcc>ffSuV2zBw|pW!`h5B`jcpRKzn@WheF)NH);E6<^C#$o%JJ+>)o|OXS~`zUFxA# zXmJ)3SBk!nLp974V%3=_w@%CGb{DEzr&Dt39y-50JeY?O69pYdI03^%oucRf!&Q>@ zhMNGpWi5sphXh3(xNFRrfYuioi8$@z5!rH_S6md0nh`3P2+PR8)JTkGT3S47BQpIf zX|8{1aR%Re6z|MVoHX5ZXs0#~!O7ua6yx<3t8Rhl=maY#e-zV%o({RRf<(;>P=^XA zTZX-?8lWD46%qd01D(!?do$q#`T3(`*s{8E$I`rH(L~?CHZuDJp~zc+uz|qFf&E~C z-|`f?VvqCqgwRN_aod8o*ROBrxD-9L-95=dwVE}B?a#^w7lAVL@4h2$pAWb`vN>@- z^L0|oNnyLD1$p^{A-vN3Izud8mn-9=YVE%q?5Nkv!<8XnMbe2ESBoOGcTXs!(|6)xN-(f;j$aT* zUpdb2SM{6P`$ueATFx)0o>*TY@ipDvMzIWh!9H`?J~V1VX0|*y7^0omx8^T;gS?Gw zilW4>8C1ba_zJnvk;E9#fEh?0$-xT^$p%3#LD9%Ow7yG2y%5=43Ee&Qql~;x7XH1UQo|X0(7Qe|nw`hI2b9(^|1qLU3 zMc+SzWeJot~{)FG#vQBqUR|g=Mfw}9Oap7~Nd!xJX~41fgea&v-cLzGZq#&M zbvWK=BZkU9bMZ(!1L3vRWd0mAU;Ud9`oo}7@u!Jtn9I>$~^w_ak zslQIOsJsugM9IBpy7Vh*VS0H=ntxYEY4YNja_l7|t?~jER9s}PG3a3QUt-o%yXL}c-~YwKT~>iufXrtt&x!daIp^;?>y_i%O-zXO`P^&9;3Vk`AwT=km; zq+{9^vsd;NNwK-0!fU|Ha5YIf<+!F)+hz!ZFt^`_+eneO?y(ht&&xX4ch0%~rNtxL zWvOXO?2FP)H52?(me8VL2km%%>_ss0{TI?+l@0R!|~=Z8u##l{!?=`S^Nu3uXfmkc1Wg>wbg@X6a8Zc6B5~0gtgh%Zr|ZggX4M+o2u9` zv24xFyB4Qix0Ozhk$NKg5#Hj%NqORSZwnPV2iDrAK<*4Y!8KHKd1T}$=*W1Kf|)?7 zljMeED*_Y|6#4keRxvpG<6e()aFG|zC5ZcJ8;ongA>P8>jINS&)wFo2E~PCGFE2Gc zo+t<}MvbwK7w>0+!ObrwF{Me*^+`2s-?x_yx^2l~@~Pja-taR290TZ@HSDXWubEyq z?VG#^dIx#hfkT$U?9SfM^pCb&SX^Ava_Ib?$cdAFQx>Zr3=!CZ8P};_|JFfqK5|x1 zv#N!|HMn4O_g`B{vi9M9G52L~Tx&#{8)G|pu`#8+voTv$wdLkDZf-qa%il^_Fx;On z&k`ncj!D*q%IRDIl^{Q=Vg53~BtV&SFQk|nBd3`vP=4!;ie7F@0tHukbIu z+g%M{>{Z%vQc-o4#-_HbPf%H0l_|T|b}Yjg2OLd)X`FO1Ovutm;oS32 z>#yF7m<_F_)F6!lct;@X;QK5~S)~8QNxxYG84f~eygJc(uE)ftvMK+B zXmXLwE4rTCw|um+suDHKQepSukFtCia2RYyy}tytalLShpa&uh6Db&G&=-WSmyvWfN@!))pBAYy?^_a=Jf5g zVwcUy7tss#5g}CNl606RWcY)oY`aL1wQCn{pqZz;u``$X5}%EqTUt5JO=jL>IoX#1 z3EdVC2MJqS*`K@~=p>v7UYhsyV`4dzO4D%ftgWB;B$UPOgqI)Pc#^+}&Kr})7l&Uw zLb^^sGcH44Eww3S$o`@mcv%rtEQBu|_31Yo)$9bYpNEV*aqJ^C?`jyr!sckTR$5Py6kWgL-5~${hlpPL&Z_iLlQK~bjZg>C)t&?dtYO) zZ+YoT60C#Mq>#-kc96Ie1w_?#T~_Y{Db-;BP5TG zPVwYwOdI`sVKlyi=?k08M6hxbG}BM=72Vi#t#yw~ew~$ls&R`+b9bgzI0uWT?Aw;_ zf}aVz`DW@;%uDE5^oCyH3Ll-hAt?7!4$ZgYaEvSR>#eT#Dv8NXawT(L)aa6{I?U6- zTrfaF+?5B;%d=@|xPN@c^#{(8pxcDcOgt-?{&&Dip_opZ5O-jieR();PzQ$WfiYym z^`5HJ&Fxt5)5Duu>im+a;6|y7{|BGy9!qX{zg;nRZ$m;vo=!v`>jOzoRFNgS*5N?@ zF&K~jVe7@_zi`lN^zrigot@q$yD6Eti_m~Nn*=ikMGm`8v#5Q-Q!+Abv!UZ-FvHW< zD3FOlNjXt(w6k|T<;jvu#@OhZrDW4H%Z0z=m&qrUgoCf|R!|+&Fr{BI2qxf5Sfj{b zwH#{FIM;e|45%rI9hG$|J)6md-QA_Jkc&rduDd(>`cnTau8qWJp-Yx4_?}i%A zIKvYYGQ#rxdpBV8OPXouolW)9+9aFGwC7-ONIEGF8)JK zB|d&E1${SayEewG5(_$M^;-M}@>mVrz5TL?{z~srsY(}6`71F8i^aXp8Ku?Tb`#E> zVLK8a!e= z@y@(aSYzwVqtg|OK!cTo!awq})bS$-^-W&M@I<-o$GarCBqa%!()Y7&mp`o?b#_Ic z5UV5U(Im<=PiW0R4e?`AB*q~%cDM5uTKJlxBPTY3EShg=REkToc8?%dgmHSbO&Bz( zqNZlHCZ~7xefDZImW+nxW4vRaHrjBdv;&9|3kO?gN|Wc#gk5k;u6lB$@`uCG?$|oM zE_s#{TA<~Ds}0N-HtxywDzH(3SI~;-qXjvPueiB&>g1Cg3sZBnH~Uqyo_+GfhL8+m|t0OqJS~UeBfU#TcvcNIQ@;mfAbpg0enm1TbD+MRiHs z$c9@)<^J%xQn_q|WhROVZ{}GAhulDa(A~!V5;PW=kAsZJwNBB3&jBey0wz)th8a)c zO)EHdgK$3&7`umlQNjJYkg~b`eDV3D*hs+hmE^;vNRnl;e_*TWwvRs(ZFK;vTb1AAaMkb(hbxJZ`#E&`ptMZjIF#F6}AR-Gty*Aj3Ozt z4kwCi3@1Mh(V#5STRbkzMik~KNtLdC@^lceLZK^8X;2x$DL$%>MKNIvOo+^fzy3`^?0wQtZr-nbE~)C;qP1;xd0>BF9-#t5t*efK=Xjm$uTV>TS3&eHIR`dK)tr|| ziiN`^10~kXCM<9zlT+7Q-YmV}v5v5DwsMPS!^YCQ@KO}VH@XJ2#>H)~2uCeZVNg|? zQ}jfr2_t*~RE2xYy|iP(EU2OlumM!Z7;EmK)3Y?NUjbH56v@+oV=mnHGIKJJfR)@9-M(6l2<5%DeO>G8dOTBRvz2%*w92-tH zCCXN$HIn1TF(dOC%F2dmq~J+=+7+2Zr8H$S%Vy}U#pe|iT-a|i(JiKJSVNGIbeA~8f( zc#<1(!7JR+14%e(U6I+PqYN0tIUXG?nrUgfGm&#U`28phMkjL=0BROPk>SAn?vbXh zVRAa@wCVN)srm}AQ(7>Hk-461*W>$@#Gp;%Qq&RKOWJg}-;MS!2K3%f7g1L`Pwqyi2WRE%2kE zSLq4HtUYObln_k`7L>Gppm}R*st!bMUGeO*d+0nGpDX>r~1=$l3h@ z#e;iB?Sz}!<>g1z{f?U@be9NO0rRxA-^sak1c@j&k!w#8?=R8X*y%Y~HD5?^T8JkN=w^f%F%a3e z<7(QO%-F$gZ=g-J%H8aF3j)&tByP*#9cbcq-UJACrWlJ`>aEGx>iQKuq)ICtPYDyz z;Xyy?imK+%S492+1Oem2;z(FW{|e|?)?Kpaj;d{6`qw&qEKnSBliPfwzzV{un;>eN zOfHcvE&Pz~=z7#Sl?LB(I@Y=tQQ?aG+4Fy-EoR(pIocCWN?g*!zCb2DW;o%LWOW^U z6N<8(il5?QNq7Y?vBq}$93_*odE9)7ZjORtvh~YL1JY`PT8CodCb80({qroGa-BW8 zpzD%MeusosMB1dNg;dnJOt&+16aM$uyaAXS@xU8+RW6@1F!p_E;?y{DB2DW3UaZE! zm@2HhDcU{-7DAkEbEjYKBc3P=-$h7qk^P4g4Kbi|t-&EVaJ!!aS6uVw< zRXe@hp9BU66D(B9Z5dm8r-gN~m*bwoIB6T(>ihZef(nIsALpU(Dqxe1hgPK5U=qVC zgGHPL+!Gb32OnJcfk5xDnJ&U)L%{nifK1Vh=SQQV;+}NO1X(KGvUY7N%b2J}elN~H zqbb{yD$W)*E}`)+=BwgHZe(IaW_nE?$OCx)GBr%BowF9|AbwL*HbNu?oiGE2C{vNv zN~xbv)zt^IHDjiZ0NYQ7oYdp@a&dJ%N>4`6LI4^%oMJ2$@yg)TOqe`zj#HP*Ty{MG z3&l+RT+j6dH<+k3qjCW)ocN&ceY>^Ur!^D0g==i!9UZm?ikuwds)TL38sDvgt7l;e zqU&z~?O?D}B6GG`8(5uh>xuDZG{3E&Td}dL<`;s^_>#fs zTCObjta!Akw`7xvkIA|$JSe9<=LevCZiMHo zg)g;^c3Z6vQ$$-Hci!#;$!XHhkTKibE)Ejz2ejCrI9lE}8U71vM3=Z-Cv`kyu6%5>pX9U-UQ@$@y~LJvuLjKg8dsbElm>}xkT;bvERG*=dwF&Y z-ER!qiY!rLgeG#o^mk{^GI25~qj54Mh;eWa=Xq1G*QoTLE(su|nFm!8gbxrh?nr(& z=*OQpK~HrIY<*09vVM+zzINZ{e9V3J`h0xQY7xSdjWGkn7?~N=xE;^AJZRRj5#zhA zqbl=<;lj&LEwpGy7k}kQ1B7^ZaXBf+%ap>U0Sy%EtrkgKH8oKP2G%t0QS>hi&f(xPo3@cRPmhk69%Sn7iW!~|Nb>l zFpA_LnqWUzmUh?e&XkN7Cr2iy42ky1#)>{4s_PmzpbB46maHvLFFu8PCxpkL2pG96 z_)9LSdV~{PEL2%t!z$3+Z?2Z>_N3$7w2<4c607|EE&CZ?j?g0z;DR^=e(TX;yqL1c zf5txjoq;j<#r!A8@FT;WMwW>Ylx`>fqDk@gb-5{NPWpHyyU?_or zo=b$)ieSj~WQ8oTI05?tVm1Agnziz_hxdv(IWTWQe-hPP}6};#)f-jgQ(T` zVmA^=$b5SZNo z`v#B!CGlBe&O6O8!*x*A@7r(h+usFt7MF>I_WJH+q!XCA%ginF=8I`-zQE-B0&92f zan;pz$nafe{^0$igUyvt+we};uqZ3DH{=L+4+87Ew$Du%tV*02$~l-$F`Q~=jLSNs zRebVwe`+$?zfb>=m^*Py)SY3&R8?Lxw ztZz-@-+2N5zUe~f7nbmTq{@IY7`PRu&&{xnpoBc!4^siwOpiO9&~HU%rJd7oLtIOv6>q@BoDSEj*^qWlG-4s=NPtoQgazGHSj zt;?Sl$^2HNb>;nGcWsLo#T($Ng((gAUc`?0*U@o$b8~Vsi{S6Vi^OC1)RV4vh`a+- z(IC~gqc(Nsl`_k+UMrT|GWP+=rW2k|m+ISb7gh8iSH9>GVBz1t=9K5z_bgs1Jw&@C$qKIr)7DE&iX@uE>I!l68x}@>-4%fpv z`vb_2!5rlsG-G4>_!v$~-009D9?QrVYRd4+RgK~^OgM_v7wvraI?u7RLU?Qh@AyM& zQpa76@n_%qLIGGmLi+d3BY(NEQ>a88jJVmZGUx5yE^RkZ2cntbQ!wCHe_^pe-%6t`dit7 zJMDozl7SL$52V%Z5VFz|)i>4oZ&EVI0!v{3)HHKZXsFBuZrDFTFDYxG6=vaW&CX0d zc~Q}ocC@yF=7$ZGcemdHdr&RP5O<$tFZG3fE_CiV|o&ZHSzm05U8#OQ2(ScBjMjuuN`-|aJDxz~?K($IVqH^YFaM(mzLjZ=$n^Z4%JLqD!c zy4E8WsEBi8|w2V3;;QR4#s7TNMWuMV70+#v2KTvSK z32a3RX>PxMP2{{h3gw(!e@0YUCzwxuCa#wiMGuqKHY6oQUVnkf9%k8VCY>i(5pw8E zcvv$GJi_?;CaI=1U;C=b^|xFgj=%VA~)Z*lWRA4{5*`aK=g1Y8(VQM1c#7Luz}^DP`zRf)x77>!1}ULTSqVRn=d zY^oz*CPOqP)b4BpL8lR#DqjPeV%smB9cdfePxH>+ra(NCq?hU^Ue>WmMEO zu&<+y@=_P2!60=_^)xos;&EBAI0Lk_x6{}d#OJT2eRn$*0Uss)3Tm1fsBdVX)Z?bA zv5f=!cT-taNx)x1MO_PzJ^460nrf)5C?il}!zf9Vln1D)siL~Ek*Z)Rp0ZM^n(C=< zYM{2hmb#`O<>i%BR#uUWE-<_xv+v+hb~e`Hb-E}I*3;75L{m#0Zo8ZM9lP1LtCgzi z3d*be`23{=8>{jAN+_=h;uaG0T_3{Jx{qhS^bGrVHW3U~QR4Mb-msH{dv{SCtfZp4 zk`j-P^152;8yl#vt-xWm;0grUxqBB4O_jL3r34%5sco#GvZfq=c>}w5woz3UpuD`4 zm5DwUQ)Uhx+K1O>WOFmZ+Pc2Th|A?dlJw`ZP*8LA-F5<-FVZ>k!{z(W7wy7hMT&e} zK6POh1aLY{R8~3(2Hp5eZCj!YfSP8m>l{~Zb~CcH&g|SG$z+1%)exg8KYP7#mO?Yc zOLlXh!p!o-b-LE(+cGl~iPcuG1H|aw;i+lPe|VLFxoM_4Z*ikjCeZOHJ8KmNZZF}iuA{Bi#!_!T zBO@tl9&N#?OmV(%8Eaq%N4!xc1}?GU>Y!v}nZ7euNLDrBQzyB0y`O%>Ix!=Xy=rSo&DZ6)-VTo<9JUUBMGawoi1d|1y&q;b^p7G%U#ztmY zQ)+0g)JU!MvFYANYtTn@^dbZ68fDD~@r+;O>g6tm78e+}d6BuWfkTH6<6WC%Au3V6 za~JZRZaO==m<~^J{pxl4=QJ7*G!whnN%xIaN;+IDTsp~Hub<#*e?NUaJq#^`F$bF2 zxnmc5_8#Eyk=-=yF<$ezqiy4c}hRI~aXt7|invhIZ0_8z! zD$8&=t@_j`LBwRWVzpVZ+HIK4Mhqr1Hv8S<7P}pb*?=S&FqutAqJ-6M!(@;!TAWnY z)KObeip^@J#8-yjTY}wT#b_{KG+VG*Oo*b1(#mRTg5_8Z0${-FucW4`iW0X2yTd_= z(}qz`6q8k--)phiuvm;3OeSnL8&<0oi^Yh^;>7O{;Bva~l(?{2Oq7)PC@Jw$Q{O;M zr5~$NL^9f_tf`@@+=Ed9lg)XCLCJQ#38A&o?wc9X=5*DYIn)-Tz0Ur*B4YS3BWHe#5TQHi;lz7W1^Oxce zlv7(*PgR84(=4oRV)9l{SzeCETS2Seg3)NDq^yy8uLUI? zCu1sS$IgAURGL`0b&DIFcNktyVJ)qusm6;*(Bl`)7Tjg!cmn}E-ZDIP8`3?Wm=Pfn zX5!Wb&R^|hXi21I|I>W=`Ms1`axV`GiAb2WO#@Z+LCU=reG-nQkd7xYc*?1$tHxy% zLA2rVm0*aE&~@t$V>408_ddb%FFrzrIZZreqOzfyDxVoSocG$l=~1OrayCl(kADU?@MP~r7b)>=)O-%2K$L~?qlZ1rPMjd%lP z)CN7ceWiE}>)h_XN#~t@R%HXFWj;0sZ}7qCZsN8&o_XO}4z;)tR25rU2h~0|LMlqy zh57dakAsdukynFI?SmkvZI3Lefz0%tTWtyjn3&XLP-OU?AgK2 zoz+O2No0eQ%AK`TR94Zra}NiO9O1~}!yMeVi{`2_yrn)$D=Mg{2vS|<$7L*~`RFbh z>O4s442q^tsMfT*tFdioDd+Zc{fC)M2D90W-ERL3-0PoREOs|#elKQG*k<1PN5f!q z5^Sj_;CEuUZ!-5MiAagJoHDN)5eSDjSYBC1(=_aMJ2snbOL!k7%nx$UKc0WA@PEF) z?c9qL`8Wug&S&I?(m)eX(lIu|>uko-sFD$fy99^TgocDkQuTSIk_n3>pvWmwih#*t z#(+X}Da7h#0>xm(E3emo8{nj(`-DTpQ$CIhJH zG?|Qm!D>R%WD>H1C>gLwAg7Zkq6rBNRaOv8R*a&`W_X>Aq>97oz$%J}CId!EL`kKQ zRRPH?qGS{_!GOsmA_@X1ah8@=*^H+#+FX>loe0SYYwIyE+wqr`Vl!%Fl1Ws_g2^DF zDk(CuhQVaTAZohyi{LI|@MSdO%uUj&iWNd7V_4Rd}PA49Z2bar*$z(#)^lx#qjR5Bhw@}b5 zUFbg-Phr}H!e6AwFUn_5nDZB?|M}1>^KH={BFuR_xE!)Vfgaa`9?H9DS#8NatOZ94 z^O`jRw;}t|Q0V*+w$D#C#fKEp19@=fw$St?nX)Yh5AdItwjwKApFYmdZ~g!-P1QgY zkR%aRQIKU_d~>2(D9nN&+%pO{=bm$mMx#U`5zJ;YwY9ZdQ>TjjdZT5#D(2?q2!%oz zjYgbKCpMc6x7&@;sCP{i3UH1>_XqvXrBxK>BA*7IF<~z9>qt&4x4Vb(k7;@RzPbJU zaJl{5?|ioh?dJ<|p~b9br_JQtlgT8pSPV&$C@n3;>-A!>ShgzfBA*=!?}I{eQ{tl0 zD9g*sY;0^`u~@L%?fL*evl+MBy=5`y-q;zC$wZM>B9eoR&>5tClUz~iNv;X7v?2@zwrNq&bRPf$*Zup zi}OL`$Db3gPm4m~DRj&2Kdc;pt?5en=bH1MUrvPr31BoDv0AMd35r{N?Ap&~Gl?{K`F_{Is?s|M({%%pX-W zw7kJmx&8dKbJy-+=auu5FM9dp+;e`#tW}&7S+m)U!C=@D-kiu53UlsQE-(3cDoi{7 ze{Rb^kHY=JbIhGjVR?|fK85KODe`eC3UiTP80}LQW+6M!EC1MbqMUQj|DRi5J3m~$ zDCYz)KfN4#To8?|X@iCN%S52-G-mYx&kL4=k zyZd^jDCWMQyN!Q+6A&a3gCrto8mg+0PNz`Rd;RANFL`~<`NCUxJl`$1kte8nepP*n zeV%(R&D{CqDEuu5fT`Z9<2tk(5$&`>qKQV}%$qZRiaR>&k0#M5b1(TK%j z!(tMD&KboYA0-uMetedc(MEYq1$LA4DW&}J(0*=V&Q`vfrhn5bPYrZGdS$QW1QSp- z6*-wiRy0Jj8KcpFkejERC-~Yn)^MRP=lm85GkN{h`IRw(fI$$^G!;27uI(!4oO^Cx zCu@=l0%X4@of9@e%aD;Z5F`weK3D#3SOHPe1y5C!2Z|GcItYjc!`8R9b72dA=g7HO1 zlq95V#e4Vo{X(_fv7A6?Xo!LVQmagib~B+=vAeN}QX8nMhN`Kc38-j@k^yydo}No@ zaPry&D+z(}mV-R?%oo^MWkyXWk=1OhIg!;9)~!ZG1wlYlwX8*|3%{!B8>py?ilS<| zZYoMvNOfxxjV()F5QOY9GxrK_;W^$tR{>EFiLHzqj^1_J3ZmXi{t)w?No7(v_SB|rcnd){JBr~m{Bi6qM- z-Ar$Y1X}hJ^q3H~n&Go4=khP=3(@H31A-`GFlAUB9b#f&kqym;t*n||hZ-q0OK6I| z(2S601s4i*?l*ZNT`0JP``RaLG3W2+|1MJG1HXOn-XKdVs+wkSutm)Mg07zq~jaRbYAAnn?K>~+4nem@f4@-OtBQr z`yR9!W^&>-XC^n1JVELzOL3UCKF0jZMN`=rzeLx~i!8||Y&MNdGDRw>AO2N6?}DI_ z+!*7-t{yr=nfof9T*aqXV)q={s@S%41`&f~KomhVCYT?&#QDAvR?{M)WWZoFVltUA z8T5`_L6ndq^Ne+!U}!yw+3g_Gca=-;Twp4qVRkxj*d5qx77UVz!DzwmbmDfqaoDUF zB>_PYF<6Y4Y&M)u2X>nUqtT4j?!e`AU^VO0aSTQ)7ONeb%YobFz-hB$Hk&Xe7Pv7u z#O>t_Hj4#|*^J%k#_e`ux0*0)^?!;O%vNj;H*U8Jr`?LlY$UZd!ASpQ#zV_24)roT zFhMje6Ale=d32sgB1UL-hzqwDiDooRMgh@i#fZY{=y?Warb&xdEJh;+vjvCKh0Eo_ zW;J6p88Ij^rmmdfy%U`*q|JDIKE!m2$l3~N4U85$j$D52RxD;CYGj6?p>BE?BCJh! zGcf6K1O&r`wIwVZ&_HEmnikg5BY!#O=mzcVJQ?%#GimYhex9?7-!A<8V4K z83ZIz!eVpaDskg>IvLWX58(Vs|)jxm-AG7EER{T5N@}!A|;DVq~JT^!DH4 z_IwNs1|&&@t$XOfTOs)`PTL_oq&46d;ggQ9$UjX!^^aI&G74|KKf#~>{UC3jTVQZx zjiy=`CGM=%Dkqumz0G1m{~mL|CV?Pfah6aP@ZvVgq?IJm$T~~2vn<8HY_(yM04>e> z{3KJ;^F$N@tJ97lx2&a_V4?p*{@dUEJwH8hi}C&e?sVN|Fkz*#wwV^cRZl;)!q`wZ zz0~p46EE=P;|FN2up{Pd2th+mC5Xl{XrhE9f`Cdg8YUi3BABg6f^ znPFyOiG(U(bJ!47nOHPIWG%$%dKArQ#bT5|NilWhJ+4k|Qg-;;eEX&6IJUP5r$Ing zGei>!Hbaxl&aaUc%s6Z&P-J4!IFZ#wR>CQa4m$>UgPE~$rstPP8!R|%W<*6Hy_p~x zTV;BFg_vx{W=OC+J;7X9!Dw?}G00?6nmX8O&IX5|Y6{a&>~~sS*57{&)QGZ-0drxu1ctLA2`qlvyOAD>E!EN72ky zj9QHO@o~nd=835y7Ka^4l}Seuq~q(%E-bMT7cm?3du4h#2__p>qlTP`l1|52Usz;r zVV$Jpz++We8M(~&-oMUt)W*(gKW0OU(EJS3b1TF$B4(=@qe1U>Nk>;%T9{@o6ecd4 zu-a{;SBIHe&@E=i`XW&r_^V2Z4BlqVwS&i=JV;3@#903tfu2-)TqY%&ah2FfE{<^Ft=q)>J9+W9zryFAI7Umb45vlH>TqI| zHwn#6GQGG?QZeCjSWzPr3@)sqx*93ZOt74gD6Kz8O^L|n@+>nmbA*!$M!OxW$%2^P zV0nIunb0~3O+sEBQ`usE=p4XEi9 zN;=8L+6wcF%cLYTPN#v5kr4(4!c;u@6p!z5vM@Hwa?C|jgCDz5gzQ)Zp`h=Wf+~Zn^@iTR0OR0XXgYFgE7OVsv(u^q}5+RnY)f-&mU)RV--GIc3DO>$?8}q zS1(-R=GiVr<`cM@YAADK}$1#^Bvy5F+`%gof>nPv1{*f zd1iz3#tPTpd4~_qe8|9J5_eS#US*n-ue`xK@1CGz=hnP|vepLN$#LHO(QBOe;3UH#6^C17>e9RX z;QK%2FVhs zUeb<7U14;vkD<{iW@cuYnGUg;G~n_%P}X}n`Tf7)`#(IxjXM)8Zmc3!?_#GlL;t%! z;ICePmrK(ryp;_!l{qnp0?D;mrYHK*>YwC5bs5Q-n+&f%4n znNZhhUjD&PdH=#02B)LAE1K~cSGo1_dz`s;m6KPl)7?EoJT^tw*|&J(R1XnLCG}NS zmhZgE$#XZjdA6G~7cVoiDG)3-G0}a7pS*RE#U+`_ic(k^;N7?1HtA8($CmZ9B)++S7w3P#RXlM!z&~u6IPFv`J0QBRJYK+w;5|>hUNJ_ zQh`=#%geBmWMSYmC*FIHOG61%do9%-naL|3^7`v1xOnRt(<>sSo>Ee)JzQIJa`@@v z9H@1nq-9JN8+NA)Ext(C<=1)Z?e{o$rH{c-3R_hb0b!ZRg%wnHBjxfm>#`AlZ3nLS z6g}tO=k&#k^o_4!u-8%6%)a#5@Pe?+?jK*=ST+) zl`f)#1FUSs@inzjYBwOFk2j&9sXAW_^94HRFaLi&g+f~>st;=7&i7MTUp~maNRf}j zr!LHyw8EJy3tU?=pg0`(GaJ10h@Yxpo-p^`W-)2LE6nK?y1K4%YQaf|V};I>uXBB^ zlH*6)v8?p4fCHahqyHy=&$;0>GB%C*>!U2K*=ao7g2yDFq++bkF0iz`K}@n?Gn+6P zOW1p$oyO__rrfhAn6Nti)CFs)_9=`H3@{Zbp}jqb-5>xmtMilejm9afuc10%Ll87l z>m!`HGDFnfL`P|q8}DCc#aPSk9W@ARqfE_C&^r)8aW>HGUF5@`yvdka#iP$YO-Ez7 z-drw-*nDN!SgD=n`uMEE${a<F-slQ&J^P@6D>zS$FmI@J#W3j?F~PVy!2%r z?+9Yq=w)&>iKliSw&feV`RY%3@62`X^mNmCbAqTCpt;@2?1i`a;Q9h(N1x_MlZEBc zF%sT7$~Nb@_Es0_uE%)cxyRU5<-=|k5hRIBWS)`RXX%+&Sf8J!^YScm=>hgM%3OW( z9Y#}?JoeN+Z0miTzBrAu^&rQO)Wh^7b89lzk`#AdKf%qYo4p5XkteTlZC0ak&praF zVHUz^d^NRfcK?(USJ&|Ed7AwV0;}^QgvAPiE|K{dly@BGnH^51&b`O&kcEz?pX1Rz z4V1YoNP>VUN*J^_YfJ0QPfxQjKLUXk$}K6@mS+%rZP?bANvL3U85y6*;H<5qrOt;G zpJ!}!f^|z1Z55^1%pz(k&RS?3D);ipfp*0CZZ3AMP`>*Rhjy2fnVMl~IZi@dV%}Ls zdt)P27L8;^Mv#mcgf!E)PIB_j1kR>Mcw}dg)W$Ru%M#^|6lwN0_?7nF~W`jr-YEX=15=1*^kMl2v+=9`>~~5pOhf<3G>L!!ZlZ>YV>@Q6b zj&9;Q_)Y%kE00hqPBV~H5o2*iUp-4-+K9c(jgU}r1?%WIumhh(K#hgC`tlF>habMm zoyif#r$!l=TR<_pscvYY)TTF?Axc0?}wESlx;<6=7kdn~Aua+CYG0WR^+$UcU3q-{gsdt+?j~`{Wzv6~-~85d9NxK;fH=m@l||CH5vMhppZOBs{7N(H>+{UGkMT#} z_#CZup5~br3oA3jgi|F1 zt7{4Py;RigprLUWl_hp878|~*M%s7nW&i#I?BBnSy?g5@F|Bgr>@;e{lYHl&J^yOMGrQ{oIBhlzqJhlDIM&8vJh?MScyW|z?;(EUYcKJ+{cV_&BlIpW zl2A-+uA2!~*HBmPKtRM`F`;F`j9(fcRQ))0;@ih0dU(`$wGlh7j8N7_w)Z34(=+9`(eKeDU72?kza)S z+j)M;7)>Hyd7*(n|M&a&FaN`C{==W_rncIh=R-qNR8&PqQ43dT(g$^zJSBJnUQB2R zCKHMzB4@zruVL@gFYxu>{C)oH|NP(chkx)i)eikZksReT?|+2j2Os0bCy(>O=MMAI z@BJ<>K6{KxXJIkuZ^%kwlc=a6dK{Ryrc`NUk}=j+Hi;**BX|LWEx^8mE>f|Zy!%EM z&hi?9t|czN`(uWsy?ptbzr*wUsxhS#Bvld7UWUtNCpVN$08~{bvbo7x(n4MHV?4gE zo%sKsz5kAqBuNuHv7ft#))5&Q8L4$;Y2C7_T8n8hJ=3FiW@mR6yV%7p4_J_VJlx|W zkHaGe5b2E4Qd@aK8%nE2WY^n=0pe7=$Bot)Hg2`;g>*NCpGpu~u- z%ZRE8Nwnaw1S#`6Fl#EBvjA5xh*bks1JNuY0;<`B?6RO~psueHmy?*S5}KSM9*YuP zjiFkLdF0!F$~T{@W$eRW^7DTN;Oonm$&N=nwy zv^cUBMM(mYD632BM56-1T~F|hKmRs++(W$mzxf}ZtEYg2FMgMQ z`Y-+){^_5*!odbNqN0Me5Rc1_B&aB|hO)j+bUmWiJ(56BOqfLrR>@Csz>U=eip`57 zSb$AT*WHp{(`%AYomNbON@_hqER{gAO8R%A6LDhe>&PZQd%yPkeEsDetX(_Gn?L`E z_JLler@9#(Xy?Rj}VXQO8`@LGbTwyR22QqX*IKCOv36Zr0(Doy!`s_@n`??&-ue2 zJwv%eB(l6lEFLAEOdzM1Mj z;P>Ho+dvSpS~WzohzTpsxPm5VAj&9lGg8Wd)hr+g=*zFt*9is#X*7by-hfuIwQ$BIcZTwq#?skZZ6ymW=;p;3AVhKVI) zR@avql|$?f#F(3(B;nn~{;-w#;YM1QT{LXjLfAA)cmE7a3(L%}D_DJDN<&WFX@Mx= zbo(d>R#Us9ftu$jYcN(G@yBFGSUFBw{og>e_#NMJ6+Af~u`Y0sTbw>IZu?8yHvCGbI z=N#sOGPZ3gFc@cr>E0`R^v>UM^!PP8$2FY$9^;vVCCH=Ad~~jj<)Kcxu3Y2#f|vSd zj6iZzVRpl}rojr_G z#*tb-v5`ykMLd*MZbcbB$?2vE`no4+ymp>Z)yd<}KFwBNjOJ4p>FJ!u7jzJv=%uy2 zmA<)E9KJ9gPIK|rC|ymh zv~~28D&NVjLJLzjuXC%XgQZn36(yx;3-8c8DPyyFNzQd)+4d^W9@$H&&w->RiOi4C z)G~*;ppyk%L1X=L+q<}G2J+ZR$4|)jl^J2Fa60v9<3`z zn7U5Sf=aM_7pB?kTx}g@pnrl}H?GhZ6WD*~5Ie&feb;Z$(>{aUV$oPy?+T$O*N*4b}rr;V_pjrwk4Uob)6d>9dxu_p{qAaxb_JS zJ+hU6FhYB0Gp*e{^t86q+rNy}S4?5y8eJWiX}Z}(S4$f=Mpkg{Kfu9Kg{hfY67E{U z@&F4l3!&;g6j&x19-U!nX@$kL1frva@=}$t(MGOcZKk(xm|4|9q2J2dcsEzCOpuVx znB%joDGo}uHQ_K*yh<2PG~ z^u#FJQ%#9)jgBh=%**BM*tdlOyMU_R?w@jvkjXKc&5k#QWlv2T-_G7_6m68xMfNl9 zJb69~58N3Y9q|9prO~d3W zWoyGu>dO4A4Gl6lI>CIxj6YmKO_>jKI#bDJ$5#?2P#DBtP=e2H(OoR0vlam42-E$I z-0J9OCSJ&{N1o%=BU|yAG9}cIlSvfOMR|2GL9caVZL1_Yuxko|sx55Wvz1_h2fNkI z+~fpPaVV+U&C>_AQCaQBVsTSkQA}~rft0DeAR)zP80l}~M%yfkXBV%3>jfUEHZwfl z#m(6m!N?kM*-h=CXL#wUt@s2L)#ReAvWRfNi7!-$+Y(`DXqfqxBxMJl;`!$fQSKB_ zB^yNzp_;mDDP*}bg{zsrfg zzz@-72K%Ro2|;!oKFHpKJ1CMD>Al)S|B6cektccT$vp&22?S>;#f4#9b}O#JT7nKY zl9ohKG&EU76`hon7ZED-5(orv+v1Fl3^O&iO5wK0c=E+3sP;*ys+mA_3Bdw8nk?Z7 zgsBU8F$*%Hw~V5K0LsKQW>y6v35h6n>JB{1^ZV=ZyUa+-tHhULn1epV)d~9h#z+;` zvH!^@*;(R1G&?D%+)b@tCOSLD{JNR&mK|)}v5U%p1H03Mzp#n|hZSe2jIyvFWu=eK zs7Rq#V5+B|uH|wLK2%GAMFqQ`a77t@n}ylA2ytsM`}Z|a;!ZL=GRDGklH%Qu@%W*G zRD`?~mJ|~(N0=O*U}i3fx44QO`?gb6S&UbXF+V=W)T&59?ZZ6(#2zX3$$C-*~*aKzk*t?BVyUOzDFjMPEY=srnS62`)!}9nFIQ*2? zlu!^Vp|q-=iV`o$m03nc$BEmE*m3A39^YPuO_MSCLWIgoaGEqUEcmPI2w77s4)?R> z3*b(Safy zJT(<1l^~H)&_pvfs})H^pN2$tvH)7zd4m2sleebnOQ#S(CGAK7NG4*WRQ=ns=JdRr zre#W_r`Kz)A*9z^j}OnG+5%M86k?8#@!_#|`1NcJfBDj3c7*H*W-}%+U8;>)J0ZPZ zSRoNhAZr3L7V>$vs6j0{dIs4YXrPKEc&pr1wYFuD4oAtNa0n`+! zq=F`y5LB6ztRR>ySgd9wP1Ailr`=EHYHLkZ5kwJHNfD1FPz5tKyBR?MC7D7_CXqET z+iaM`wA;#z^A1fwOS|qAGX9)34NcI{(vLU+kmNg|ptTTDor?yN); z1Vj|%REnf3U^bhPHhfQ~9c~L68fL8K6ce3idG}H~E_)%V`2^~&C;0l|ItnC(q>^zg z0q1TN|I6qOlB)q zNp~x%8mEW_5CnZKww6kelw}l6L^4TOEc)?HrIN_1?({{HBqTvYNhzp8+T#}>in^Oo zRZfyj%6c1Ftw@5ZdvY_J8G;}pnJfsg5w4v+M(eN%w@GDD^0NQcmpD}6MM%l|wVO2p zHon*;8k~M)hwJ(1X|fHdQJ*o~NJdBYC_BSu;d%0W7QSGHIo)@C-bL9^nlY#u^sw6o z?H=SPoQ7^R45|!qckJe7Lr5=M&f^f9$hq#Y5@NI>JFGqN1UZaT6*anIr^F zK~XdiB_v5-6RvwU({DNi1VmAH$RP;2TU$B(3|SCOx}R|YG*w2H6*NRdF@2jU=r^yb zssJJ;vl&s)&n``o^?W50CX|@m& zCR|*G>pmTxWjZb6=)o8#2)YpwgtWoT@uG}A64uih<1;#Q{noNxy2*rPHgf2?T~_^u zK+|+Xq9r3NPV4KE3qoah%!)n=PNx;pQ=i#o$b~UHlP*`hZonioH2uXpMMhRLH)ywI z_4fPtm#lQ|aZ{OT55sZE)}!yS&hwek z48|~fM3ITl7?w;YnE9XS5RG9OV=AO)e~o%F@)>=`y!CKxW2!q_zcEcF4^7i2S5*x} zlNm|Vr|2^eE;eND@%hH=uuK}`zAREq?wrNB-Bz0!=Ing3$<)tin6u-_ z8VRcD&qNw!vJG?Qe|Ei%WzPK1Y}x6JX-Ip8(`Obm^ygD|=4DK0+|QIXJM3=xXX106 zuNm1~>5OH-(Ei!sdGdS~@`gFj=YnQ1g2r>n*l`=rGoyTVd?qdvZs!?IiswWHpm$A z%9Pbe_I?IqSu*<>a)o7+$uC!)n~^DJu94qnqiiF_c%z=|G8pBIdEQMX6PH~lqgyo}))jOECa=kwy@S96{`pOE|MlyY@m znNH8RWib9Wj)<~#kkxq_^D+LRy2fy$tWl3qM$3BEoC!0^X3DRs z8RMd&=#IP4wA-W5Y`w;C<9;@oIOG5OC0lQ1KiB9um)!lJ84T~;(%ntJv3{G$eq67h zzsY?MuUJx;* zJ7e7q>z#&1GZ?vzFjaRUDhMiaLQXHIy7T#SE`x5=nXNxNogj#aCVh#JsA;Im?WI>3 zjBkd!)!Eo4#=NsT{kw5T`=T%C*V4=DHq&7&133)S9q7ukLpOA1r!nSvXPlv2f`Caf zVUh%W{kR|^i0I48WH8xm`X@pG5tURjNm9-%@w)SQa`rT{amy}4MttL+3q)V~9bzU)lZgpH=jmffs<^5pp}d;tx!hLTL_P7*A-g9hDUMvSN|;c(b) zyU_fEXpmm7siJ5CLi$3NB;9!l#tuh~voya%M3!)Rym(#Kd(QhSsTk|4t3=`{kjywe zKHPRI8*a9L7s%0pZ)Svy++kQUBNIVH6jV~l2(hG;cEF+^r)-@Y>Ckka(Q0}*O?s`Y zKAQb_8e_iM`?+KVK>$raG)t)R5`A66tgJhz+ggU#W6>Sjr1LV?)2J`Azfn&h^Lmp2 zs5#mwJN>4JCM=?eMv9c2E6r^qf_8gJQg(hu1VO@N5%u-pin_6AJy$vn^!41?aT*{> zSS=Eos*sXZ{n)6GN~FLfAc-PE+E1P&fg&e~uE$8qGJ?g4$LGUs0XZe>*QepF?Ceo; z=67Z@h8g3~G~{HI6cQGT4U4q#Wp%xhf?gj{GU;o#RRv9vi6s&wG2^sZF-tk>o91?S zy4^JuMOM;|aRg9PsA!n14&7qfg!BQ}6b&VrL_t6@TXZKj z_ek+^G6(r~LOGs57ED+z8p&9kgkr+!(my1Va+Bz>+o^Ia^ALGj{bIe({sP<2N6jr>Ub4*;7GzX#i`^1Yc4F0Sy&7 znIs-p5F`mH>&_$BxpZfkrjJNPk>uh4m)`#k=LQvuswxQBrHv&|na1AeY|%YhY4Rdn zCmQMQi{P#a;ju{idZ&zbV<##YyTSCREz{WxX^(4}JcRTT9npkYTV?S2hx{-9^WXB` zi8f?+h_dPmeAet`IJ#z0&^!E%FikhZdOg$SPp8qHcYJ)rr*FC=5K+*VQi-BbMnq7P zBvJ`ds)Qtn`c0o`blP%TuaHS22x{Kr8nH-?Ed6fBO4SQgnmf!rEU;Of2PT#n~ zgg&PEd@`f-_Uwng7PNyK~xGLzK)&T7rqLGh82<#p)}k&}lIo zKRvA|fGQ`5CS;H-NbwnNwO*xh2ExG*F3asRC|3ud=cntFqf3n3Y@xS*h=I0Qmgc(Y zA8cbP5hN6JVmBiXS%A%c?Nkt0}tFVYnsOLYLe;6 zRTk$X#1aZNn;A(05YUoQ`c56CWoVVcU3(~U=w6f*86=CFqL2?~#`(2T@201XKEgpz zh^@>raQz%-P9CFUe4K&70eV*)6c+{X+C;sx)YcepI>(8Vqex}dY};N>ZAB@?K^LZU zuVl<;V`P+Aru)P@T<==Kzw01dYb&U(uBD{Fz2U3-Goz*dJfLH>83IYB2D-S?w1~SX zgvVwu1|Qq>6d2Ai{hx#=sLb^=bM7~-sI|K}xTgZAn07`Y>26phQA9GCFquq9CJ9jx zQDalweB%;5;{w%(w^HP==$^4u0h8H`)hwbY3Yuub?r`F;S+SY~6j?zN%-9@GTuuiT zNz|VsTg;e65lsaI5tBt@sk?<6r!LbMvr^y>)6h^uab+n!hwkRpVs&71*s+*El@$<7 zSgkf}HVam>h^B#Pw&QZSaXR#=R8>(?1rt`Y8H?41-Dbxsp_kL?!eKRms-U8~+q77$ z*lji(HY<_kcyygJ6!%L6Pb9;)jKQD!^2b?zi%LJ)gA#&ll`oy}836bFTsDLQ_6lNqUi zhC_P@Nox#tHZl`;P*Gih*JegC+i<#E*en)6K~=$Iw&Qf#v05zp7sV6}$zsE9vtl-z zF`EQ5B)$D45y@;qm6HfoAHhHfx81C}6U}U*h$w1Ar`mY8Z5rHRO1u&&S;J}%Q0#YO zHD#aE`ZRs!X6N>K4$0M7x=vo8t*4LPTPrxiR@T=i>FO3Kt1HLvxIL)2J*%Ri2qx^F z5J9gK(><TA;n2q?H0BaIuHPPafJ3WZ_}IdQn|1Sw#@(lg=0xX zK~#4)+Zw8=sV>1~$`}=mL}ZnP#Tc4o#%dBl5YQ6qOm+-nsX4@V|NQ$L+PR&wpl+0- zOCvPjYNcmj3fbhu=dq)u5-iRyGdn)O#M~+=)r7dd#`N?c?R|>~Ry$I3l#bSJCZbk6 zUMH6HHLYn1vBhX}YDLF=GODE%tCfq(ZRw2r2bcKca8AdwV=^Kk-_xW*3 z(_DD#Eq?w^BbwhwSy>_K(j*;C&Gd|}B3La*LWJc=3ejZ6B4u}M`lt{R%uh}-F&1Fo zp=x~AHKLjgyV-=ATxWVULS%iFh5l|jJ9-#hj$rcmaEVcdZVa+2`l#6-LXAX8$Y8NR zWMzfLl_VCY8>_m)NcSz8ItG}EneqC)IJ9+UdRw{G+RoT=43o`{vb4^6G=*e0V-_UL zmIUKBuXC$;68mE>^5T)_dEwD&oHmVEbdlxtRc42K=;|0?A!^1Oa3LydEUnHmJ~Yb6 zOcblzg*iG-OLG(L-BUzl8@_-YF%@HWHOkWL5JLk4Or+vuBJ!{qVc6jkDL z>qM4j=pX8$b8w2JJ%G<9Gtu$^zxwbr?Xy0r!XaG3Ed8C$wDpa#rrB^gY?wq5K{8_( zqD&2S(bU$*)T)TfVIj4?!1$7e&1J_Fn`d!hlCk~{PW|0++UBFUYm0CQGV}AZObm~* z7)z2^ooA@MgRY@5Rs}N-ryHkLBo&#Zr=^9C?g=7^6iXwGy!D&Y^ev_+ulBM!K0@1| z!1gB}rq(SIkH!!z9)cC6gn}^NE>r)NSNP5kU*(D2TM5K^=olIzRk)k2r9KkVJ+w77 z(Lc2S?f`zLjrhU@9k*`L)jLT{bm9xR5Y{K?Y;B=!aDr9Ef&+!r;uNFfBaF_+vActW zgFzf7jaX!sm6b(?+q&o;T|#vP@S9g?IsX>_^Sd`$PdceDDJ0%ywWh(zaDSzKVawTu4wD3Y%LkCbF}c9E3Dg2hru{o@Z)=}R%$*@IA4 zLyqcbXl?JHdt!>2 zfe~cML&bqT6xtMKd)sMg>1Qsc;R!gA7Z+HXk7IQ^Ai2QU{1WTY6!Az3B$NK_f%GJk zs%c18JGNK^Z$%ANJL)L*h)gZdFq{hUP+bMS->GT8FFp_4FehRue);|oKkqX$U=0zU zUgU-SUP?Vx43?_m#7e?rm_I5Nx#D!@3_W0NBa>2g_MQTpMBI4Om$qNxoeP# z^%TqVYnU7kSRUrYn{V*54^Pr`qm|J~kziE?_GBOL{OzwfarQEkF^$ChBsbnZ!I{n` z&Yf*ybZm;bu|`gOaEx=UbNDN3sR%js>DR;}ZSTC#yYHOle18+?&tGD2(nNJb8L9q8 z-uD8MbUvPF~Q9@-r$|1XSveZ%49^Mys8{^=o%+~^9Cnwc5?mvb-KsLnVP!A zxetzU_QnME>RQUJlbk>PE8aYDi|)(kIDN5;MQ@0(dyQ+qev_jY8cF*6R1{emzWf%y z`1LtjhBbmk4&w9YIoThhz+Z%UsgEny8|muqrLV7#fx#)_l7oQX&idjc17j)$1&efd zUZj1wgsqhxBK;?LvuS`;MPl{J8IGO&h)eAw#KbVQ1Acw%JWV%l(Rls}O(QW}^)>jT?HqgW zP2NA*%}i9pWslNx^(epj;1oBmcGEwt;jSzpnC$26qsKXY=>i?CH@Mb2$I9dgx6U5p zqpN)+0AE3%zP#1cm#B2T^C2I8bcxG-ja>ENT&XE=542Hj&zn0+qdQyrXd9L84QB07A5OSd{0 z>z|_e+(kN8*Km~$xe%AfxOw~-XKvnPU|OW8yozGS3Z2K^V|sic7!oU7a6)Sg}J(% zimgSsEN%)NGVS9tjH_X`*;nYlbd;kfPI0ZRpGY!HNgzr8wKw?LFHdr#Z4rBM6;)x4 zma}j3(_g*Ch0bZ@f-(x1d${!0&v?73kEtlg)0Y`sOkgsZ7`gnPdHbUlnl9Yp%+;$* zYIZ6DDH=~7<&9&FB$F;`OU#UqUgOrHjgURb;MrgCi(h}hnH#M%P0ry8S5hL*aO1>Z z^X`dOZe6&{iEEv#TT0osrIezw5=v@nsM}RbSw$g!X6c(9X3|`WcjgqgI(tY3wo~je zBLMNqMy_3YpE02n%X|}OkN%P~XS%p{?lkB6VuZ@-DUl{Q|LdRfU*0)Gl$W44s&R`ZkRWpmCW;b^S}*rDk*dB>J-<eTU(lAd{(2ls*I8XI|3kRNv2!Ra{A0gZVt{e zzoHQ;u(Hs7nR5d+9(nbvys*ELcwYxokrWR5Dp!wPAyM)euYL6}w$Yos_kI`NBQNmM zjwDyFG%^=_n3oS%V;;ZEyuFH=`U;#P2+2j7-+PZ^ohf#G>zjOadjV@5oh*92Fw?{3 zlfC$!ewF7B2IxO~n(pNwN51(jp4#qYd7za+Er@fumn)|lk+;9di~DTcx^#gF$39+t zY8TSVO@_>6)VgCdo%(?0=oVi4=BsQkTBEsb4o5*bWquP;p_b=fdyWRNgR`eju~zXC z-~8rRI9TH(u`TLolJ=yw(bkD+B;1D zm_YTmAahNp>6Cl^-dF&t@tZawA`4+QCi9NDv7?v zcG^ZH!tOyXoO_2$LuULYg{6^etO#~u3lp5`SZ2%Nuk(AaK2DieV4;5&+3BNfYZ$wz zp(-M-P?&%_LI0Jb+-w`g5^SKd#K~;?QQo^eNzvX{`T8?;Bo;;)p0iLOj&to&2Z@rW zc>RSfB)ZRVaYSVIQ(x!R$0~_V4>3Bg5VS9F_WVVr9ea57@di>|XX%QR@W``|5SU+L zcFIiUE*k?U&v1Uo#G~JSjc2MI%(Zp1=B=bAY$B#fR33VT=NjPF@k(6gu!+Vv>=>kE-bQxxw$ z%nL6z5beIg@z!;AJ^3Op9o|dWF0-;W#rVt&<1K4=OG8MhLC&8UBeef%UU~Hhd$v_j z=u((lvQmBUd0u!p%<9A~#w{Us*KeW3Z^!EN;0}241gym8Cg{B~iK()jiftk6iiQwd zq%>ojLBbg|^|AAaSitzjUvg!tltZt7i>K<=85|g5-C9Fk z$i$4fgvXwFnWyVi`uc7#sQ7VA^wQcgj{lKYdHK166vn#gnNYDw2?ox;#jT|pp8f7u zsZI)^}>7f9B;!dITEN9b)MAxI?GM!49#Ov4i|^V*}OtPb?EWDiqYVdLgc-sD`* zEY@O)>E2NWW<2cJ8)j{-lZ%(HGB_?#*|39#kcq`bflx&;B>|h>;idb1CAPp|V;k%4 z5~{b=;1*<-M+X>Rh*D5iNrm4=`Ynn~SDxp$$OAXb8Um}UNzAKjG}vQ2y3NJm$4c>g zt-3&ZDtk_GQL}$90V|-bGcr6#Up&PAV1m_n6z~3T@cn0Z;a7&~NPsz-VEDsp42Vwr zB?UN4c1pH2uzgoOeye~QpXb)QZ}HCC#~7TSVrF)n(Uk}mUlCRHbrjh37fd3PeGIfs zQT5!n`1Z5=sh0W}nC?ZZI!t}gj);WQS46|MN{S1en9?t5sHq4OZ5_nC4ZQFNKjN!T zKSZT{fsxU6)U7Y^?PvE=TV0MPa+!gJX=Ga^>nk31Joy~Y>?y#AwS*jZnQwtS0Q2@AG06Q*d0 zL*IRYokcOObgdHD{XE}#b{nNN#Y7fHI5Q(sqQtS|V(;tU;?Ncc13giSw!OeNUaTRt z+QYC?#TJjoVq^vP{@3~5Q+uc{axn4HAfhKoxYo%^w1mUYK0<9!V_`9ZtlDsj681n5 zmGyhrSzdzQVZr7JQPZ%K0|yTB(8CY$(80ZItt-P4ou%jU01C<(Z5x;zxs@1?#dfHj#!v8XDoe51 z%|yBf7+Xpr6_?;n3^V1}!jmt3m**d;#56g<=(QE>r72eIcD6qLI?vTQm~Fp`T=596 zeC;djX(+=o*UL=*BvOH!G1)`y!Pofq{z8pyyxhs&MJOg7Ocma)CaMnX&B-}@X-ZuO(i&$FVLkQ`>Lb`O4^7nj}4`sj5&I(L?l zH8+(ZA2x>*PsJXdd+HG?Qa$|QKYYNb?+8Eq(O21CkYN1g3c(!@arkf%v!es_nH%`# z%g?gc7onxIk+$h2;_C_Gi&6Z=UXsZfdM$N)_3K~b@UC(S3mll`WdAxJ8*`APb3%;MZq&$itaxFwl|z8iFn&f*G}AYZ#hOWz`< zsuJ8b2mWv=TX)yvwV9EVA}*^NvpLCl+gX-uTlmU1zsbR>LIN%;D}!B3FWY(KYhUN^ zmH^BB7a3E+loS@CEOcSr{R*$X`Z(LGyo|R`F&zoAv);^@6k^}QM>r6SGCbVFyfuJz zUPY1`c>bHuv!l9_a&wf%o9n1j0-I$X|K3-5<%Ppk3!RKE&S0%PNM(Wj&J`Sq1)6%t zn9{;Ld+14aHte9#WkpKAgqKU4iVskvOtO@M?XUch=l7RkS-QexEXG1oAztwa zUw`EYJF3E1XGTb1BM=a{cKR{{aR`&&ubq3X z0Q%gqSR`KiN;UuP|M(Dp_1_=lU;V{i%1hk_2@O?A5|6C1va(Dx7AF}`l2R39MMY6% z1iKZR(~h7hq|iueplBlQvI_P;`zk;9;h*xq{@?#g{^0kXq}-YAXk8`je(EJ&ed!x~ z|Lb4nd*AvBfB2Vw$q!zCjw;XX7cxA-Vv2XTSc*?EJUdJOaGcd-7@yOeZY+iM#Ywt4 zMwwlT-#$@Q1w|Hc1&Z0ab1PLP1^5emm{Ks)Kf>^Qgy_OFqmvqn=Evz2(M)#zd%7e@ z$`TH<6PH;-PHLz&7gmcI5=m012xeHHm}Kx)3zLy3m=g%8Mb?(1L?$Mgn~-st?O06~ zMAeE#6c7-x#pYNX9$;)KN@Ql7#knQ?b}LrNjKyrlY1c?9Dx&1YX|W(A6QpEuI#pJ!@jl-XDm%nsb)?HqXK zYy9A!{yG2rU;MXx@0r6KeE2DT@a^ZRPqy)kH-63AtwT)qj50aAKtj~luZm)d)x~i} zN0-1^NA1>nByWP5wFsIjl8UETUtMB(ew@jb6%qj_c8iF~CLvlt)Ib$9=B6eY8Czs! zc8ZCGC=rVryG=r{yRh2qNNNhfEZ}lk5HuAzrGH{l5J40pXo)pemlm0vnqqNI!)3N% z5@llR>nu($5Ya+B`t@(}og*Q}Zye>P?_Hz4y_?>~n~bl>xIFdjdH4ms`A2`sU;c~# zE&uXsk5i~DFtrq=WLE_tca*7_S=Qq+N-E0g>N0E5IEpACI9%97k){6gd~oRs>m^U{ z`@i>19%~37Dl%e9#=Jbs)Wj4^tLsD}2~x5`G8$oZd69TZ1(TDtn1GVfkc8XI+Vq#F zR8ol;u}Fk?be)-j8+>r$9Ahgsc9aD120Rq+dyJRA{RjNTU;YdJ*+2glk394+PrmX4 zUfmyJ_|#AM^@krZv}z~56k&Q|nzdM*gd9g!1niO-n+U3wLQbVnH5EY+NeQr=jIq2F zV`*%N#bgAB*N&vhM3^QPR!{N|hGIV%t zNPwayP)sTPyWbhoKebdGNr~XHTd>%i>1A661E;E}atc*Z(NqPS+k(w5p{0^2rZ}=0 z)To9$F~|JOI??4xhR0`^SyNCgX8c7(96bCI-~GX#^DqC^Kj)wQ!DEE9d4`rucF>6t5s;bbxWxH$=eX9{OMCASQCTCNj54DYu_usVacP#6e>Z!> zHkKw@>0I@&ZO2Z^tfMqvZ=>Lh!0Rigw5E!Z(lB+k+bH)r z^yNP3g?c8Z6HF^K-#o>oQGDnbW{cSUYgy>AIm@iq@rlDOn$>mv;?FvFVQW$WQ8%){3>bMXQ< zI$LQQm_zk6@bnYAF|SY3+IXFwo&iQiS8@6M2y4B3_|X}fT9(iPHPmeL5siD8x#0D=lqJbWS#N^-2p-VFyQ^e4P5iBz=udT)i}nBr42LwsGlVGc$`4 z;hL?4nPQ-+1EG8;Aya~Z&SpCMdl(&?LNnV~=)K0J{s?=%@+_6g5FMQ>_)060W*WKL z)y#s)iJFWsBm3CDrG_GLlJ=Xo=ghqN}v#PN@ZkHqprS+ihvb4rJxBSW~+p}Hc9)bb6n|YqjjK(E0?Y_qLuT| zGq3UVjuPyaS^9gr>1^(yXLyXcl$W48#^}utIew{w{)9^Dt^+)}vyP?yOPoD(hHJf( zEJ|)X>+>uwMDgz2ONCEluJ;m?LMi3Nr9=i#a;asS&gLF2-?&M%u#Oj=JxrxzmDUsI z=Mo9D+?nXME!f&T3teF>?VEl zDFQW*Qk@wwr@OV4p?11DCn#z-K$S4Z?CcaNM*x>uztvAJ4Kg$~1Vsl4X*0|$tl+7B zoC-&rsorZWICrqUyq-wYN1V8Rk(*sTw0BHmDQ@85BYP-{4AS1*Nn2k(y>m+_b{nzw zE1c?-+4l5T*dh+mF*?rr$^tj9&SDK0Q(fdpcev@P?D#UHtzAUD<<#t~!L817tABto zsgkF6R_C8FKVTlbVcs;K^kEl8B(s2mMoQ5TtPTpxYN@TPrn)3dO~{YWUqne!Ibp9A zli7~jUq*fHR%*+O5SA91UtJ?%_EKC?Nma2oy}it$U~rcyN0QvBu-9##Q{) zJ9+%@UbfVf<8!+ys3@kax}2hrm1t~@xags7=VKh&yPX}|>ZvSrAx37HUrK?+M|pJ_ zPFCn294BTj<&npp5Wg$Yvp7h8-LQ+yhm&WLyT0->i<<(bT=J6UE3uCwF zUXyTJytteJw(Ng`7apm_XER}O7Eu-|BH(u63xp|hriiSp64MIV`S1~*e_|^En;Em+ zM|E+Ckkf)>^AHGEQ{;1FGutSrDyA?bGIe8?H3jS?Hk`gn4nFrH`y0ZzY!=Ll3E~3Y zkOxUwWo|x6LFI0qdiEjei@n$!e!}%T*;W_CrYEh?RZVqqn2MkqpD&2V;vlsiA!#pS=l(tH-@l8x`dW$$&8)00 zlSo(yl~q%-rHmp+3RRYIly0ZeD-a)QWYrp`sH7ODNk!G)$k3N5Sv6!)K~^%wfZ;4G-5w4@xr z&6IYdBA_N`X})lszPTU=AFn6c-@?FTj9^VQUURxn5lvX!VTy`t3HiKu3n~Z~m*cZp zkgRS3#k<(LwT6&C#=_zXNmnHY9(s(Y4sN5ex|;IxV#MSc3rkC+tR4!B!uZTKf<<*a z`p9l-LMkbfje=kWRVBrgmlxo3>SubUKNdt0lfz4>s+w@ngFMsCnVZcl*{XSBdnF!A zwp)}uzfHc7p1&Zywog{|JyAkRyY9Ouno3HR(GU^S&M)pO9o)V-06;~NRfM!hppAK{ zPoV9#It?Wyqaa{0r{6NW3&v99x=U5oM>+m)-eZ_*Uj0|kQ)V;ijvzKgLrJAj1qqW$ z`k21Wi1&ZM-<`Qeq~VAB@nf~PrL;@M4OCQFMH2;mI!*<_WKKVK2hhDA-K}UVy;phj zZ{A?M_Bp=)o#&}_>xng0MN>62Nz&ISE1K@iL;yurz@&R_Q)LZAeND8YYI-|p`ubKu zln@0CMbmYunhGkqM=C*|%F|R8O%&169-H)QLDU_CNO9)oR!GKel#~@>OHOj_Gl-`{aK-=UoQwEnyTnGxoIz5 z`lccX5~3*RQ@iMXxKvd`lT1j0hN|f9LPbGCmQ~$ls$@by)o)5A0aaE}A?>zOgS4Ab zRnw3p6CwhFWJX)-m0s_D9=y#i|DZKpYz>ra!Dq%;A^l<`J*n~z_kw?iT$=lSrx3#?VX#;Z>h(0;X@ zn5B}Z4{yPdc5v|V^qYlhC~^t~33K{7zU`4qMNY}6=#G0t;kMs#{W{dp1o6&imxli7 zj=ayor-B*6dA3eDR=cn`Ol;>0Oz@IVSowPF$(A@-@&6v$*O!sA!GYLh^ zW(yXx2~)->r(F}?8>0(F-Lb{(S#|+UGsf#=@25l47eb~~0+QKmFv{6F?%2JfuDR;1 z2_~FD5B`uFtJ!QY%2|rEOpxxnFLN<}OwPdV7!AxWyuKg-hYgGQwox{=k!Ug@i4u~@ zjM-u|${AF>gUqpM8n`POc=G#S<%vC&xFy}NXqx_6Mhy*3RS*PGcQzuV;{MS7W@!+uPowtVWY(qys&-BNsx=|1$GbXbHXeg?t-wg-?q&-F5aeOsZf6gda za2NXU`kk0fdc9Fq-2n>v`)RuI5fLR(cfKO&$3@e0J){kuihwEY^ILa`nQlW>)5|SN z`r7jJGgwo`M|ApGuz;4XhY3ka-+*cQvrtvh5XIZNMM2cvP)Z`GDMV)p4Ud1FXCK=} z$ezAg+NiPa@I(|OOeS;MK;lsefLKatNJDg%viFJSc;Qej1x_!uJ9e^bM+LUDUj))_T0c&%Pyxwg!D6_%zAYtU%Jh5E zZEtfKDdA&AS?`~6_63@Nw{kz<_}X`PeSZ~BDW_DP-y&bY5p$k-gA6VKXwFmSFfgRQCC`A(J*1dZ7NnfJ~Zq~bs>2p}`kZ((BYQ|r*-iwLp4^?D$GZ<7mV#5dvdQJ2jymY&y>yRGkBZvZ;8fR%@1=(cB8+Kz!3uW|X-wf*enUQna zI1BoWf?oIAW!OLvbT_7%y8}(XIoX)nOuG#gH$EPs@86*!UG|KAG5xMax~cWiw%LM7 zQjwD~ilQM(w_TbVk2C3;A~rc!L{T46Z`3b+?ude3rp$*-gtQYI<8M7b5jC~O>f$sB zYY_pj7hBqss~}{xXWdD>%;sByX6% zbYx#Pxk5f0xz7i^L;QI7$1!$t8y#AXbhizLpx44Mv!SJpZMJ--qc#3E#$~6?PLr)K zgKm62J|mJrH%ua;WX3G0$Z`@{)$3(UliiVTt}kOSvW}&y>CgMDW&};qzn*o6#O7%? zBfG7PlD9dJb$oRd^mJ{wUwzq$0%V>tLM{Vd# zkGw%cQxueqSquFp!RV7aqbEal9@)S1se*vSrA~r45B1e|yAlB)fihnJL&%^RYBW zGI}${K9@|MJf9bN!<^^0hOv{p*OYd4hng$g7?!OwJ1#rDk?gqayfb0Ow726ly;C>H z8GmQj?|#TG$GynZ?|$>jZj)SObltB`Hqk3&8S4z$vf26N(y^JmvF^sajB%UE-AkV_ z&WKTOo;<&8KDA-~G->ku*GHx!%`CJ(D%5EQHT{qL8k;x^Ss~*O@a>W~`sD-T2vQaj> z%-MP8Do=J^88W&zD^s34pC_N$Fl(B|;NT#utE)6LG~jSJ@+WSdJJ8Zb&)B(T$CK_9 zvq!Pg{oUI^|-s zJhJ7p<&14)49}J|wxMx9SK3UNaoRaodSjXl+52SGA(LmGJikpom0>o@_xJa6=FAzE zmzR0?;fHzbvB$7jEZIp67Xlw&+p4AC2Hbf2Py6^AjT-5ljUTtUop57c6YhM2^seCs za<+w*UZQemsIG65i}_292AYul4z7XwXvYlM9dFL|O=FZHtMks)!DfuBG0kSbg-u4w znYg>$ya$T)==~y!1ilWfp-_MO3H?Z67IGs+Wr>7|| zFQ>k~9!b(yq&plAyk4(|z3UQ4v9(Rli_2By*59!dfCiEV7Pb3*d2> zfjDzxqf9L(u{sJUE)U_ciTC}c@)wC*$2M0Oa+KAj1SYQstB_=6F@f3P#O*fcx;?rp zMkBfznKERLnzQ4L|Fb*Z%)U{^7@onnpRFqsmMv!tC&#GOm?md?8pzg@F=Y44-E?n8 zc3rp+Lz63wk?e99kH=WJO*Vj3J{yYl{3%u~c3+&sskI~Ulu3o*$ z)YKHSv$M3fw=*_2MrCCsHk&Qolk2196Ru_#^gdLCw}=ee*M8P=CVp^%DlSYYy%p` zQMrC+Adq6X?KB^qzCzSfLy0|3?~SAU^37lK-iMcI?pnfJP(*pLAM>YOLwrZZ_sgeB z^fB~KD#iNh8f!5Hi^aU*=?HYc-?QUATzdCcoIKxxSh<4`^IUlIIBoL^#dRe(#mzh3 zTo^mV&C+Feo|!P?mMv%0YfO^~%at}e%vh$(G96KQ$ zPeZm2cfBoJqgvuj)_xHZeQ-{hiCnCh6N|v@yz+JEJ%{t4wCi+BZsd*YN zT;%xug9@EU3i?cG<7x8GQ9Swrtt4aKDz_V7|mQV znRsCngPQqmG`zX=8q*ueE=wl8aWlpn$qu`ljxWPzY~Rhu#AT;7ZbrFWX^a?;ZLZ^$ zeO!%3HWQvfxQ7AHg)zT-$>z!Pc_RJz$3OnDAP5W(5A*9^|C*MT7OJbO35Ua6yLOGg z`m4WUYHEsyAAXq9(o#sDuqKm5My>od$wjna1O7OjI*;4j9Ln&QUMzu{!x8U+u(!sA;*NDJLu zzI>j`HwIaWSqT*R^v|yecTR6F4|LOdW027Pr`YM5;Ox~#)+@fkpM3ij_HV0a`?e~= zejiSU1$k|f?(65cc%zk``4monAzn+8)%gJ?rYGsS*+T#1B7$9Fy7vYbulEuaoCJez zl=W3+`zM&0>f`#YMmooqvG{`c?PgHoOmsAI_54Lzh9`;H0))JFw8#uIb0dro4AXM0 znVuB|PoMyoSs=AOL-&;{T)o-NLc)Z<&Wi>^!r6jsgGmkp zW(+g_&rX}`f3}WnJ;vX;;xl2n;&PEKzu9J#|1y$YpL=b_blGIWHcMla$sWxb({2_f z9|JfD>f!yF2Q5JizomoCxU+soYC9B;n)CTnYJ{NM*a;PJ;F z$7Iqcf`#;Rz>IO8o}OlXeVyl@f1Xe%#KOV?*REZorly8hUU`LhJkH|cB3rj^#o^FD zHs-4vjaXDiscDXDe}9GX=n4zd*EoCTCPSt$ z<=bi~SR7|fbrP!dGW_A+^TvrAwDxpz?Me$XsWPexR%tu;D?Ye7O~SvG3db7FXW!-R zGdJjM@1t*Ijbx~ds}H#iWsrJK!!#cC$C zI>gmuzu>L+PIIHZmzLgMV$MQp3as>;_z(Qun-^$n?54e=k1zfRb`>$GK<(L z+tz^3a`$P#Y>b_xasPhEbgH>J)Le17I^er?%tjsAGRE}TVVjZB!6wGz%d+J%Zudh* zE|)GLM_U`y8S}_4k1%YdlGX^u;zgIY~SoXYbym=NyImc2ePrU@oZPi6@@N zGkTgU(>5M{^$+>sOM5Ua57O4VKv7){VW-*fe0zr#lr@`1&$XM(iuJtuM}NrkyL~M5-J&ZI zCZvwic>XH!y4U#Lw;!coqLq0W)Wkf;|MLfQCl%ZUGQ(XntjK-n|8)3byjc`1ZG-q9NqbePM4jgvRQ4D_z55SSufAYpD;b8fA9mG$X2) z%KE*89G}cElRjs18LeCx&og6(YwR@1GQ!#CXJ+3RmMc74_hw}4xu4CL?#oJcUG8_g z7e?94@!TvgvSwW}@kX-cjq!Jj%fW&&U~jFDfHY4e1(MZ*&F;eEEuyHfj4jnw6gwS==`RS$ ziip!&!DEj<%%l5uad1Z!RqkbystH#?i1LasMP3h;%b~{)vunpr4n6!ZzPO2@u5nbi zm;KKk;?Uv8*jm1mZT_ts+_RJIySGx{_mE5`NvT$Xp&dMZ_y~u0?&I*|Tk#hz&^0*9 zq^W}1L(lNkfqHg6{20~MMfA?hvJ^>Cv9p24pFhmw5AEaNK09XfEEAKnj3we|9v{V3 zTY2Qshj?gv2#4K4Xy-m2dEyWUA3eyHZAGlhDKv|dK)8hBiUz7n!|2~^HyWjnKidTm zB@IEyZn00s{d9Q7^DMJ(j5F>V4Rj`5MlRR0$jp`r&&V2eik5&Wwx^qg*zbeC{TbC(mz_4a1x{iETC; zufF;!|J{H0-|^gY&uth};|ZQQVJ9XgxP19Cfk1%WyLZ#o)y1Vtmq?{j?AWnmsi$vCQ-LQzx_u_$Y6Ya|5$(Izs`)6I>}ai%8+Xdhl=)>VSXW6%2b zr3I^C!nL%DCTsYrc2Xc|G`{-|7g|S{nVzJtw}Ym>S!86iL>Em>%?ytX)85g>s#zvn z8o(+ks3r|nNfJ-U2%3bbCP>9&#FGlLCLxM4iag28_z=C5!!$P!vA*b~x-?8MG0yPK zYc%#vGTPb3#MnG#J|7N?fQ*7@5>b;fNjXMR&@kB@loS`S@6qS^#`pdSfA-IRz}H^b zM$n{^%&ZHKCyA>HDNROIWaQW?ixb04%q)^pA-n%ll@zID0$I^t+Dj!+(t<%hqtK&7MF?Qs}PCT1jX@yOuRZPc5sFGF^GMvqZ%HpaM2`aF3aGoDoAG+RNRsri3&2P!m7=h) zkk?;-o$r0`d+gY;gT}^2jvYJ3{QNu?i-mAF%*!vo%)x^Pu~;k{oxdQNu(+JqtQJfb zGZu$E{ZVuc$?Cvrb6_!9u(@qm%vQX?0_^q~jvjxXqg|8WaN~A6FiR%P4hLqFKB^Zi zHmpuJ7PExO?7(KRVE6c`*nI%cax=gB_x~sUZ~w#pn-AMklplVAy29Hx3pzFe9w!B+ zd1jZ_k-R&3>A9EKLl{=?5s(L1YAy>ka!D^uL~*vLncP=W+hszy2Ti*Z=Vs3@9bM{LnT^18zi<9SH#y0ny~ZYAv94`(7U3?P28n zTl|0j&A;W}{p?+?4y|IgyYbqsm;@D&uvwhAZB{Jy0HpzyNYC4R@X-avBI$L;hCWL) z*|9r4*sNwGAhJHqz;Y0qr<$PclTTxR8nQdp%$D70XLrIznaqB+AvVV6GAf^B%aE%a zzw2A3&UdT3@i^RV%kFQow_I(U%a~@%7}IC|XJb4cGXIUb^W=F@NI(AZkAF6CW_)Yem1rN6Z-x{IjUx{t^9ZKWbyN^waU0h<|{zmS@JPxJiY zN2w{aV{;WzQnrO~z=zB2rnt78l8PV>yPHs98QUuh5Ef?WzPf~GTN$<6>S)+^geRYU zgfgFtU|9u)g+A<7D@8TCdHng8dAPn1hs}wnsFsS-a=dmcR!<>CB@NV8*HKwhjNL3C zT5Wg=OR1`=qN2E%;*u&Viwg1BY&bkcRFqUw8VpkCa}WqP@fX)nURH|x_J@A~Fxg!A z!}U~_SK<{`>Ad_Amltj9Jp2SZiyfbO@s_cZ%ns)+Bb7VOpRDsWJFRg)TQ0lP&Xu1r z{(iSix_ezqjf5&*Izys<)g_z=3!-qxPv#nCiUA`QP+W^ul2d zKU$?5=Jd_M7YYrMv1O)5S26nogo|A83D22a7|%N`$Fs=$Mboqmm!H|`vwvrY8Fd)R z?yz%lulT!REazv@^I7=3^UiM5yODiNGGV#eBqN*a*xpO#e#q#_Hu`z;{A2N%4D)8( zEB=d(KB6}kKXc)JUUkyj2jqB^wWTbsHMaowC*avct1=XUpdzTi$p)?fte7e={kJsCcUzAp=#)%9K&+v;xZVKlVaMmM`X@1@I#vD`*|nYjDalPAxE zByX7We4)uU2$^&B)10%$wAtYqa_RgudF8o(vJG*DPkWrX%XyM3EKi;<8ee$BtZ7+q z1nYsH>RIgF>UsM@Cg;0XcT4+up^>#DD@S2AD@P8|Pt4}4y>;%)TT2&s6Zv};NCSkd z96#OwX*IVyQ_b+Q)~6w31jsT3nQ&wLr{&X@?Tg6g(H{3g$Xe!>{r`U1tgIOwpGIe% zJpUMc;S95;%EVWei765ezYnVjkYZ(ip4ph0aHs%}RrpkfSw|+7NRZGZP&EX>gu`ym z_|~{>Pt+(2^RvWF0g8McB;mK;Mw+G~M;2L2$XMKkIL#mT|EwP?h)j(#GCGeGuB5U& zh*kfr^k-tjE~;_n2D<2Rls&t+vx#y2H0N+ek1^e5o%_A`wCTPqeA2f4Bp8oj zX8&Ht(-?0&FLD`S6H8Z>#V{vJTg@l{1&w?oE`3r)~>g))&PQSs=kDa19 zUc#R0VjQO5{!%7EOEKH_9_JeyiTbxu=CggQo`N8tCdat)?l1VoZ*CF`R8U`EjQumZ zuFh0Vi7(K7@hC^%eut0FU*pE$46>(~s?tKe4KfJ&oq)2^&#|jFXqvZD#V~JO?O;+X zWLuF7F}v_a1YL)qC0SivU@`)3hlS*P4;S0}SP~1V3c8Sl+vjGclg(`U@w&a-<&%;t z?VbAX|GLQd+9pRizwDdQJJ+X0xJ%m@WsGw7LdY`U*=5ajO!DOUGVs~2xKD_pLhs-* z$4(6L{?R@zU7uuiJ(=#Q0aambW|FD#S)$4G3qPWh^7=hI|42P0Zu1@bHrRB)lD0T% zlI4kZj{oLo{Pq9uZ+P<`{)S)w>Zknb^i|rXVz=`r#nMD4w{AAlGP=&dVv3ZKR&KcS z&Y~YQMMkHlm|RYv-ESY5TA;J_ zJb!zki}6(rdvFVf_CLzOG9SkKfLs{+SwToIH_KVUPe*pAez#4#$Hy1G%-iQtFJpUt z7BcOe!I($>P3t_rD?IQKb22XTlV5f7um53;w;Ln$bk6Y5Ha|rnr!Jr*nCfh2E@h`; z?`}d43DhJ@Ys<`~thlvR=I4j$>29a#>=~{O#IP3>5p+oqo1^pMagLw9z`%-(CscyR zBI+hrOR_k6m3L2^a-vr!Htumr%m)2~k}YA|+_7TFN-Qr8xb8 z2M`2>)!A{nd*{(C4%`kis3{hQS{WRhLGu>jlHx2)_cO4t%KGdCji=6V=E^lDBO3m2 zF;-=b!R`S%8ZXn)KLfr(0!|Bprm#BR%-~{*!rDhEHZ9OUI!MorE1bXB%vi!tsV_mt zxnJo{%;n=&JxYEKRZVC$vut|WX zvNk!y=vH2)1vXYdO2sSSsOM;1}GaUWkC}&!SSvD6?5ptoe3@|d$ zLtk?j7fxNGWknzuD#W8d_xRYf<%8&~jRxp}^HrLfZ_qXp!CcrtnK;Nh|K)EvcBL2DQA}lh zHANmPf~K%C+Qh(Of})!Jn1(;(uYdMFZ3FX6546!evPhsb$m+;-PF?9G?yO~diIvH# zCpmVyg|X!+riMpYU3ODcsBq)b2fT5-k%%l&P+mt>c@cIAAjRahlUzREhFY_YGQR^6 zg}LD_E?rWndgurbZ}Dx+Aqb*Ga<-FW@4v&*8+|O!&M`VT!;HyKWl&{gVwz=B3H$x) zG*2aP`-`cKU*p_`Q(S2up}%K{)wr3miU1RrFYxAjXX#vsV73P+u&&V3+(_G~OhZjA zW!53ix3@Ddg>j5t;@Aft(mcGt^voE;i;H-}RanPQ@tdFiJr_D+%ue)ht9b%fsG7P; zA0|WRe6P{-gF5H)d~$Lb;|!T8YU2%9{#fSuUE+ZoW?50W)-+2?&kABZMx`~*SDz}T zxY(@=C<&(8TbPbpZyV;+GQE9WG_M8O>tAEAqnVZP3;fd`zD%9iLw^j+a)jo;|2Y?D zR4gGki!B2zM%`>Zw3|YkfV@6K`>_u>cJwT5V`Gd=jxjVbi_Kd=SyeS2n{emLO0j8L z`-T};OE}z6vN2)?4OIb?!$)ORn1I^?f`my*(%CdgOm@4KO#ogw+E*y`xyR ze1$*$gRk-Afh|-PyHQ1zXw}pF=?K-16=k<3>8 zZD|0D3CSd3mIMSr!dFwz_D2q|rKW<)x-tZZ%);yfD+?Cfp$h7^?B>YVzrr)G?4Tes z1uaR$mX??s7)D#4MNyVW`s~P}fP9Zn{N35jnDLj^ap>@Ns)`)xFaby579OoKVH!Wn z*~{07glefOu`+z^9a@$&O1JK&-s3=8SR{fOd+A=b?bt;{(2jJ+QP6W!Wd+gUq-_6w z_U_qARb3UKaz7DSLo(a(1$_9NHmq6#rL2nDy}Kw56jHan3Rl58(*$_piI;e7hd|rK zU-9Po7A7K@XXO&U>K*KQ>>NT5t|Jg|-Ed5I-4TZntV`qx{a_)PwK0*>xI zl6>u~Zy&yIyGQYV9{ctp>U#Q1+C{gNDF4R+Fb|F!2{8#4N z5pQ0evwsbb3ZtrMkdgn|$0@4hg7@bE8iyJd=%uX~E-0xgL9V#rE|r^Cj6$j;0UT{p zQKT#_t%sNegVrD~8zDtiSW;C}m$OK<)&&UZY;bvJM}HCE)HE`(U*$6?3p`$BU6ez| z;aTrpj#oL;7S6p=PPpjo-_4>vOjp?@_F`A-kLyx&woKh#)oDFEJx|E?vkL zi$QWYJ>htFZfXM=EiG8w_Qh8x?JSs(CXXmS(-$ZhJpGnBP1CJlJAO$}EptS#Cr2H&l`L$89Ee>^P0|cga-O0oE-Ox4@2gHygo= z^3%}zwEtiG;jG%=t`89-i^8yR%xR~*x}fB%UwipKD+UEOa171-L|JeI04qb)#JJ~9 zKO@OOFE*V1a(y$k$Yvk+6`iv@O&7FEmX_TZNgNy0bKV3|Q3e%pTS5EXD4h3iCY|LwcIwwLC+Q2^5^3x1f^+5gg^N zb#|VtXUedcvOYblPAw-Hjl9v zQNNNE1)6#55xYA^q8jX+F8XNSj;oYys(zJD&A)EB7pt-O53&*0hv~n9JSCN2wK^v6 z4^KNb+r*0B+Uk1lGD;>vldGYDE&@AH(v19DfN37#w`LzyPDY43hd`;u79mtQvf@R2xjQ+H6I?$j4k3#FxIlhLxRggK1;(-LD0; zvL`(aKu+LETtShpA!T$IO5{Q}ZMU79WAAkw6KS=Cd`D2-k(`=c+yGLY;5i{%iN-Gil$c=8%P=TqYtxa*0T_U>Y-?2+XhuX1#e_Xv6nkZVipxq*-Ha>~0 zy&?Sap+ajLl)iBzY!7+|aR#o~-?#7KJnlX%ub|kbGs~+-4DmVWwCnu~It*BpLOY^u z_3LA;IlS`oSN((%jEtLZ~mPV%1SxUh%GPg876Lj@to;qriGdia&j- z!Bhf;TsDvU*ZGlO_eawIw(kyBGl8t)|J%{^`#z z*}3VaImG`h9;=*|ZYUQ26Vb;p2};R$L{5RN(W0n=O@6XsZ|JVKk!BVz43HFVBBF-L zH}2nOI5$B8`)%N28at$wHBqfzw%Q!B*&b1M7XCGhXHQutf`NG~pJ{^jCo6S62nV9w}qN>cE6hu&on^vTrl~L#`T2xw@sF-slAoHI3 zj{4Jr-Ub)+dA}FP)CE3&#ys|Vs~&8t?$9m$isuj6UO5?A%&nF!^7<*iqZk-x#Ku#l zYdM5}f0y3iAF#drF0Pmsrj41~ULBd4S!+aQa}0Vt>O* zj}}s3JPe|fwzyU&eEtxL=CYBc^UTl4oaD_J9I~^2+{l1SJ1Yf1>yHYPE~nwx=DB(J z4aTwA>hev`#?U!j8R8l>%!hUJ zr&=8(EY*|xORHQx01TuNOUY<{qT0Nb$CdOm)~jRVe}6l&Ltt7UGHY&|vp;ZZV9O@Q z%!vOBt9HM(M69F4M^@;#)YeN< zDg+t>5fw+-tmT?Rn}*l|i$cCrHQQX0T51%NEt=-K49L_}B^xCf|CD(oh)s%pwn^}O zI?@Mke{oUJUTkSZ1I>I3aMMoL;oZ{9i*eBlW<`aRR1Oj&0W?HVr}f4Az^QcASumiv zH=HPN+MHa1irSy@7ffvCWp3vu*KB@B8SR~sBDk=`Zy+eR!yvprNm-S3rnU-#iY~Y9 z`QFp_Mkbr96}($TSV@^hKoI2@*Q&IZ8FSg5SShSK601?0GLY_{Sb1`YG6?UK_T(C- zkF{($3r&~#1~2x`Lf~=w?sZ-qE*kqMwo16bFVy#*4K zh=1L)cVF!KdRYYy2-am$@}88b3O%W=P6S_?p^>I z<*$?G69`dVqmwm@tyzZruKVt$K8dzf1@p*BoOQnF%vyKoOIcC27*sYs#jvV*abG^!Q=b=v~;uXmsoZk zzTs8{G%EpvfjSsVVs^Jr8Qr^C%r*d08A>Poj{E2CJ!vEMqdh}v8c7GAdJ5eCJyJoy zw|!F8C=5*nlhYJY#9-0{87a!_gquJ6uO?x&cQPM$qrbOxwsc*edM_c*)eJ1mLeqzC z9KHoPby6<&#fiRDbkB^qu z`IMYJ{UA3I8U+-Fv>%*9GlLkWL#WoPD$!;}Z#<(P>V(JB&5SJgiveI!1BQeY^xB7e zGhCWpaaZ>x7M6s+s>2FZ&9E-pM#aRY9jhIHYyzLDu3NVb_Yd-UWTe7}6Zr^c$9pU> zU+>85GOVy9iM8pj(bpqn)!I6~&fo8k1jQK1X=mKyqY-8n_-O_wN9)?=md4aD<`O_h zuv_6wVM$SyJz-T0tW(Rqz1tkeI?q&>-l?+{IGrf(iK=R*Etg7Zo)9oep+py?W}BMJ8zjYfNE-4#od$ znHU=S?u6OJ`2Y1JJt>ff;JTknQt%2DJg^fS_R~y0z$45$e!)lQa7%3W0J+kgBTY+; zONvy+A~^;~EGji6fPw?Pec*aLeT{|aH2|ofZdp4%z0w)L(I{9VyT4N^3XI4Eq8Ihc zJA={!qr!RHsTw1QY8V)1q|8_bx_&3#_VOt{>h0%z?v7hCKF*^m#i1Z;et*H!O^>C* z-~pbckqZ9W#9Zgkkmm{)x4j}x?6iiHvxGOa_S1(j7oozX`_lLJ(v@{*wy8DWEhtXNz{DXTe0x-?;F z8f@UArWt0Chxh2rtg@u1s~EjJyT=f_z5$Cq-Z(n4kq*0t%=<^1Uf=XS1Lty=16^yw zWsD#>D&&l7GUZoRA2&HZ86`Ns&iSjQ8Z>QbaCWIsO_tW=0mjrj>q8>tJXHn(gm? z{{1GQMPbi%4NVC{*TNIsdwClj)0+$5qt9ki+l-$sK7U_HDQ`JNm+|r5-mdRM^gQEv zwInIw)I%$^pjmjP-E=(znU;sQ*+>2tPcZ}UtaV)~u%nvv!T&7*{yl$6hvg7=h;gxjF?sW_{gF+42rh?Wwx_G*GeXCas-mQmE9da^68T zKKG20Ja4#C{}Kb+b5k$5si9sUPwjqW)TE19(K0ysC79I^htQN!Dq8Tr(`YX7UU+>- zJYl@Ysj7vVV_5I%EGRF^pD=huX-L%4x!bE+=hct+jiMIUl8#ssPpxUfX;J>3{Nkea zmW7EJcQ7QW#}h#(n;^H?*SAa$T_x>1BRbydmb`CF>6GIcs(w>c97UT|M-g-Qwdi>c z&5a)zF2x`s60gW9_c8kX$Dlh1*RFeXdb@MbT6r-k+;k(4t65D&;UIDDrv*Ld&>X2+#CM#^X5zu0&C7r{%Y1{zr3 zFADA!$kk3}VVx$#_RA+BK>-PdE$29`O`%G0Rg^eZplrtowZK_K@PaCoftg!!pgkl& z1j7`vX139|q@FU8giV%3eS8Xky_A~1q_ravGzA(NN!s-TT)@9e(v`0xM2Gv_{pHo} zW}{1!M|HCh`nPps*8I19BuKA}P*uibm_)LXzFYg8l=ohw+t$uzL8ti^5gEAaCmF+N zWPi)h{M zFlicR)<-6Er-n|Rp;x74tVBspF9u=9{0#SLSywQ02rW4$qp2vJsF~S6;a`P8I*N1CbBpH;F-1a2}6lJO5i3x%+?xtc;oviSA>7 zWu=VEtn)t3vL=@WA(mL(>y5_-)D*ER1es!ZByDTbrHHHHxYERkfa?{nxHl!xM2k6- z&(p7>6Snlq@T?qE{Qr1IkXnUFagKzs#(6n8XXB3OU7Co~)?Tod7E3A9P9j3(=N*WGDKan;wv-s!6yyV60dtC^S*9%tm^a*wlOhY;r)Uwxes=(q);%X$xm zl_9CjkXmUjK(RCa8+~qujq1MuG+i0Sx%^)qS%2SyAGv|QsbXa49zGkVV5(+ViUFAy z?+DY0VBG7!Tp24qqyXRpb&V5t4oeDzj@b^8iDH;toxJ&gk+AwZH)dHb)tP!-&!_J8 z)7>*IK3?6(^iN<|n+Z_r84Rwcz{$Eu)(Qa4jSH=As4w5S`RA}!xPD%U9&|E?HeQbH zCIHm}R+ohR_7dNU3T%6{g1#y6sl-?01bV~v81n!27Y8MW38CI_-A1=a=Zq+0MXZP6423LG{3twcEfBvfg@cg)wJMOCd_+Iy%-r=ZW7I=Q;I{uN1yZHkrN*rlI zps-Xw${*c&d}&2ftKsPnP?yim%-ybXzPY+q)w%5Uyp>+A<>G5yxvDw6W)#C4k1j1S zk%s03D(+9j6pGhA%jxr3^j-iGo-Zzu%-cM4Q4$`scY2@YHRUsPO3KDNbs!Bk z{6uTLvY?1Dmg6BsndD`io`DLSLR(+$^5Jz^O2QA|{!}fM&+GdXGa3Ad!9ZtBAkM;M zZ0%^RGIj1AZ13Rb!wF9%OPeCW)mCn=!m>?E@J)pm41z(Y-XK&4yXO}i^VsArTDeO| z&bjmWsBLyNi>6jCmEZL#Bu=FPZsZ9D$swcTJNVkFXbx(^kx9%XUI2r`K*bE?+da%Yf&R zZ%Fmmr~Z$vs!ks?!rRF#_ij%D)z)Wvx8tc+-&I$y@o|DE(oPb zMs~(g`?;Xl;ays1xiYxARzf-uy;H2{4Vw=bZ$HcQz9i{Ta_}gqv~HVN_L#Q3nFS}Ooo@R~Aogrsc|LwvosHF4 zdNXY3p~JVO>KpR-nN}2+%?8}sBAYX{t&r|hm6qA`q~q z6>vo|^G~(G>cGhi&r0j!EL$JP+0eGSfZMue?e{Gj#Ft~+?Thl=--rql2)U!%PaA3D z1g-Eyz)DQ?Y6cd;t@``ztU+8@h6lw}MAG^R@XH`0{ z^FC;fOOBcGY>KGvl8}UeoYW#b%xju#y;_7T!h==n1cbi&QnBhwm>5=)4Wd_-W#sxiDga`ke>PY1+lVo{K++(4Y!pSa{$ zZ>UL<9>0Z+A(WqMmTGqCeUWHLWMrDyG78WskRe$Lu{18}cag=|UPC`) zq|$UHet`0t(c8QHfe@16#U*&-U1C#J@Ts}{qFHZ6DIM7gE>myU4O5v}#S z=<9_RuVf@GXYAloo!@JAoZ@|4nHbG5@0%bl5Mp{i-&LHAbG)gjyX&*h?yJTIT3((v zLLHv(uNv)1<|8x4;@^OP{mKt72nO3R1$U0A8pNGlPY6PK2 zAPv@N81EO*-o_N)(^;I5-j1NnRA(jTZuac(2D9kw+BmmE8#8h(^%^31>iPZB1q}u2 z_(Tr5)iy90nYEbZbJd}!`4gojdh8GneYIp+J>w_|eAi*~)4Wp`n`P%PTX z)f_^{1vdE9?X{-n;_%EI4Gq6IouQ(ijW{I+nEVg7^5Or=3S(w&>v@P5b)oznwHaF5 z5#`llz{X~ub}u#+S9OcT?U}V@MRnHPlrN`yoFycNl@`g!%p@^^N~C>Fdt9K6?go8X zfF%BywYQK5i*~kVe$&q9_&bSM?dA5|uCB!sl!~)|!5$@pUYg^C684dsRELjgAkSM2 zdpv;Hq}8!5q@sW%a#WW~MyccJY5k&;Cn7U~p^YKz2nGc~nST59i?OW}8}N-@zn|%K z>3gI16#a{(#>gt*XI`qw!v){lKKMqI%^$eKC(r9IM?^^~(W#GA<^+umnT)c|$J(_q z=clQE>aH3NfJvt#ZT3waHBSBpVO3>=+K2>LE-zXG%Zc$%Nu|&zc*d60UiHJl%63m2 z@Z47Wfc=j zRGu-2N09PTfG9mv@)AQAcX^DGRGb)t2gp)KEk2Ikb}OQBb9d9XXor_gzI-W%p<%mt zdq@kIRz{y4O5>pSD8$AhUvpB8{e@SJukP-yF}=^0ijS8^0gQszXC8B$BCl+(uD|sk zdqiBgkC(VF7tsi3m!RdvL=oUjw^*an(C!)>{-RVF##AU|Ni>RIUPb+w8hD(OG2c&i zFLvMODqA13i0+4Wz9SWo(T?t1pSohPilk0d>hIWH55vB_&t0!5IqOIOw~a&W&T?w; zc>nw@zSgqDaL&6y(D-t{;`}iYrctmkX9R3{Cn-2L_}muO+dZ{xeWwUm}IkQVoH{t4)I-lf24M3&l}NsW6sPZRk2>I_R?4Ul?I1 zaz~U@YmU*Z%2aaIu_emXd76O42@z9UyaG3t@L+;0YDF~I5wf_ zT;1BoxzsrE>O={Wib&|ci(;ivr3Ta`50RWWja7sYOAV9%IESed$K)rC3oA*A8~SOp zi7+LQ>CKNSZGZB8pVEIvLPoMxV>%w7I^@q{l?lda(VOSTPLqZXpcLMb zDQk#oO?4|ypu_->gdokan^%R}AI2c)d8Cn&1r^(iR>uKiky6&7S9@Y9!;w6$rv5ui&>A4EB#SYie0z zMp3R7?Qg|QT*ztrUCHc6y$|y5EB-Hvug9D(MsCdthI|m1LFY(uQb}TpJP;27K|mo@ zq9mnaoFQKTWyQ&lrbH5C9pdbXH1Va$|ssdOtHdhx6NtJy6N3cgA^GAQ(2d~s*v{kY zb!5awpP5|jL8eZ-T3@mWFcXLmaSLinE#-b2kMr99ywVCF5gjk?7~*S?&GJJ&`QM>K zAPZ90n`acRNgYk-`QKl0@i?5L%37iIJb&7nWLFDuyFVsV!v!ElHVK)OGh5_GTo zYgbBjF_b<@WC>)%xg3cCb;eH&TuKP z!%m#Qa|B}aLUzgAu75+22<0x7B=R;c4mH}z;>2!emrGd@Ono1 z75cr&BU!lu(b*!_msKan@o382y{v4-vIzQ>nv(@Fc7thph8>=0RvgkJ*TN+VTYgxb z6ZAf}T-__)iCev76HPJ;Z6=~My1OfRLfU5ph58SMV~BP4$NXl;X|@m)#HH~;M>dG^ z*NG?mbvaqwh>oYCct*L%-4Q` zW$?;I$j7H#?peJV4FhJuxu)nD%{GNgrbGKxd2K+4A^TWM_qb{ieE4&Mqq=75ffX>b z6u`nclQiC1|JDBWT)X;!E-LZK95NxtU`5SWX3Mm;(asTI^_2r?V-XUY_dEcy<#SGy z@}7`-*8c*~I7-Io!RX0~WVCyj!z&lfKBKTL8#-@9IlUtH&nl;ez3rlbgOej!jRIt! z@2(X!T<|*uOQ{t=t)Z~Xe)zLL>5*Ahmarb=b2$0=rI9MBm2fy6a4hdr_u7-_!Wx&* zJMHacT=03Mg=I#0bZ1x}0N1(f{PPKPjBqwVo6AZV_8BxwV;3prU+sd$*F4Z6F~Q9c z)}Vz$Q+3ZJ{0CL{LKEDYC*}_%QCYiYHCra|u!+a3BCWC%Ight_=pqiPZDu{#lnsqfc?F0M z^GuwuN(6oDpPLSjtv@Q7F!8nal{ zr0xPLZ|KvQl5kA?N9b1{2sdc1g!_?44Jz}(%#3l#_aou$(jggMFHT__cJWcv0(+W7 z)B`iU+H9RSNwYXRq})?1%d3U+Sz1mM((DDtJdodd!+|OYiQ8hUFH;a!R!1N^nZBZJ zXYh0e;`7qb!r^knb3C1OY`G13q>me=8%8s{b#N&K%W>ZKXOUC%h}5#r;397Gf}1n& zY`gCWzQP>g-9Gg(SEA6=v#pDCW@aXwmA&^-Fcxw>eMD}1r+BY$G0xyu!A|*kA=mtL zHt&0z{Tole(mm-T=$>F$$IQ^v@S1&%_3k+3f3 z#?OXU+>G0dh>7jY!MQcKd5ODt5Ix9^6WQDv3!_gQ!lMf~r~TuRx8)hMJ0lEb7$>#W z$06u{1zczSx(^XR&%p8pmJ=+lFO2pWgx%8(@d&kpvst&(wB=G*6$Q;yLvka7#UoWi zcDjb+-|V-*2rn%|8@2Q0(jpk)JGS$u2M#xTL$PY{^&C|+9?zKmG%M5ACC`&5uDlq% z{nr6c?_<`=z78IrOE%{sgpo+)qQTlStKy+ODjbA4)B?(bdK`*T<{35xEzT`EWb3Rq zypBFI_nIZ;B-{))<3v<7l&Mx|@fu5r-g^I`1{AAG9DbXqn_lFaiVNUT*YJCnW}x2T zsATwLY886^; zb5Pad{yqkJ1YAyLr7{Uq`wyOSMIq93CwA@5h53D>-Q;8x>zftNC7GGIg{M{{^{|iU zW^;O!w1O1ziNv{e8UHeu}cnkZuj;qU2I7 zh&E{mjRBZEno__ArG}$z0tXlouCGl6U1rc260#yuWGqwR<{!dQx|$H{iflDvX=~<; zgv?gD&wsE-5cv06hTr;_I*FE7ir&TX)n`9~MM~sLHJn&36S?XgKIAn>W1vh(Pcd-W zkz@VM@D}4-OX)ke$}eh5(rlNuzT=V_GF`IS4mWd++(K>OP~{GV%iO=IQvmDE!IAPC z(MQWGhoE%~%KG*s{Dh!?yuu?9lA>(ZERSly%ZV$q(dtjn{rQWt??M{U(4Kdfi=N!i z^K6;smOoS9k~EwKIAGD#)6lIZSJiC|rh+lCtU;-1zR^mMBZDXzUKf@D zhxuV$O;^jn9$>Jk_IkYiC)#x$>!&;Tuaw=P3eVO|q}sR4gOX%$6n~7l0qPuu2x@@6Yg9otESviI-<3gi% zGk0ezZoU@m&L2=rWoh;L2tjML=;WN;AmETAy#Hs`zcjI2~ zu-(JKzvIe!Q3tA24lo-=wyHkneV;(1B^_;G9z^g(pI_$8G7ECqMvvr9^_OU+kVEN8Low)dA5NL)5kR@8x&}GQkh-}eWUVi*AIMrkiPXmT-*{I75<3v+LwC`n6?|p*4h~g4QzH!k`j|;$b8;s zu{a=xU9rMt$Urk~M56C_VC8G?N=8i88L=QY3&y5~IJLGJwnJxV-#Cfa*x0S|x_zZh zHItYcW|AX8lKHrSDDVQbfgvY-jxsIfSW0o62fI^c^j>~SSDh4%cZ1&@Y5a@rz zH(tC1arU{0b(he(#5?6Q%^U1w8ebPj+^d2@BBfAxGY=eP**+e%xuk^Ec{m`0a}PQw z9DBp;?j6_L3|?#b&6c+VV|*%mYHod|Uo{<>d13U&6{^S;_wtc7_1XfUvFo!lRegsT zJ!-r&INfryysb5f_$9);{e9oW!tQSSS#5FXOWpt;Vzf%yZ~nUmbB1=BI4e)I@6vz= z1J$$!cal1G976$KK$ZW4bh`Tm{%i01gJApfDuHEfTw_6NLwPv}N(FLdVX0>b_zS&?3>=3Fma@cX@s6E?0eZ746jc^1v4Etk2Q7o>4_hEJBuXmRyu$e2h;180cm%Y3kNcW!4>Gc-{SCH+ zBoBaYUzbxdLfst_?b~J84JOjfAfU?0Q)g1dzuCp;*|RrVv@-Xg$ddC)Nzr@5YsS64 zneYBWJ{CI)HN78DBo6m@uTBf5jwlVbt@&+5VLCJ*R)!x9glx^-YFVgBX2Vx7b>cK3L=Qz!1i(im9jD=`%-)lebL* zZ<*4qpezrU-xNP?rug$DrFU$l=N;A*4RuZ66P1ug6yy6P#dB{Dl|d&%oHlT9i(FX) z63LN;pso7T9}v&JX0g#2FztOx_H{7*4e$Gy1r#OQ37|wI4iJ<3Qg9Qj{&pzKC^&|c zi13&Y1zD8OEnGI}{hLd9Aca$J+GA;BEW{z)IUm}KUszuCGiN@$w{-Y`DQ_OcgExAK z>kP-{1kUxs6xULrFm^ewMssjznr9N|)0gJ^>ifan^)Z3LBMZ9}%)m;w?s-@{*GqLi z01mXzl#floW}3yzCncew=IRX{EES@lRNs`{ko~FObGnen9G1!x^+Mt>H0{Rdlo1x5 z8Wu-oj#ag&>^^qOl}QIz{+D$0kZYDw3n4#`iis>D=pX#L`_XI7?WXT7{p<7h*?pz! z$%t%)vL~;)8t5{bv4mg=(4_u!=G^(j1+)|-J#HT-SBL`4K2TXL^mC(v^95B$2kEa zwRZ;cHZQy`;iCa$47>}nmy$R^#LS<^?uXaW4kn}yTF(j!2PpA{xt7%R>V@)@ii)|U z$w*R;oR@>dui6Lzgv>9?U^=|LlA4aut`wraC&#W0UsST#*V zXgNVvt~@0g(x3?m-b7%Fb#a-*@N0|SaZ(F{{mBlU&z)O)D~F+hkQr{YG&^SWS0Hmh z0i2v{T%>WGet+TFEE>9uLaZcld48@qaeiqYGe;?v$*kENL_m`Vof|F!19bZyPYfqE ztP3O^A0b0l0OUb~mMiNYcwn|~^GsZ2)i_w|r>;HHR<3VI$P~aPf|kR1bRwqA2Mg#C zt5Fgqt4gnqmC%n3IT9VgpdFcscYjX8DVldyMza7isiq9+I8KL zdp=zlA9qp3^Yo=Z0waYCTwp}Q@A=5Owc4K3=^5=<#~!>1sd&d>_wjJO+Udz&L&zDW zeVkv_2H{=ymvX$+GEA{7)bep|OHpKooaj)+H~>MYDJR**=8xquN9%dX$48cT=07$; zQdrXhzu7HXA|BLtz5QXk3&UmH8mFu9Xtr%?f4V5?>fd#wAWVb) z;tI_AES^vR$rBWj-(+cjt=WW=CVkFJ)kIjfyFZ3n>aS%q7+^p{M=c;AJ=&J|`&Kqk zxKapxW#AFqVi#FO!8$=oYO<>Y7|N*ypO;L$QEB{ zHVx1UDo}1^b-M&sTE{)ctoz4ql#(3#a&34kV7QHgSfPE_q3dM>ZcwZB95 zNEWWKuq9ItHs+CJLa=gt-zM3s$}x#Xagr4AgVL>yq14B zGzH^NclQWosh}yj!_g7iRDo=$u(md8RO@gKzRrqB9ueVkbFH-Q3oM0L4-Eg~@VbLr z4jHCw?F;;*i!2Z2tj#W7qXt-J2hD=KwYOvA9LGE_mw*tH5a^Od@9M+dM9O^Oxi|wcm{9nI>1apq+4x5l?QIEkCp#M zXDh(Z!B^yj_q;bH*q8}c(<}V$L#IQWAkpxu-2NBMngxF{PaXY6lxK=*$QNN=ZsM&( zD@!Jz>a+t})mtM+QmhE~80Fydhv2+?`le3_v7wytuTV6j$1Z8fl#bCK$-!-;o=eu; zlM0P>wA`WQj&|qs)Z~FaVW6g!I*{Eae^!&YD;H&BMzlxE_)lrb`KcwFtw*fuINWB6 z?7WK$-r#2MzMfaIjEt_A4E%!n+=ENj;m08eF%|wKE}{PU5C+~L6uWHp{@xB$MD!xh z=Ys8K-7lXtTJfvaAIew|%Jnn2w1HpQQFsBiqvwSH&{B!?@VT z8yHyru!+010yl8n%MJiqx@c4?vb*WMZhCOkL~*F|LmCG6aWtGhEZvyeY3DLDOOr4;+qfW$jDr0xA{){TR!TzgFDRUP%6R(nR2x<4@ngYRWyx1i zCJ#7M63e{5mJ9}UsWXxy1M&V_mIATD#v(n&O$IXonQ3O0bdt@+Mdi)e5Z&-(-2)pJ zc(?J$W;P^w)ZF5n_3;EDlYKhT=3ODg@tHZMbQ(Pez>bPiz$TodtzVFMWadsW*NS+S zQm*_2i3Pc}M_4{6c>;EpA~8k4pmlHMGVr1d$wgFA?Eht+G!knl^jJ6RGbXx}(3ogR z(=jnOh^w;hlvbD2O+`si5{giXGkIjd3bFO}J%Cb8h7Vu&?7J8!f*aQbPFaIWh^j`d z;MLB!h34R&_n+R84D5}Z=j>X^RTpVe%Tq$D^Rhii1`oDzV(gPu5)i^ifmHen{!$Yj z`a5Y!E!TB`#?0(A01J_sZTW$~jM0wYDNEMCGW_5Lr(xE2SyQrPBNAIb0>KUR4(QY* z#*e6NP0Y>3v481jd9%h^K!MfqbidqTwT|)5u;bf`L{C~7vC#EB#(SG8alcK2ENzof z$sZwe6v57#jhrkLYuUJ2Fbobl3Es$ z8d-}CT9^Ygw9M&<%@~O!h)8lVvl+R+YsiZzmf?kOMK7C(#=-z+((4nKYuh$nIuHOD zB#O;o5F{8Geu`zk1=x0KQ)j5$VdBHLjQewskexIzjHsCE{my=$EOB}bz{Ry;W6Ys= zB&7WIhIg$9R-ZF!N>o8=k-}kRof>U%bs$}wQq%QFr)8ynt@K|t>8C^sr2`om5YmVU;#DQhow$_Q7-_81Cow)xijS zQt;o9lRdb%D7~GE7?&N^N`MkIkf}Nb=HxE=X_Z6mGok8ZXE)9@(+>44m$@PLvD-QS zx?VAi*p_#yCZ3R(Wwx`23}KpA$XfTP(4YDu!*axer)a4QgL%fq* zm^~ODH}gb)0~u4DKjxT%$QRyjdZ2c=5B_h@>aeDjWvFR?nJRF(&cqY9ItF3S+e^G| zlUd@~{tN!LccmdhNSog!YcLaJP+>fH+Pbi_*=uZ{Zi{9^%!6VuZdYlp;dkr7@%Awz%QBH`LiC{mlEw>Q}ak=4Z| zH?7QfpGWoDJ(Xcuf$yFRJZ>4k6Cw`xC$_?h46fH1^=@?Wv`RskktEKC@!yJccQ-pE zwA)mDaZx~?K&SqQPgMJd6Hc554FUIdhx0`ju_rg;c`l_9FAt1~OZv@Ol44pvWf8WL z$cR5QaTS7m2b6)=EJx+$jwAQSPU@v)P4k-VkL95!o|>x9p^8G9+)@jluzXeEXIS5- zO~akxg5+m11<{7-@ooEbmPze|WBXTZdX0UK{C}taPvX^A5*pK3Q1+kJ3#jt?I4XrY z`k&fMepg9YghB0pA~2X7VrMVI{lx#mBi6|NT4_y2!6 C4wrQR literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png new file mode 100644 index 0000000000000000000000000000000000000000..0b42697051581c10db4727c3d274276a3fb5c775 GIT binary patch literal 12825 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 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png new file mode 100644 index 0000000000000000000000000000000000000000..daf7ed8279c6d7345433adbe631f9ca461acf146 GIT binary patch literal 9894 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 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png new file mode 100644 index 0000000000000000000000000000000000000000..441f7c8c38a0b15866a19f621ae24eaedacf6060 GIT binary patch literal 14946 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 P`sC{;C7H^P#)1C}3M4?D literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..7c62a1652553136c4f3e3e86296a596ccfad74b8 GIT binary patch literal 11403 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 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png new file mode 100644 index 0000000000000000000000000000000000000000..cf973c42e8bce22ff1c77b686b57970b75d75fc5 GIT binary patch literal 6356 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 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..efc22783c719a5a024b7f3baac16e9bc5b2eeab4 GIT binary patch literal 5548 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 b|81a8bRVOjju&Zg00000NkvXXu0mjf$ExU6 literal 0 HcmV?d00001 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6aab5bbe6c632b40f926cefb77471c0689b6f2 GIT binary patch literal 50640 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 W;crea un #### *CryptoKey* -El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. It is a shared object and can therefore be used by multiple 4D processes simultaneously. +El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. Es un objeto compartido y, por tanto, puede ser utilizado por varios procesos 4D simultáneamente. #### Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md index cbfd7a78c9cd17..a42395d3999eb1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md @@ -73,9 +73,9 @@ El operador modulo % devuelve valores significativos con números que están en ::: -### División entera +### Integer division -El operador de división entero largo \ devuelve valores significativos sólo con números enteros. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Comparación real diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md index bec97cdc37fcdf..38bdee2e314f1f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md @@ -79,9 +79,9 @@ El operador modulo % devuelve valores significativos con números que están en ::: -### División entera +### Integer division -El operador de división entero largo \ devuelve valores significativos sólo con números enteros. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Comparación real diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md index a1bd615cdb5d67..3891ba40a36698 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/parameters.md @@ -112,7 +112,7 @@ $entitySelection:=ds.User.query("login=:1"; $user) :::note -No confunda las **declaraciones de parámetros** con las [**declaraciones de variables**](variables.md#declaring-variables). Using the `var` keyword with parameters will generate errors. +No confunda las **declaraciones de parámetros** con las [**declaraciones de variables**](variables.md#declaring-variables). El uso de la palabra clave `var` con parámetros generará errores. ::: diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Action.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Action.md index 879812bdbe3360..8558b04e6a0808 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Action.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/FormObjects/properties_Action.md @@ -189,15 +189,15 @@ En otros casos (list box basados en selecciones temporales, columnas asociadas a ## Acción estándar -Actividades típicas que deben realizar los objetos activos (\*por ejemplo, permitir al usuario aceptar, cancelar o eliminar registros, desplazarse entre registros o de una página a otra en un formulario multipágina, etc.) han sido predefinidas por 4D como acciones estándar. Se describen con detalle en la sección [Acciones estándar](https://doc.4d.com/4Dv20/4D/20.2/Standard-actions.300-6750239.en.html) de la *manual de Diseño*. There are also [standard actions specific to 4D Write Pro areas](../WritePro/user-legacy/defining-a-4d-write-pro-area.md#standard-actions). +Actividades típicas que deben realizar los objetos activos (\*por ejemplo, permitir al usuario aceptar, cancelar o eliminar registros, desplazarse entre registros o de una página a otra en un formulario multipágina, etc.) han sido predefinidas por 4D como acciones estándar. Se describen con detalle en la sección [Acciones estándar](https://doc.4d.com/4Dv20/4D/20.2/Standard-actions.300-6750239.en.html) de la *manual de Diseño*. There are also standard actions specific to 4D Write Pro areas. Puede asignar al mismo tiempo una acción estándar y un método proyecto de un objeto. En este caso, la acción estándar suele ejecutarse después del método y 4D utiliza esta acción para activar/desactivar el objeto según el contexto actual. Cuando se desactiva un objeto, no se puede ejecutar el método proyecto asociado. #### Gramática JSON -| Nombre | Tipos de datos | Valores posibles | -| ------ | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| action | string | The name of a valid [standard action](https://doc.4d.com/4Dv20/4D/20.2/Standard-actions.300-6750239.en.html) or [4D Write Pro standard action](../WritePro/user-legacy/defining-a-4d-write-pro-area.md#standard-actions). | +| Nombre | Tipos de datos | Valores posibles | +| ------ | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| action | string | The name of a valid [standard action](https://doc.4d.com/4Dv20/4D/20.2/Standard-actions.300-6750239.en.html) or 4D Write Pro standard action]. | #### Objetos soportados diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/API/CryptoKeyClass.md b/i18n/es/docusaurus-plugin-content-docs/version-20/API/CryptoKeyClass.md index acc576286e1d33..39526eaad9b45e 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/API/CryptoKeyClass.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/API/CryptoKeyClass.md @@ -63,7 +63,7 @@ La función `4D.CryptoKey.new()` crea un #### *CryptoKey* -El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. It is a shared object and can therefore be used by multiple 4D processes simultaneously. +El objeto `CryptoKey` devuelto encapsula un par de llaves de cifrado. Es un objeto compartido y, por tanto, puede ser utilizado por varios procesos 4D simultáneamente. #### Ejemplo 1 diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md index cbfd7a78c9cd17..a42395d3999eb1 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md @@ -73,9 +73,9 @@ El operador modulo % devuelve valores significativos con números que están en ::: -### División entera +### Integer division -El operador de división entero largo \ devuelve valores significativos sólo con números enteros. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Comparación real diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md index bec97cdc37fcdf..38bdee2e314f1f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md @@ -79,9 +79,9 @@ El operador modulo % devuelve valores significativos con números que están en ::: -### División entera +### Integer division -El operador de división entero largo \ devuelve valores significativos sólo con números enteros. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Comparación real diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_number.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_number.md index 1104e812cfeb76..f21ff81f71c6af 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_number.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_number.md @@ -49,7 +49,7 @@ Les nombres négatifs s’écrivent précédés du signe moins (-). Par exemple | Soustraction | Nombre - Nombre | Number | 3 – 2 | 1 | | Multiplication | Number \* Number | Number | 5 \* 2 | 10 | | Division | Number / Number | Number | 5 / 2 | 2.5 | -| Division entière | Nombre \ Nombre | Number | 5 \ 2 | 2 | +| Integer division | Nombre \ Nombre | Number | 5 \ 2 | 2 | | Modulo | Nombre % Nombre | Number | 5 % 2 | 1 | | Exponentiation | Nombre ^ Nombre | Number | 2 ^ 3 | 8 | | Egalité | Nombre = Nombre | Boolean | 10 = 10 | True | @@ -79,9 +79,9 @@ L'opérateur modulo % retourne des valeurs significatives avec des nombres appar ::: -### Division entière +### Integer division -L'opérateur division entière \ retourne des valeurs significatives avec des nombres entiers uniquement. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Comparaison des réels @@ -125,16 +125,16 @@ Comme un bit peut valoir 0 (zéro) ou 1, vous pouvez également considérer une Une expression qui utilise un opérateur bit à bit renvoie une valeur de type Long, à l'exception de l'opérateur Bit Test, pour lequel l'expression renvoie une valeur booléenne. Le tableau suivant fournit la liste des opérateurs sur les bits et leur syntaxe : -| Opération | Opérateur | Syntaxe | Retourne | -| -------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------ | -| ET | & | Long & Long | E. long | -| OU (inclusif) | | | long | E. long | E. long | -| OU (exclusif) | ^ | | Long ^ | Long | E. long | -| Décaler bits à gauche | << | long << E. long | long (voir note n°1) | -| Décaler bits à droite | > > | long >> E. long | long (voir note n°1) | -| Mettre bit à 1 | ?+ | long ?+ E. E. long | long (voir note n°2) | -| Mettre bit à 0 | ?- | long ?? | long (voir note n°2) | -| Tester bit | ?? | long \^| E. E. long | Booléen (voir note n°2) | +| Opération | Opérateur | Syntaxe | Retourne | +| -------------------------------- | ----------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------ | +| ET | & | Long & Long | E. long | +| OU (inclusif) | | | long | E. long | E. long | +| OU (exclusif) | ^ | | Long ^ | Long | E. long | +| Décaler bits à gauche | << | long << E. long | long (voir note n°1) | +| Décaler bits à droite | > > | long >> E. long | long (voir note n°1) | +| Mettre bit à 1 | ?+ | long ?+ E. E. long | long (voir note n°2) | +| Mettre bit à 0 | ?- | long ?? | long (voir note n°2) | +| Tester bit | ?? | long \^| E. E. long | Booléen (voir note n°2) | #### Notes diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Extensions/develop-components.md b/i18n/fr/docusaurus-plugin-content-docs/current/Extensions/develop-components.md index fad07747e0ff2b..134abd41deac79 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Extensions/develop-components.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Extensions/develop-components.md @@ -114,6 +114,12 @@ Les fonctionnalités standard de l'IDE 4D sont disponibles pour le composant. Vo - exécuter des méthodes, - restaurer à partir de la corbeille ou vider la corbeille. +### Search and replace + +You can use the [**Search and replace** features](../Project/search-replace.md) of the host project to search elements within the code or the forms of your editable components. The **Search in project** menu allows you to select one or all components as search target: + +![](../assets/en/Project/find-components.png) + ## Portée des commandes du langage Hormis les [commandes non utilisables](#unusable-commands), un composant peut utiliser toute commande du langage 4D. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md index b7136f986c4c2b..be4ca530e72ed2 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,8 +10,10 @@ Lisez [**Les nouveautés de 4D 21 R2**](https://blog.4d.com/fr-whats-new-in-4d-v #### Points forts - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). +- [4D Write Pro standard actions](../WritePro/user-legacy/standard-actions.md) that apply [lists](../WritePro/user-legacy/using-a-4d-write-pro-area.md#lists) now automatically adjust paragraph margins to keep markers positioned inside it. - Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. +- [**Find in Design**](../Project/search-replace.md#search-in-components) and [**Replace in contents**](../Project/search-replace.md#replace-in-contents) features can now support editable components. - [**Liste des bugs corrigés**](https://bugs.4d.fr/fixedbugslist?version=21_R2) : liste de tous les bugs qui ont été corrigés dans 4D 21 R2. #### Changements de comportement diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Project/project-method-properties.md b/i18n/fr/docusaurus-plugin-content-docs/current/Project/project-method-properties.md index 944f2218c7c3f0..f8d096c75e32fa 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Project/project-method-properties.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Project/project-method-properties.md @@ -22,9 +22,9 @@ Le nouveau nom doit respecter les règles de nommage 4D (voir [Identifiants](../ :::caution -Changer le nom d'une méthode déjà utilisée dans la base de données peut invalider toutes les méthodes ou formules qui utilisent l'ancien nom de méthode et risque de perturber le fonctionnement de l'application. Changer le nom d'une méthode déjà utilisée dans la base de données peut invalider toutes les méthodes ou formules qui utilisent l'ancien nom de méthode et risque de perturber le fonctionnement de l'application. Avec cette fonction, vous pouvez mettre à jour automatiquement le nom où la méthode partout où elle est appelée dans l'environnement de développement. +Changing the name of a method already used in the project can invalidate any methods or formulas that use the old method name and runs the risk of disrupting application functioning. It is strongly recommended to use the [renaming function for project methods](../Project/search-replace.md#renaming-project-methods-and-variables). Avec cette fonction, vous pouvez mettre à jour automatiquement le nom où la méthode partout où elle est appelée dans l'environnement de développement. -Avec 4D Server, le nom de la méthode est changé sur le serveur lorsque vous avez fini de le modifier. Si plus d'un utilisateur modifie le nom de la méthode en même temps, le nom final de la méthode sera le nom spécifié par le dernier utilisateur ayant terminé de l'éditer. Vous pouvez désigner un propriétaire de la méthode pour que seuls certains utilisateurs puissent changer son nom. +Avec 4D Server, le nom de la méthode est changé sur le serveur lorsque vous avez fini de le modifier. Si plus d'un utilisateur modifie le nom de la méthode en même temps, le nom final de la méthode sera le nom spécifié par le dernier utilisateur ayant terminé de l'éditer. You may want to specify a method owner so that only certain users can change the method's name. ::: @@ -103,7 +103,7 @@ Pour plus d’informations, reportez-vous à la section [Implémentations du mot _Cette option est obsolète. L'appel de code par le biais d'appels REST n'est possible qu'avec les [fonctions de classe du modèle de données ORDA](../REST/ClassFunctions.md).\* -### Modifier attributs globalement +## Modifier attributs globalement La boîte de dialogue "Attributs des méthodes" permet de modifier un attribut (Invisible, Disponible via Web Services etc.) pour tout ou partie des méthodes projet de la base de données en une seule opération. Cette fonction est très utile pour modifier les attributs d’un grand nombre de méthodes projet. Elle peut également être utilisée en cours de développement pour appliquer rapidement des attributs communs à des groupes homogènes de méthodes. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Project/search-replace.md b/i18n/fr/docusaurus-plugin-content-docs/current/Project/search-replace.md new file mode 100644 index 00000000000000..d0448e0bcd01b6 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Project/search-replace.md @@ -0,0 +1,283 @@ +--- +id: search-replace +title: Search and Replace +--- + +4D provides several search and replace functions for elements in all of the Design environment. + +- You can search for a string or a type of object (variable, comment, expression, etc.) in part of or in the entire project on the basis of custom criteria ("starts with", "contains", etc.). You can, for example, search for all the variables containing the string "MyVar", only in methods whose name begins with "HR_". +- The results are displayed in a results window, where it is possible to perform replacements in the contents. You can also export these results in a text file that can be imported into a spreadsheet. +- You can detect variables and methods that are not used in your code and then remove them to free up memory. +- You can rename a project method or a variable throughout the Design environment in a single operation. + +:::note + +There are also functions for searching among the methods of your project in the context menu of the Methods Page in the Explorer: **Search Callers** (aussi available in the [Code editor](../code-editor/write-class-method.md#search-callers) and **Search Dependencies**. Both functions display the items found in a [Results window](#results-window). + +::: + +## Search Location + +When you search the Design environment, the following elements are searched: + +- Names of project methods and classes +- Contents of all methods and classes +- Names of tables, fields and forms +- Contents of forms: + - object names and titles + - names of help tips, pictures, variables, style sheets, + - formatting strings + - expressions +- Menus (names and items) and commands associated with menu items +- Choice lists (names and items) +- Help tips (names and content) +- Formats / filters (names and content) +- Comments in the Explorer and in the code + +## Find in Design + +### Starting a search + +Specify your search criteria in the "Find in design" window: + +1. Click on the Search button (![](../assets/en/Project/search-icon.png)) in the 4D toolbar. + OR + Select the **Find in Design...** command from the **Edit** menu. + +The "Find in design" window appears: + +![](../assets/en/Project/find-in-design.png) + +The areas of the "Find in design" vary dynamically depending on the selections made in the menus. You can expand this window so that all options are visible: + +![](../assets/en/Project/find-in-design-expanded.png) + +2. Build your search using the different menus and entry areas of the dialog box and if necessary enter the character string to be searched for. These items are described in the following sections. + +3. Set the [search options](#search-options) (if necessary). + +4. Click **OK** or press the **Enter** key. + When the search is finished, the [Results window](#results-window) appears, listing the elements found. + +:::note + +You can cancel an extensive search that is underway using the **x** button; this does not close the window or remove any results that were found. + +::: + +Once you have executed a search, the value entered in the search area is saved in memory. This value, as well as all the other values entered during the same session, can be selected from the combo box. + +### Chercher + +You specify the type of element to look for using the **Find** menu. The following choices are available: + +- **Text**: In this case, 4D looks for a character string throughout the Design environment. The search is done in plain text mode, without taking the context into account. For example, you can look for the text "ALERT("Error number:"+" or "button27". In this mode, you cannot use the wildcard character because "@" is considered to be a standard character. +- **Comment**: This search is basically the same as the previous one, but it is restricted to the contents of comments (lines beginning with //) in the code and in the Explorer window. For example, you can search for any comments containing the string "To be verified". + +:::note + +The end result of both types of searches depends on the [search mode](#search-mode) selected. + +::: + +- **Language expression**: Used to search for any valid 4D expression; the search is performed in the "contains" search mode. Validity is important because 4D must be able to evaluate an expression to be able to search for it. For example, a search for "[clients" (invalid expression) will not return any result whereas "[clients]" is correct. This option is particularly suitable for searches for value assignments and comparisons. Par exemple : + - Search for "myvar:=" (assignment) + - Search for "myvar=" (comparison) +- **Language element**: Used to search for a specific language element by its name. 4D can distinguish between the following elements: + - **Any language element**: Any element from the list below. + - **Project method or Class**: Name of a project method or class, for example "M_Add" or "EmployeeEntity". + - **Form:** Form name, for example "Input". The command searches among project forms and table forms. + - **Field or Table**: Name of a table or field, for example "Customers". + - **Variable**: Any variable name, such as "$myvar". + **4D constant**: Any constant, such as "Is Picture". + **String in quotes**: Literal text constant; i.e. any value within quotes in the code editor or inserted into text areas of the Form editor (static text or group boxes). For example, a search for "Martin" will return results if your code contains the line: `ds.Customer.query("name = :1"; "Martin")` + - **4D command**: Any 4D command, for example "Alert". + - **Plug-in command**: Plug-in command installed in the application. + - **Properties**: An object property name (includes ORDA attribute names). For example "lastname" will find "$o.lastname" and "ds.Employee.lastname". +- **Any object**: This option searches among all the elements in the Design environment. Only the modification date filter is available. Use this option, for example, to search for "anything modified today". + +### Search mode + +The search mode menu (i.e. "which", "that is" or "whose name") specifies how to search for the value that is entered. The contents of this menu vary according to the type of element to search for as selected in the **Find** dropdown list. + +- Search options for Text or Comment: + - **contains**: Searches all text in the Design environment for the specified string. Search results for "var" can include "myvar", "variable1" or "aVariable". + - **contains whole word**: Searches all text of the Design environment for the string as a whole word. Search results for "var" only include exact occurrences. They will not include "myvar" but will include, for example, "var:=10" or "ID+var" because the symbols : or + are word separators. + - **begins with / ends with**: Searches for the string at the beginning or end of the word (text search) or at the beginning or end of the comment line (comment search). In "Text ends with" mode, searching for "var" will find "myvar". +- Search options for Language element: The menu offers standard options (matches, contains, begins with, ends with). Note that you can use the search wildcard (@) with the matches option (returns all objects of the type specified). + +### Search in components + +When your current project references [editable components](../Extensions/develop-components.md#editing-components), you can designate one or all your components as a target for the search. By default, a search is executed in the host only. To modify the target for a search, deploy the **in the project** menu: + +![](../assets/en/Project/find-components.png) + +You can select as target: + +- the **host project** (default option, top of the list): the search will only be executed within the host project code and forms, excluding components. +- the **host project and all its components**: the search will be executed in the host project and in all its loaded components. +- a **specific component**, among the list of all searchable components: the search will be restricted to this component only, excluding the host and other components. + +:::note + +When no searchable component is found, no menu is available. + +::: + +The **in the folder** menu (see below) is updated when you select a project since the availability of folders depends on the selected search target(s). The menu is hidden when you select the "host project and all its components" option. + +### Folder + +The **in the folder** menu restricts the search to a specific folder of the project. By default ("Top Level" option), the search takes place in all the folders. + +:::note + +Folders are defined on the Home Page of the Explorer. + +::: + +### Modification date of the parent + +This menu restricts the search with respect to the creation/modification date of its parent (for example, the method containing the string being searched for). In addition to standard date criteria (is, is before, is after, is not), this menu also contains several options to let you quickly specify a standard search period: + +- **is today**: Period beginning at midnight (00:00 h) of the current day. +- **is since yesterday**: Period including the current day and the previous one. +- **is this week**: Period beginning on Monday of the current week. +- **is this month**: Period beginning on the 1st day of the current month. + +### Searching options + +You can select options that can help speed up your searches: + +- **Search in forms**: When this option is deselected, the search is done throughout the project, except in forms. +- **Search in methods**: When this option is deselected, the search is done throughout the project, except in methods. +- **Case Sensitive**: When this option is selected, the search uses the case of the characters as they have been entered in the Find area. + +## Results window + +The Results window lists all elements found that match the search criteria set using different types of searches: + +- [standard search](#starting-a-search) +- [search for unused elements](#find-unused-methods-and-global-variables) +- [search for callers](../code-editor/write-class-method.md#search-callers) +- search for dependencies +- [renaming of project methods and variables](#renaming-project-methods-and-variables) + +It shows the results as a hierarchical list organized by type of elements found. You can expand or collapse all the hierarchical items in the list using the options menu (found at the bottom left of the window) or in the context menu. + +![](../assets/en/Project/result-window.png) + +You can double-click on a line in this window to view the element in its editor, such as the [code editor](../code-editor/write-class-method.md). If you do several searches, each search opens its own result window, leaving previous result windows open. + +When more than one occurrence has been found, the list indicates their **count** next to the element name. + +Each line can display a tip that provides additional information, for example the element property that matches the criteria, or the number of the form page that contains the occurrence. + +When an element found belongs to a component, the **component name** is displayed in parenthesis at the right side of the element name: + +![](../assets/en/Project/find-components-results.png) + +Once a search is completed, you can use the ![](../assets/en/Project/result-window-re.png) button to perform the search again with the same criteria and options. + +### Options menu + +You can perform various actions using the options menu: + +![](../assets/en/Project/result-window-menu.png) + +- **Remove from list**: removes selected item(s) from the results window. More specifically, this lets you keep only items targeted by a replacement operation in the contents or used for drag and drop between applications. +- **Remove all items from list except selection**: clears everything from the results window except for the selected item(s). +- [**Replace in content**](#replace-in-contents): replaces a character string within the selected item(s). +- **Select >**: selects one type of item (project methods, object names, and so on) from among all the items found in the Results window. The hierarchical sub-menu also provides commands to select (All) or deselect (None) all the items at once. +- **Collapse all/Expand all**: expands or collapses all the hierarchical items in the list of results. +- **Export Results**: exports information about the search criteria and elements listed in the Results window. This text file can then be imported into a spreadsheet such as Excel, for example. For each item, the following information is exported as tab-separated values in a text file: + - Host project or component name + - Type (method, Class, formObject, trigger...) + - Path + - Property (if accurate): provides the property of the object that matches the criteria. For example, a string could be found in a variable name (variable property) and an object name (name property) within in the same form. This field is empty when the matching element is the object itself. + - Contents (if accurate): provides the contents that actually matches the criteria; for example, the code line that contains the requested string. + - Line number (for code) or page number (for form objects) + +## Replace in content + +The Replace in content function allows you to replace one character string with another within the listed objects in the Results window. It is available in the [options menu](#options-menu) of the window. + +:::note + +The **Replace in content** menu item is disabled if you work in a read-only database (e.g. in a .4dz file). + +::: + +When you select this command, a dialog box appears where you enter the character string that will replace all the occurrences found by the initial search: + +![](../assets/en/Project/replace-content.png) + +Replacing operations work as follows: + +- Replacing is always carried out among all items found in the list and not just for a selection. However, it is possible to narrow the replacing operation by first reducing the contents of the list using the **Remove from list** or **Remove all items from list except selection** commands in the [options menu](#options-menu) or the contextual menu. +- If the Results window includes elements from components, the replacing will be done in the component(s) also. +- Only the occurrences shown in the list will be replaced and only after checking the initial search criteria for cases where objects were modified between the initial search and the replacing operation. +- Replacing is done in the code, properties of form objects, contents of help messages, entry filters, menu items (item text and method calls), choice lists, comments. +- For each object modified, 4D checks whether it is already loaded by another machine or in another window. In the case of conflict, a standard dialog box appears indicating that the object is locked. You can close the object and then try again or cancel its replacement. The replacing operation will then continue with the other objects in the list. +- If a method or form concerned by a "replace in content" operation is currently being edited by the same 4D application, it will be modified directly in the open editor (no warning appears). Forms and methods modified in this way are not saved automatically: you will need to use the **Save** or **Save All** command explicitly to validate the changes. +- After a replacement is made in a list item, it will appear in italics. A count of replacements made in real time appears at the bottom of the window. +- Elements are never renamed themselves by the **Replace in content** feature, except for form objects. Hence it is possible that certain items in the list may not be affected by the replacing operation. This can occur when only the item name corresponds to the initial search criteria. In this case, the list items do not necessarily all appear in italics and the final replacement count may be less than the number of occurrences found by the initial search. + +## Renaming project methods and variables + +4D provides a dedicated renaming function with distribution throughout the entire project for project methods and variables. + +The **Rename...** command is available from the [Code editor] (for project methods and variables) and the Explorer context menu (for project methods). + +![](../assets/en/Project/rename.png) + +When you select this command, a dialog box appears where you enter the new name for the object: + +![](../assets/en/Project/rename-dial.png) + +The new name must comply with [naming rules](../Concepts/identifiers.md); otherwise a warning appears when you validate the dialog box. For example, you cannot rename a method with a command name such as "Alert". + +Depending on the type of object you are renaming (project method or variable), the renaming dialog box may also contain a distribution option: + +- Project method: The **Update callers in whole database** option renames the method in all the project code that references it. You can also uncheck this option in order, for example, to rename the method only in the Explorer itself. +- Process variable: The **Rename variable in whole database** option renames the variable in all the project code that references it. If you uncheck this option, the variable is only renamed in the current method. +- Local variable: No distribution option for this object; the variable is only renamed in the current method or class. + +## Searching for unused elements + +Two specific search commands allow you to detect variables and methods that are not used in the code of your host project. You can then remove them to free up memory. These commands are found in the **Edit** menu of the Design environment. + +### Find Unused Methods and Global Variables + +This command looks for project methods as well as "global" variables (process and interprocess variables) that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A project method is considered to be unused when: + +- it is not in the Trash, +- it is not called anywhere in the 4D code, +- it is not called by a menu command, +- it is not called as a string constant in the 4D code (4D detects a method name in a string even when it is followed by parameters in parentheses). + +A process or interprocess variable is considered to be unused when: + +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else in the 4D code, +- it is not used in any form object. + +Note that certain uses cannot be detected by the function - i.e. an element considered unused may in fact be used. This is the case in the following code: + +```4d +var v : Text :="method" +EXECUTE FORMULA("my"+v+String(42)) +``` + +This code builds a method name. The *mymethod42* project method is considered unused when in fact it is called. Therefore, it is advisable to check that the elements declared as unused are in fact unnecessary before you remove them. + +### Find Unused Local Variables + +This command looks for local variables that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A local variable is considered to be unused when: + +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else within the same method. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md new file mode 100644 index 00000000000000..19d01361c3a938 --- /dev/null +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md @@ -0,0 +1,34 @@ +--- +id: openaifiledeleted +title: OpenAIFileDeleted +--- + +# OpenAIFileDeleted + +The `OpenAIFileDeleted` class represents the deletion status of a file in the OpenAI API. + +## Propriétés + +| Nom de propriété | Type | Description | +| ---------------- | ------- | -------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | The ID of the deleted file (e.g., "file-abc123"). | +| `deleted` | Boolean | Whether the file was successfully deleted. `True` if deletion succeeded. | +| `object` | Text | Le type d'objet, qui est toujours "file". | + +## Example Response + +```json +{ + "id": "file-abc123", + "object": "file", + "deleted": true +} +``` + +## Used by + +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) + +## Voir également + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png new file mode 100644 index 0000000000000000000000000000000000000000..96a5080c02477c29154f3aa239e64abafd26cccd GIT binary patch literal 99711 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 C4wrQR literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png new file mode 100644 index 0000000000000000000000000000000000000000..0b42697051581c10db4727c3d274276a3fb5c775 GIT binary patch literal 12825 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 literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png new file mode 100644 index 0000000000000000000000000000000000000000..daf7ed8279c6d7345433adbe631f9ca461acf146 GIT binary patch literal 9894 zcmaKS1z1$w_wLZ$Lr6<^gGk2!64KI*ASEFo-Q7qF(jrQCOU)1iNSA?o z{-U3o_C`DR;lYp;9|J8faz0`=K14J6t)p#>8EvYatNI~)_nWwH`aNXK@%!Y= z`HbZJ&NR0^zAF<{-t-DMe|>&`CFWzzL7kw02vYp8d~vgK=Dl*{IXW>B5<|*uVP*#M zW>6$d=8G2gubiPcGWuFxjsxNexcB8{Utb?cZaRju!`5Sq#DqLr#p$?H<0+p9>(^RG z4QRyENXD~j6-N$0Qlv;?1yLbnL8Fdg_2p)SuUi4!@&1MN3j zwbzT*H<4U&@WalJ+b+a6^((0xljMmUk?e?!A@yToq6a~!m6!qXO5_*4bxZwT8;_V$|Y2nXP@y#4`(Bg!A`~7kNI1I3IjE1yCs2| zeiHc2l^(R3#rCXFw-38ovO4$mR!qu9J)E4iu#XSwEdsUeo$}YVGCndHm9yTX7Z7cK zm*lmp(BtX1T?aVA<##gC;S~dzloTx()62>tbU0ydMn%b)$6Q0KCaB2ElfEB@O_Gr4 z5}}ms&_)z5clGS`X_CX&ZF(x4jWfZUpU`>J0vxNM8qdu#-5>qDJcg1a)qWeUM}j(8 zjkiWBGnRP{(8<+LZ+thVtch8tZ+c#QC-B~&JDKdWZ<7$1M|TJ@<*y|ZDn$W20{CV6 z*DsT72|sd}Rwe#mR*_(=^6*fT#jT?4UAxU^E!1(ZyNJ)PsT0T!8tbgB7p!-2<-XnU z%TOl=Rfqj3hu0i0#Rpx7KM{{AO~*=rh)YUwk8H=rA`^QT^x-ecHx0egVqTg2s1H5w*K--X?y-@7WS%9U9V-G5r>87Q59LGuI1M6=h8c?BGopt}Hm1Re`6NYGB4c`t!uHJ=Pj0b z3egf-rPgjrqZJY1rQW4%q83+g4g~ITq_Bc?p{> zC>5aA(%_LeY}%%XiwU`E63$3Ck9R%v^)PYZQiSf~)k z`pq4HloilSfHg=0Nl6_1ZU45%@1c$4;NfgU!^`g1Lcr)OX4tTubYFExp@$*G?)}Nj z+r9^T823XJUY6+s*2NgncDpCSn-9PPtW&L@jv+!uLfOhF}dtfF8ThTU{N!gbKVun_4#oU#4gO51S9 zLS*Y7{W!n!pxhMn6s)zKYR`Mn3}X4SK!M{`@-O^44VcEl6b z{BrYMJ41pHXlSosY*ibOFJGS@-}|2$Z$p;CRDCZ*8!furO%;IO!o|jnBvcgR`k<1M{qja6L)420mO9RY z1Rfc;(EhSMctU^d*t{PvmD}ZeGS4s;5NCu-?4HRP9x0BljfC?ge{^)KH6j#}}C=+WlS7f>Ai+_qCD;g4`*%ttm38 z5S6D}B9NdNiOlu@Z&OdE3mG)T)`H2887(_(x)~h-;r$^(07bLY5Ms&Gfn^nE?rrv^}uKi5te&>(R z*!vaaYc3WxZ@^hc-oY)#=_kpcXC^)bQ}*`D9yC2pIaeL|BJOJPPOcoyXEaCi zZ-fegTEBgFB#%y=$mx!0?gu&|e)?TM!*PC(+$-X?TCFb0bVM+(>4UFv9rYb#WKhlJ z8R=r8q0B#8MAGhUXFSj|Q;G&f$27|ea=rsRJS7*)_tR^I-pS@epuZHsTWASFY#pB2 zYsY})BqDT{^>W;~*ugKBy&Dts<8>?t`Rc7BE4@yf-S0bG*+FK%o^7t$9MZM=jF>ER zSi6@jB+y(pj&@9;m_+Zyf4!UuXeI?6);F654Q`OY5zy{^@g?sDLh`rXd4VnmyE;}& zMBB!ldm5d3{)qdmWC#(XR|u3Og&=ux#oKBf^&IHRr(6wdWyw5zcX4^HnzI|-pD;Wd zqYCNKINe|o$KGgT9FenBm9-`0-L-W?*`6dCug@B_lOp+%;3(T#;f+sd>$I1ZpNir2 z*`m_9u$WR0(#VWP5yT56R*xOp??d;Y&FCN4$3g?cuU>R^F4KDZv`0hN)v=@qt>CZs z)!c6nZ&LG9L%*LeJ6|r|fdYFD{wNG1*(Zux6Mj2L_*KJ_^9MiqgVaqzOeBjRv}KYt zYD@5_852p44r0n#xRa`}$E_{IN2~56UykrOAB7kl70K>A{7+^{UqKBD!90zHdOmnD zAW&ZFDY#K@bY>=|l9brev1{tmDSa5Kd#rr8p;0?FGee=F{ej`qPvY{nS7L)#8wQ)8 z`}5ZGax7PF9WN7EB~t(cPxAU8zers&t@B&>FAr$&-uHO=gZ)0>uF{WFO%z*PCpf>y>{4E&6aOss>&%J0v(iJnA?{DZ5 zotR3{{T;Nu+zMi@?g*7CGJ~g{`C>^Lxe@uRpW|Kn&y_d5=_+Sww#Ga@IdOpzuW1NZ z;M2RlTRyolua|F3eo@)hgd=$^DT%WfaCGOhUXFSf@{L{ZtaYiG_!*Z8xP?_~uBeBX zxWmty-`ZGIvTpw<=4BSWV^g;K{%zzw)*MA;dnCnoKZi;cS`!V^AWkBH^E#tpH-jPVB8g zX;}M%>s#%d4>bXbAI!YYrgT43ROA-Eh@Y;z;U+UwXJLxaE7t*z$Gc5@L$kQ`W4UGA z0+6`r?P!$#?OzoubcgES6kw(v&|Ht!%nd*t|M6!zpn#_QNmd)zfYolWxgHSMKW{ zrG5*qoPNuT%#^A@QWRsePw>SKo^Z0`t7X~^M_NJT_aZmIr0%@zQso4hCX2IY1$!(z zQ|V!YzXi$FjYPb4on30=;beK!u_{i&s0;7rsb<^1FrMD_``pOp;zoh(7phV5OC<<2 zn4;W&CQAS2QK{%si|JlVsheMJ4f3bmBJQ>)7JsF=eo+mF!V`20=IQB_bWum%W3;38 z`+Ym*G;x~Di76N_APg)*BbMKud087M^IWeUpIg=9m6db8Zw6s0f(yPu%0}Jh+am6I zZwLf@0{&Lyv!}(_fhh@|WM7lN_C-Xp z=*MP@4o82%Lz)4#2hu}62S(+|yb-`03z8E!li(Ef_?<|?f!{Hh6&V@XpV83J;AWIh zOGj6r(i0dA6scHBNkbrzV%|KUkZyuZ9iM<8$rhXCv38xn&F)*E6fQ9LFf|XPaw_R$KAuK$lsY3Zi^`UXwT`5CH3U%z}oTU=Z`yt%U=A+QoIor>=6 zmRaA}h|-6AJl~&38&u|QXW%rbdoe^mJ~=ms5z&Lty2xcspb>uJ-R|7Fm?7p>lOb1R zd+@7$;W+Q|>dqgP2%-;nY;-+K3J?9)`2X0F!XhOteW@{l2`VpPEs+W_Wn-e4Z2O6t#d+=G_eq&U2?EiNMUa#K7$NcnjaqHFIv*PZuj-nJRf^CPYG%th z?%F!(+L{ldSr!qSqxQVFcCXgcR^Zo}uRycJ2bLS`e-A2{Vo2H*&^V1gPlxa)JX+mb z?$(E)w|Upu&xYc);Kvo2#k1)B#LcNH;{frB#>H6EHO>Xe3Do&r>uO>;rNFt`H}(>d zgh7BUB7wV_SJas0H%z&6uJUst67CZF}N%WU5krP{^a?Uq=3c3PhVYltX4CL)1B3KMC zh~_WZeD@^?@khjGx*#iMb@yc+5rn2iRc*nyQaot!a5Rn2WoaxG9=^1dBC`%vi?{Y| zXDbRIw!=x>W$XFj&iF5#he0gv&}C^~)z_#<(dNY`hX}l^QT~Bc5?949Db|VN=Z0erD`C;hrLaVGocJb`lS_m_Z6bjp6XEM$5 z=HA}249fito~ITQK$^9;M+pHb@WDZt8{NxX-(!peY-YGc1TIzgD_vtoCL&uqTiX@P zzf1lf0Q?WC@|yI^bv)Zmcrznw0%!KZrr^p*u!Lt;nhW0E-iJqhG=&`lf1xt&-&LH;&HM;KhQqDFsK`hbg#SYL{{`f}EYmmt_Ii8R^KY+%0H8ioI5tVE zd|}w$*^z$#{@Ja6M~0jL2QV`*2?-rHH#eQ%%?fqd{D$;zI?s9D&^@+2zPIIu zH#WJr4X0Y9**diyp*D(X4jf$YXV7X^&F_C>_gHNAAIh}pqfZc{vnCkBAI`K<+xGDZ^ngu*X!NV3Q?7X(dx?b1=I91kozTf@y z^eI)a8dm1{NlX1df2S(=nPbmREz*Rt-*tVXLlQF;slBnjzFgf$EerfX)K}a@#zsd2 z`>1`eo12>n+#_vl-o1NQ<$vcbARquiCO&98!6hdr2MVsi-ZY<=>%c;BtKT?a$LAy2eR zr41e_hgrbjf%bc{CC0VbM}Ayu!npOEfs~a^2002@deF$@xWjrUgd8Ug<3-x>WMESq zheF7#Cmbhzd0k$h4VdE^K#YBB36lO%zns=;#qy+{2ziR3FDgGdvwCGUyKEbN+*(SR zI^17W(g6@q(0Q1i{-=SLHC)1&h zaE?AdLwviNKeDcChWYBhI7Cjo7Os9P9dZHBI9eBfELA>LN>aY_uNAvHofzM5T;eL$ zBJ@2TV9pTtX~<9!D5DZ_L)SHSe+4n|#mj6S4CQ&kn$dMG2Pt*tHcbf=zqtOg$RoQQi7#~L!Xc{gE_;^eZn{gEBUF<}yL z=MDsb6#oXAKV2=x)NU8WyY?YbHKr>p>^V(eL4(S4NS6?^f7ITQ7LY&wk02|1_#0M~ zaQ>eW62$vN!*6p&WxQY-SZatN4q1~6=plzp6siGlMofH6^R z#bki$PY3e?5kZ^gIj(O`<>nRx&whAiFc+I@0^F>f*G1*KTLP(lg9H!N1Pq&_?LoxM ztDB5E%P(~cY^^8w%&r3|0u-gjE`vbc<#u60)!TU?Y+T%EeNbRmm$but1J3^bzD1fj zqp}Vtt{goATt2I59L*TtBaE+v<(L3QrpYf)T>d64i-U=YiT}b;F3zYzs=5IGsk~1) zPDy0HYhiu?cnVnOEdm*vj#6@RvNj8V>T>ppE>8qVd9seJ7d)oxiM`X-Dhp)ZYBEUC zK(IDD-5#@XaEQfZLq$Uyo1KjuD^yt9Ev=02j~QH764Nt?Fdc`KoF-_tY9fdU#J|Ejj*$U!P3djCXe@SLv`JFJx2#t*< zrLVaBga_;nN-3A2A|E44T-G>uiRkRDjeUJDzK*6QL0p;NbxGqpheQaqdchn3K z-6ZhS-q`5R=-zR({HEzXClh1O&z);Q%*IaHZrTNNYtrK1nl^wXXUn{TfD)Rw`bP3b z-y#G9^p|yaKTok3)0x~e7a~uUXx`@f?xoq8$?1E_No_jkod#OmKwg!d|0=uZAy$@x2^ zM6$#Hm{|QiSG#?15V3SXTFb9vVnU6Hg~e+DMdxMDXHe{3UZ!PGlo49Aw5c}$N+Ux9 zm{S}s{wzLS(R6u%rZC$KHcO=H|{HcoJAxT8gD>;$<}+jH&p6hleL{ zVZms9bCYR*HOuY;Lw-jGO?!KL|GQ#As(5P&Omy-WjW zdw=iG``rB2UlIt*Kv7awR@UTON`E{Q0u7StIR^{P>8d#g#SU(UEFC7uKsH53#3MZs z1_L^HjAy218pzQu^_qyes-WOhy+GoF4CJIP1)GgtN1<=y|!eQFFAeg;jG6IJ5epd0)7;1oQo{E&~ZS z3~8{>(#akwB1d~!A{ngz>b=ThTaA7wJa(Fxkfw;0o`4MWrm%NK*j_nEM-vZAoZ;hUw0HzKZ zW+p!7>EvngYwGhxV0)7`c(uka)T8~bg;yOi!nh@{)%0|f}XghNK3iR&fuKVuY| zod<_Ff8Ae0YX*#~VB?VIOtG3V8|hvC{^E+S%vLmX4P?YQf@Jtdc0GQ;h0@Nx=Ue76 zX4tHbP*$J|(U0ZqX(M0;$X83I2Jstf7X>C>uGZm?IgbDbaiOOp1)v@}egb_%hh!5_ zb%}pgTLtOS{XCL=n^D@bUd_~IxAK^1qiwvUm@6e)>wUk{AHmk=86YY_CW#C0;duZ| z5~-z<)NME9zx!))G5la2vFzg$cRc9NG%4pQv-1?GkEJLhjjV7R7SjgQdX4!fT0B0| zoYa_$A-ruv+=j@%%N3yAJ@;ExjyF#@qJJ*20A!YC*`_BU``3LHfWvd0@T&BV#KGL$ zJ-x@yRpzyGX012)o8)@=QdjbIPR}D@1kbEUEH}Q3XRtS>?jE!>O-84$1~I20%@Z%l z=HFD0UNzZYr5|>kyFVe-)-&;3LD?zJawMFHie%{l(gL#|+0QNB>3BWdUGTpBDZu;u z>Gkz>&2^(XsB`Uz_SrLC6`{8?6~>R00VmNZC6>rlQ~5zYkdp;Xcc)s9TPXt=mer5D+00CD;_mP7i|(b!{#Ja%V(pueN19Q5=(y58 zzVhAP-IdYRB?X8E_B-?muLUw-1JE-4^dU=)5qQ4>c)8-toA=%N3tmxk&%c0uLP-e) z0@CQ>;wM2;xvb&G=w$J;&X$bVA~fTZ`UeJcXJ?)r$>bcR<8M&l&57g&nQGtx@IU$l z*9p!5D2mX38SPv!wcmU}^ zl6;Ik5EoWXPB~lKuNl~-!`8B&Pt4E&C82`Dc ze%}ggXgM}g6e{F~2|jy98Wt8N4BRdVpfw;6@B8z{j{K@B{N`pMy z9~|rvoG}Wyz4fie1%@ENH_8NBp#vKWJhtNudgYFKzkCkF2Y?+XpuvQiB&^wWi^uQU z4cL>mA`|uC`0dd;``8eNf6J%s5O`Fd>v#Sno?1NGWv%ydJYc!#lnS=VJXItFXczG5 z;nh}d&)!)RkF6+zgbfNOVq)6><<)}vliQ@K_? z45_h=rJnc2B&bThbd+k@{bd{3t-5@jGZ`!BOE}za8sXo^1Zr4>5}Gt{m?2d`g__k37@&g@;9w zhM#I?=p&^DLrc2`nfRK0hFkM(8&Ti=JFtlyMyB7mj7mG-CFD0&A&<8vLL0NHInM>w zWp};qT8-I{O!}KqKWVP_&oST3x_q|>N2glG*x?0^sz&2R{{BmAzru!O1tiPyB^OB!mYT|HuM!`fPcsyXfC zv|CCF@_e_8Tbmzvl^p{_-#6S9yLyQAaM9!A!sXV6xF6f2k=+W4{aA-S!Nhv3+7{Cj z{k;DzYlp+pL4={R>Lvba$-qXmM||PhNJU9?9LvX$(wIJsub}upGK=gAfdwc{mN4CX zO}gl*Z|CkWxqe?)GKDU^WYjyJaWqGqwCr?i$eq$oU#;tL+jF0m{ zr!13r?!#Wcd|QDSGrASxl_`{yC`eZ|fJ}+Ib3hOHn8bha?8&fhH^Ewh3_!X%Tq045TQh3aOAW3;thKR=w5$ literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png new file mode 100644 index 0000000000000000000000000000000000000000..441f7c8c38a0b15866a19f621ae24eaedacf6060 GIT binary patch literal 14946 zcmcJ$by%Ch*EU!KTBK-kDTN}%-K|jC;_eWnxVw`UC@!VA7k76rUNk^(3GTrmNFe#b z@BMbKecx-Zy>|cDKaxE2%w*<_ow?6B_k^n`ea68g$9(eS3C`CqGHOqrJl#M&PrpP* zeM@${EkgY~byfTP@k!-4dBLuSgd;!G*tSP(-&RWCr@7YK7O7KIu?I> z@JwHYB%lX+hLnS zl^YbK6|0`}f;a9jC{F4EvP}HCJyQHVw=2MkMRyB=hy7wJ75x|X);%NKz$C7FMk>yD0% z#VHjHed8V-9sLE`Es;<#W~c4z zu}<4j7Czi-JyzChw8^Zp;+6aS8RO{ah(7)+LHLW-$~^0|jsmc?xh}CBa}15dxNTL( zK$7d+)B=7{SzWXa??zQ!j7_Fh5^{omzMn{9!}Gue}_9tli5m) z1}dw30#qRPcaoo4hJA{eHWNokQnIp4d>DGms54q`K~s^pU*awdIeynq>&(&ajzh2M+ja_;DfSaKKF zbj=FY=e5z4u`cI3J3C%y1=^g7{j(MNN5;_cV7icg{nhgjv={5urJfq)+=-y6ZTo_& zrfuR|M{n^>fFsTJ67et~6zR-2Gps3JH2|cHKBnobFylH1Onaj#ZuZ!H!$J*96(QvJ z1zr$wf&_5pa4Mr+=3Tcw#E&*4$NB!oIYDi&uCA^fwrFc728;)GebN$!&g#AP*LiP) zV}7-}dA@{wYc3J1=Uv^xr~V;KvT>uQb?d7mSgtFL z8uL9;hlL+XPgZp}**Qp-9j;n=6Y9Ee9ff1H0se^#3%Zx#;jbDq+C1VcdS*nNv~-4h zap9qjI?J$jeLi`i*H|^ncME%w6=kz6c#$kt)2@-!VLb7W=WImB>E)#cpO(IFIG{AJFLN!~*_x zvYttg493ST4#^H@3H|Z}XB~$J1L6nkja3X*hX;8+Bl(#a?G*l%oQ#uSvo>^0RW{gI zOFz~y(@3Ih6U!0-ETFP>1Exb%ff4e|9gtHzI3U75j7QW4dS%gNg+AjaFAqNZC?*7Kn>T z82Viu)2?y%n{p@37zwCryHS8xG!#%KF>^@3k4h12AHR26&-ctZ_uu8zOwur#ia$7@WilsTd_@M9s?h9@XL~L;2n!x!yf~XAB_3@ zb^EpZJWwr=f+-PmoTDVuaZbH0s)9Qu>AD_btZ@t|@u8AqhHuJ`O_uv4KRwA|TQs@L zE^laji{PFauK0%7#9Hi01Bn|UJj(1%#ylmuI8g(j!Ls|NahbdNW2-J$4cD`w=wriN zQ^cjsn-^zECB?=6*fqsgwK%fVq^ju!yY9mRN9Ko@ip2@K-FZ3b*fk&ekat{Xl>)@z zuG=GwFi(5trB2kt2+W8taL^f_SFPsyE8rnPTR9sS=qshq^Rq+(N_uyAE>T%Dd49!O z-)WKc9N1y9Xk`I37_02+@9B#vO)|Zw&~RpTShcyH9Iu#PDDns>`MJ1lvz;tk=R>C7 zac_K)f^Q4Gy*EV2h{GnI)~XLiECKH)1{bc1nr9_Vj)U1Gejy_xFIW{ZPIm69vTsF!uxw}}4{Vq+S<&zDL!OM$<2AB#v z*9lDkojwbj1x?R%9nm1YsQ9A0dTNA;{z>3 zD`-2|hV$yQN5Oe@>x<-7K1o?`%h4SN*t)V^9h6<)S7m97C(Mj^UzFl@88W=ZgC}|* zn}9ci_g4V_7S^UDEDphJ0P;=~c>e4Km7I#+uLJ2xqO0+XT>YtmG*)N}rthf9fga{a z0Zm1t#wO>g2l)yJ06{jZLLPz+Fy+e3h5)fUd2z4DB}ha4-Afv~SPaCr-8EPM@A29c z6FlG>0E9Bc|0>boHa$5xv3&cM#Apl0QE)E1{mHSECah{dsk-F0?4eKBsC{>$i>ZHA~m%@O*12o?J<8WgBkJWs8^N{8?PPUks=YEpPu)%HEMLAXZWnY4>Q;DH8F&QL0V7t^YoM1G&w1ii&=oP1t62p^>Jux%``G80Mz-5Tz-Sl4&-^Jj~< zkqhnUZTCcVf4r_51aw{3ASp4Zn&9)9d&R>uaQMr38rce$ZEpx7 z(|+i*E`Ik_6AoXnzr4okWQ03m0{q0cu@ynFXyMtpWAzXCwN2OgZk6- zVv`aK>+o#c5eTYA6n^pVyamt%Hok@I+E%!X5nNsq6s|^E)7sy_jq+OmNZaS?(bnf1 zrRwF>LpmL3Y!X?vZ#yUQQj^YyG^Iz<9B0qqNT*)Ak70@S;=sYHXT8r_3`=Jk7(BaK zmdgw~UbC^1EC2;hU5AySchHf?qcQ$IB!<0 z**Mus%v79O$h-RQP`l#Zr@MK!Gg$8fAXieM`1Rb*aoaE9q@cuQWa6?XtyW$C-O?rc z_MZw&$961LKjy?%HODBM?WJz7&QOh$v@-(q4WAv~Fj`HTAO@Rru2;0B#ScAA!fa<} zA>Q5>$!8Lk45K+-LBKF@2Wj^_#jg?Eg4qD0?(HPix5OiW`L1`gNkMh{w|ZpcX}w@s zCk1BZDlLYnpHTh&o**v1^Rj{^o6H<@qA*(;nSIVus)$%5mD=+*cIqZVL`?9u*pAPV z>BZb?6o0T4v3F-<0@A!n)x^jp@LamyTHEljm4o&}?FGwWF>p<4E-D!{sxPFRLBP>O zy18c!!d$C==d8SGgHvK}+r|05stDXy-D=LX9qU)++H|M1!tbicd{MKv(EhYguUc0U zU~_Z;x)4|*Ksdi7kCnYW#9R!<8;M1JDxJCKNqgI1q#Zc*QA1a;;vq22r43*!QB0`t zN>$1lIV^l|g!M;7E{96cNz%}{{|&-`HW=?C??Sw?c*}57;ZMAeVQ*xg)!==6Ir)(w z>@i8K*OT6WD)Vx^A-JoP9`zLV_J8O6mSjaG>wmp4MOBjflO7KX^~*;8L+2%JuodmA zzK<_yWw3^J|Erof5dMF%8UB0r*SEx|VtQZxdz=5G=K2Ttby;VpIPmT_m=~v)bHbg< zaBh+pM-e=Ho<0QcXOLq~P}505nIkEMx=9=;p;$vECnsmoO%=gmvUxIjs@T0&KGm5V zC{w{21z?7DF9;G)onwu7EXAs5n%QaB1W|O~4-8D(;{W`J^@*8903;jn+OU7`SXNutJ@+pF9bKN&Ts%O%h z9Fxp*tjWV=0>{Ud-o=F>Pm=~<9Z^N#{K4zmOfCa$MtbU5-3*KJ z@`7|&cQ|U@eD3C3s7OUdxquK9j&WN}kx+d>zWujaf~~z%Y!kZj+N|xklH%WIk|~v6 z(@ZXD{R_rJ0shRyk(0Bt=ql~E)&&lNb5Tzh7Z>$NqE<*syAPeK&X?+FJY6lMO7QRE zzy5xBfOSFIBmCu1FI$?rRuKZJ3aFtmEtc?Fm|}Bu?5@*ns|dIgbEgjt5tYx~hHFwQ zN5mnFJffdQ)s!{)HS%{ZfiWC+GZyrWvqZ#)=!f$4J%3T7zb+IKoRD74;@uB=ekmw~ z;8O4zsHtB*vOC5G?W^D3_*eov3rveZhzm7?4^>va2{~J@p{IhQuR*t^lyf#dd;4gl zJAaFT<#OZ$!8?B?hDa?um3ZCG&LliWFfqnkt4 zm}HTGZjcCV5=(-I90z!IBw=bRk&NLP8`o(mM*L_sHRavwbOmRw4Ql z+=c~G7H* zS%VB>=yL|)!VZETZPw4}XZ}qx{pLhs=Cx!!v4U@>_2tYgW<>+=Eyjc3;eMNow6{2;YwROaRqSliy9EOdiyNtAAi z=dYCI!lF0;c2Vr8yx)v*Edm<)U@pB+w)V%Dz463c)c@CyEY%PnPp+K~UY^ECBi&YF z76b6}nnLUTw;3Rk@55v}aw~F!-!L}cxBak%8x5=&&mE3GS$_Y;cPHM>l5n$RDpJD{ zS4=WitltFcWG%InMcY!>?W~ri-3XyRaWfZLYJ4IlHs2s=T{54Q!?2>OGxOfHC??m) z$LBjrL@Ca`vlmP!hoqsgQZ{Zhu$~`v4ilaoR2c*6`S)d*$1cF<(Dw^RP-xxKaT|m% zeC2LMKzY1=QUtb?+3oZk;`IS74+F|Y36bJX&7VsxjP+GgIP;=x7&rO4x#u;IeL7?hkJz!MvGQ$w7W|U71Z*bGu&5$vfqgun+hS{2Y>l_W0 zq>hExr5DGFb&}C1tXjn@C39q>yBIO8kg46;RjQ7&mNg$Sv!{ae^9Jh-TI!rVUA4Fl zoGllQwfNzlW4n|g)Y<}0OO8phq0qH4$XRO{Ms&iP4ZGQC$#QG*8XfGBmdb-{)ygEC zf@)SxKXA>rJBQk2t58p#--|tsN00(VIGRuXT}0l|yve}#BVWhdSfUbV;15o@IedBf z*u1DnQQOb%@?|2rOXiESJv=Qa?6V-s#V=Nvll~tW#N!LF1=l=su%~xcoG^un=xSIy%11 znMQuD532vehTqGpSXfl_u&`mrEiB_Q$QcA*dBPBk*G&z)Kie4#b2l91#8yzB9384g z?=uyyNs(eL#E-P<%N-}ac%W#wpcCGUTxP~$N-4eZN7cbMJP~7JjJMjM@$n^ou{F=* zVT1Clr7noJTJV`$>&?9-=MlWA!~P5y12?fr)f$@d7cuFq1<2@up|$u_1ge=aDYBLZ zbi^~6c$iF)enuu^7iKeZKMHskmrPOa1tN(>`tfHFPY#PgsqZ?=YgovX9Tr?&dOGKNnHZfH3hL4&Q=T3ziig6a zA@8VF-5RXRkAelt=e$OQ(2)nxs*RZxbksB5wf}Y~BLB%rbq9~f2%=n0TP{LC{70xU zY8ERt+b)^$g+6R>Q$Z1gZ{Oo-NKb&@dDlnp>9@3HPx1SYzD^Q4rkf%Q*8T7U*DFTj zv?MXJ@i(j%SPZ&#-|?BNy*q~9kbG`luYIvJ9vx)OJtrwSPV%RWM~Xk)+`(Zyn+=5` z61<@`gK3`8&Ct1o`&6ty3Gd=Ky>3Xz#NjKVOSA4~CZ>9rIQ{zyS!VIB?I~H?{g9t4-V-dFu9r@zBhjwZG^ls&V%-vXI_E!j=zPu=Uk{anA zWp?`dROI=kUDO0MSTe{?$(bR~%fDx%0etGCM<-zUD{Am-BN-DBaRJ3JwqkEBZ;YY^ zZQQy#vNHO*t1bv?kaK*s=_gfFSeEH0uFMdBX88!u%+p$VS0E52UUG9&ZfRZ{jE$cv zn2Vd_RZ1)l&4<`E3l6PIdi!kq*5;xbgcW(DD zs%34>%(P#qmu!p~{t4R?b`|n+aQPjJa0t#hY_ml-LnAtm;IsV?VtiRtA`gBac~PNP z^YR;ObSz?wY;@>#>(U=%Jtp~u^xBDul(Ys;S2XU_b9;U>f^O3#h9KMrEet@H&=6o{ zc^plj=l*<}=x6&!Fw{pSqTQSzJjI~4GO{b+-#5^YR~zA9X3V6Ri9PX+Uefk0{Mr98 zAFhgJx`!7|b`Jo0hL8Zl>RLwLTBhj?BNWZ90h)QV+kX24c1CeSDWl_Q1`CAdtAn## zmk3f0OU9Jpl)bc$=_7Ol^;A3k)owA|?b}cq(8R36i^fgJOVqag$eW95K}#qIyUm(u zBm8AH0`ekOqQW`AGs>X*ay0k|$R@vV%gCq%N- zFYTl)9w9pU%%!9qfUZ(P`pPk>U~ezVY0c6VdTSAa)wVdHl94iW-gC*@O0hM|>_E)=I^86(Ab0T&XjLt{Vo>V7sL1Nf zxOuWwM#``+L~s?2JHLw(Y@cZXH-bj=&9c`u zSu577#at(sQc1rD%4>f+!WHKr14xVRNL@?ZgalpXY-jp0!j}0jE2oz|2B8*lh0bi& zoAe}8|93s}anIt(epa?z&3h_v82@Lf=$4`;5=Y&H3GM9VH_n?=v7&#OF~9BRQbtoo z`*xeJ%?<^-^v#5A0l4f-XpE%G32xh$sPOf<+vG9y2w-3<1i(Tx7XSyn&` z^H6{K`el81p%C2XI8Ceni(r@S)UgF~m@HA3yK@xS6~@7|;A%LM>cmn`N$K72otk+? zjLjDO*g!#oULaWw6-lP?wju|xJjd!J>I~2+GPEhdep-0Uw9vj$u%IiB>~^R`M88Ze zd6pJpIi&N0A}Ud{;aIk$z2BUqui6c4J>oBsQ=RbXMKpulf6a1I&bc#W0BV~~q2a(at3+Xui1bkofU4{xv1vmBbgAlp`> z$95>PTO~*CTo60z6~%w~ZY_M|)fk3uS$ITN+Yw7xZZ7+{dZbXRM=6YD;0sWto;C9L zm}wQrKeF4&)sL3>O7hIlCk7W`L_q^o7Kta+Eh2^^`2=oSyH{TQI=-J)D#h-E{4qFO z4J_Gn09z?b<_K=GqZ#0Ej+u`2zlGYWq10?~+5V4at?#u7?-oo>N9BpL?`_g9Or3M_ zy_hq%J*&dbQYE0KKHQN75wyfl##~(!KCt_XEJQ@4Hy9w+po$mh*7D4zA+n;TNRJx* zmX##K@oEVx=&K$F43rKCJ4FpnNB2mZZc;8!<=J_{_}WU*K5L&ZtBAO3es#~qx+7&oIi8G)? z_IUa|mB$M^db^M77tS<_zrE9@%;UNEr_IpPbatzU`UZ}y&kD}!oyeg>KjPX8v+bkv zn5dIB-bV7`2yc=fIqxZ0(YL*$7s)Fqumf2k zXC`>zJWXlnw(-u04Sn!^FYb;Yu);soO^TVj@Zl`KCF4WVV0c4IyD1nwvkO`0dUKi# zFx!ceqF1v~e!i2?uKS;jrj0%uY%*5u z``vJW?ZQ4ebEw*WHRG1KynAy;SJ%!=HmE_2$;lgi{3S|>ZTL^7Mb{$TD!{JHeiBuRj9kB>nozLexRa+mon%je*;yoB7HLqKJkFdmk;X)S9Mbuy?>UmA#wH5slsHct{Zc6KU;?tjU|n zI96K%^yAigbOlQ`ABeHj%6nA?3#g<57inAi;|OQLR!#!6JK!rPup*8W-{_k}ZDqX3 z1DLjY?!-H1S%lDFT?r-ribNY58aHx_TU+JQF6Q*?aPG7d)Tv~l#?d8PZanb8Y3L`u z@CLfKy7L)Do*z`~l}0yQck6&vzQ)-;q04t_iw7t&MA5oAPVvf@0bwdUa*SKC?w`D$ zk?}!Lev7|==(c@h*;Qbe@6r90bAK8tVGtpC-|AmfM`(eA^E(q?VdmzWXeo6TnF?Ek_mjKIW)|=I%sjFx zyGxkk<(tTsJuk=^3N4uZW0UotZebGdX10BO^p}OH1l;t}uy;?n?VB~j370j7+Jp9ufHTCBBFwq3L;w&u~MpB1Zix^x}92Uq?T`V*l_)jZ0XoJQVi0pwp;nfN>57I0HXIT`cf zP}ptJ6pxQ6#KBQj8b5Y^wY8xVY`l^tShPd1eEaYWxjxRzfh6a5|E$7MGk5VDt?x;Zq2}p*_7qZr= ziVD(>&74&Sl*{)NYkATzt4*t%6)+UEhF7$}1|Obyx@FQ7e_TG!I0#Wy|z# z@yn#B$gAz6PO$l^8`py&2JYJ+MFfy=9C!McM<94_ca&zp-c(q;T%#|0+fnaa?I zomt5rRBWQ`=<3~{n))o9zn|toE0Cfpax~2u%_v*r zTdnbju!CxEFnR#;w>8AGMIjb--cQ4nk(bJ2SbZq>q?hP;Bu9rVYoY4d*8<@LwQ>OA zW*0JV0C^t}QpryR*67O%m-c$wg;xMV2xs16jsybN{3wo7@4a`U2+AA%x-fc6idY7%h*-&C39ka{tc}Ksf_z`>A8u?%)T59f4O$*vhWL=Z2BgJMNh} z%y1UQwnaC$mDe%HQCdRT${v<&Fq=9tc!L0=qz&wI>ay`ZVibdqSx!C}Y)>f)NJ5&3Q02TR?%f?pN zpjxQz&f+)5+dzMe`ZpW!tPTn$1*|C^;-VsjafS5!B1Hy^;jSPbZZp*4jmxST$;jds z;?rI0lgT37r(^^RDG4r>3_U9u3O9=_c|OZJ%zT^$*gw*&xD58y&e` z-lIQF3D@M_5)h5M6m@${U;g_B#x+I`GP{Ea0-kq$qEDO2=`c^)Pwn9MQ%tMP_xv$8 z@y|OVf51UbAa$6>VAsl^y$MW=zh{@;3X4{&S*8A;Pg661k^{F1@M0z{yW z%4Vc>CQc^4scdku!=FRpMAtQfm9UTO%BziaYR811S&vEnbbx}HW*2?B> zBWt7q`(PnXW=fJ0dsVeU^>Qo`n{+sn=%sq}kZw>+imPY+#aVtSk<1cKxqB+!*hv^ z#Ld4oL>z*33ltoHk!XSC9#;_cdO{m$?75vAq77=n0$4F(j1hYd06IE1`YavOoGo7* zCv-%}`($|ZH2mN(yM}oW10-M4YK5VeTShDdC3CH}8RM><(crYgkA?D2oqztNM+91f zek+1gnMLZ%J=LEgXBPv9UliO5NUKwdM{)LjJO%o{PwI{IN$EgPi$G}_|WaGpE@C0uVR z!|y*u#P}T&H#^Bo+f&}2>rppP*l$WzUXY;h%$sjtpK(dDC!2YAB)Rf?oF}b%(Y3S> zOh#E6n(zFD*Ob7-5OW8K4E9~ka6 z4(O|K9ue^xUm7Hj@$+T_-1i&$-QfC=ThaB01OB4v`#?jLCHm+P?>@e)3EZ=JH5csK zLdnC!Q{TT1=(5L3=dZM6FG@+{N={ukFX;LsQ&Xn{vZLCjYX> zN>v4RD}VXtjXn`VJ0tZqB;tXrvNL~Z?q^3M_UZakHZ$9Mi2!G7YoC!P+2jEjbOH$u zrXL`pnwm5xT}XB#Qr08&06OiGWnYIPo$FOm?jw`a^L! z5U?c$D({e`(7$Vbc5P8Xedj>Eh2I2-ZhSP9)i=~m0%2Rl_HIL`W9PJY%W z3^PnC#E+H@m(3#$QT0%qeTIp)I~UK&Xu)rLe*EG==S6@EHUfHLqS%Abl^zKu)%D?L zfq3WiZ<7$~fFb2E8YDzv%Ayk>d(f)U1vzv<28D=w-v98T=2h(FgmR2eTupfj`CgVPe(TPVg2v3B3Hwd&*fbwDNW^DkNq2OqaNr@*(&_mA#K1A?&rT={?l zY`in<^21J7&e{wvO%^O?rqZD0KJW28Jx?!O1l!_?&dEA0J0-v7^lI$*D+#}Br~ z6@uF_&}Y}3tvS6yY_i+NU%QJ7y0(0UQb@AY-dp&o_*L}403?+~|$_!r_;^{kVLCnf1qU*PaxB$kL|HRfIhGtPm2k&(o{h&z|o%G_u8l|8tRg5N8 z@SaMEUriUx&hcA**L;AvKEg&${uBoEjiLQRvt9Ni58FG|)vdTZ+KleuhuQj(`mK&{ zV(eE*?Z4XEx@0G}tUJ-%3CrD_y-=o@(CZA%7}b5!_ABkBqTyRyQSFZzRP=aND#&B1 z^kM4N>q+_B^*D9Eqig`PyyG%yn@6vcu%fWoIOL3~fMgG1czLWGuT=CEx3|;8GaD6{ z7T(`?hQ*v%(4&bx#~@p6%RKTOM8$C@2AQOXo*QI)49A>&TQ%N}bU?8OsGyz)uE{@x zmWplM!nS@KM!H9xEDstxhnm2+6ombMJ(Zmo>r6hYZM30)tW);}pog-+C&A#6d6Qk) zmdWQ)j-mc}<4fP4_g=yT?W2xN1$sS@u%61c%%%_0L$#YUt1YpR2&Qz?d>~%P3fBUz z$cN;3)FeVrDOayTQPEio7`9Wj7dwo*(>IvNANuvg@|P5hWH2vQ%%SBnz{hjN&}PsT zd;hE>iUf|=u59y7VAFRn^D+qga#}?DV|f5Un0E0u--N1wOZ)0#DNJb#aZvQ{E^(oli@==Fgd?h>NSaRrt~F2G9v{JhC zDveN~ry!GoueTd>HN9TrjF&6*$wyiD8+Jmc1_}8Qbw&V@EVJrt!d^-zVe)!qWn~Vt zHlGoTod!@MURm~wjW-9KKm=bbm5}tocp3T29{u^oj`M!u1hY_i9%dBH<9A!r8%slY z$J0eeUuzEwM+X&Gs?Ad!j^q5A;y8Xvn8GqRiLp6Rkf-So_a;e&BscaDBUFep?Ongp z-QC^1P{8-eX(qT&)iu@0$N9S1DK252(Ogud_GHrqwIw|qT?efsWjk4ZP``p2PQLkdbWm%Gjck@o}qy})8$JXurFHy9Nac2+Q;I9 zEXet$ax~P!Yl7x)Q?)&uv(2{Cc`wJ&(t3!(_|n1CdhzvCzxny(a}A0qv(Ul$PW#A* zw|v9mCnB{q{s~#^bWrL>%X_|S=VO_sP?4FN76Q}6ILY=vx28|`U-NlpB&McUENRi+0D|<~qui!K{alf`SRD`F({PXn}gu_;ar!Eir$Q z9IrYp8sC9y?#^CAC7jNMq18b|oW>acv#TQ$zY{NOvSnc2?-Ac#wG(jd$(`>$ z=##eJE&ole(e~62mN;3RGRAuh8DVnM5mTc+AHxdhc}&;Ay?>=%^`J0J!v8&G>;Dxe z>;JdE!gmC^N&CzD)kjQ;Fw?y75{M-E{&Mh z-1~amcBSRO=5T%XO&8|B?32y7Jp^yQn&qel4k`7WKa%ijBB(Y9L%NGr?^qPT^-Wbh zId!!B?5T_`C$sSN5RsM(B})ne5aGH}aphXGGKmXlepR2yXfWQpsJ!cd zG++x{TNHs0VnNKtp2pd>7xaA;^`>{Qk}bY0nyCRPttjo?(h4IS!@x#sFn}?3Y}}C@9;DQNOHn z573*uylr!#3h@Rb{}4%>Y%F4|+U|<^V0rp4zH0t_vR!JsuIkw}DAA)8<8q=&6IhjW zu(7D@b)YvE<9cu-JBty0HhX0!8W6F0yqPUFU}m70t?-lO3yQQ@uI9K^p^d=$98{?; z90T!9ydN6_^fzj)y(CS6HO$ zcHO=xDy2Hyxw7*>!tDi|dIttcVUYUwl8;OGYH@hhQ@nfbHQML!ylbQWbRdGvk{Hf% z+&Klvof?q<2700^)i^Sb{Z=Fd`%#{l@6Xt>912kH{^NKya5DrrtBXE7d)@nnhH~qG z@cQEC-?rv)qeuK%Hp@rTMd9G%+Rq13rmPJ*NObhi%k;R!1Nio+7e?4Ze6c(=Sw*_y znvA?jve}Ky#M=xeJ^4iW6&7T!9~TjV(7>?fbw?sqcKeTL#JQyq3L=Ni*dBiNTJ|HV zyz+~=>ApTMu$7Zq$OJ-PH|OG`eGC zw_l()uU-gkq|qq12I4|a`2#$V6$DXK=R9F3qj2*liP74WJjWGd)dz`(edU(5KrGbW zd6zy`c|bGv?C|qd$xY;ad(hIFw&Mlwy>Xi)s zXW^UnnQ|#*iS8>K@r`E)N&EV?NqA3MrOEQAqnaRZF>v^VAjp3s8^u(OTUP?-wE&2*Q7jSqxd!v3S5pWtjVymnmIcT~T~fAgq>A!1fib zR>H@ezmXiB|MtN}+KQYgZr<^+1AFt@GZep5!dI2K0HvUGlD0v5HOsnAyyS+?JRAR8 zccIkw2bZ~elz(&5^uL=8|IiCw!;E@6mD;3+1IS#V)L7mNGCDI~NHB6;*{6Dlew{Q5#a zv3Vv)NJxnALlyhTJ2^c~gkscn)YZk471 zq#Tf|0Pd@0Ma^$-iF#4&JN}W&OJ3BpqI@SC=+*@ZUB`dxZOEDR6(EEpfP-`D zY8L3;D@Pt=aoIrTu2x{A2u6{bdpWIaZRz5^Oe`!|b9@%rPb)k_KHrGGQvEV?CxE&a P`sC{;C7H^P#)1C}3M4?D literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..7c62a1652553136c4f3e3e86296a596ccfad74b8 GIT binary patch literal 11403 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 literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png new file mode 100644 index 0000000000000000000000000000000000000000..cf973c42e8bce22ff1c77b686b57970b75d75fc5 GIT binary patch literal 6356 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 literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..efc22783c719a5a024b7f3baac16e9bc5b2eeab4 GIT binary patch literal 5548 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 b|81a8bRVOjju&Zg00000NkvXXu0mjf$ExU6 literal 0 HcmV?d00001 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6aab5bbe6c632b40f926cefb77471c0689b6f2 GIT binary patch literal 50640 zcmb5VbzD?m_clC$gwoP2ASK-(CDKwNDk3EyA>AP{bcfOi(jf*R(lK;*cX!T^157*z z@9*!vpWpMmpWpkwfAC>upFMl+z0TQdU)QzPiF~f5LU@n%9tZ>?R8v)a0RmzC0f8{Z z@Nj?@i2^@7;2(zT3zes!(jod?;L9B=c};l`s3IO8VTuiWzw4x`?+OADwcq|>bUS`~ z4+3>ss42?7^fEp``ZYf6Hd>Abza_4IZ^vAlhIb(I^bF68U9R)B0|&b>`w{7Dax!A} z01ciE8Ux|2D4Eyw$NQ+YK_Ub`q@$9idng0iExtG(YHG2l4NWnbLs3#;L zZFR2OXS#Q-hB7fgnbO`bAW6^?ZNGbE{^vi=$Gfx2kaJ~|+N2$yTRDZSQ!I9i@q!-U zt&LnEw&mjSsrXjnQ9JQTr!>Kq`jn-0TeOWgi^pA_zTKWH$z{HUzUdEu?nKGk*X&1?9(o_#N`->QV=U(Ar-Vu!)nduPgXJQ?Hzjh(*&M(RB3L_@OZ}x}Ps716 ziDl>vcpDSC!e+#wZj(~_q=yyWQ;gE^i@F^;?g9ARG1aMCYB|!%AGZDCb{aFNw-P@`5oSdK+JK|C22{t4Cn|l7(kP8z?!LmBZ9eEO!6kBvyB>L3Rx4~wF5sYv~ zEN~QEHvw1fIKRL8qPH9Xh80c!z_FKRT(?3mDne5K8s*VjIOFwll*H)*b2E`q7R7Q!g;6efT=BZlo0Bh?YBRzy?5mxE=G)>9hLqrbCbh6+_|-93CZ(FMrg=3bz1zOVUmUe$@7Q7wz9fV< z)cAY4pwz)onoRVb-ucR{XX(RCA4COE5y2x^P)GTc#Gr^QFb2OgS~`!a1Lpg&W7{MG z&A_yl>Faogz_)ob4EYq6diMsKjp(#zV1$tntPN3FWqNrbc8=UeBhc}Bjn}UY&lAc< z`AP4{({uSF+aXayaws|IKsGAW|AUDnjF7)`O72Flc2mDdIcD!aFc8^dXp->AFeTLUq&VB~CMgE|iyqS57rpF5w}hH0+fAj&x|-5kQIPv2tRPHaz6HzcCqxvl zf)&=A!NE1?Gye5bFpT+64O2TB)|}m4CwGI%7thDp{p%>dR=Qq*^`IM8S>@PGtlq8d zYfaU~Bpa0d4M~DpWZJtNmSXH4KH9DG4yQlzZwe-Qyd!ZBmjH`2fa)Fn4k;|oW!LL= zWvf)O@Rf!28q_%Fsom1&NZb}HGpek1{9)Mo6+Xgi)%W9(oCf+1b6N_&ltM}cbl*3 ze?SMpn>N0u;>N#1lRA6u9t*Vx1ZKdhRf^$P+R$|lFcin|qOWG1Lk<@0wa$Hhv(11* zK#hG|pQb?M30acIWpJYpW!>!{MyxQL{f524LC!W}wMBHmKmk;IhAsHp77891{F#sz zG$l@{2XcB9cj<)HYc-S#+J?`+QjrbDgP_i`SAh?ll9yPHSELiA=*QCN1=om&SY7RP z0o&OPpQs0@_@KR?jAgH#jTIl8kGS<0Gokmnw=qB_o`=csY!igE>}jYG;!+ODgX+#k z`rlW+^8gir?nld+q>+hbS6B`opTBYUf-#3Tm>lN-K96f-{`gZtVxsweo*ae3P8<6D z(#aIlAidCar8ioMMMG2$FboNx%4)b>#gj9HYed$zGRMcP?3=9pvd|`2RV|WfDfTvo z4$GmX{ZZT1iQr`v@o^Y%$!opFu%B=vR7Bdpqw5eeZ@X47ab3sFkOYUfGVEdo3T6-7 zfOSp#l4W_VaUllC;@3~82LQ5%fyVw1eFL9*3K9Xsp+lKdQwoWqm>lh)f=iCXG zPaAK_z*nyD4Dgly=92ybG{tj8<#@463cR^~%@(@ccti*51zTHLSzo`@l6&y;JXz1A zC0S1dU)s1QUFs{CU1wB8M7c8Q|M;qg@wG2C-2MRZDYB+9j;WOl=G_wDHhjDs zWkN3-Yl27zM=blabRScvt_rQovA}bA4bj5d>r~;|>qc-ql)?!;93ph=iv#iSBt+L; z++|#Xen9kiTDD(zf|1%4H)y0hVs86nEfJLg?AteG<~si16REzr=c5%7qlx-rj3DS_ znLmXIg;cK`YUd_F0a8ui6RBc1P%n3C-s=Ooo-E6|5ta*EuDhmy52i*$_T1mu%x4-t zoZO^#?R+)7+BcKdv?FbN#*(E!ir+cUb6yU|0Ew?3LZCPBLQ*;Z4XO3hl4#;u8b?U` z78tz!%L@yIi`sF;i5ZrOU4&d{>!7t5m&BVkjl2{P3!Y2yCfDGlK*zD=t2zwS>2WiK z96ZHwbVx4NsF4D!8)A{^h3j9Anujj{i_%SEe7uvhUdz>^ zM!CpQZOu7d5O}^$w};meSEumZakPYM$8^AzsgXxI;^=G{+;{=G#~8AjlT#BX;&Ia%bSL3GmQTJfF=T_(6oz4nDsMp?n zm5V`F-zXsy+BPD)VLsY%=i@ZZhoY2y;C=V&U4rEb*tyq^pIrFy6|NkJKG&=9@)*Jh zAYgOEX!p%n7^xudvl@*R7`{m~+GW+EcNu*{0gjtCg7GjyoHUQTK>?(lQYHbMSt76} zkX=Ie#&M*T*E9sFcw)y0Ir&}IUSMiP_!cd$8=Tbb*|Z04uQG9^aY_%|9+nI5FRP`m zJ$MEhX03O^*ye|tq?>r5Ftfm`*wkj$1J9?EkypmQbh*`Nq`$Fx_+AhpCwq{mA+Q4lmKV7D5U(y?l;(LR|qmMxibPz@sOQ zImtI#GO~B%f08j>jqsbDs?fokhQE&UA962WM3r@31WUoQj?wbBP%iNJiccCbBG<_j z4q@ks*D#9(Q7_1{)pSg+fuDh`vR?TMgFtZZ3;WvrqwEeDrmOf}R!QlLv9eBdkFYfp ziXZ%K`3H0!a)C$Sw;kS*tY?hTUQ0jx75&|=7B=QM(-L`H?ld{c|9R*>fQn>fPjXE< zEvb(ZCi*VO8Hj~ zh`ndB4Q_h^Sv~xKe88{&+FG)IC4G&5+?kE&1`{iqVHRqBPnu1IGyFDvQp;&x zW408GsBu17;B7vO1#iDzfTei0Ud;$JNrqoS;Ds}OK5_ClJ&wa-)&Qp8A1VWHuzHQ# zm$h?i(I0$i+s?Ye@`annucsVeF#=v@g|C7GG%xuYugey{E!UU%?s;and0d+Q@jprh z!0U0tNg=%5bA$R%ysYF6uJ7L=snBQIuz3h98wL;_CCHyLL-)y7wO3Wkk!9#GM^M~z zX%y7cpALP2x?JIJhFe|#y6IDgpup|Ra_5Y`rzQ}6NP*MVN$Q&RQJ=oT%}g=s&400s zEZBX7KDSla#j!sJvO^9aCGzy{{_OR%R`ZfLhs)r{$TWd}8m~itK!4he5VSubR|>^B zbTmSa{UZ13js`ZzC;DuW527RL&QzA4%4k!{j4%Zvn>QuJMu&1KQU`8 zJd3whueP7mCYp;KvUkVBLUuSG&zx(5XW7HT=u}(Irdgadi(q;OYX^;d9;I24o zVCt8RIF1tp)8p|A9PZFQ3Tc=5i~!>3^o2y?m0t0$ZR>5%8}Bk{S$bVU;ynAxNQKiX zqX*1@fql1PZ=HkmVgN~>$*<&AO59Y`tcG=KuR2ISYy;mftB;3J!3h^mX$04OPcWpt zO>7VVM4;+gXY#vWcK`mH`0RwS%L)l%<48T3D;-#K8XdGc-jCW7ashO{;5h;tIWG-7 z)LNgdghOqQT5rtS;YA#f?jvI*khiehAZY^1}Xv;T1wXIx~coy=_*avoLl#aC9 zC7md%r%0_-7BW*Ny3*U(B%sc;@yI_@=7z-SvapIP>_JK>0j={x33qYm^Mk2zU|{0a zqlMk{Gz?~sXyr{d`I+eq`#^ryzGik5ya+qZNmaPVm+^bLKf_l`Z}T6?uA<-#D7$ej-YLg_C>r zehGFjw>+(x&}FmBxk{wagR{Fxk$(lR=_C|oOs3kD9~Jy~gi_49X6el3U)OjB{_0lh zunw!?VG(QnRMx-0P!Ph=^wiva)Bj3MN|1t5Rkl*jF9E?mZa2Sj_ zy;U{vg3=V4WBUZHZ~9Z4&)5*~c(jD^^;qhf%&|8yjp%J$yc@-#uOD1Q*Suzx$}VPE zv*3b%RJYCOi@pTQ{i}yFU}F}r!CmXfCJk-DszqJz!@9(qNkP!-X$a%3jPGa$Bk;05?s569k!6EGh%HAHyZ?TT zKYp=xcGt}^8nxjy8f_fX&kr#KO9x`VO8Tg&k&pLTqMDtJ+Tq*s<8Ts(lJG4NA}f46 zZ_@IddU4iX%$JuX4*=;ZPQ)x|B<;<&ooS+gIvn13t870?Vp;fuqo&KHj&DjjAwI`V zRJRRTei!;kQc#Qgv{CqFxHfpo8kDouh7ac&h|yt90%k6BwN@o-8Al znHMsh0JlZ()cbuobeT9FsIU$*T>tD`y^heLLS@NS1I~aX*O(jhqr_1BqHN4A~J1o^yYL>niF{ ziGdn2>cw$i)6FM*KKa<9MQ-Y~M;@ljlpGcRfjl>(s-C9tEt5OfLe~pjja!|NU{O|W zi`{mFQc=uCTjqSCt?R%{P!pe3maxB5$UHSSSl&+O;Bn^Y9VKmNb5W&Ay+_94iDK~+ z(yC!(PSr0jw}m9I90V|0md*l=)6BhY7wP?;;EMy?GQD`_+xZPLGFb^Rnc3Oa{CL^#nc#zpZs?48{3@_}xn$w3#A_AZjJl;* zzN60lu;;o{8Pq{GckONQ)em>yVHkQVS4*|3HZxXAwSIenQ_ic&)eQK-U*IEw@MYl-Xpbf2TWKIi4U19T$#At`kmQe zT5czuW=9c8WfgY!x~*H-C@%fE2QG30DM}z<*vCS4N8a#l#|2mQs}sXVtW2ko=nJc{ z{LE7-<2UKP1AsS62L_I6*NJ?g!Avjx$30ftunqmrCwrIopY71@OjFHEKLr%(1^rOp zf#}knfp%zCSu>}Jta5hdVfP(gRMRYj=K@B=>>RM|(&bYJ#6l8a8|C1xrr%ruIj0V+)H6l>2ws zR5ZLF00siB45Jal_z)qs{C|QvjR0^j*CY}|t$T-B&w#M{AR<4&A^SaDvfwT5zT-^a zOD(b}u68PX+wWV>d~v$1b-Gk<-Yo)E!3G{su}9`3XE!}r|JBed_Q-bRk9O2Z7Rf(9 z`Fni4ox1p}BsI0e^o|{f?o&G#Tva+igk1J$9H3En{)=TC9DcMnnWK=(tvxJ2&GW6u zKplT+ILKzT>I%=oVKWJzHMt{9$EH0osYXvNq1jLpI@um%qg+<1s^-hEa+SebGcs7R zeiLYzdhs==x`Cs>0|?D}ulQe2#FyvXYbPYFFZm`=Apx9N_AjS$2GfQZ3=a5MU=+w# zq!-yKdgG6{EBTegr~@Ywab2=gfNPlcEhtShz?2H2~I9mCsWuU;n43mRDe(q+NO zslx^@=#LJBO1QN(i{Mr1cuK1#M06-62wGqBm&ebgKGl-&Tn%we_5Ua~)|1}w>*<|I zX>khmVSE{3hDuRIa>5k}EX7fB|4x1Dl=~Ml67IW4&KeW+SRebd}uJvdGP1eQ~riPSah_6hWc}5&et#3cARVHMVo+$9`TS|>{!I~yH z5|+ik7xajL)k6?AO9_7MA=SIRnNFt1;W#JU)tAdXY09NRnl0dr+wZJ8o>U~vq4^O$ z3F2`xose$%QE0k%Ilw(`C^j1j36cMWLts+&90TPEnTKhe6@53nhT9p#)9o3L6@Iy%z#)0nw@r^d+8 zaKy<1>F^yB(vDC2Dc>(S6|2*Lb)dNLfcfZ*Cdfu1GoC~VD<@?fiV+})2WDmeqNAfG zrFj11nm|53d~0ZFk!saLO4JxZP(4pMrYlxI3bL+Qt)hEt&J<`B*c0rmx%<9}5h7-n z9?1e4PUQO1goD}D?$HwKJ-rnx~-pmbWP#h)U6%MgI(}`aU8)yF* z3nCzpuL`SRY9QZFdw4W!q@n!!b8)Jtv?w%CnchE086h-2j2Xg=t zBK$n9Lv9MvnSK*squG~zeMf2Oa)bi2nI)#Q=?Tp?X}!Sp`NPZ)l^iD`AqIQ7G~H}_ zZDI!0T7EAd$riz+l5=Vwl+nLdvr$y?BcRjsnkKE(QMMSkhr_MNSnv0E%GP?=i+G*p z*c5s8;w6INC?)uAgMMq8;HcU?@jTNO0UIcZ=RLu;Cv0@QHqa1ScN9qYkYpd}MowGL zrcoWnLexnPj+IjcAN;74>P#jz&zCx1m7x5{=6%N?Fq>MJ>=&TD$1s)&LQk=;IH5?@Wn%Hmc(8j??D;a{uj;elqL75V=K77Ku1d$$MVfXsl|#9=njAKk=+NDvZ$_Z{rm1k6q7e*t9Zj`y*}P^!bnDrYysf7CCV@ z0Dk)i2GSz+|LXuXXwDZ=Fd&%4t{ga)2CQJcN$`0Herca4y3y5rv?nZ)PFSu*8~>s# za<@%4g=S!$;J*2nw22p&)`TVdc;8ySh$t?=uN8GB4){#WGp1MhKAKP-Q8I8G_05Rd z=2fv~ALsMj6bw*?jeT(W7|FE6CD4bLR(k2G+KCXh2aKk*M46O@ zGfk5<5OK_svpBxz%$-hJunn>>jH3rO8h(DkdiE~%%y6VjV8397viJa3uu|U}FgsDdovB25 zfxp6pk*P+aCiAoBHhw05{2Y^BU7A}~QVUW6*i@`9B9C)ToF*a<4}x@i&2poSMo2p} z?QULwSR=t(d^A&Jr>aos*&_1&@L!|`d>ma^PBs7f&>1n7 z+8n}!hB0-kn_RyD7~wH<{;gWTqhXiICma(K+eiB+6a8ArZs4|_1Ax~uaMUr{U&scq z)zQ}Dp;n_KiK9ucY$@hB`v09z^FQGfu!68iho7xiT!*XZT5?kIM?F_vYEJ})?Y>X> z5?}VnAGWike5*oyaS8XYdFSIp2k_)Dc&YPKawQ4BYY~8DC!Y$+ov_LU6=!|Ccgq_= zAjnk)By#!s*K*tLcrgrh36YaDKFgz8J?ZD4W-{Sj6`P~f%RHQ`u&Yl(=Hj>SeJK8kfnJc`7U}~=c*!@}`cUcF3?*nf+^!9Le_w8qZ zd>Ik11*`<6qh2BvlV)v3!xaI76-DwfzJ2hwzlFs=&j=;|@6APC3HLqnTZ-(vg2mKw zYn;m13j>%9zbrJ6_?7{5l;{?psoXcqzlhZK#VpqP+IBu|Qf3G~_F2xL4-Ij+rn~cM zm9%t~1@C+0QNqvDB#l6Y)c!6XQR=X0mEcFI=8mbgl=tyR+j*E3jWTs6Q3=Z>4Z_LW zXVJGeS>rvOs3)-BJ1y<+2@+rdH$f|Aj<;qZfx2?MSeskUt$+R20~C6Ofn*$7JE>dk zm@jS3;T7EFvZF~3GH2z9s-yFZ6BZKXA(+1xl|-CCRso!QYjIN~x)7F)*@p7%Z#}$Yw__+0y3nn*p?c{hLOB#=BZfUw;27^Aolp60(ncv zHWgy#e&b4UWJhYFRHRj)dRI8Gi9luz1+yh-G4fa9CGP6FE-?dO&xashLDnx@wvASTnr~Pga#Dg#jn6XWADhRpj41%y>`m0n zz{U)qGmYENN|RYo<2W>5ZH30@4*)DV>g!jAThiQj)y?Qb5HE8<{a3{bW4CMqg+u?`cO#k$Z-oLGlpf7nD9l<72Q zitaKtos~FAxl1}EaYG;9R3;|_-0j5^fJAQgQvV5Fi{dU-MIqxn8x^h?=1dTsCM$K@ zS-MBs0tPd%?r)uR+}9R^o1CVAf9TlS158B(Dxw@>2n%P(@Bio{`qbPlFjD4e8f}Zk zO*9>#gN37TWGP}G1?{dnOLy6G8Ia}>D+PiE2~|94q~GOj1rSTQ9LnTc<{cQ3T63mX;0}N1XlJ0ER?V;V``~OGi4ZqSe&dcsH0>d$7y-!8M zg%zT~jvl~10-05NY$ofmy`RWp5}g`Cd)_b0c)A_=~Ola4ASaVjuiRL$H zG4W-SK_R%Q&J2K9insPW%_3juuYUR;;(0 zjpDF+q@JDNnbE{0%Qsvon@AF2QNA<cVFE_}R_hNMVM`_EY9CE_oLdz3PK@7y z;Y+JdfT?PJl~Np@dp6mq*Tu)q%3U>IMCh}5EMeF2?%m^;C&PAC1sGU>gph7-F#=i% zais!S>29%AqVwHQyzgzl3Tj#OKQ^}zT33ffun6i#7D2g*aCAbxy^Er#7k#Im!EmG% zz+V2fwpyen_kr8#I;f-TN2yyi&q3?=`8NBadhEpVr{ZeaYmW(xs2y6yvz><>atvW3 zz0P2Z6J2$6X^;Rx?@lFX(k7rK_L#r#lI1eni8mbMd)@R&TNIa*dL@aBh!w338!xs+ z5o<#-#bvG`(LYr5iOcTy&9WkO#wW0wg2q1fFAw?uDpVux@c5zDvA68@g zM{zq`wspMCJ(fg#S=59Cij|YQ+k44mp<;Zd6m2DxDyPG?Cxw(*2DL?b|37{}%VlD-;V2o4R{7Rk6qzqyIVrQ$b$s81c$T6{EN>JoR zU`B3e({7szmtoW^o|5t|2Tf|xjOQ^}PSh z2iZ=jw8rKak+CxG0E97@mi{fam59Tdm^drCx|{ZkSHhTyIp8ln;!1x7osO(|RRDKP z(t%A7(Z-k_^aNu7kQ3Kf&fggu6(`VG6li|-<~UHTqadIp{OMNE$P zsCE(1-10vL`+xW!dxI}Kp~ayqV?){#cb$3Pj)abB8YfZr7Ujj&W9A6;Sm2o*lAU}V zH_5sX-ka;`D^{-)5~v#}7fV7&FJXq0OPA%;5Ig!UHen*&NA$=;NK?JZTkXwAYwZX1 z%Dc^|@g$^0Q7rpMyma5#_%jXz7C%4(K8wUI$(Q;>*l)Lnh>Ty*B(lVB=WHXQy$TMt zn6Z6Rbk|m-|H&b?j&{MBr@h0@FG;#c;AqJLrgD+G=FUO^P$0U8318zRXN;;?*OwlS z=FYo!@{&8$V01o-Jgu{}j&{Hi90jzK`K6T7Lo=c851lPdiCM2cKYe=VMKhpfD?Nj& ze&H(5!5Ut5n2B}4HnyrZ(CPxvYG>D&h$+{RW?0U8tIopDPEJ!U@}IeP#qApk>eCfc z(M>uybA(*CcuIJBK_hKS)qVHgK|NMk&)2X0IDOXn%u4m&hDbUJ2WV+UX6ox>kg(Jd@!Z*Fgs%po#j_oymVq00$ zJ>hq+NcpJQiF{STZXF@bef}jfV-k?p%g6L>R*$DQ2=9x&8>v!ayrNd;YcO{Gl782! zhtO8Amh_H|nlItme&bK!4<#7E18?)AZu1qcsUmVAq?HZ6zjVs1JQ%c&juF4zT}vJ- zkfh=%lRLYMvo1o9VZswQcG92pFAd0|ANUtz;6h8U4PomsaA}GM;s16sXbs`46v$9f=^grPM z-@m6IUu3GT>%r5BD-=3)*^tJL0ULu>uSL>zR%C9(= zAeXn}%hk%he@%KvO|A*vy{gxqMKE`9A*PirOIU$O0elI3iak8E-}EIlL7k++Hu=H& za!sJ`Llb{y6}V6dS3GY5_JWkT+z6A{4Zh!r5pB)gW9K6U13U%E;zmfV%;a>&9pprJ z*!idAbssSJ|BS{}!;Wv7kK6gtC;aQF;Hy*^P+#bGy;&$=prC<-VZOD*zYoOY0M#3k zvc=d}fxwdajB1z6soas65B}g|ESqR#+9V(J=6rqZe$R8so8vFSUh+Ba#OH4exXqz4 z!CP>hw!eC=O_b$1%^Wf6*i;=>hrk;^_<^Fp5;NkiV$Yae4_X)4_!}yV- z2wPnyYe#-4!OA&YwA31q`@UjD|6tti$i{xf_l+x@i;ka>GY=~Aq?Bv8nXqr zH;aH)B>!SUSDV*<-~zj!oI%{=rw9R7;RRm48my1%5}QuonSG2h*+E;#huBZDW_hA9 zBucsug?AR!gmi@nu#^X}x-_U0?jaaVpJ>nx_EEEMOzP?0fp6>*uI7j~fq=!1)&ICp&0CVE#rRv=Hwm%fBHYFcyQm zi4^wL(iRt0`?_({Ek7n|dezn-`ZrX#AuZ-bDhIv~=N!+U+Zfr~N$rpy%YN`P`5|7= zjNV3J7H5>eZE|pYV5=Uvkw-Z9n>sA;V^fwd+xsb)uH3oq^?DHLT%ngy|BBT8_1U=D zwv@!U``0JUFUFP0U`6--9&wr>`3Fx#M`^W250Vo+sg=2mc0>%QiFnwELc91aSFHf` zP4&oDvB?Li@KwWCse*N`_Td+(0+v6|PtreMd4E9*D{hKYSVERuGyQPc& zE+_b(!`I)6B`QMv1#H#)W5`kjuY>b zp1=B@3ijs*(%xg2KOZ+nE9?wYba1#ummOl?ss$Q;(g36>tnQZk*3{s2HQ_$!m{mQISBTfj4SwDw0JZb-a&aC&F1>%Zhy3*LS^0z7P-W!n%e!G zaGp1AcMw}po~O0O5}@Nv2$pkkO3nB7eYARan=jMpXiR%p`HQ`ir*@B#Mp$kgOX$8@ zEyal)IaLK60Qh}9UOB@xxUH&NXVSQ=Jz9R-M%{+PqasQev^d#d1_cVUpKD#pNSxc%^6dX}jXzF(gKT#n%p(m-r)7fwQ0&pf0Ok%#e|`x_`m z9!@7%u@|Zf)^By+i`VIQv+>~&O;UQA`)YOv@vr#$9tA7rWQX1Kl6dFACs8iIdJ8(eU?%z?pFsyMtn}R z#pZL0We<~=zs0J_JSBHu^-_0VWp&%S*4saj+_Oj<` z{$T;)%A`{yyyME^v@IA+62w)QK;o#-m`qoar!Kp9F#3G+_j*dBRbx0T=Ca)XBiAET zoOK%efhD$iSFJN`@3R?EFX~_}nup5Tg<_2!k<06ol(fm|00qdu>v4`RT;9;hklYwn zq<7*=Pq5Z<@bNy?B(e^#A+4o5?o6vG(G8~pysW%PWBU6^UZRx-86~}4Bvf;J%u(aC zV<{w_@oAS;`>xN`;Cd+Av*e~6;$SI&6)Yj>k}aOD_i$tkqMMn z(3fU{F-ziR+*Oi>ar!76FLK6?wx}O7hPOR#l)@Alg=fD_K-j5o52fsU26sqweX~@c|>xa37U#~hxY?Af@a2a!${~T z7Y8dcFkenQ`(!I_E`8|f5)Z`(VT-#Bbj(qEJ9OR-^A;q+BMdpFmdF5{u42K=VWKI_6*M@wXzQw;oGjr1x@^zb33pC84+HQ|JyC zzTDM}JFf9(ThUa)q|uZGyC=YTzZT~V`K+=AP!H=iv8xzWHC+4=82!fkeR{9(<r_iMrt}NH7nY@;}66X zEkRHEqJbQ1qrFoBjnGr5jak&}rdg?VT&#l#Mb}u!2k)rp7Y+ulf(F#eSnkSHy5(VA zRsnN%5~#W%Wts@1l7KHmEKy^Q)2m+nhhAG{snaCmV$NJHv)62f9&~*5&36QY=voq{ zicVBQ05*Cw_q*YmKugKEmhb#aT9<--WhetU=8Mzu*_UyI4m@EdLzbi)A{bcJW9-_% zJ>~O9B)Thk5%1GrF)a>$y^LM}mh4+`f@Vv~_=9t|q>t8G(KTYO3RxyymbUm>pQB%Z zhhJ3YCq;>_3S<9rm@z^L#}yD!@^18Ju-QB}bULljsgd>?yLMdoa4K-q5+p1#o|$9W z0a5sY@q0d%Dh00+hd|K>SSry^?75Ogox%{~#DM97Qos&6=#TPMd z($iz0Lh7`y$*-qL?RPXbk-@R`I?UCi>1vjmhsROG@u82gs5(9ogB=ZlX&<@cwDE-$EkLa`^4o2@2Sjp)}{Yq4Q>7uRfk z34lV0yY}(m36D@UgUlfQc_uz=qzWIxy!&diXI~dp)l{z0$QO2IKB7`;P5FM1;4Own z&2z^OWe>*$8^}~Y(mVn}u1M?a+%4UR!wXDWeo4+RhBvTtf?w@|2JL@M@~Xf7QXJGL zq4FXG(CE0|DAumjk^n-QKoO`4A_%ru8@G4=K(R?7mQSRtQ;7 zFYR!5o01I2*<^hxDe*Q8duXLf=1^lg_^ITbJT4Tu{^or8em||%8T8Fe@TA?N?Kp7) zJHyXz2)h|2ilnr`o*;{=-2UlMq~I4#&Adzr5)!NtCO1%a z#*r?n!CztxQ=YL8^_yrll}7&f4d6vG_O26qNtnjI1$A*1Z9s3m{k6Jhp|l=ddBJ(g z7OSH<2Bavt(0DuN&sFUaK&qv|XW!^w{Wqaey3GvlJE61eQ*y!p7B;J{2Z-1-RhGy{ z0Pm3g!(pK2^*Yb4pG4%N_0bMrPbZBUW=8bYp3KCxJ7a1fRvGK#HJ1kJw7UO98mm2m=+Gs84B^~sJ5*lj9bagnJ}^FH%bm%3p+T63j_6}y)u7(M)w>kQ|H817e9)} zazWiA9mFYT?PJr?x5Dt!jqJyW3OegdVZ;C4E9{JX7JNC(2yNO$PD2m#frJv3FB^Tld^bXPzcdFa3|5 zmyp?_Bq{1oWLCjD85?bQRVlBuva__v@aM6ubz9ay9F4M6Md%3U1A;l>rFO3_pEq(% z_9|M=%ugG{Y2S2%P9=-jPBdih9h>r&hl zK6f5b>OJ%(h$83c>|G^NNcHez=+gg`hgiHlhl~hp{7attVCpnsOG73!oOjQ zuIr*iu!#17=56f($lQFl$&kXUANGkLE1LY9=)wDrK@ztvYnz0lnAlFvldS5^=;{{dQQS%bee3LKs?AdxEsS7RXkLl~h(^xyPQIRM zD-+I6$5CkkX0^_k5eT>A=>44^*1G+Ls?uvj|Hd^NL@sO*^=zTpbd9%_$>qUaF&LB5 zeKQL>xUBf=1(m6see+N^=Z?civM0FqjWWvTvOu*41y@XogM294$+Vq)tBoV;K*lIm zbn32gNkQdH|BbTw)6E0`<-9kFvuy(+<_(~FQt(%DJ;475+L-hCZlu({c@q$~o#T(| z$f>rOasBP3uZHWRRTo=pU;B`Fa*T44CTy|ibN@y-x%J30 zL+npRAqjC3kaLZ%(VR7J>0S@D7kw}#Z&>0B`utuIP%yS9Oo!htKWecfti#tg?#2jd z;B^!kBDpixbgTTk*8QI6%>SLk?ahvDQKwT{zz0(*Z&+ZP!|$YhX-I6@K(D#YR~x(1RiF57$Gs3~f<@d&(m>0a$12wNnA|(!wL-f*g=K=3#zwpdz=pN2vs2 zHMG+d5hW_GAZ@ZIDoCN=0l=ct1nBAG=M^a&+wE-%{$yJPT}CFxbcKak6luH!xKoVt z>5B6DUw-Aj(T-}L-p_fmwDG*pATev*MZ{p{bN_D>Eu%Q~t+J-we3pigP21>{U5!WO z?7r33)V_onD!s~jKVPx0QoU65Hh)H#(BK&>aEoGE1PFkD7!SV256E32S8Dks-ef4F zMuMx^$ZXDFuol=(QpTn0o3@zb#l6Dun2WR%9cT-1dBYq z<6o$9CHWtyayT#~kDBwO<-cOh?X6Hmkc%$UFtHl3@q8;illej9$i^AfysHvUb;IH< zzbIuBQd+PrzRgI(R zW+=gt6_&RN$_AIFB1Is!V3PkY*3L4l>NR2aAkrF-6<{I zDIikPNH++IdY*;unLRV-oOiBsov(b@xYuH>=lb7IRr%Z9bPY5n;2wJSCN z8&6_-YcaaoQU(>XHevwj-e8eT-Z2)%kpk&@ss6s5x21PG!urRz-Lt`)N|>m?USXhd z(Qv(BV$ACp2xNzMT(Kx+zp63M=hCmu`a}`HjFRtPS76)Z|ML2+QKHq+^f9h=pTQzA zgTLERWTz7`+}Tj=4q|Fr+Mv0NQ&2=(Jmx&3UyNyNf*F>C>3AYNIa)|FjK;Rb;YTO` z2ugHQe60}~syn+jWkX9Y)*462X#{~RkCD02AEoqo=1scaGkp5$z<(SLiYBA&WlxKo zh*0`iLv|ZeU6t^hP@HLg!2SVL6vtC+g>|if5!Z07>?@3#^{>ehw|By zV^Z!O!#>EyV$U|8A!>c}E`u}5Mb6)Wjw4OmXPyqgD(rfdK|L=o`e5ty(o&yXaHu!= z1Jwwd>w*olFdxY|*E&D)KO{}~O!{+f9gFQ+BP}OAo7+c&Op_W32T>!u8(RmuE+g2E1-?_BauX zBt|qFaEOjDmj5AEwEIbNDNYyYXegrSyewiUBLtIUscKU9nw`#+59R~E&pgBN1&v+Q zWm@UKIV%(feF@|xWex?i(%dxnBLVdS_} z4WkFizmpQJSV1)`oi3sl>buMv6_rhp+pA&XJ;foR(ei@Bo7OiHVvfp(5mr9@Jl(^p z;yS;dx1#W2!cU6AbJ)*D)o0_|UeH?D?AfC(cI%A%{c%5fJnP7V&rl`f&un)It%ahB ztgaZ12 z3Q!rj(DTroEvg5d0!;^Nrx*%3ZaR~9ZVhFY5|r<*zgZi+Yg?Y;dQCgNx0?(asBa0i zencH?L6pT!+}#3g{zhqLM;NHZ@!+pbM(P;1yVJys2w9TF0jDW2xQn&f^Csk7e9g%? zok->n>*&G6f6ZmJ9EetEd%8-yvd>eaIB4;YYB7XlGD|*phoQ+DKIcVoqoLG>P1j{6 z0Ii@QlGBm(t0!e&lT%cjH+N{iEo<;K-`Bbv+)?}77sV1$*xA&ilv0_= zNAkn)(^Ed0TgNtaxHo^IT3G+72l7}St>(^f--KWfR*laSYi%$#OYmvJ+50R!ZQ01> zcvo+1WQtrwcjPigS#OA$cQTyFC9%4>j$OM@;?CwmR#HwHN=fe(!ZEU*X#b&3t`RCKH}{W2 zU8CLe_dFvq2CK>k=ECiybX6{npB-$B$G2maHZe_6QPU2&^({E<^0`*N-4`}D3I z5E|%>m2ABlJ}!l=IlvWE(zR{mSi_Su!Qh6d_@SehHiy6F zY2#tU`3VxjibQ*DvvW+MnPmxsW#>ZyA`KGv+b>@qAeS+`nJnwoLj<-~A^Ih*H{$c$ zoMRF$F|7|5=|FUr%i^(e_+aBWay>`)rzkuT+Y;1f6~SGX`S^>==-$&vW?(z`!r})J z34Ro)__&;^f%-ZI1mw$$+Pmb>Mh4`_kiCva=Q+f*tY2E#Hs5DI=F^29+RB0C))8RX z$gijH#nt6sRl;}w_%aD+>YILb)=TzQ-e%qx#f**VBxL$JH_lTL>&ElHT(`9e8f;%& zCT_BZSW0s#4b9F9GKdQC z!xT%*3G)jgb}sqQ71!5?3+rLVqVT3ZWg}%NObuwlFd=WYvOqB0pmoW#bg&RRA#^^0TXGAKy zCMVyyBh0_Vls$e7LK!CYKcNiO59+zff}MD~F^`N}EA97BD1(bdHiP!ML>=eCoa9%e zIF_5wx!Cy8{-zBW636BLt_@ze#T_(_Hjha1*{lzLyk~2&hgad&8#FTzoBLB z1i6P)NFH~MKO|?(rT^~91xZ@!hT^1z*b6JOT>Lfal-pOYi0e+)>nZ<;0x>P7 znT)dq`48MUj=6Ic8gyL}w)n;7NIqi+;gyN8d^F?r3;kxC;w0XNE5p99a|KZY_HSwU zAfp(*$j!w-`zF>5@KpGUWa@(3rG?g#_#*IS)Mg5P?pFEALK~y0(Rp$CQ6*f!yC(;3hp# zif@$p$!RTR$ISgqG=ex&^su#F#a$}p@X0&eI6>32nl&T2fEQ^=-ll0Zs=@tF_b@7=V4YvS~!)Er0t{z%;Zg^_!@-s*UL6I-5CjF_Bc0-Lw&|@00 zG}u`|T4q~I+obXYhEjp3KtsCB?ynu3lV8Oai<&(fHm@uRALjH72Er8G9+jnbZri~q}*Lq(|?q~NM#1R`_w9k(t#m}(xC zj`w{LX{Ju$a03rq2255GVM}C*w2QnYee8s{6%KEDwD)aozoUXpo&4_Cm2iNPSZ`@PbmrnbLc~X8Cxi1{(jpy6QSWp925fsPgTE)Ukd#Iy%TF@ z8;sb28=RVgmz+zkydR2U z66}QMSce>wkFe0DqBnJ6;Lax5F7G3bIfHQa<(T5V#x|293h&QWQ0Y4JD~EzrV9nBZ z;iXV!8?LAyrL~cykJ9GQeNoZi4-S3GDiKt9TzV_vp|n}mWDnHZ@7#Jt1o^CAGI4DE zf?jc}We4gBGbPXFcdyu0)MJJM$uPGjUkN#5jUBi~^KPVZhjbGyCTQqY@s;zvUZ{HQX{uVc(+~ zCflh-_#T) zc8fk;u|I?cP^lP%Z<9Ng@*_hc|DOmj|0m~w7p|tuV8j1iUn^$osMpiG59Z(`j`Cye z-csaojpv$%q}vR{FrSAGd;Ww~j{&t@mTd!y&@ z^cn^?C#@j-fc~Q(dSjt*Qzu1$?46_Wy(j=5Ndufvm$BoAx2nyM8Kfg)A6+>EO~5CI zFQZ0d;xtI16^DTHmrXg5NQ=jv*kIu~KzZ(uOHpdU}vN$PFiiOZkR&XB{AF z@ZQ)*xuFy8DbpZ=S*ks)mS0tkFq41(_Rs@$oW@;*>5mVo$9Fa8hpfXnFl1*`qS7wC zF&yO1`9)zmcCcXvyUEf_81`(KxvLvRd(t4LD4*jwFt3yTBxW=9_TwU&0@T*q6 zj~*!?iV;eEc!JUxdZrf3wiO0W&11q6nHF zvV^3ApD)=AWj|>am!O7tp}jItKdAH0&I*R=5f*%Q$n#u=lcm~u(b0=}*!HL5=Z`k0 zF|BOj``IIR)Cs*i;1JbdwQ+x&8A3$WN68hGvxxD9Qeqm4w(Rt`4ng7P;B;xTx@ zsD2i289-|TBe2}RDV|C23h0hn26?B=AZENfd3_ayOIg+1$Un7h2c8E?q)IFeI#ZuP z4#A}IZlKXDvynq_MN=*`7xH^@R<1dDbP%*0tH*H*##AxpC0X_GpWGgrE+cjs<#A>7 zRI9HkZ9->7I(R+je4A*Qa>Yg8;Xi4VPXziOXWz0H;e#CWtSW0&CML?paNX`|^RPP* zO8MIWqC#;A`=@r*7f7~I>3a0)n&o&qtUB;bq%bA;mX=Q!Y7o+yD0W{?X^N=oh!vi)k z%&_-CD*iOHZuLh!61LK+6%J4e#eU~-_sPhP7D8J({rCML&{x)wf%oTSy-!A%p>VIE ze4IlkUgBZhe2V>S4Gd%!d43e>n_ti%Vopn(AcOc8E zQJgs?1rEfS?U;9;OS+Wc=pY)U-Fs+;(`Hg1B-_0kP7Q6~>w&mDSe5J^gs42v$v!xN2ib35Bg^u=S(#q{S1ltI9L)Y?5GWEh zq358YyzAcrrpyz)jZV6|a2>{p%r^_WXeQ!gsM1*q7RE}i)LrBonr;~1Php6yV8<~s z1u#b_^6`n#js$$VIfgG9ZSAW<-7$7s8)>3Jp@ob>N`0ryEN^4(2ur_`3-WK0sTihBtPv*u z>dW)HpZ!>4_SaC}?N>Bv9%IHW$KZvoY|BA+#FW~)e0z^~(yloG`tBa|@5ih@f$hdy z>Pm&}UpsvgwnLH8E15!NaXb%PMrK;nzJ>P#;m!Lq60t&3%G?A`TS2K_+iNnaukN;> z+4!0Wes|EZ659WhYhiKzthjR;302>3!y}Ao;aTw_Fg$EC>Mxof*nYs6yl|CrfGJRH zYgk?^wN_N-*jUY-d)vpg)brBlnX8Zh?Sh&QF zD)o_~-pLXa*fCFvE0hY@7+UVXZy+yx;--*R$)p`RIwiHD!V@@FFLJ(5iXh@WB}h(d@dbLJ6KuD-{1yF==(F@j_QFY5T;+(2+G3KTI5f4lg9NQmvXTK{U zf3r^>Z0(1Fg_&;IDSbIZ_&} zbJj6&-J+%!FeQl!BmV~eCudJi)oP7lKvnK;gyb|D2C4dsQ4lTb0|L^Iz%k=_t~q?C zjwW%tFoyq~e^MAruyJU@E}NKa?rIL|v9)F2yrCq@S+~dpugt9a=%=c+oEH7bzq|w@Q zg%bM5F%&j1d;qM#R~!K$WJxx>xyQlsB5&Uf^p6;cifpIHk2GK+VE ze^?=idnj8)#q@lmdAlVnOkbuxfJozAqG9kQkTNV-^BIOv1bG270 zOMX>;guNB&KLOzfc%=2pA+!z9@P9imSNcolAO*A&9nNJlw#3h?VE5CArGM1dJbT&V#Y4{}eLS`9nr(h2OQa+%^ZxrZK>_dID_z8_1sp3yfwP0&3 zCB|j7zmL8oqbRb75s`)N`hIC9?lH2;bv0Om<8mi?iqsc3Tjyf>p%c|%KD#3Y$?C6AdisDLxK4bd)$x_0jY69#+qODKL%}?4Sxo06bXN-9sH(jo^*}tjdFLS zxw`3<&QEj&+MT( zqrc`!-bHa|^WA4|r@J3nqoiNE894R_E*&j5`fq=n0)w=WXo=ib zUQ6S7l2?*dbNbxMQbed826<#Zzxyo{1V9vq9?GKxml`ONNl~E}Ik}V;&SBpXP<+d) zpZ}Goz)MHHUD>Wm%TR2yLXG?*G5T_b93Ip%FePgYXc$iP=tBflqOHyBRs1mGmqh?rBv!he=@1#!(fz;GIzu<_dYOHXI?%fshCluCWpgv zys~7Ky}LZbFxb*4twwO&6Yl&#l9cf&*M#_wRpd(Oswgf_tMkj(sVXU86i7 zj{)zq(|pp(oaIY;r{0r<;yAfsDfdMQrM~(g(b_g^L_jnN*<4NOD%*A6GIGBq%*wK8 zLj$$UxVZ6RjeZ|;;+)5Wjc_O?TFF^as_5gTol-G9s2*vCpjN>Ur`QT@XR*TdPlYj1 zMZ)7mXIQsngI2^RIv(N^tO@gI-VV9fmwN8XuDJcVW9FVyKx7qhHQZE$L6mdvj@}Ub znuC}3rOITpNB{$)+n2AtH#o#V*G$g8^|dN?UKJsNC}W#qSBWYgIo9&31%uk3PpT3D z@{nUMdAMn?S_D~Dt;moV>wk7y4x>KEfkPSL=y(ho8vuAGG6jmW zWqF-up0-#kTeD3;-6gIkWK%U4yu(% zfWms* zDr||(<6j!s7RgcdW!&jMYEHc|dJOhnYm$7n8PdWuJe50&Gx;WK3?lg_tL=h%3i^p& zDUR7<6{Jk(Or@J*>mFz5A=RWB(_;1_Hs_p)ZbI+-gQGcg9<{>mrDJ{W%xS8eiWKqe zkkBD@gcL%I+zYFHtAl=*GxkD5gO=wzVYAeC#_*;H#O$b_vu0OorUzFb2%u+m{dG?Gep2Y;dyt+3=ZdcNj|qQR4Go2su^l2A)`yvF z^XSA)MihN+OB=2Yw!O#9^vZ3ktPk~D4GLa_v4^WAYgk9;G0DrOL6@tu8p?(}+ohM{ zLpt~lOiBE~je)?e0vtDqW7YT47)rxo_q($7f$rSm~F9N80y-Rsg? zjePXX;jJK%`Tc&KJ_=M>O{5yoSMg^V3_L|4@&qqB;g=z^$c;=RiCkx!@yA4*wqzHc zun^~zX7zA=MpaN-oqLMF9(Ef4;8Fd6@`pB6BqdksVGm45Z$m_@+025 zAXQID>$pvwQbuAB=>&#`?X>Ij46)1s1=quk*n!=Eh%s3(2wO>GXgb z!t_(Z4X*%NLMX{&nES4(cKxgw%L4$HQuI7QZ8@EUa{$Y3bo|vApsb-cEziMXSzUJXvv|!n{N8R zxv!zZ^C}fh7+&&~8X;q?W8u?OZQR(YfU5R0dj9}z&m4nRgf!mYNytsk@+22#hG8>(b8o5!17y}M3;|N)kWwi2Tnt|h4J&&2O6)Z<+KNBp0-PQ zdk5^ko=}BLtYyp4Rv{3~(u)fA&fvj$EI=VRb&t0CLbC&=PohWvx@F?qKzzcoEuFB9pCEe!{1hX zSk*7sLZ%I2Altxlw?igq>}S&xu)3D@Ql_Hl`h<^RKgNoZut*v4q^(Pe0H?ZWT-e?v zo}Xp;+cP~3>5u1heFJ81(^zeu$lC^l3ZkkF5uAQ9K&fys(vFy2rQM$|l_q~yO;%Yh zXlQT0V(-r0BcmDrm2A-&%?(d&)z|b&c_cOUK@SE}G;DM+JmUuk^w58HLx}uoE!6@e z9k7kpLI_5>)+tk$F*iQTNNERVeuD1CA4r^)bhPdfh&23=UQPPh_ZTWt(o)D{cABJ5 z$}_NjL7Q+n-O5CiR^cZS37G2XCn|6Dw|#TU;I1U*gZY}ET8SabSN*e%yBPF@#ffHleDO={gR z#Fm^RcweU?S)-yUNWq9uAehO9ut=Mq*L-dI>gRwV^wlbdAlmoew1AX)GD8ISRqYQh zLciRNK%69;2ARtoQy8O|dU(FjA1g8F0m&@yGTf8>7qCb}JMh&tPY$1)`?Nu(R)c$l zh5(c7!uIY*Mv2(Jg;&<1V3kn+%0-6}v~Ei2Q4Hq4|eu%WS;kIo_kx zY#ZJ+N^5afmf>_Bn;3)qi%(FVrAuv8r~x495s&B{Z}1fwnET9_kCm-;uF~wdDY!3= z?kJoauG(&4_oC-9GECllX|w(oDrQ_byLr+m8@C%5nPcqICr0-Vtck6oky71-p2016~^B2$Wk=Be20Z z7)d*d)^$l*xuaLC{FkW{GqoKEoy1c3MCe%c;4R0{z;yyZ*(5&I+8I6(!C6D`AJv>2djWc2iDqDlFlPlz0{PpM;ICt3+PgoVB4UKQv0 zLcscP&hJ`;ru~hv$hWCCze^|X+l0cuwboxCT<}|O?Ou0TD$LWTP+vrDTDzSf}PLzie~@EB$A zI=`AYSXA&)xrbO$(T-zjpkS}5JEkOND=Y~-GXL8XN=#>Cl+CbcZM&2M)@O_AeZC-N z8u+P>^Ndr^ilp}hx;V|6cu6=Y6a&~KML%Cb|LFM_!0oQ(gIW& z&*JEHqmArQjmD?mqz4+fV{05F_KICrRQ3{?foINtNtF;+`qpZ4!fY^#m{H6N3R=0r zkXQ?!6x3Ei^62iuQZSjm_dA1w-1f-;GKSNa57`-P>`41^QT!fhh3c|CEXj{SbQf?f zgYV2NPaR6Xe~e-Mgl2>INmVMvyFBbH$f72GrR*7WsE#RZi)~_$nnA4-u$}-+c2eWy z{o^@Rf!GXp@t_)bPBrQY#;|bhG7e9IVV`gx_$u<{5l`VSftfqC8=pr?3p_mr$FN5k zUungbYxo4;y^AY`Ry&Z0O;@BF&1fI$Zb*O1sGqKN5`bW-o8`$rb9!~j=syhmpx)6O zyr_&@X>}@9MircPMCq^3hla3cFC-7r&%G9fbw2fmB}ROWG_{=4?1rp_DI8)jq7zIM zDnD_tLWNPy5@5l$hlgsc`oE=yP?buR){pozVyOZUr0)UaIzoq6);WkoYj3WAJbw=?uS`SqYbvz5G6AUJ0@Qn1{<6$msjCLsdsn z97^=_0rf3=q0QnC4zYWwG38+8pg~RIC573l@4^{14>~8--Do_+Gq}xd^k{m`KTYkc zcn_f^Jhr#{DG**DOfrPeGu0O+(qtQ;Z+{&s2J#2RHaXF zR*qGS*d57Sxv7}Jx)H7L+Q)KlrfaQY^e8MQS+(Uw-FGjDx~Cx`@o&u*VJ-LV{n0ZS zYrObZJI46>h`byEk0?`Ai3|lakh6H=W)W8&J<;f_)qCGMigtro zuRAf(mdEERb(9REa`O)-G*t`%C~ErPZQt=jnR7Ig1k}qo%wZI&dG_R%`H!M*G{a*( ztj)GWrf@-^l|pL6VXwK+pp}vtMl8BxJc(2lmAtI(p zum&@8OGZ`v%dqLK2U~cbkxYFQRrUEZi_Ai9DY1T?VU7jfC(?$m6EO$OAOrA-MJW#p zlH`^5fSsB7fU=zO8;OChQ0A4*kNNg*1NZ~yM%p9kn|uVD?KJA2QY;$L*NUZ_L&*&&1&NO)%<%NH}M^ zV;fE%OP(DLfPjLhh%>?~d6Oc6$9>KJHOysWqlT$FAWV_G5qISqu%{6YVyfq5aYA^v z)T7p8upZBZ`B7ar`6GgXhyP^G%eIeVTjQM|XxtEuwC;%$Vt!=2I+}fz!epmo&*{fk zBvD3GOKt%M;KND0B7x5n5G6erE$XaO8M(=XW$$&*Y3#|Jqy+#P)fbr+Z?X?DM>n5o zc*%1l29sMg7;lf0US6g0L0T*AAEAP3k_}2njTWt#TP{X8nO@bUC&BK%LfeP`KyTJd z*Em9Y-qD{sX4#u=Ujp{tsVAB(qfMI*R3{fHK zTmk6}F9y^bNc;Srw(__ZpL3CE45tt|E9uODa$i=j!QtpU9jJq+;ZK7yjdM55U`ScEpIi!C;U?KSp9FZSxjqA3G<1Ut5-*g8}BX%+JprnH>)bL(9@AG7y`nL9ztuIn`w2+1))|h-^K^}h zU(=Q)iB2x%^vi0yhenafW~yxQWkmW@W9MZ(klda1liqAiPFb`NOWw%>(^>e%9NY8; z?qpi?^xKB2%0VIYtgLBb{{k%ZP80}THm63$=|cMjjrI2ly%T{ld=+d-C?kA00O1@I z`2pLd{348E?PI!ORTfnUrFeU;1ef@|`>&ybkeE~EDz^|jUj7l;<`Ad>4p z1kZQ!=aPuLl%zupT%+|BP(0W%Vp=svlwF(!qKK*YwH+u3P3kM2lLMxp3+r`p*@K1!G22zo=pW*E=M6`uDIq_o zAbb-t)rLU31~hvYSI&^gqBJHTP+TU~{2cAKvDu=SehnAyQvNqdA|aYl%yWp?Jwfp(Ia<^5l0EJh?k_ZbanMHf znm`s9H|?iRQhRoF9tEk^U%PeMmaQ2`R%!kqIbW5{f|IYr(#2nJ+1d)sN_LLv)wmF? zf?xQCcl`z7{jsGEULTW4bRSlgZ(6X+(@c-~2;RXXMmi!Uhi9H*m+0~ZUpM&vKCP*h zwXL|tQYwdkThYnbo1$F4(%-j%)H!OLpWe*b9AcsPzCl`5yrty1kci0Jscn;#+Vou8 zbSu>2Q-&UcGNQAoZ9iYf#Uh1Ev&PT=M9F8;M3++v^}><^m&MB&Tk;F$D|QL~fm&Ht zgk)*i0@E-HrSTWlgV{t`{DH=KWTd&a#bpyMfSdz7aH! z64Q-RQK?Uoq8|`e?F&6BlDioXne(8h9A2kk%OGeygLi)(ScQ>~eUirgnwCjhC0@`T zTGTS5bw2O_;HNkxTBKA0?v+TOU#H?2x{iG-)%GNsXB<6Ow*5to>pSk}aJ1?1NWCc;>sE}vE}ityj2HZ3;H zTF;}l``y_>ElGo*drQF9ruLjynzINfk+!~*v*x@Lzav3-qV!HG$4&$=|LEZo^+2^} zd++J(eHy#)@sT&|z`#p0SO^<_P+VjpJuJKIZc#yf!0u;>o~K2=zG(j{_WFyQ3Puji zwUa&%iiFVbr)A+$uG)2dY67mM@CcT$ZpOnEB2zi5B^a~@d?_t8 zORTndvmz_}<;F-hm|ie9MQ3fEK;JU0~BzeG@Rxnv0@W#h@dNrv~|!z|XS_P4NQ(COacn9b{^jJC{Wz3@)r zGQ}T-nFh7)>4$B|39fLES2821+FJLiDm=(8n)^A8BcITYB;^nMU5zAggl$Gz|F&52 z^Os|{*uJDhj$Oll9%h=gHbD8anb}_(dM16Yf<5T~0FPd#vb{sCxws$;f&sWM#>j4MUghL5X6Ox!FZ9+-oBVLx>XHo* z85ga_#-p)k8rFs#ba8W>jefe{yC}7!CTTV8pMI45c2O=>-rU7UMzT*i$dKf#Cjl~J zA1WMFO--;zivzHG;Y_ZZRiq>xOKm{UAYb%2;@R_6*-7{h9i;+u4e7f4WDzYi%NfMD zE^BeWp_nVQT5GOh2Q_ivt;jxdYB-2`#Ei@zI?6V1?3C=zVkY~^3$AQ3 zt8dcjy1oL41X|ZC%c&857d+0(`i*whp8VVvt@u^;5s}ajzdDquv_|h?izO^blb~cZ zG+!SV6lco`UgG6KV+e22j~2O+%cy4XC2l{kPd>eA+*Nu|ciVkXjMx@>x5~C)upS<5 zKqJIi9Nr?tl7&=(`1pzt?)mr4dJCcz054*icyX(X))RA~KyGd6x8(sN^?o9o2SOd| zSIA7Fc0cKxC&WSyY+-(pR^r>{%WgdAs&hPL`}S}n)BjH~<=Ldg=YDu%F>Rj=Gh2K>D2!q*uK&H(WI>UcB&c|0k>DdPa=^ae%uQEsUFnQZNq?{}~BYKm&`)iRV#YA=*EG2>2uam&+OdBPXJk zL(uv~N+U{a3cL`+ZId72J?C0ET9SADS2woH90)5J=(hu3`Ui#QM(_Nq!hN*)q<%f} zP&BN_z&O4~lWB^_I$ezL?pDVGz^%mO3Dm`F^S#*vPj4at<%EXPky%eY&4dz;`TqLU z%Yc`la{?N;!BavhUm1JT2pS$7I^-p^(LdTtSwTdij_glv{674(b6XCM-&_YZE&B_O z^T+woFXXnZM}zYmm!kfWzkg{G73FxZfMQEU9tqj(_cT-3e_;#T6Tt_UJ?DLDU)wz} z5@EyEy7(Q}q?F|I0GL|k`809SSv!{H#FbRBNKvb7PL$PE6NBZ2V!wMd(%&tSvU^LU zyL>ycD1bbY0#rqA2@)YZeMxbJu9ZdO~+Z8#wjS~)cOR8kC?!5 z#nlq^)4IWB9uJm6!=EM=XUkcDQmw(M z%Fov=cSiT!kDipa+>~yav*fERGp!^@&Lb7Jtbd>LK*_st(H&>f`ze1&RRb}P(tpG} zwWNgNpVBEqO01TKU8TkasD(#3Y!-^E6mHuM(a!cZUdA1?T$v@M98sL;vS!M5mTzZf zE6z2hC(N|F$bNDqPb&q$LZy#_Pn{aej$1kJ0s}cY`qF&)K+T_yi@$NY zC#f-G$RQ~28ow2gCzCTjS6#ZL4-Q*S9zB?T0IV%M(Kr#OGb!=|KB?_LyVLtQ7pbB=T^x81Sp3E{Axjt#Bn0v(h<|L|8 zX3xv}3L*Flu(yAb4-oTmLY$I(=lodiaDY8mf_zIb)D%DC-w{aC_wCRu-^0k9R)_KS3K(=>O7uVJ^@xQIz84NL|L z00|g5d*}8IO2Q_n^-$%JFxWK>7H`tL?6etXv{>LF0c7$3V2FI%D=fLu=hDhdJ281Q zDTo3Cim}0Lv)`zt*#3~t93@u^k7DZ+IbYs~GklbL55Qdo69!`}E2L(#Be19#T6!-kw zogV+4Y^JBAva;<+@zD#(;|uASe}p*s%HoqtE zHwq)}YPSj>xWiDBd}Y5cuj<@94tXP5589?%^KzeuL8!A(AGiQQ9hm{21$Gu0ntSWY zmyJoRfq|~l;B~4C*wRE3!2(218kj$ET!nM%0Jf;&22*IjU*X)Y0N>dqpwLA{%lKvyeMIow#-QwEaRE4OuHvG>l`4l zqu7lVFAXaWn%5qLwJ~n}^zCPmU0;+D21t+DaCaTH0I&m=!v&|KJT@|QXUnfaddj~xeP}n?IV2f<@;@ewcr%0c=S`|2Kcjf(kV>=Wo63>v%!4uY_ zqU$liojJMVbD|-R^^_jZM-(wVauIeasVC%_?NO5_0ctmExv!qEQ)WK>;PH-$?fX)u zQ3C!K0@p0Ih}hQ29xCX4NJ)0Eh9!aytc)kVf^G0TaLmO;>1XJY)fV@E(q@@-oB7ba zTYI>{V3mw~b_^XVwSxzZJ>qv`Blox1=-={VJT6?^1$TsZKC5h{^Y%8F14LQtt*gN`Y+YVeB3qq?a+X5S|LTFghJ9R-Nf zl9*6{{z@BmdZy$9%{rT&_XjzRxG{wBBIDBm)TSymU`?;+kkE;4VZOlE`2g$jUkVl6 z-Y2F~hp5i5B6OeNe|r{krtbMa4CohNz^%MoV5%qshD6P?|Ib6BW;4X~{nbsX5YsUT zy;Z-$CsOj~14#e1c>>aZEemj%2=;1>uG;aQd%ee7J~9^Wg>k)sxc(b6!nIZQxH``N zCp#aqvclyZ8tZ#>{!9<-G7M}sxy098yJhF)nNZtm%4*s|}C z)_dDoUIkbAD)N;-$2MW$bd3zsamj-mfje)4o)EL7s<`!yMF&I^Hh5N2uy8ej_2~`icANgo4jB^Nz zaaQZiPt*gFS6N?%N#2~S2<~gffT!~r&1%Y>I+jgjI5TW!c=0M_&~P(Bm0FSypyuft z;L_e!ue6$>^f_++tA8QmfF|6Cu7)QjWyNv;m$2R{V`4@GSRs88R;krVC%-Q{fV<$T zMVgD`s1I4#Jw~}b**+IXz>ErDa~EgxkKJIgC?rTO{@ov0Ci_cQls|!`vWPT(YqO(E zY>|e>$07!~3H3|a*VSm7(#)ZWHgYXYhl%~8)Jw&}iLsYzbdy#Tv7xqV!qv&*UahR=snmq6Lv6V7#c?M#9$$*pT#ue?CnQf$8zg%izsVsx48Zu|@t{%i>Wx$;gZGzX zza!<0q}9qq4&*Xg0L^TaQ*Cp^e5gT}CFwZ3g!TS?$yn5*e=LH*6??g;%yC4vHvLtB z&}8K-qpVLFKDYzgsvNTR@0$|LR*Qe)b9Fe@K}9wNRu%^P)$JOK-f^8@z#tfq3#K$n zDl`PC-6SI2Sx14g2tHQ<^CYB^iX9B`GD0{_gZOI$F2}lT^35()@U|(-y%{c%zLF$3Xpi1txeqV)1YDnLfSlHkIYa3f6Gc>G!hQHCF6ty~&{wIBYk))$)i|f6j7)A&Ow-%!sNxv{+`^(3uT=R&$ zyIaejF-M^{HRXlb%M^3yeEda$+O>Y)npxuS{>9MAy?A!lHGxjx35jPM1ak>W%D^Dhh9m;X%e9wqN@k-)sX^ZW1Ayt@>{Ole7jy;-@@fPF3 zlqVJ765O7#i~ZNF-E#YK770Gy0*v%NRfH=^@Da|jBW@0DF^e-`9wV!pL}b$|pbGg= zUzavHRgf;=mqhyYN*lmPk14~U5wrD7(=gPhG;$C4(Gz|ej%Y^9@W`K$d+^zs>Mtpg zii6VEnIpz?E`NSN?e22|71?jOsk6U}Mz#6gE)}l;>z=hW%+I)(nDDXcP3_)RP+iD^ zvGaTd=d}(#uDVKEA5nYJX&|b$`7Lm#RMe$chgykQGyoWJ>A6KE!w_o?_()R=kR*-ML$|H0jPgyE5?5OEBhGJ^VcS*TQ^4FC(URb zmtF|dQ)q31f~}oS_M{axHvQ+fFE&BaZ`J3L3*)I?S6~8mHJZN zSO^hQW}Q0oFO5)sJhl)*Ae~F3D_7he#67cZ)#D(B$g>QvSs8gX{S}hw-L+kkT^93S z0Y{okpHX6YOY`|pa1AE5uqOfmPXV(1ulGZ4m{_fQi|IfCjC#9PA-(oSCQKXb zkgi8gp1%xtpbTJzkm3(^fO$-7%F@L~Ddbi=h#tu1TKYFVu;$Qa1w}PU#QM$kCm_Hn zSFoJgav5PvW;LxLxHlMI#@;zmUW~P$kKYS|NHngY)~>XYFvu5<+v5|*{%b)D2;tt;uVC2x+^Kq- ztBv|EEgm22X5Zjd_58Vy4ir^` z6b2%+8U7hin4q#w6UMd0k}bf8jKrYi=Hp5xCvkX(gvBJA019#>AX|PJhl}8Zw7`VP^mDys+d@Oh;-oh0fK1we; zBh8r29^l|0U@Us2+=*Kq@7>s$^I{20x+1bN=C4CPoEm~W#ePN@%s3aiLGj*m6Wr9R z8OSL1E~s`A$KN@z;tPc>&Al@bWd7H&&xe-z63vZgBMdbd3Yl=1s~Ddb4Q?7+FBmIQ zNUap=XyAxHoxJ<(eb2b(j61&Z@vD)pZmO%+dgh#uuvOKuRV>iQ8&XH1 z0j&$@_J5nP+Yk^pf~z_2JMRuUcJ=Qxj;S)_gjZaz>i! zidTUm+==N@dpSPmt3%re5F>HYx1G(|w)(PVDm^2Nk;qc%U6P4y{o9m51tK5N+KuZ! zz85uwC4w(BE$ad2|BAT)GBX;WeahT_KNTh}5FjZuwVaRU?2H@Qr8=Q$dro?$s;Lvs z#^cm&gvAf_p?!;O2F?7U{*`;T%L{~VXKdUz=qT@;t;LXAkfy5XC!8Y_lv8UH++TzP zwFbeEVFpo^H4%nR=?!z?$L%!o#JHWU=Z$-oaV&_Q^!z(;zXop z{Sin2S3-{$DvXiuPaaaq{fifgfVT^Qw_)oa-f%_<@zgO8VqnMqW5U=H!)D#BI!ylnrFCjey$ggkNjm>>wa zQT-WNtWU}0Z5RK#V>)SO!BCLMmPn4 zu2yf$VGg2-mw)#rsdcUu+P5loiS!^~Q(idCK62B-cN0sg29oE?`TJ-ymEMD1W3M|C ztG}<~H>~2EE};eH;mEp=fHYn|=|BkvdQr5I10FlTuL41}*DH3E(w&}~+LXNMV`}rY z_!Z|{J5qiut7}YP%JUzT&oJ`hX24GaH-d1pmw~K@CPQ5pY}8#?I2Amri0gAFE8C_- zRvG4sm^SP z0fnniPtCfnnDC!%1K}mWpVQai?*^|6w-lQY`p<|0PH|!U!YBrrQ{tHGPS&-GSf4(0 zvcxh1%#0!bC-9?NY$qup3a8E@m(ZmJ*c8)CYgXpdPB(>sIs3-6=}+`S>&k3Szz%{0 z0sZ6tr|PU>z~F0wb;F-5(7}+--pvY#ulrc!$Dz~ZNWmvFq8-enGX#U>%L?Pm%0zE6 zoUrIYxd}hK(3zO9s_+F&bSxbSXdag1_mO|q8} zYFxg*YvMUs8%ODIepRv0bJ!FF>c_n98xU|s)+c8je9jvvrk*m5P6GCRh*o%Sm>}Dp zU~bOeLSB&60ocXcMe7}NHf0$NH#YV=SLgwQ%5lxmmCzq=!2{e}0PT7|Xu~_WqTsk> zxTj`Zk~p&QF4iy=PiS6Y=!K&Y!j;-(uY=qyncIqo?LH4gQ!+mdkU^m%BK?f5xFkic zr11JIX1FHK2Lz+r4GQjRMj}eie*Oowm`Od;J_uV?aHY4b-)B4SO z{l-NX3RAp6qJ89hL;cx!!&aW}+;N{_Yg~p_N zEmaxxijhIf;QJqDBj-11fSRRh(RLh8Jye?AcY5bQBRJb8Cgx<5+O)ZNbj{eAop9hl z%Yg_hu##BQ;t^=`6)+KGET)}y@CpFt>)3BsZBk@-L|ij)(KxjX68~}>n2e>)^h1G> zMW!AByuQqu5fWr%QMtt-5AZz&f~0tZAn9QPL^|X}tX1^Dz5eTLWMH=ys~o#${d(y8 zkjn9`B|l6h;is&SI7;sj^+A2&8Gs*BNypgA>72`|qQ5;t#NA&e*ntK7=K!fz`uoe; zX3t2@flOmM02W29Q-WmbRqCZ1kEOTr=FuDmb;@74?TvPWN$Yu<-Tyb$N-X8d7-w^? zfTn4W#Y}Ag&5CYCDmt^HUKViMhhA;{uiO0#Anz|-%J~-yWZ&mA2DbQa+JJkH0!Z-h zr&T;L5~lubz#UzT1aZqANS~nyh5NU>1@dj}pAeS+Z?XaqxPt=043${oH-y2c1+!v!E{ttHn z|MNFzmW;sW{d>pQz+=$3fTIz}0yN!|$hpZ8!(ld^W(b22> z{}!tZ#7zjvz%>uyrenYW$_`6Kc3TqE9ELh{W}-OlTfl=<)9s0WSZE;ceTQb^M@sdd zz$o*t^?5s5l;2-0fPXNI+6vW7OE@0MfrZ@zI0SviDnZ3(Ci%l+2nEU+V^}7_sg#Op zLjzc-tk17~T6}k?DmDI_oyS-j#SQuNv1)%(tDdRNdlY4a7h zH?g|H))XUkS5=DSa^xc-KY*(2U~5WdS&!-WYhBw%FN>$o2oWhlDjONtpGm?lXq@Es zPogu!R}*&h6jPYz(V-1;YvGEQ=?fq3ercR%01~FVgfvpPJEj7wN|WTfs}1`9mvq%| zTZ4|P$k1gOiryZB4SwCGyIWh*n>tX3xNCLG<*#m4tG`Lk9B|DjOQA#Z#qCiv`Y<~bFE{Nb&2xjC{=i)^~7UO4yQH=%gdsPI8~DdaRWM*-2o zNVj>ZmpS(|Y9;7^=EE>4BmNo=q9=v;WZ0~`lK`&xv?iSO0pv09m zBL0=QWW7HAiQW6W`!R*li>A&<3_#TMV5ie>_n8UaI1##HoK#b5d!O*vD!m4q>7zB? zweKK-u5vo%;pZ}0N{B}o;cim@>ex0_q22AIDMsEWSlYxr>}bUQMqF@_4B`UwZVpz3 z%L!e`3Y4--zQGDr(FW>%y^WjDpJjla8!*O=ZdyT1FWs{F(*Q_828GUdR@f>igCum` zWitMQ4N?+yQ2*BcrYJg5uZYNf<@ZhX_(mo;ff)efb3UREjEPA~hVs3V$Y3pBjkHR2=oo9zsmxxg0{e{gaSYyQ9JDyGl4#W7c5V@E@SOI z56DLj4ZhJo0g3DGlmrBwUxP|tGaXfrN%nRTU#|~rqlVV-hhgz+=$wqQDTiNvmI?o_ zX#+JxGD2gTODsjeXBf<3yB4ZqYTbjTNATp{Talbk`{X1E!3=~c9pu?qO>6?cb~618 ze_e+rQ|4dUR{9MH5fJCbk^Xd$3~34I{R^#Dv!9%b{Mn}J% zBx|ge>E|I5Huu%!bryXRkIB(xint_ipw0&@-#e*|XTewE6&2BTlRr^=O%pFBh7Yi# z@ql9Eh?SULU?v{(fgMF_!o?;PPr6lkX%zDs?{pTT z9m!?q6?y*-7%=d@$IIH}FWfcm*eA@!@3k}e(?dW56eLQ{S8}uJfZaR=h*&Drdq12x z3P5@Q^C6zJwfx1THIkeFva~&m zUsl^v+aR^kN(AU~&GVU-j_qCCSdBjl>dtM`|H&WTb9`^47w;`hj6k>Ob=qs3Ykf7g z7coBkZgk^uV)hrnH`&MfTCNFNdR3KGbof^JhTix@gdSo({$b0+I|N9V16)S)AMe8R zA!-rBy5?$WCcqA4>x$XU*eqAjD(BUPR+oWKJ^o)9!TkJZvLG--tkJ|E*?D|^)y~%n zQD#gJv+O`LBh@H>G$YL5T)`{$#3k8ZwIqR*`i>tET^747KY10l_2=-7H0Ag4zRJ7_ z+mrlq{wwLjY(~qk9CbEKCIgr^@u+8lH4sYF@_^pYvxoclJN;?cAJy@5 zo#ymJ$TWb212DSSh!cByv*MYAEk?rne*qr+sDL`|TveqFZLNmT8YlOyUO8&~Rv8&n z=tc-9D$WruZq-+bO4z2y>De_AE{hmWqEM%FV9$i`7IGO3^ttRa#-{S{AEC~un6G;5 zN+UF`&%hLNM&2=SM@Aw@dU7JR3ESF%s^m$kd75D+oijs%-Ykyci}WbUubb#7XPc?G z0}1j(w3}@B$sp9n_G2nWobDy!Kl%=~3yBr(`nYmy3}&scAiqeH<-AMkS^&+<#oGmu zO}y{FmwGrm(`o%sGrpX3bBJHGGF{a6Xj~Vp1$Uw)o0APQj5ni;&N5K-PW3t((;AK7 zofqFT&N##*1A}Dzo<6)=-b*Eq>YF)N=MhK7^qwy^xm{Af-uHc~%$H{remo!M% zw8D1#l7Lm|KLV4nn^Fbo-{~oZEs8qHZO_qX*9iJ^hH~LUS&ixbsrqv?^a!JHo!IWZRUQq1&er3E7f2A;}QF6#*1M@C5LiGPLjKn z7V%*U(+n{4ME~lSrl8#drO{1-o)J!77Ai7mAA}!z4qxQ2G?7@pV=th(n}Yh?l7;^m zi|r`KwsnRBt$xGa6LH;tgSvA+MaAIm-R{xcKvOZ}|ZWj>F4d90PHT#SpGoHeZ0U3?9xVBElmn?p1>bDX0jTxeFRa_wF1$1!!4n;W8Ye=zDW-poV5_t`DRfERmLBzJo_vPHeU=A2u2~$8fIFY1t(2U9Zp2NelAiaq-B~4>|#4L(k~sKhmyXPZ#hq7|MJYR z10H)=DnXw2bKU8nyoB@QtG$wqpax?+_K%%29(Iaq83Jn4`jg9?lMjzs;QZod;jaQt zUw0psoSw!n^|C-AxDLu>-lbAUD#>r_+=M)5<4H0&fBL`=uZXh7FTST4co{W0%#t%@ z38tviI-Y$QXus72O~K`-fQQ$sjnaDBKp^xgdPJMA46ai=)y89NKd(tPgpHVZqAg!Z z$91kq!oH<$%|PeyM+p3n({3J&Xd$;ftObPw4r}eC>H1eWV+(kZie%0wS>zEyTxhB4 z{y}6L)b_DiopQ%m%;Ug3dJ%;H zFHv+Dps38R(Ph{{;BJ5Rr8sx-h#FIPWF*V$*Vu*L)OM$&iMhuX`ci&M$QKmk(DhmE zDKd=;?U;?qDxx%X`8U4__uR?!zT3h|+F`+Z2X1mJ%2>4XD_q7rTVKoia2|S4VY`xcP;(Hh84pG(#vcy2Y|VLRzbUohTF`ltoe$ zc-?DxHD`IeD$V${A@`;NJF@*LX`=A5nrMB)n6nFzFa!ub& zSeT-dvtRK_JrGD{XbU{TqxldQ7A7=Kb>wM`<+2avd>Pn-mFdmFR6FZJrYIwdAD`i% z>9f<+>vDeE25mT1%adMmk@=ZGD`{~7r;4I$O!?Si851cW`nuIwiP8Lp5LXRa34Bnp zCF78qB&D9U#D^{MyWnaSuNm-`GHuOWXYsFW2{%zLYi|h|*8(F(GNJFk2b~erL!KwF z+9egvku%GNtNQb42g6Fn*12I1UY4L58O1X-VJ^Fq)8{vZ6zLDYE!T(MTsbU zfk_f)tqQH>eO`w%V8?oxwfZ`6H{DH!4?V1`)aX!$OIBfO`nG?bp{bQ*iujL&}m0U*c?gSifJPGOtf^L zwLLsyzOO#~f$=~o&f{zCML;^#_&Dq*8i zIM@gEU(`Z0t-)4zf=6n3?wNI7P`YGzePtGfmlxF1=I7n+NHN=!m9k$0T+_zDsvZ>+ z0%8$ia7iybI?!ab2k&6xc~SyCB+v}2>y+9##F}jC3u&bd~ti`jIk-|=buiF zK!KGC5i*R3HoRQm(QY*-D`_Q){3%mLJV>Iwzr>U29{LT0L|KclTN(M1nyb-gfWJ`w z{V&%-D~W_243;fT1SwV6_# z{Tu>F%yrx2HtS{=`Ex~6DDWh{K;~uOuXG#z3%m<7~=sPN(V`|#T3ugMQ|)eUmF`4;^Hb={p<%Qs%PEcHAXmGb6E zc_z5uVMaB352+aE&}V;%J3G`We@yCed8bKC_*q7~-cs7S6+|84zJhzO0-xRu9k!X1Rx|O^=wuVLDO3Vp-Bd`ni>d*}=h6LdKus*goe)tN+nF z0gh6;DiWIfdyk{qSvo~ik6cWr%WM#n&WwES*EqQTE)b{f2wHl29=edxyyB1WvO}Uz z&~E@6eCt!%T-55tz9>yB3GI3np7Em-C+SQ<`8BHuQc-{eEA(C=`V$}k3&KfSoeE(o^GNb{Y@%=9W~}S+lZT}{4DcQHY{Jle zFtzed;3gwqjm@i)3GTUEjB%=)aCzN&6IwaZ@W@;)(47N&6~++=1zbi8qy<2=){&C4 zG5fxu z{zR;sK))&)5&IPO7?RvkuBVO{#KC^{D}HA6<2n`3zMp-A($;*t69(#BCGCE(33EKKy)m#1iSpnONiI!W`5L)ij;=wF?@Nm>hq(CzN7VKCH&^c@2CC6$xZI8+M!b;7wL$~PkykxS;Nv3 z>2WYvD8OnG?j|y1w~l1B6oL)Y9)KYnDxI6%_U28Oz&>~gFE}K)&Tm@GjQoT-Vu#{} z8wVJ!lD03sGH0{T z^~8r@ud7vn(l8TPY-B9XElqJGuChHQK?Ufu+zKV zxuzjTS(%5Ugk<}N@|Dv88d)I!5)~x^*;*$3x zzJe&P(a|dgrTh4TN$OSD6~U^|#$0A= z0ee>2U-6||uzNG-d$N&$NPF|)hjBQ0BYfM3(QJA1zTXA79!CfrdxgeMjZzBAdL|$w zvbuCeZ9gVdD7Ih_hR4npe3~vaIKuI6UXT^{SQ?ZtoE5R~B5sQ2@N#_Q zU|slEulN1xQPwK=OTuplh11t7{N!9M&aC!@BFbl@?dF{>eN1cUFG3izfuZjO6Cc=H z%FBcAJ?_t964p3>Lp5DpD)}K5_fnWu7jP;IxgPGj1_^07P%i8zM$(ir>QyvUK|&#f z$|zO?)gA&F($@ap9_Hp~u5rVJI_1nhcvfs@F@~CXV>Yirq`jLouN>M&;~eANpw0!t zDvoYtUJN4V25kOW3FnyIT{ri0-X zQYnPGN~fAO4PANgdPCqv>=0KW`;ItuNM>ks>FXWdk9Em-6$y(;9b z;-yeWhEaI_Yz=ep>9X-xL_`bQvhGC!xO4AhN;yS~mDk=|Q5BLAH42>j>0;^AMwrs% zHn`dS#O~v7L37n{+UmjVq))5pjMxDee~mVzzg8%B3N)ssRcQ_WnH40S9pp#O&*XUE zMONKy2VEf#7SbJ9_tZq~6EDx^EbRQQQ(+TQ{ zbLgwr-Xz1)?CFZ9>q!rYBU}U$?oZyM9#aj!#qlC&Q*0qHnG{t|)IL&>*(ib#=;yA@aU0^+folw<_ z?cJJIhYr^}#+kPvR!*r)yP;+=ARgQ;Sc2wit`kRtSF8=xQvC#a1PZrpdxevUD9Bwu z{Ty|r=OycZa8d;$OLM+a5qB&qLz;w@7qbVGk~(_i32Hbct}hd#Nc0oLaZr{;Ybh266v_1*I2m6=a@QcA z+4RbW{{ZgWQtG5V)wtxMd+JzsQjTDdm_Yr$Q(RDbC|WjuMe^9<^cU4C!&j9IGu#9VUB)%gS}ChNVgP41 zah|w>?(wI$T_M(j=en9R#jbHzyL$^Y(uw0cvBU;XkvL8PZc?V=AlY;5+;26~JkO6X zPWQGlRw_eVp-)p61gn`*r`%@(@ z4(HOD4scyPcm~-@w=(LPibLOet>En=T3gElpI;ZP3`XRf5QYTnJx0uzMS?|A1Qw*B ziL;gQNJjCymxlTQ7i94=A9KH;ml|%MCW+5*UJXeC5`eBypT40QX zoytt8@P2u(&`EbIuaV)Z*MHB!lir4F`sI@AUM>2PCztyW|Folpy?8_|9_FD>Ui4#y zpRDhAch+>cG+76GxZ-Pm=*)-@NXN-lW`X1JvntRAfVKX2U5Xqjwrv~7;XCDqN`Yu@CQJTC3F#_iT#W`_Qc&CK9Lwr1@o$E&8g;&oHb5Q_J`=aqLUzj$a7bPTNCkOifgU5D+~~r?7|& zulSnCyNDB84j?cbnmwA)tdijXb=-rvr?6DqW@u$L0h#1R^ohLUt5f38>(_qYe^8Rj zw7rpx*@6tRnPKA~+1-eSsQ<0@`!8sv_*LjL5Vl$LKSQhT<)~R%;gi#tHSX(k-7XUe zxAqIY{y18$=~^w|N7wD+T>gr_^X4=>g`JsXm>$Wlo$IciSW2%mPah^JM6@0%*iv*l zl7U^c8z!wfR3rg>h+s0B+iKc=nB&TKOh!H^NLTH_C>U)uu#qV2p=H+jS-XT0P?0pL z$jEWE;Ppjigh-FW8}WpFUnQ&+f-%h{xaW*o6rRL9zTRKlq!Q6|Q+i-0eVaH2G!f!Z zjy@rl8adw+n8^14K#PQ^1-{<+)ay94RCv(})i_|ZQK&|(l4RU6=UqR0$7-p!q^RHPpcJRRf1(od{0wp-Hly-v`omZiR+t zsEdWG_Hzc$Z)(Ibq1>$d6a?q@`_qLp&1 zat`i?m6AQeDaQFxpsn9Q5fpc#Ju^%X61Y}u<&J4rE z%&G)h^%Y-<9)G4Ghi^`n_zSTH?L#3RTD`fZc_T^)EiV4tb9g9 z-=QF+wMd_~C(lv?@(4Bg1g|#`$T6<<%`kh4L()ZG?4EW2&m{$1u!&B8N4yw;)((219Z>V4 zQ-WGUM%XqXs+?no;&`WrUx{S*lxNLqIu@TLQ(B8m&0`LkcFTOVftsUX-Y7=$ibx;; z4><@A-urUu%DQ#bD3Ol^N}VAhgsD*#BYa(RkJ}Mmjn9dxr?w^BJ+nS3Kb92V=55#= zjdaZCxjy_p zZWmNg2uLjMD%!m@V?HiPFSLa~ppQ-1wc`=|zw0z~=w&CAE-OE!A-SPj2}#IsI__*M z4lN;nbwkG-%-pO95Z0bctg|TTvD#4JwWnlB)4P-yy@O)utDW&LwV&tKrfc3gSJAR3 zMUKcelkW)tNi@iJGfl+7+5J=tu7&QYU5GJ}0Z}GR?DRy?d9L0-)_G066r z#49*H2vQps8gNZw(@MT~P)Mdz4vT!=ax&{PF{y>Jl+MUrTG@U< z%D^|oNP66WCya>Iw<>kHg-;dfC~|hca`y1$Ir#QHlT2A|b3OrW=)h&gdF*K&l@`OE zWa;}U#BCI3v?zkJ*I#dSyK|Jee#26=O*ATRrWq7O<4`66oim3g+bZ`lBA%ekarhP< z=2OA_9K|;=q>X(EKhRV;1Xx?^BJoIui$)1ZyO0=o*BLoJre8MLB6$-Rnun1z@eL|y z;NS}loJ{7?U|NaQRA>40Gt>8q53de*DVb90NKfMKcL>XR8}Qs3fQ|(5yMX2D!Xz2} z^}k_GDO+Px+yr7ur2L!AlAOT9xCvghvUcYU zYW9YKDQKAiVTL0HHn8@DB2jk7R1x6#&2zfymu2<^(bleDPS+H_0c#l0Vwga|8tvP9 z%v@5DechvAA*w~Og{fbcsNvb-GbE{IeLK3WTyyCa^ z=HGwniqaX@QJ;!EWnMTG>kW8KN^JB7M_mJISyYYR+IKV~2Ne6$D|oT-@#5vxNzFBE z`=Y(_vbs!vxDf=^L>6|PgHI_vK&ff(ZJ0xa`)Ijy`Au-Cl=^q>=hBUj!HB@<2J!mG zgpBu`C{4S$;n=Yw&*ikdC;T!2xOJ8md~?l*(PR0ofn*Nx zc%%xpANp%hft$JnO3}5z8eLH>G26Im14~J0-Se!%b;!7`(pYTo!EV3~4&6TWmQ~2ZZyZPV=XYc`Znq^N5^l#WOA}M;UDOi% z6Q3?C7Q~SoFLEd@g@FHnFCMR|hu@J(l>5P_a-MkN`^}m|jm+Z&GIor}QEy`Pe`0W< zWx>M`BFS}j{Y}yLaf5|I;+%rc0E3+i-HZbU%1Cj5S@i3TA}~HNZ*;$YJQ8O|cjVB4 zjUNm3qP*70PLU&X!N=*k!|MOqCEfCvpS(qy-2E&XM-Ay=W6J(z;IR{U1Uh@1rroAN zI?0uy&rCO`V=ouxkdD@Wd%HX;0N}=7lY)jHXdq*{!2KWf!T*JY{@at8xw2cIt{3-p zAU!9_ZTug%a6tR_EM?Ra-fZ-1&le@(&q*M6xu>~KO-=EKnfkUM8FDY2R*;gOB&3H- zsx)8(dg)f)OUJzdIMD2?8~pBQW*=}G(4broO6yN+%e~Ob4tm=>);r+{052If+x5<% zISvSN^=Y)*gr~T_;sVZRWm{Vm&>>yDy~z9>apJivxG%HQtBbWD@_dHzct882SLFAd z5>z`3hLA6{%x%76h5+vKQ=iE5%O6iiHb$%53fO(oSrhs9OM>zx&dJRz0;corxFwT5Yz z1}`t`#Sd+#&{f+dA0QsxUme^opLmDZH%72}{dx9Z zrxTxO1aePhuZJ;*!#Vb=(x5Zox+clIpDLKD$9~-5{n62dAyU$&umm?o@^`TJC<1!o V!=N$YHiiPePx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0YOPbK~y+TtV5h(5h2fW%Ce-cYoaJ3j$@J}VK^KjBM1VFF=(w35v;Y` zZZ}q|731;Po%cc_!e+B!G#ZhnDM~4~S5*~RmT^9xS+CbN8_4u=C_7``9?N-5Gb zB@9FIJa@epI-O1!V_uLpN-2ynlx68UFLb?L-6y|`)|$Gm-P#Kc1_MOoxqgU<5Jiz& zd!fl>g0+^as-Cytf8f?y;y8Al7fO;-FYt!Ww-i-qgG*AKAWZYhd_e!t)S z9qspfj>jX@>69P{y1nccnayS_m&^ODk9n9;SA=`$8-y167NLc-*39Sg&IrC?cg-JG W;`.kind` = "storage" の場合は、対応する 4Dフィールドタイプ ([`Value type`](../commands-legacy/value-type.md) 参照)
  • `.kind` = "relatedEntity" の場合: 38 (`is object`)
  • `.kind` = "relatedEntities" の場合: 42 (`is collection`)
  • `.kind` = "calculated" または "alias" の場合: 結果の値 (フィールドタイプ、relatedEntity または relatedEntities) に応じて、上に同じ
  • | -| indexed | Boolean | 属性に対して B-tree もしくは クラスターB-Tree インデックスが設定されている場合に true です。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 | -| inverseName | Text | リレーション先の属性名。 `.kind` = "relatedEntity" または "relatedEntities" の場合にのみ返されます。 | -| keywordIndexed | Boolean | 属性にキーワードインデックスが存在すれば true です。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 | -| kind | Text | 属性の種類。 とりうる値:
  • "storage": ストレージ (あるいはスカラー) 属性。つまり、属性は値を保存しており、他の属性への参照ではありません。
  • "calculated": 計算属性。[`get`](../ORDA/ordaClasses.md#function-get-attributename) 関数 によって定義されます。
  • "alias": [他の属性](../ORDA/ordaClasses.md#エイリアス属性-1) を指し示す属性。
  • "relatedEntity": N対1 リレーション属性 (エンティティへの参照)
  • "relatedEntities": 1対N リレーション属性 (エンティティセレクションへの参照)
  • | -| 必須 | Boolean | 属性において Null値の入力が拒否されている場合に true です。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 注記: このプロパティは、4Dデータベースレベルの "Null値の入力を拒否" フィールドプロパティと対応しています。 フィールドのデータ入力制御オプションである既存の "必須入力" プロパティとは無関係です。 | -| name | Text | 属性名 (文字列) | -| path | Text | リレーションに基づく [エイリアス属性](../ORDA/ordaClasses.md#エイリアス属性-1) のパス。 | -| readOnly | Boolean | 読み取り専用属性の場合に trueです。 読み取り専用属性の場合に trueです。 たとえば、[`set` 関数](../ORDA/ordaClasses.md#function-set-attributename) を持たない計算属性は読み取り専用です。 | -| relatedDataClass | Text | 属性にリレートされているデータクラスの名称。 `.kind` = "relatedEntity" または "relatedEntities" の場合にのみ返されます。 | -| type | Text | 属性の概念的な値タイプ。汎用的なプログラミングに有用です。 これは属性の種類 (`kind`) によります。 とりうる値:
  • `.kind` = "storage" の場合: "blob", "bool", "date", "image", "number", "object", または "string"。 属性の概念的な値タイプ。汎用的なプログラミングに有用です。 これは属性の種類 (`kind`) によります。 とりうる値:
  • `.kind` = "storage" の場合: "blob", "bool", "date", "image", "number", "object", または "string"。 数値型の場合 "number" が返されます (時間を含む)。UUID、文字およびテキスト型フィールドの場合 "string" が返されます。"blob" 属性は [BLOB オブジェクト](../Concepts/dt_blob.md#blob-の種類) です。
  • `.kind` = "relatedEntity" の場合: リレートされたデータクラス名
  • `.kind` = "relatedEntities" の場合: リレートされたデータクラス名 + "Selection" 接尾辞
  • `.kind` = "calculated" または "alias" の場合: 結果の値に応じて、上に同じ
  • | -| unique | Boolean | 属性値が重複不可の場合に true です。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 | -| classID | Text | `.type = "object"` でかつクラスがストラクチャーエディター内で指定されていた場合にのみ利用可能です。
    オブジェクトのインスタンス下に使用したクラスの名前を返します。 | +| プロパティ | 型 | 説明 | +| ---------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| autoFilled | Boolean | 属性値が 4D によって自動生成される場合に true です。 このプロパティは次の 4Dフィールドプロパティに対応しています: 数値型フィールドの "自動インクリメント" および UUID (文字型)フィールドの "自動UUID"。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 | +| exposed | Boolean | 属性が REST で公開されている場合に trueです | +| fieldNumber | integer | 属性の内部的な 4Dフィールド番号。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 | +| fieldType | Integer | 属性の 4Dデータベースフィールドタイプ。 これは属性の種類 (`kind`) によります。 とりうる値:
  • `.kind` = "storage" の場合は、対応する 4Dフィールドタイプ ([`Value type`](../commands-legacy/value-type.md) 参照)
  • `.kind` = "relatedEntity" の場合: 38 (`is object`)
  • `.kind` = "relatedEntities" の場合: 42 (`is collection`)
  • `.kind` = "calculated" または "alias" の場合: 結果の値 (フィールドタイプ、relatedEntity または relatedEntities) に応じて、上に同じ
  • | +| indexed | Boolean | 属性に対して B-tree もしくは クラスターB-Tree インデックスが設定されている場合に true です。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 | +| inverseName | Text | リレーション先の属性名。 `.kind` = "relatedEntity" または "relatedEntities" の場合にのみ返されます。 | +| keywordIndexed | Boolean | 属性にキーワードインデックスが存在すれば true です。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 | +| kind | Text | 属性の種類。 とりうる値:
  • "storage": ストレージ (あるいはスカラー) 属性。つまり、属性は値を保存しており、他の属性への参照ではありません。
  • "calculated": 計算属性。[`get`](../ORDA/ordaClasses.md#function-get-attributename) 関数 によって定義されます。
  • "alias": [他の属性](../ORDA/ordaClasses.md#エイリアス属性-1) を指し示す属性。
  • "relatedEntity": N対1 リレーション属性 (エンティティへの参照)
  • "relatedEntities": 1対N リレーション属性 (エンティティセレクションへの参照)
  • | +| 必須 | Boolean | 属性において Null値の入力が拒否されている場合に true です。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 注記: このプロパティは、4Dデータベースレベルの "Null値の入力を拒否" フィールドプロパティと対応しています。 フィールドのデータ入力制御オプションである既存の "必須入力" プロパティとは無関係です。 | +| name | Text | 属性名 (文字列) | +| path | Text | リレーションに基づく [エイリアス属性](../ORDA/ordaClasses.md#エイリアス属性-1) のパス。 | +| readOnly | Boolean | 読み取り専用属性の場合に trueです。 読み取り専用属性の場合に trueです。 たとえば、[`set` 関数](../ORDA/ordaClasses.md#function-set-attributename) を持たない計算属性は読み取り専用です。 | +| relatedDataClass | Text | 属性にリレートされているデータクラスの名称。 `.kind` = "relatedEntity" または "relatedEntities" の場合にのみ返されます。 | +| type | Text | 属性の概念的な値タイプ。汎用的なプログラミングに有用です。 これは属性の種類 (`kind`) によります。 とりうる値:
  • `.kind` = "storage" の場合: "blob", "bool", "date", "image", "number", "object", または "string"。 数値型の場合 "number" が返されます (時間を含む)。UUID、文字およびテキスト型フィールドの場合 "string" が返されます。"blob" 属性は [BLOB オブジェクト](../Concepts/dt_blob.md#blob-の種類) です。
  • `.kind` = "relatedEntity" の場合: リレートされたデータクラス名
  • `.kind` = "relatedEntities" の場合: リレートされたデータクラス名 + "Selection" 接尾辞
  • `.kind` = "calculated" または "alias" の場合: 結果の値に応じて、上に同じ
  • | +| unique | Boolean | 属性値が重複不可の場合に true です。 `.kind` が "relatedEntity" または "relatedEntities" の場合には、このプロパティは返されません。 | +| classID | Text | `.type = "object"` でかつクラスがストラクチャーエディター内で指定されていた場合にのみ利用可能です。
    オブジェクトのインスタンス下に使用したクラスの名前を返します。 | :::tip @@ -945,7 +945,7 @@ attributePath|formula 比較演算子 値 - **日付** 型の定数値: "YYYY-MM-DD" フォーマット。 - **null** 定数値: "null" キーワードを使用した場合、**null** と **undefined** プロパティの両方が検索されます。 - IN 記号を使用したクエリの場合、*値* はコレクションか、attributePath の型に合致する、\[ ] でくくられたカンマ区切りの値である必要があります (文字列においては、`"` の記号は `\` でエスケープする必要があります)。 - - **object**: only [4D.Vector](../API/VectorClass.md) objects are supported, in the context of [**vector similarity queries**](#query-by-vector-similarity) (*attributePath* must also contain valid 4D.Vector objects). + - **オブジェクト**: [**ベクトル類似度クエリ**](#ベクトル類似度クエリ) のコンテキストにおいて [4D.Vector](../API/VectorClass.md) オブジェクトのみがサポートされます。(*attributePath* に有効な4D.Vector オブジェクトが格納されている必要があります)。 - **論理演算子**: 複数の条件をクエリ内で結合させるのに使用します(任意)。 以下の論理演算子のいずれか一つを使用できます (名前あるいは記号のどちらかを渡します): | 結合 | 記号 | @@ -1211,18 +1211,18 @@ var $comparisonVector := {vector: $myVector; metric: mk euclidean; threshold: 1. var $results := ds.MyClass.query("myVectorField <= :1"; $comparisonVector) ``` -The **order by** statement is supported in the query string so that entities in the resulting entity selection are sorted by similarity. 例: +**order by** 宣言はクエリ文字列でサポートされており、これによって返されるエンティティセレクション内でエンティティは類似度順にソートされます。 例: ```4d var $results := ds.MyClass.query("myVectorField > :1 order by myVectorField"; $comparisonVector) - //default order, the first entity is the most similar + // デフォルト順、最初のエンティティは最も類似したもの ``` -If the same vector appears multiple times in the query string, the order by will be applied to the results of the first one, for example: +同じベクトルがクエリ文字列内に複数回出現した場合、order by は最初のものの結果に適用されます。例: ```4d var $results := ds.MyClass.query("myVectorField > :1 and myVectorField > :2 order by myVectorField" desc; / - {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 is used for the order by + {vector : $myVector1 };{vector : $myVector2 }) //myVectorField > :1 は order by に使用されます。 ``` 詳細については[以下の例題](#例題-4-2)を参照してください (例題 4 と 5)。 @@ -1616,14 +1616,6 @@ var $vector1Comparison:={vector: $myvector; metric: mk cosine; threshold: 0.4} var $vector2Comparison:={vector: $myvector; metric: mk euclidean; threshold:1} // embedding 属性は、4D.Vector クラスオブジェクトを格納している4D フィールドに基づいています -ds.VectorTable.query("embedding>:1 and embedding<:2";$vector1Comparison;$vector2Comparison)\ - .orderByFormula(Formula(This.embedding.cosineSimilarity($vector1Comparison))) - - // 比較ベクトルを作成 -var $vector1Comparison:={vector: $myvector; metric: mk cosine; threshold: 0.4} -var $vector2Comparison:={vector: $myvector; metric: mk euclidean; threshold:1} - - //embedding 属性は、4D.Vector クラスオブジェクトを格納している4D フィールドに基づいています ds.VectorTable.query("embedding>:1 and embedding<:2";$vector1Comparison;$vector2Comparison)\ .orderByFormula(Formula(This.embedding.cosineSimilarity($vector1Comparison))) ``` @@ -1675,9 +1667,9 @@ ds.VectorTable.query("embedding>:1 and embedding<:2";$vector1Comparison;$vector2 `timeout` プロパティを設定すると、すでにキャッシュに存在するエンティティに新しいタイムアウトが設定されます。 これは頻繁に変更されないデータを扱う場合、つまり、サーバーへの新たな要求が必要ない場合に便利です。 -`maxEntries` は、ORDAキャッシュ内のエンティティの最大数を設定します。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 +`maxEntries` は、ORDAキャッシュ内のエンティティの最大数を設定します。 デフォルトは 30,000 です。 -最小エントリー数は 300 のため、`maxEntries` の値は 300以上でなくてはなりません。 それ以外の場合は無視され、最大エントリー数は 300 に設定されます。 それ以外の場合は無視され、最大エントリー数は 300 に設定されます。 それ以外の場合は無視され、最大エントリー数は 300 に設定されます。 +最小エントリー数は 300 のため、`maxEntries` の値は 300以上でなくてはなりません。 それ以外の場合は無視され、最大エントリー数は 300 に設定されます。 `timeout` および `maxEntries` として有効なプロパティが渡されない場合、キャッシュはデフォルト値または以前に設定された値のまま変更されません。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md index 966a3f3f78904e..fd9f07e22bf44c 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/EntitySelectionClass.md @@ -1741,13 +1741,13 @@ pathObjects コレクションには必要な数だけオブジェクトを追
    履歴 -| リリース | 内容 | -| ----- | ----------------------------------------------------------- | -| 21 R2 | Support of order by with 4D.Vector searches | -| 21 | 4D.Vector オブジェクトのサポート | -| 17 R6 | Formula パラメーターをサポート | -| 17 R5 | 値のプレースホルダーをサポート | -| 17 | 追加 | +| リリース | 内容 | +| ----- | ---------------------------------------------- | +| 21 R2 | 4D.Vector 検索におけるorder by のサポート | +| 21 | 4D.Vector オブジェクトのサポート | +| 17 R6 | Formula パラメーターをサポート | +| 17 R5 | 値のプレースホルダーをサポート | +| 17 | 追加 |
    diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormClass.md index 17d55be910983d..ffe3bbb2a96872 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command. +`WebForm` クラスには、Qodly の Web ページコンポーネントを処理するための関数とプロパティが含まれています。 `4D.WebForm` オブジェクトは [`webForm`](../commands/web-form.md) コマンドによってインスタンス化されます。
    履歴 @@ -31,9 +31,9 @@ The `WebForm` class contains functions and properties allowing to handle your Qo #### 説明 -The components of web pages are objects that are available directly as properties of these web pages. +Web ページのコンポーネント (構成要素) とは、これらの Web ページのプロパティとして直接利用可能なオブジェクトです。 -The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. +返されるオブジェクトは、[`4D.WebFormItem`](WebFormItemClass.md) クラスのものです。 これらのオブジェクトは、コンポーネントを動的に管理するために使用できる関数を持っています。 #### 例題 @@ -43,14 +43,14 @@ shared singleton Class constructor() var myForm : 4D.WebForm var component : 4D.WebFormItem - myForm:=webForm //returns the web page as an object, each property is a component - component:=myForm.myImage //returns the myImage component of the web page + myForm:=webForm // Web ページをオブジェクト返し、各プロパティがコンポーネントを表す + component:=myForm.myImage // Web ページの myImage コンポーネントを返す ``` :::info -While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. +`myForm` はデバッガの中で調べる場合には一般的なオブジェクトのプロパティを表示しないかもしれませんが、実際の`webForm` オブジェクトであるかのように振る舞います。 `myForm` を通して、下地となる`webForm` オブジェクトのプロパティと関数を操作することができます。 例えば、ページのコンテンツを動的に操作したり、あるいは `myForm.setMessage()` のような特殊な関数を使用してWebページにメッセージを送信したりすることができます。 ::: @@ -60,24 +60,24 @@ While `myForm` may not display typical object properties when examined in the de -| 引数 | 型 | | 説明 | -| ----- | ------ | :-: | ------------------------------------------ | -| state | string | -> | Name of state to disable from the web page | +| 引数 | 型 | | 説明 | +| ----- | ------ | :-: | ----------------------- | +| state | string | -> | Web ページ上で無効化するstate の名前 | #### 説明 -The `.disableState()` function disables the rendering of the *state* in the current web page. +`.disableState()` 関数は、カレントのWeb ページ内の *state* の状態のレンダリングを無効化します。 この関数は、以下の場合には何もしません: -- the *state* is currently not enabled in the web page, -- the *state* does not exist for the web page. +- *state* 引数のステートが現在Web ページ内で有効化されていない +- Web ページに対して *state* 引数のステートが存在しない。 同じユーザー関数内で複数の state を [有効化](#enablestate) または無効化した場合、すべての変更は関数の終了時に一括してクライアントに送信されます。 -For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +Web ページのステートについての詳細な情報については、[Qodly ドキュメンテーションのStates の章](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview) を参照してください。 ### .enableState() @@ -85,24 +85,24 @@ For more information on web pages states, please refer to the [States section in -| 引数 | 型 | | 説明 | -| ----- | ------ | :-: | ---------------------------------------- | -| state | string | -> | Name of state to enable on the web pages | +| 引数 | 型 | | 説明 | +| ----- | ------ | :-: | ------------------------ | +| state | string | -> | Web ページ上で有効化する state の名前 | #### 説明 -The `.enableState()` function enables the rendering of the *state* in the current web page. +`.enableState()` 関数は、カレントのWeb ページ内の *state* の状態のレンダリングを有効化します。 この関数は、以下の場合には何もしません: -- the *state* has already been enabled on the web page, -- the *state* does not exist for the web page. +- *state* 引数のステートが現在Web ページ内で有効化されている +- Web ページに対して *state* 引数のステートが存在しない。 同じユーザー関数内で複数の state を有効化または [無効化](#disablestate)した場合、すべての変更は関数の終了時に一括してクライアントに送信されます。 -For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +Web ページのステートについての詳細な情報については、[Qodly ドキュメンテーションのStates の章](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview) を参照してください。 #### 例題 @@ -121,17 +121,17 @@ Function authenticationError() -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ---------------------------------------- | -| msg | string | -> | Error message to display in the web page | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | -------------------- | +| msg | string | -> | Web ページに表示するエラーメッセージ | #### 説明 -The `.setError()` function sends *msg* as an error message to the web page. +`.setError()` 関数は、*msg* 引数のメッセージを、エラーメッセージとしてWeb ページに送信します。 -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". +この関数は、`__NOTIFICATION.message` プロパティが *msg* に、そして `__NOTIFICATION.type` が "error" に設定されている `__WEBFORM` オブジェクトと、 `200 OK` ステータスが本文に含まれているレスポンスを返します。 #### 例題 @@ -146,7 +146,7 @@ myForm.setError("My error message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: +イベントに対して [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) 機能が有効化されていた場合、 *message* 引数のメッセージは自動的に赤い *toast* としてページ下部に表示され、5秒後に自動的に消滅します: ![](../assets/en/API/webformClass-pic1.png) @@ -156,17 +156,17 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ---------------------------------------------- | -| msg | string | -> | Information message to display in the web page | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ------------------- | +| msg | string | -> | Web ページに表示する情報メッセージ | #### 説明 -The `.setMessage()` function sends *msg* as an information message to the web page. +`.setMessage()` 関数は、*msg* を情報メッセージとしてWeb ページに送信します。 -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". +この関数は、`__NOTIFICATION.message` プロパティが *msg* に、そして `__NOTIFICATION.type` が "message" に設定されている `__WEBFORM` オブジェクトと、 `200 OK` ステータスが本文に含まれているレスポンスを返します。 #### 例題 @@ -181,7 +181,7 @@ myForm.setMessage("My information message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: +イベントに対して [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) 機能が有効化されていた場合、 *message* 引数のメッセージは自動的に緑の *toast* としてページ下部に表示され、5秒後に自動的に消滅します: ![](../assets/en/API/webformClass-pic2.png) @@ -191,17 +191,17 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ------------------------------------------ | -| msg | string | -> | Warning message to display in the web page | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ------------------- | +| msg | string | -> | Web ページに表示する警告メッセージ | #### 説明 -The `.setWarning()` function sends *msg* as a warning message to the web page. +`.setWarning()` 関数は、*msg* 引数のメッセージを警告メッセージとしてWeb ページに送信します。 -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". +この関数は、`__NOTIFICATION.message` プロパティが *msg* に、そして `__NOTIFICATION.type` が "warning" に設定されている `__WEBFORM` オブジェクトと、 `200 OK` ステータスが本文に含まれているレスポンスを返します。 #### 例題 @@ -216,7 +216,7 @@ myForm.setWarning("My warning message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: +イベントに対して [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) 機能が有効化されていた場合、 *message* 引数のメッセージは自動的に黄色の *toast* としてページ下部に表示され、5秒後に自動的に消滅します: ![](../assets/en/API/webformClass-pic3.png) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md index fe775d4b71c991..629252e50f8b37 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md @@ -3,13 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. +`4D.WebFormItem` クラスを使用すると、Qodly webform コンポーネントの振る舞いを管理できるようになります。 `4D.WebFormItem` オブジェクトは、[`Web Form`](../commands/web-form.md) コマンドによって返される [`4D.WebForm`](WebFormClass.md) オブジェクトのプロパティです。 -When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. +[`Web Form`](../commands/web-form.md) コマンドを呼び出すと、返された`4D.WebForm` プロキシオブジェクトには[**サーバー側参照**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) を持った、Webフォーム内のコンポーネントと同数の `4D.WebFormItems` が格納されます。 -For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference. +例えば、 `WebFormObject.myImage` は `myImage` をサーバー側参照として持っている画像コンポーネントを参照します。
    履歴 @@ -62,9 +62,9 @@ For example, `WebFormObject.myImage` refers to the image component with `myImage #### 例題 -To call a function that hides an image when the user clicks a button: +ユーザーがボタンをクリックした時に画像を非表示にする関数を呼び出すには以下のようにします: -1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: +1. `isHidden` という名前の共有シングルトンクラス内に、以下のコードをもった、[exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) 関数を作成します: ```4d @@ -73,12 +73,12 @@ exposed Function isHidden() var myComponent : 4D.WebFormItem myComponent:=Web Form.myImage - myComponent.hide() // Hide the component that has "myImage" as server reference + myComponent.hide() // "myImage" をサーバー側参照として持つコンポーネントを非表示にします ``` -2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". -3. Select the Button component and add an `onclick` event to it. -4. Attach the `isHidden` function to the event. +2. Qodly Studioにて: キャンバス上で画像コンポーネントを選択し、プロパティパネル > Server Side 内に、例えば "myImage" というサーバー側参照を入力します。 +3. ボタンコンポーネントを選択し、そこに `onclick` イベントを追加します。 +4. そのイベントに `isHidden` 関数を追加します。 ### .removeCSSClass() @@ -110,7 +110,7 @@ exposed Function isHidden() #### 説明 -The `.show()` function makes the component visible.If the component was already visible, the function does nothing. +`.show()` 関数は、コンポーネントを表示状態にします。コンポーネントがすでに表示状態だった場合、この関数は何もしません。 ## 参照 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_number.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_number.md index 82f839a96dd6d6..9bc4bc4c4b1fd7 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_number.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_number.md @@ -49,7 +49,7 @@ title: 数値(実数、整数) | 減算 (引き算) | Number - Number | Number | 3 – 2 | 1 | | 乗算 (かけ算) | Number \* Number | Number | 5 \* 2 | 10 | | 除算 (割り算) | Number / Number | Number | 5 / 2 | 2.5 | -| 倍長整数を返す除算 | Number \ Number | Number | 5 \ 2 | 2 | +| Integer division | Number \ Number | Number | 5 \ 2 | 2 | | モジューロ | Number % Number | Number | 5 % 2 | 1 | | 指数 | Number ^ Number | Number | 2 ^ 3 | 8 | | 等しい | Number = Number | Boolean | 10 = 10 | true | @@ -79,9 +79,9 @@ title: 数値(実数、整数) ::: -### 倍長整数を返す除算 +### Integer division -倍長整数を返す除算演算子 \ は、整数値の有効値を返します。 +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### 実数の比較 @@ -125,16 +125,16 @@ title: 数値(実数、整数) ビットワイズ演算子を使用する式は倍長整数値を返します。 Bit Test 演算子の場合、式は例外的にブール値を返します。 次の表にビットワイズ演算子とそのシンタックスを示します: 次の表にビットワイズ演算子とそのシンタックスを示します: 次の表にビットワイズ演算子とそのシンタックスを示します: -| 演算 | 演算子 | シンタックス | 戻り値 | -| ----------------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------- | ----------------------------------- | -| Bitwise AND | & | Long & Long | Long | -| Bitwise OR (inclusive) | | | Long | Long | Long | -| Bitwise OR (exclusive) | ^ | | Long ^ | Long | Long | -| Left Bit Shift | << | Long << Long | Long (注記1 参照) | -| Right Bit Shift | > > | Long >> Long | Long (注記1 参照) | -| Bit Set | ?+ | Long ?+ Long | Long (注記2 参照) | -| Bit Clear | ?- | Long ?- Long | Long (注記2 参照) | -| Bit Test | ?? | Long ?? Long | Boolean (注記2 参照) | +| 演算 | 演算子 | シンタックス | 戻り値 | +| ----------------------------------------- | ----------------------------------------------------- | --------------------------------------------------------------- | ----------------------------------- | +| Bitwise AND | & | Long & Long | Long | +| Bitwise OR (inclusive) | | | Long | Long | Long | +| Bitwise OR (exclusive) | ^ | | Long ^ | Long | Long | +| Left Bit Shift | << | Long << Long | Long (注記1 参照) | +| Right Bit Shift | > > | Long >> Long | Long (注記1 参照) | +| Bit Set | ?+ | Long ?+ Long | Long (注記2 参照) | +| Bit Clear | ?- | Long ?- Long | Long (注記2 参照) | +| Bit Test | ?? | Long ?? Long | Boolean (注記2 参照) | #### 注記 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Extensions/develop-components.md b/i18n/ja/docusaurus-plugin-content-docs/current/Extensions/develop-components.md index 60ca8369b6076c..48b66b1a723731 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Extensions/develop-components.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Extensions/develop-components.md @@ -114,6 +114,12 @@ title: コンポーネントの開発 - メソッドの実行 - ゴミ箱からの復元、あるいはゴミ箱を空にする。 +### Search and replace + +You can use the [**Search and replace** features](../Project/search-replace.md) of the host project to search elements within the code or the forms of your editable components. The **Search in project** menu allows you to select one or all components as search target: + +![](../assets/en/Project/find-components.png) + ## ランゲージコマンドのスコープ [使用できないコマンド](#使用できないコマンド) を除き、コンポーネントではすべての 4D ランゲージコマンドが使用できます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md index 781ca6f05014b6..417772bfc32c86 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,8 +10,10 @@ title: リリースノート #### ハイライト - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). +- [4D Write Pro standard actions](../WritePro/user-legacy/standard-actions.md) that apply [lists](../WritePro/user-legacy/using-a-4d-write-pro-area.md#lists) now automatically adjust paragraph margins to keep markers positioned inside it. - Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. +- [**Find in Design**](../Project/search-replace.md#search-in-components) and [**Replace in contents**](../Project/search-replace.md#replace-in-contents) features can now support editable components. - [**修正リスト**](https://bugs.4d.fr/fixedbugslist?version=21_R2): 4D 21 R2 で修正されたバグのリストです ([日本語版はこちら](https://4d-jp.github.io/2023/178/release-note-version-20r2/))。 #### 動作の変更 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Project/project-method-properties.md b/i18n/ja/docusaurus-plugin-content-docs/current/Project/project-method-properties.md index cca7ea78f5692d..743181b1c2adac 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Project/project-method-properties.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Project/project-method-properties.md @@ -22,9 +22,9 @@ title: Project Method Properties :::caution -プロジェクトメソッドの名前を変更すると、そのメソッドを旧名称で呼び出している他のメソッドやフォーミュラなど、アプリケーションの機能が無効になるリスクがあります。 You can rename the method manually but it is strongly recommended to use the renaming function for project methods, described in [Renaming](https://doc.4d.com/4Dv20/4D/20.2/Renaming.300-6750165.en.html). この機能を使用すれば、デザイン環境における当該メソッドの呼び出し箇所がすべて自動的に更新されます (ただし EXECUTE METHOD など、文字列としてメソッド名が参照されている個所を除きます)。 +Changing the name of a method already used in the project can invalidate any methods or formulas that use the old method name and runs the risk of disrupting application functioning. It is strongly recommended to use the [renaming function for project methods](../Project/search-replace.md#renaming-project-methods-and-variables). この機能を使用すれば、デザイン環境における当該メソッドの呼び出し箇所がすべて自動的に更新されます (ただし EXECUTE METHOD など、文字列としてメソッド名が参照されている個所を除きます)。 -4D Server の場合、名称変更は変更終了後にサーバーに反映されます。 複数のユーザーが同時に名称を変更しようとすると、最後におこなわれた名称変更が適用されます。 メソッドのオーナーを指定すれば特定のユーザー以外はメソッド名を変更できないようにできます。 +4D Server の場合、名称変更は変更終了後にサーバーに反映されます。 複数のユーザーが同時に名称を変更しようとすると、最後におこなわれた名称変更が適用されます。 You may want to specify a method owner so that only certain users can change the method's name. ::: @@ -103,7 +103,7 @@ For more information, refer to [4D SQL engine implementation](https://doc.4d.com *このオプションは廃止されます。 RESTコールによるコードの呼び出しは、[ORDAデータモデルクラス関数](../REST/ClassFunctions.md) でのみサポートされます。* -### 属性の一括設定 +## 属性の一括設定 "メソッド属性" ダイアログボックスを使用して、一回の操作で複数のプロジェクトメソッドに対して属性 (非表示、Webサービスで公開、等) を設定することができます。 この機能は、多数のプロジェクトメソッドの属性を一括して変更する場合に便利です。 また、開発の段階で、類似のメソッド群に共通の属性を素早く適用するのに使用することもできます。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Project/search-replace.md b/i18n/ja/docusaurus-plugin-content-docs/current/Project/search-replace.md new file mode 100644 index 00000000000000..0d4492c012f012 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Project/search-replace.md @@ -0,0 +1,283 @@ +--- +id: search-replace +title: Search and Replace +--- + +4D provides several search and replace functions for elements in all of the Design environment. + +- You can search for a string or a type of object (variable, comment, expression, etc.) in part of or in the entire project on the basis of custom criteria ("starts with", "contains", etc.). You can, for example, search for all the variables containing the string "MyVar", only in methods whose name begins with "HR_". +- The results are displayed in a results window, where it is possible to perform replacements in the contents. You can also export these results in a text file that can be imported into a spreadsheet. +- You can detect variables and methods that are not used in your code and then remove them to free up memory. +- You can rename a project method or a variable throughout the Design environment in a single operation. + +:::note + +There are also functions for searching among the methods of your project in the context menu of the Methods Page in the Explorer: **Search Callers** (aussi available in the [Code editor](../code-editor/write-class-method.md#search-callers) and **Search Dependencies**. Both functions display the items found in a [Results window](#results-window). + +::: + +## Search Location + +When you search the Design environment, the following elements are searched: + +- Names of project methods and classes +- Contents of all methods and classes +- Names of tables, fields and forms +- Contents of forms: + - object names and titles + - names of help tips, pictures, variables, style sheets, + - formatting strings + - 式 +- Menus (names and items) and commands associated with menu items +- Choice lists (names and items) +- Help tips (names and content) +- Formats / filters (names and content) +- Comments in the Explorer and in the code + +## Find in Design + +### Starting a search + +Specify your search criteria in the "Find in design" window: + +1. Click on the Search button (![](../assets/en/Project/search-icon.png)) in the 4D toolbar. + OR + Select the **Find in Design...** command from the **Edit** menu. + +The "Find in design" window appears: + +![](../assets/en/Project/find-in-design.png) + +The areas of the "Find in design" vary dynamically depending on the selections made in the menus. You can expand this window so that all options are visible: + +![](../assets/en/Project/find-in-design-expanded.png) + +2. Build your search using the different menus and entry areas of the dialog box and if necessary enter the character string to be searched for. These items are described in the following sections. + +3. Set the [search options](#search-options) (if necessary). + +4. Click **OK** or press the **Enter** key. + When the search is finished, the [Results window](#results-window) appears, listing the elements found. + +:::note + +You can cancel an extensive search that is underway using the **x** button; this does not close the window or remove any results that were found. + +::: + +Once you have executed a search, the value entered in the search area is saved in memory. This value, as well as all the other values entered during the same session, can be selected from the combo box. + +### 検索 + +You specify the type of element to look for using the **Find** menu. The following choices are available: + +- **Text**: In this case, 4D looks for a character string throughout the Design environment. The search is done in plain text mode, without taking the context into account. For example, you can look for the text "ALERT("Error number:"+" or "button27". In this mode, you cannot use the wildcard character because "@" is considered to be a standard character. +- **Comment**: This search is basically the same as the previous one, but it is restricted to the contents of comments (lines beginning with //) in the code and in the Explorer window. For example, you can search for any comments containing the string "To be verified". + +:::note + +The end result of both types of searches depends on the [search mode](#search-mode) selected. + +::: + +- **Language expression**: Used to search for any valid 4D expression; the search is performed in the "contains" search mode. Validity is important because 4D must be able to evaluate an expression to be able to search for it. For example, a search for "[clients" (invalid expression) will not return any result whereas "[clients]" is correct. This option is particularly suitable for searches for value assignments and comparisons. 例: + - Search for "myvar:=" (assignment) + - Search for "myvar=" (comparison) +- **Language element**: Used to search for a specific language element by its name. 4D can distinguish between the following elements: + - **Any language element**: Any element from the list below. + - **Project method or Class**: Name of a project method or class, for example "M_Add" or "EmployeeEntity". + - **Form:** Form name, for example "Input". The command searches among project forms and table forms. + - **Field or Table**: Name of a table or field, for example "Customers". + - **Variable**: Any variable name, such as "$myvar". + **4D constant**: Any constant, such as "Is Picture". + **String in quotes**: Literal text constant; i.e. any value within quotes in the code editor or inserted into text areas of the Form editor (static text or group boxes). For example, a search for "Martin" will return results if your code contains the line: `ds.Customer.query("name = :1"; "Martin")` + - **4D command**: Any 4D command, for example "Alert". + - **Plug-in command**: Plug-in command installed in the application. + - **Properties**: An object property name (includes ORDA attribute names). For example "lastname" will find "$o.lastname" and "ds.Employee.lastname". +- **Any object**: This option searches among all the elements in the Design environment. Only the modification date filter is available. Use this option, for example, to search for "anything modified today". + +### Search mode + +The search mode menu (i.e. "which", "that is" or "whose name") specifies how to search for the value that is entered. The contents of this menu vary according to the type of element to search for as selected in the **Find** dropdown list. + +- Search options for Text or Comment: + - **contains**: Searches all text in the Design environment for the specified string. Search results for "var" can include "myvar", "variable1" or "aVariable". + - **contains whole word**: Searches all text of the Design environment for the string as a whole word. Search results for "var" only include exact occurrences. They will not include "myvar" but will include, for example, "var:=10" or "ID+var" because the symbols : or + are word separators. + - **begins with / ends with**: Searches for the string at the beginning or end of the word (text search) or at the beginning or end of the comment line (comment search). In "Text ends with" mode, searching for "var" will find "myvar". +- Search options for Language element: The menu offers standard options (matches, contains, begins with, ends with). Note that you can use the search wildcard (@) with the matches option (returns all objects of the type specified). + +### Search in components + +When your current project references [editable components](../Extensions/develop-components.md#editing-components), you can designate one or all your components as a target for the search. By default, a search is executed in the host only. To modify the target for a search, deploy the **in the project** menu: + +![](../assets/en/Project/find-components.png) + +You can select as target: + +- the **host project** (default option, top of the list): the search will only be executed within the host project code and forms, excluding components. +- the **host project and all its components**: the search will be executed in the host project and in all its loaded components. +- a **specific component**, among the list of all searchable components: the search will be restricted to this component only, excluding the host and other components. + +:::note + +When no searchable component is found, no menu is available. + +::: + +The **in the folder** menu (see below) is updated when you select a project since the availability of folders depends on the selected search target(s). The menu is hidden when you select the "host project and all its components" option. + +### Folder + +The **in the folder** menu restricts the search to a specific folder of the project. By default ("Top Level" option), the search takes place in all the folders. + +:::note + +Folders are defined on the Home Page of the Explorer. + +::: + +### Modification date of the parent + +This menu restricts the search with respect to the creation/modification date of its parent (for example, the method containing the string being searched for). In addition to standard date criteria (is, is before, is after, is not), this menu also contains several options to let you quickly specify a standard search period: + +- **is today**: Period beginning at midnight (00:00 h) of the current day. +- **is since yesterday**: Period including the current day and the previous one. +- **is this week**: Period beginning on Monday of the current week. +- **is this month**: Period beginning on the 1st day of the current month. + +### Searching options + +You can select options that can help speed up your searches: + +- **Search in forms**: When this option is deselected, the search is done throughout the project, except in forms. +- **Search in methods**: When this option is deselected, the search is done throughout the project, except in methods. +- **Case Sensitive**: When this option is selected, the search uses the case of the characters as they have been entered in the Find area. + +## Results window + +The Results window lists all elements found that match the search criteria set using different types of searches: + +- [standard search](#starting-a-search) +- [search for unused elements](#find-unused-methods-and-global-variables) +- [search for callers](../code-editor/write-class-method.md#search-callers) +- search for dependencies +- [renaming of project methods and variables](#renaming-project-methods-and-variables) + +It shows the results as a hierarchical list organized by type of elements found. You can expand or collapse all the hierarchical items in the list using the options menu (found at the bottom left of the window) or in the context menu. + +![](../assets/en/Project/result-window.png) + +You can double-click on a line in this window to view the element in its editor, such as the [code editor](../code-editor/write-class-method.md). If you do several searches, each search opens its own result window, leaving previous result windows open. + +When more than one occurrence has been found, the list indicates their **count** next to the element name. + +Each line can display a tip that provides additional information, for example the element property that matches the criteria, or the number of the form page that contains the occurrence. + +When an element found belongs to a component, the **component name** is displayed in parenthesis at the right side of the element name: + +![](../assets/en/Project/find-components-results.png) + +Once a search is completed, you can use the ![](../assets/en/Project/result-window-re.png) button to perform the search again with the same criteria and options. + +### Options menu + +You can perform various actions using the options menu: + +![](../assets/en/Project/result-window-menu.png) + +- **Remove from list**: removes selected item(s) from the results window. More specifically, this lets you keep only items targeted by a replacement operation in the contents or used for drag and drop between applications. +- **Remove all items from list except selection**: clears everything from the results window except for the selected item(s). +- [**Replace in content**](#replace-in-contents): replaces a character string within the selected item(s). +- **Select >**: selects one type of item (project methods, object names, and so on) from among all the items found in the Results window. The hierarchical sub-menu also provides commands to select (All) or deselect (None) all the items at once. +- **Collapse all/Expand all**: expands or collapses all the hierarchical items in the list of results. +- **Export Results**: exports information about the search criteria and elements listed in the Results window. This text file can then be imported into a spreadsheet such as Excel, for example. For each item, the following information is exported as tab-separated values in a text file: + - Host project or component name + - Type (method, Class, formObject, trigger...) + - Path + - Property (if accurate): provides the property of the object that matches the criteria. For example, a string could be found in a variable name (variable property) and an object name (name property) within in the same form. This field is empty when the matching element is the object itself. + - Contents (if accurate): provides the contents that actually matches the criteria; for example, the code line that contains the requested string. + - Line number (for code) or page number (for form objects) + +## Replace in content + +The Replace in content function allows you to replace one character string with another within the listed objects in the Results window. It is available in the [options menu](#options-menu) of the window. + +:::note + +The **Replace in content** menu item is disabled if you work in a read-only database (e.g. in a .4dz file). + +::: + +When you select this command, a dialog box appears where you enter the character string that will replace all the occurrences found by the initial search: + +![](../assets/en/Project/replace-content.png) + +Replacing operations work as follows: + +- Replacing is always carried out among all items found in the list and not just for a selection. However, it is possible to narrow the replacing operation by first reducing the contents of the list using the **Remove from list** or **Remove all items from list except selection** commands in the [options menu](#options-menu) or the contextual menu. +- If the Results window includes elements from components, the replacing will be done in the component(s) also. +- Only the occurrences shown in the list will be replaced and only after checking the initial search criteria for cases where objects were modified between the initial search and the replacing operation. +- Replacing is done in the code, properties of form objects, contents of help messages, entry filters, menu items (item text and method calls), choice lists, comments. +- For each object modified, 4D checks whether it is already loaded by another machine or in another window. In the case of conflict, a standard dialog box appears indicating that the object is locked. You can close the object and then try again or cancel its replacement. The replacing operation will then continue with the other objects in the list. +- If a method or form concerned by a "replace in content" operation is currently being edited by the same 4D application, it will be modified directly in the open editor (no warning appears). Forms and methods modified in this way are not saved automatically: you will need to use the **Save** or **Save All** command explicitly to validate the changes. +- After a replacement is made in a list item, it will appear in italics. A count of replacements made in real time appears at the bottom of the window. +- Elements are never renamed themselves by the **Replace in content** feature, except for form objects. Hence it is possible that certain items in the list may not be affected by the replacing operation. This can occur when only the item name corresponds to the initial search criteria. In this case, the list items do not necessarily all appear in italics and the final replacement count may be less than the number of occurrences found by the initial search. + +## Renaming project methods and variables + +4D provides a dedicated renaming function with distribution throughout the entire project for project methods and variables. + +The **Rename...** command is available from the [Code editor] (for project methods and variables) and the Explorer context menu (for project methods). + +![](../assets/en/Project/rename.png) + +When you select this command, a dialog box appears where you enter the new name for the object: + +![](../assets/en/Project/rename-dial.png) + +The new name must comply with [naming rules](../Concepts/identifiers.md); otherwise a warning appears when you validate the dialog box. For example, you cannot rename a method with a command name such as "Alert". + +Depending on the type of object you are renaming (project method or variable), the renaming dialog box may also contain a distribution option: + +- Project method: The **Update callers in whole database** option renames the method in all the project code that references it. You can also uncheck this option in order, for example, to rename the method only in the Explorer itself. +- Process variable: The **Rename variable in whole database** option renames the variable in all the project code that references it. If you uncheck this option, the variable is only renamed in the current method. +- Local variable: No distribution option for this object; the variable is only renamed in the current method or class. + +## Searching for unused elements + +Two specific search commands allow you to detect variables and methods that are not used in the code of your host project. You can then remove them to free up memory. These commands are found in the **Edit** menu of the Design environment. + +### Find Unused Methods and Global Variables + +This command looks for project methods as well as "global" variables (process and interprocess variables) that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A project method is considered to be unused when: + +- it is not in the Trash, +- it is not called anywhere in the 4D code, +- it is not called by a menu command, +- it is not called as a string constant in the 4D code (4D detects a method name in a string even when it is followed by parameters in parentheses). + +A process or interprocess variable is considered to be unused when: + +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else in the 4D code, +- it is not used in any form object. + +Note that certain uses cannot be detected by the function - i.e. an element considered unused may in fact be used. This is the case in the following code: + +```4d +var v : Text :="method" +EXECUTE FORMULA("my"+v+String(42)) +``` + +This code builds a method name. The *mymethod42* project method is considered unused when in fact it is called. Therefore, it is advisable to check that the elements declared as unused are in fact unnecessary before you remove them. + +### Find Unused Local Variables + +This command looks for local variables that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A local variable is considered to be unused when: + +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else within the same method. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md new file mode 100644 index 00000000000000..3c24405e9ece42 --- /dev/null +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md @@ -0,0 +1,34 @@ +--- +id: openaifiledeleted +title: OpenAIFileDeleted +--- + +# OpenAIFileDeleted + +The `OpenAIFileDeleted` class represents the deletion status of a file in the OpenAI API. + +## プロパティ + +| プロパティ名 | 型 | 説明 | +| --------- | ------- | -------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | The ID of the deleted file (e.g., "file-abc123"). | +| `deleted` | Boolean | Whether the file was successfully deleted. `True` if deletion succeeded. | +| `object` | Text | オブジェクトタイプ。常に"file"。 | + +## Example Response + +```json +{ + "id": "file-abc123", + "object": "file", + "deleted": true +} +``` + +## Used by + +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) + +## 参照 + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index 5ec7d2bf4b799d..77358e3f4ca42f 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -40,41 +40,41 @@ title: OpenAIMessage **addFileId**(*fileId* : Text) -| 引数 | 型 | 説明 | -| -------- | ---- | -------------------------------------------------- | -| *fileId* | Text | The file ID to add to the message. | +| 引数 | 型 | 説明 | +| -------- | ---- | -------------------- | +| *fileId* | Text | メッセージに追加するファイルの ID 。 | -Adds a file reference to the content of the message. If the content is currently text, it will be converted to a collection format. +メッセージのコンテンツにファイル参照を追加します。 コンテンツが現在テキストの場合、コレクション形式に変換されます。 ## 使用例 -### Basic Text Message +### 基本的なテキストメッセージ ```4d -// Create an instance of OpenAIMessage +// OpenAIMessage のインスタンスを作成 var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Hello!"}) ``` -### Adding Images +### 画像の追加 ```4d var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this image:"}) -// Add an image URL with details +// 詳細とともに画像 URL を追加 $message.addImageURL("http://example.com/image.jpg"; "high") ``` -### Adding File +### ファイルの追加 ```4d -// Upload a file with user_data purpose +// user_data 目的でファイルをアップロードします var $file:=File("/RESOURCES/document.pdf") var $uploadResult:=$client.files.create($file; "user_data") If ($uploadResult.success) var $uploadedFile:=$uploadResult.file - // Create message and attach the file using its ID + // メッセージを作成し、ファイルをIDを使用して添付する var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this document:"}) $message.addFileId($uploadedFile.id) diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/overview.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/overview.md index 8ead5e34d3fdfa..b8656789a4680d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/overview.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/overview.md @@ -107,7 +107,7 @@ var $model:=$client.models.retrieve("a model id").model https://platform.openai.com/docs/api-reference/files -Upload a file for use with other endpoints +他のエンドポイントで使用するファイルのアップロード ```4d var $file:=File("/path/to/your/file.jsonl") @@ -115,19 +115,19 @@ var $result:=$client.files.create($file; "fine-tune") var $fileId:=$result.file.id ``` -List all files +全てのファイルをリストする ```4d var $files:=$client.files.list().files ``` -Retrieve file information +ファイル情報を取得する ```4d var $fileInfo:=$client.files.retrieve($fileId).file ``` -Delete a file +ファイルを削除する ```4d var $deleteResult:=$client.files.delete($fileId) @@ -135,7 +135,7 @@ var $deleteResult:=$client.files.delete($fileId) :::tip 関連したblog 記事 -[Transform Static Documents into Actionable Knowledge with 4D AIKit](https://blog.4d.com/transform-static-documents-into-actionable-knowledge-with-4d-aikit). +[Transform Static Documents into Actionable Knowledge with 4D AIKit](https://blog.4d.com/transform-static-documents-into-actionable-knowledge-with-4d-aikit) ::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png new file mode 100644 index 0000000000000000000000000000000000000000..96a5080c02477c29154f3aa239e64abafd26cccd GIT binary patch literal 99711 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 C4wrQR literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png new file mode 100644 index 0000000000000000000000000000000000000000..0b42697051581c10db4727c3d274276a3fb5c775 GIT binary patch literal 12825 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png new file mode 100644 index 0000000000000000000000000000000000000000..daf7ed8279c6d7345433adbe631f9ca461acf146 GIT binary patch literal 9894 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png new file mode 100644 index 0000000000000000000000000000000000000000..441f7c8c38a0b15866a19f621ae24eaedacf6060 GIT binary patch literal 14946 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 P`sC{;C7H^P#)1C}3M4?D literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..7c62a1652553136c4f3e3e86296a596ccfad74b8 GIT binary patch literal 11403 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png new file mode 100644 index 0000000000000000000000000000000000000000..cf973c42e8bce22ff1c77b686b57970b75d75fc5 GIT binary patch literal 6356 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 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..efc22783c719a5a024b7f3baac16e9bc5b2eeab4 GIT binary patch literal 5548 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 b|81a8bRVOjju&Zg00000NkvXXu0mjf$ExU6 literal 0 HcmV?d00001 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6aab5bbe6c632b40f926cefb77471c0689b6f2 GIT binary patch literal 50640 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 W;:1 and embedding<:2";$vector1Comparison;$vector2Comparison)\ - .orderByFormula(Formula(This.embedding.cosineSimilarity($vector1Comparison))) - - // 比較ベクトルを作成 -var $vector1Comparison:={vector: $myvector; metric: mk cosine; threshold: 0.4} -var $vector2Comparison:={vector: $myvector; metric: mk euclidean; threshold:1} - - //embedding 属性は、4D.Vector クラスオブジェクトを格納している4D フィールドに基づいています ds.VectorTable.query("embedding>:1 and embedding<:2";$vector1Comparison;$vector2Comparison)\ .orderByFormula(Formula(This.embedding.cosineSimilarity($vector1Comparison))) ``` @@ -1661,9 +1653,9 @@ ds.VectorTable.query("embedding>:1 and embedding<:2";$vector1Comparison;$vector2 `timeout` プロパティを設定すると、すでにキャッシュに存在するエンティティに新しいタイムアウトが設定されます。 これは頻繁に変更されないデータを扱う場合、つまり、サーバーへの新たな要求が必要ない場合に便利です。 -`maxEntries` は、ORDAキャッシュ内のエンティティの最大数を設定します。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 デフォルトは 30,000 です。 +`maxEntries` は、ORDAキャッシュ内のエンティティの最大数を設定します。 デフォルトは 30,000 です。 -最小エントリー数は 300 のため、`maxEntries` の値は 300以上でなくてはなりません。 それ以外の場合は無視され、最大エントリー数は 300 に設定されます。 それ以外の場合は無視され、最大エントリー数は 300 に設定されます。 それ以外の場合は無視され、最大エントリー数は 300 に設定されます。 +最小エントリー数は 300 のため、`maxEntries` の値は 300以上でなくてはなりません。 それ以外の場合は無視され、最大エントリー数は 300 に設定されます。 `timeout` および `maxEntries` として有効なプロパティが渡されない場合、キャッシュはデフォルト値または以前に設定された値のまま変更されません。 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md index 17d55be910983d..ffe3bbb2a96872 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command. +`WebForm` クラスには、Qodly の Web ページコンポーネントを処理するための関数とプロパティが含まれています。 `4D.WebForm` オブジェクトは [`webForm`](../commands/web-form.md) コマンドによってインスタンス化されます。
    履歴 @@ -31,9 +31,9 @@ The `WebForm` class contains functions and properties allowing to handle your Qo #### 説明 -The components of web pages are objects that are available directly as properties of these web pages. +Web ページのコンポーネント (構成要素) とは、これらの Web ページのプロパティとして直接利用可能なオブジェクトです。 -The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. +返されるオブジェクトは、[`4D.WebFormItem`](WebFormItemClass.md) クラスのものです。 これらのオブジェクトは、コンポーネントを動的に管理するために使用できる関数を持っています。 #### 例題 @@ -43,14 +43,14 @@ shared singleton Class constructor() var myForm : 4D.WebForm var component : 4D.WebFormItem - myForm:=webForm //returns the web page as an object, each property is a component - component:=myForm.myImage //returns the myImage component of the web page + myForm:=webForm // Web ページをオブジェクト返し、各プロパティがコンポーネントを表す + component:=myForm.myImage // Web ページの myImage コンポーネントを返す ``` :::info -While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. +`myForm` はデバッガの中で調べる場合には一般的なオブジェクトのプロパティを表示しないかもしれませんが、実際の`webForm` オブジェクトであるかのように振る舞います。 `myForm` を通して、下地となる`webForm` オブジェクトのプロパティと関数を操作することができます。 例えば、ページのコンテンツを動的に操作したり、あるいは `myForm.setMessage()` のような特殊な関数を使用してWebページにメッセージを送信したりすることができます。 ::: @@ -60,24 +60,24 @@ While `myForm` may not display typical object properties when examined in the de -| 引数 | 型 | | 説明 | -| ----- | ------ | :-: | ------------------------------------------ | -| state | string | -> | Name of state to disable from the web page | +| 引数 | 型 | | 説明 | +| ----- | ------ | :-: | ----------------------- | +| state | string | -> | Web ページ上で無効化するstate の名前 | #### 説明 -The `.disableState()` function disables the rendering of the *state* in the current web page. +`.disableState()` 関数は、カレントのWeb ページ内の *state* の状態のレンダリングを無効化します。 この関数は、以下の場合には何もしません: -- the *state* is currently not enabled in the web page, -- the *state* does not exist for the web page. +- *state* 引数のステートが現在Web ページ内で有効化されていない +- Web ページに対して *state* 引数のステートが存在しない。 同じユーザー関数内で複数の state を [有効化](#enablestate) または無効化した場合、すべての変更は関数の終了時に一括してクライアントに送信されます。 -For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +Web ページのステートについての詳細な情報については、[Qodly ドキュメンテーションのStates の章](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview) を参照してください。 ### .enableState() @@ -85,24 +85,24 @@ For more information on web pages states, please refer to the [States section in -| 引数 | 型 | | 説明 | -| ----- | ------ | :-: | ---------------------------------------- | -| state | string | -> | Name of state to enable on the web pages | +| 引数 | 型 | | 説明 | +| ----- | ------ | :-: | ------------------------ | +| state | string | -> | Web ページ上で有効化する state の名前 | #### 説明 -The `.enableState()` function enables the rendering of the *state* in the current web page. +`.enableState()` 関数は、カレントのWeb ページ内の *state* の状態のレンダリングを有効化します。 この関数は、以下の場合には何もしません: -- the *state* has already been enabled on the web page, -- the *state* does not exist for the web page. +- *state* 引数のステートが現在Web ページ内で有効化されている +- Web ページに対して *state* 引数のステートが存在しない。 同じユーザー関数内で複数の state を有効化または [無効化](#disablestate)した場合、すべての変更は関数の終了時に一括してクライアントに送信されます。 -For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +Web ページのステートについての詳細な情報については、[Qodly ドキュメンテーションのStates の章](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview) を参照してください。 #### 例題 @@ -121,17 +121,17 @@ Function authenticationError() -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ---------------------------------------- | -| msg | string | -> | Error message to display in the web page | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | -------------------- | +| msg | string | -> | Web ページに表示するエラーメッセージ | #### 説明 -The `.setError()` function sends *msg* as an error message to the web page. +`.setError()` 関数は、*msg* 引数のメッセージを、エラーメッセージとしてWeb ページに送信します。 -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". +この関数は、`__NOTIFICATION.message` プロパティが *msg* に、そして `__NOTIFICATION.type` が "error" に設定されている `__WEBFORM` オブジェクトと、 `200 OK` ステータスが本文に含まれているレスポンスを返します。 #### 例題 @@ -146,7 +146,7 @@ myForm.setError("My error message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: +イベントに対して [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) 機能が有効化されていた場合、 *message* 引数のメッセージは自動的に赤い *toast* としてページ下部に表示され、5秒後に自動的に消滅します: ![](../assets/en/API/webformClass-pic1.png) @@ -156,17 +156,17 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ---------------------------------------------- | -| msg | string | -> | Information message to display in the web page | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ------------------- | +| msg | string | -> | Web ページに表示する情報メッセージ | #### 説明 -The `.setMessage()` function sends *msg* as an information message to the web page. +`.setMessage()` 関数は、*msg* を情報メッセージとしてWeb ページに送信します。 -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". +この関数は、`__NOTIFICATION.message` プロパティが *msg* に、そして `__NOTIFICATION.type` が "message" に設定されている `__WEBFORM` オブジェクトと、 `200 OK` ステータスが本文に含まれているレスポンスを返します。 #### 例題 @@ -181,7 +181,7 @@ myForm.setMessage("My information message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: +イベントに対して [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) 機能が有効化されていた場合、 *message* 引数のメッセージは自動的に緑の *toast* としてページ下部に表示され、5秒後に自動的に消滅します: ![](../assets/en/API/webformClass-pic2.png) @@ -191,17 +191,17 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| 引数 | 型 | | 説明 | -| --- | ------ | :-: | ------------------------------------------ | -| msg | string | -> | Warning message to display in the web page | +| 引数 | 型 | | 説明 | +| --- | ------ | :-: | ------------------- | +| msg | string | -> | Web ページに表示する警告メッセージ | #### 説明 -The `.setWarning()` function sends *msg* as a warning message to the web page. +`.setWarning()` 関数は、*msg* 引数のメッセージを警告メッセージとしてWeb ページに送信します。 -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". +この関数は、`__NOTIFICATION.message` プロパティが *msg* に、そして `__NOTIFICATION.type` が "warning" に設定されている `__WEBFORM` オブジェクトと、 `200 OK` ステータスが本文に含まれているレスポンスを返します。 #### 例題 @@ -216,7 +216,7 @@ myForm.setWarning("My warning message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: +イベントに対して [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) 機能が有効化されていた場合、 *message* 引数のメッセージは自動的に黄色の *toast* としてページ下部に表示され、5秒後に自動的に消滅します: ![](../assets/en/API/webformClass-pic3.png) diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md index fe775d4b71c991..629252e50f8b37 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md @@ -3,13 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. +`4D.WebFormItem` クラスを使用すると、Qodly webform コンポーネントの振る舞いを管理できるようになります。 `4D.WebFormItem` オブジェクトは、[`Web Form`](../commands/web-form.md) コマンドによって返される [`4D.WebForm`](WebFormClass.md) オブジェクトのプロパティです。 -When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. +[`Web Form`](../commands/web-form.md) コマンドを呼び出すと、返された`4D.WebForm` プロキシオブジェクトには[**サーバー側参照**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) を持った、Webフォーム内のコンポーネントと同数の `4D.WebFormItems` が格納されます。 -For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference. +例えば、 `WebFormObject.myImage` は `myImage` をサーバー側参照として持っている画像コンポーネントを参照します。
    履歴 @@ -62,9 +62,9 @@ For example, `WebFormObject.myImage` refers to the image component with `myImage #### 例題 -To call a function that hides an image when the user clicks a button: +ユーザーがボタンをクリックした時に画像を非表示にする関数を呼び出すには以下のようにします: -1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: +1. `isHidden` という名前の共有シングルトンクラス内に、以下のコードをもった、[exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) 関数を作成します: ```4d @@ -73,12 +73,12 @@ exposed Function isHidden() var myComponent : 4D.WebFormItem myComponent:=Web Form.myImage - myComponent.hide() // Hide the component that has "myImage" as server reference + myComponent.hide() // "myImage" をサーバー側参照として持つコンポーネントを非表示にします ``` -2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". -3. Select the Button component and add an `onclick` event to it. -4. Attach the `isHidden` function to the event. +2. Qodly Studioにて: キャンバス上で画像コンポーネントを選択し、プロパティパネル > Server Side 内に、例えば "myImage" というサーバー側参照を入力します。 +3. ボタンコンポーネントを選択し、そこに `onclick` イベントを追加します。 +4. そのイベントに `isHidden` 関数を追加します。 ### .removeCSSClass() @@ -110,7 +110,7 @@ exposed Function isHidden() #### 説明 -The `.show()` function makes the component visible.If the component was already visible, the function does nothing. +`.show()` 関数は、コンポーネントを表示状態にします。コンポーネントがすでに表示状態だった場合、この関数は何もしません。 ## 参照 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md index 27599d57aca16f..bf9e1fc4602d32 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md @@ -79,9 +79,9 @@ title: 数値(実数、整数) ::: -### 倍長整数を返す除算 +### Integer division -倍長整数を返す除算演算子 \ は、整数値の有効値を返します。 +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### 実数の比較 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_number.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_number.md index 1fa1aa3c366a34..183009835aff38 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_number.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_number.md @@ -49,7 +49,7 @@ Números negativos são especificados com o sinal de menos (-). Por exemplo: | Subtração | Número - Número | Number | 3 – 2 | 1 | | Multiplicação | Número \* Número | Number | 5 \* 2 | 10 | | Divisão | Número / Número | Number | 5 / 2 | 2.5 | -| Divisão inteira | Número \ Número | Number | 5 \ 2 | 2 | +| Integer division | Número \ Número | Number | 5 \ 2 | 2 | | Módulo | Número % Número | Number | 5 % 2 | 1 | | Exponenciação | Número ^ Número | Number | 2 ^ 3 | 8 | | Igual | Número = Número | Parâmetros | 10 = 10 | True | @@ -79,9 +79,9 @@ O operador do módulo % devolve valores significativos com números que se encon ::: -### Divisão inteira +### Integer division -O operador da divisão de longint retorna valores significativos apenas com números inteiros. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. ### Comparação real @@ -125,16 +125,16 @@ Já que cada bit pode ser igual a 0 ou 1, também se pode pensar num valor Long An expression that uses a bitwise operator returns a Long value, except for the Bit Test operator, where the expression returns a Boolean value. A tabela a seguir lista os operadores bitwise e sua sintaxe: -| Operação | Operador | Sintaxe | Retorna | -| ----------------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------- | -| Bitwise AND | & | Long & Long | Long | -| OU (inclusive) | | | Long | Long | Long | -| Bitwise OR (exclusivo) | ^ | | Long ^ | Long | Long | -| Left Bit Shift | << | Long << Long | Long (ver nota 1) | -| Right Bit Shift | > > | Long >> Long | Long (ver nota 1) | -| Bit Set | ?+ | Long ?+ Long | Long (ver nota 2) | -| Bit Clear | ?- | Long ?- Long | Long (ver nota 2) | -| Bit Test | ?? | Long ?? Long | Boolean (ver nota 2) | +| Operação | Operador | Sintaxe | Retorna | +| ----------------------------------------- | ----------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------- | +| Bitwise AND | & | Long & Long | Long | +| OU (inclusive) | | | Long | Long | Long | +| Bitwise OR (exclusivo) | ^ | | Long ^ | Long | Long | +| Left Bit Shift | << | Long << Long | Long (ver nota 1) | +| Right Bit Shift | > > | Long >> Long | Long (ver nota 1) | +| Bit Set | ?+ | Long ?+ Long | Long (ver nota 2) | +| Bit Clear | ?- | Long ?- Long | Long (ver nota 2) | +| Bit Test | ?? | Long ?? Long | Boolean (ver nota 2) | #### Notas diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Extensions/develop-components.md b/i18n/pt/docusaurus-plugin-content-docs/current/Extensions/develop-components.md index 5db2ccbb2970ed..27e7ffc5db794a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Extensions/develop-components.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Extensions/develop-components.md @@ -114,6 +114,12 @@ Standard 4D IDE features are available for the component. You can execute the fo - run methods, - restore from trash or empty trash. +### Search and replace + +You can use the [**Search and replace** features](../Project/search-replace.md) of the host project to search elements within the code or the forms of your editable components. The **Search in project** menu allows you to select one or all components as search target: + +![](../assets/en/Project/find-components.png) + ## Escopo dos comandos de linguagem A excepción de los [comandos no utilizables](#comandos-inutilizables), un componente puede utilizar cualquier comando del lenguaje 4D. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md index aa57b4c3d05eab..06797832a33621 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md @@ -10,8 +10,10 @@ Leia [**O que há de novo no 4D v21 R2**](https://blog.4d.com/en-whats-new-in-4d #### Destaques - [Code Live Checker](../code-editor/write-class-method.md#warnings-and-errors) has been enhanced to provide greater precision in error detection (see [this blog post](https://blog.4d.com/better-error-handling-and-type-inference-for-4d-developers) for more information). +- [4D Write Pro standard actions](../WritePro/user-legacy/standard-actions.md) that apply [lists](../WritePro/user-legacy/using-a-4d-write-pro-area.md#lists) now automatically adjust paragraph margins to keep markers positioned inside it. - Built-in support of `order by` in query strings for AI vector searches using [`query()`](../API/DataClassClass.md#query-by-vector-similarity) functions and the [REST API](../REST/$orderby.md). - 4D AIKit component: new [File API](../aikit/Classes/OpenAIFilesAPI.md) class to implement **file upload** features. +- [**Find in Design**](../Project/search-replace.md#search-in-components) and [**Replace in contents**](../Project/search-replace.md#replace-in-contents) features can now support editable components. - [**Lista de erros corrigida**](https://bugs.4d.fr/fixedbugslist?version=21_R2): lista de todos os bugs corrigidos em 4D 21 R2. #### Mudanças de comportamento diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Project/project-method-properties.md b/i18n/pt/docusaurus-plugin-content-docs/current/Project/project-method-properties.md index 6846ddfc1ce779..d3abe03f6f198d 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Project/project-method-properties.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Project/project-method-properties.md @@ -22,9 +22,9 @@ El nuevo nombre debe cumplir con las reglas de denominación de 4D (ver [Identif :::caution -Alterar o nome de um método já utilizado na base de dados pode invalidar quaisquer métodos ou fórmulas que utilizem o nome do método antigo e arrisca perturbar o funcionamento da aplicação. Puede cambiar el nombre del método manualmente, pero se recomienda utilizar la función de cambio de nombre de los métodos proyecto, descrita en [Renombrar](https://doc.4d.com/4Dv20/4D/20.2/Renaming.300-6750165.en.html). Com esta função, é possível atualizar automaticamente o nome sempre que o método for chamado em todo o ambiente de Desenho. +Changing the name of a method already used in the project can invalidate any methods or formulas that use the old method name and runs the risk of disrupting application functioning. It is strongly recommended to use the [renaming function for project methods](../Project/search-replace.md#renaming-project-methods-and-variables). Com esta função, é possível atualizar automaticamente o nome sempre que o método for chamado em todo o ambiente de Desenho. -Com 4D Server, o nome do método é alterado no servidor quando termina de o editar. Se mais do que um usuário estiver a modificar o nome do método em simultâneo, o nome final do método será o nome especificado pelo último usuário a terminar a edição. Pode ser necessário especificar um proprietário do método para que apenas determinados usuários possam alterar o nome do método +Com 4D Server, o nome do método é alterado no servidor quando termina de o editar. Se mais do que um usuário estiver a modificar o nome do método em simultâneo, o nome final do método será o nome especificado pelo último usuário a terminar a edição. Pode ser necessário especificar um proprietário do método para que apenas determinados usuários possam alterar o nome do método. ::: @@ -103,7 +103,7 @@ Para más información, consulte [Implementación del motor SQL de 4D](https://d *Esta opção está obsoleta. Calling code through REST calls is only supported with [ORDA data model class functions](../REST/ClassFunctions.md).* -### Definição de lotes para atributos de métodos +## Definição de lotes para atributos de métodos Usando a caixa de diálogo "Atributos para métodos", você pode modificar um atributo (Invisível, oferecido como um serviço Web, etc.) for all or part of the database project methods in a single operation. Esta caraterística é especialmente útil para modificar os atributos de um grande número de métodos de projeto. Também pode ser utilizado durante o desenvolvimento para aplicar rapidamente atributos comuns a grupos de métodos semelhantes. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Project/search-replace.md b/i18n/pt/docusaurus-plugin-content-docs/current/Project/search-replace.md new file mode 100644 index 00000000000000..cd977d8d68b1f6 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Project/search-replace.md @@ -0,0 +1,283 @@ +--- +id: search-replace +title: Search and Replace +--- + +4D provides several search and replace functions for elements in all of the Design environment. + +- You can search for a string or a type of object (variable, comment, expression, etc.) in part of or in the entire project on the basis of custom criteria ("starts with", "contains", etc.). You can, for example, search for all the variables containing the string "MyVar", only in methods whose name begins with "HR_". +- The results are displayed in a results window, where it is possible to perform replacements in the contents. You can also export these results in a text file that can be imported into a spreadsheet. +- You can detect variables and methods that are not used in your code and then remove them to free up memory. +- You can rename a project method or a variable throughout the Design environment in a single operation. + +:::note + +There are also functions for searching among the methods of your project in the context menu of the Methods Page in the Explorer: **Search Callers** (aussi available in the [Code editor](../code-editor/write-class-method.md#search-callers) and **Search Dependencies**. Both functions display the items found in a [Results window](#results-window). + +::: + +## Search Location + +When you search the Design environment, the following elements are searched: + +- Names of project methods and classes +- Contents of all methods and classes +- Names of tables, fields and forms +- Contents of forms: + - object names and titles + - names of help tips, pictures, variables, style sheets, + - formatting strings + - expressões +- Menus (names and items) and commands associated with menu items +- Choice lists (names and items) +- Help tips (names and content) +- Formats / filters (names and content) +- Comments in the Explorer and in the code + +## Find in Design + +### Starting a search + +Specify your search criteria in the "Find in design" window: + +1. Click on the Search button (![](../assets/en/Project/search-icon.png)) in the 4D toolbar. + OR + Select the **Find in Design...** command from the **Edit** menu. + +The "Find in design" window appears: + +![](../assets/en/Project/find-in-design.png) + +The areas of the "Find in design" vary dynamically depending on the selections made in the menus. You can expand this window so that all options are visible: + +![](../assets/en/Project/find-in-design-expanded.png) + +2. Build your search using the different menus and entry areas of the dialog box and if necessary enter the character string to be searched for. These items are described in the following sections. + +3. Set the [search options](#search-options) (if necessary). + +4. Click **OK** or press the **Enter** key. + When the search is finished, the [Results window](#results-window) appears, listing the elements found. + +:::note + +You can cancel an extensive search that is underway using the **x** button; this does not close the window or remove any results that were found. + +::: + +Once you have executed a search, the value entered in the search area is saved in memory. This value, as well as all the other values entered during the same session, can be selected from the combo box. + +### Find + +You specify the type of element to look for using the **Find** menu. The following choices are available: + +- **Text**: In this case, 4D looks for a character string throughout the Design environment. The search is done in plain text mode, without taking the context into account. For example, you can look for the text "ALERT("Error number:"+" or "button27". In this mode, you cannot use the wildcard character because "@" is considered to be a standard character. +- **Comment**: This search is basically the same as the previous one, but it is restricted to the contents of comments (lines beginning with //) in the code and in the Explorer window. For example, you can search for any comments containing the string "To be verified". + +:::note + +The end result of both types of searches depends on the [search mode](#search-mode) selected. + +::: + +- **Language expression**: Used to search for any valid 4D expression; the search is performed in the "contains" search mode. Validity is important because 4D must be able to evaluate an expression to be able to search for it. For example, a search for "[clients" (invalid expression) will not return any result whereas "[clients]" is correct. This option is particularly suitable for searches for value assignments and comparisons. Por exemplo: + - Search for "myvar:=" (assignment) + - Search for "myvar=" (comparison) +- **Language element**: Used to search for a specific language element by its name. 4D can distinguish between the following elements: + - **Any language element**: Any element from the list below. + - **Project method or Class**: Name of a project method or class, for example "M_Add" or "EmployeeEntity". + - **Form:** Form name, for example "Input". The command searches among project forms and table forms. + - **Field or Table**: Name of a table or field, for example "Customers". + - **Variable**: Any variable name, such as "$myvar". + **4D constant**: Any constant, such as "Is Picture". + **String in quotes**: Literal text constant; i.e. any value within quotes in the code editor or inserted into text areas of the Form editor (static text or group boxes). For example, a search for "Martin" will return results if your code contains the line: `ds.Customer.query("name = :1"; "Martin")` + - **4D command**: Any 4D command, for example "Alert". + - **Plug-in command**: Plug-in command installed in the application. + - **Properties**: An object property name (includes ORDA attribute names). For example "lastname" will find "$o.lastname" and "ds.Employee.lastname". +- **Any object**: This option searches among all the elements in the Design environment. Only the modification date filter is available. Use this option, for example, to search for "anything modified today". + +### Search mode + +The search mode menu (i.e. "which", "that is" or "whose name") specifies how to search for the value that is entered. The contents of this menu vary according to the type of element to search for as selected in the **Find** dropdown list. + +- Search options for Text or Comment: + - **contains**: Searches all text in the Design environment for the specified string. Search results for "var" can include "myvar", "variable1" or "aVariable". + - **contains whole word**: Searches all text of the Design environment for the string as a whole word. Search results for "var" only include exact occurrences. They will not include "myvar" but will include, for example, "var:=10" or "ID+var" because the symbols : or + are word separators. + - **begins with / ends with**: Searches for the string at the beginning or end of the word (text search) or at the beginning or end of the comment line (comment search). In "Text ends with" mode, searching for "var" will find "myvar". +- Search options for Language element: The menu offers standard options (matches, contains, begins with, ends with). Note that you can use the search wildcard (@) with the matches option (returns all objects of the type specified). + +### Search in components + +When your current project references [editable components](../Extensions/develop-components.md#editing-components), you can designate one or all your components as a target for the search. By default, a search is executed in the host only. To modify the target for a search, deploy the **in the project** menu: + +![](../assets/en/Project/find-components.png) + +You can select as target: + +- the **host project** (default option, top of the list): the search will only be executed within the host project code and forms, excluding components. +- the **host project and all its components**: the search will be executed in the host project and in all its loaded components. +- a **specific component**, among the list of all searchable components: the search will be restricted to this component only, excluding the host and other components. + +:::note + +When no searchable component is found, no menu is available. + +::: + +The **in the folder** menu (see below) is updated when you select a project since the availability of folders depends on the selected search target(s). The menu is hidden when you select the "host project and all its components" option. + +### Folder + +The **in the folder** menu restricts the search to a specific folder of the project. By default ("Top Level" option), the search takes place in all the folders. + +:::note + +Folders are defined on the Home Page of the Explorer. + +::: + +### Modification date of the parent + +This menu restricts the search with respect to the creation/modification date of its parent (for example, the method containing the string being searched for). In addition to standard date criteria (is, is before, is after, is not), this menu also contains several options to let you quickly specify a standard search period: + +- **is today**: Period beginning at midnight (00:00 h) of the current day. +- **is since yesterday**: Period including the current day and the previous one. +- **is this week**: Period beginning on Monday of the current week. +- **is this month**: Period beginning on the 1st day of the current month. + +### Searching options + +You can select options that can help speed up your searches: + +- **Search in forms**: When this option is deselected, the search is done throughout the project, except in forms. +- **Search in methods**: When this option is deselected, the search is done throughout the project, except in methods. +- **Case Sensitive**: When this option is selected, the search uses the case of the characters as they have been entered in the Find area. + +## Results window + +The Results window lists all elements found that match the search criteria set using different types of searches: + +- [standard search](#starting-a-search) +- [search for unused elements](#find-unused-methods-and-global-variables) +- [search for callers](../code-editor/write-class-method.md#search-callers) +- search for dependencies +- [renaming of project methods and variables](#renaming-project-methods-and-variables) + +It shows the results as a hierarchical list organized by type of elements found. You can expand or collapse all the hierarchical items in the list using the options menu (found at the bottom left of the window) or in the context menu. + +![](../assets/en/Project/result-window.png) + +You can double-click on a line in this window to view the element in its editor, such as the [code editor](../code-editor/write-class-method.md). If you do several searches, each search opens its own result window, leaving previous result windows open. + +When more than one occurrence has been found, the list indicates their **count** next to the element name. + +Each line can display a tip that provides additional information, for example the element property that matches the criteria, or the number of the form page that contains the occurrence. + +When an element found belongs to a component, the **component name** is displayed in parenthesis at the right side of the element name: + +![](../assets/en/Project/find-components-results.png) + +Once a search is completed, you can use the ![](../assets/en/Project/result-window-re.png) button to perform the search again with the same criteria and options. + +### Options menu + +You can perform various actions using the options menu: + +![](../assets/en/Project/result-window-menu.png) + +- **Remove from list**: removes selected item(s) from the results window. More specifically, this lets you keep only items targeted by a replacement operation in the contents or used for drag and drop between applications. +- **Remove all items from list except selection**: clears everything from the results window except for the selected item(s). +- [**Replace in content**](#replace-in-contents): replaces a character string within the selected item(s). +- **Select >**: selects one type of item (project methods, object names, and so on) from among all the items found in the Results window. The hierarchical sub-menu also provides commands to select (All) or deselect (None) all the items at once. +- **Collapse all/Expand all**: expands or collapses all the hierarchical items in the list of results. +- **Export Results**: exports information about the search criteria and elements listed in the Results window. This text file can then be imported into a spreadsheet such as Excel, for example. For each item, the following information is exported as tab-separated values in a text file: + - Host project or component name + - Type (method, Class, formObject, trigger...) + - Path + - Property (if accurate): provides the property of the object that matches the criteria. For example, a string could be found in a variable name (variable property) and an object name (name property) within in the same form. This field is empty when the matching element is the object itself. + - Contents (if accurate): provides the contents that actually matches the criteria; for example, the code line that contains the requested string. + - Line number (for code) or page number (for form objects) + +## Replace in content + +The Replace in content function allows you to replace one character string with another within the listed objects in the Results window. It is available in the [options menu](#options-menu) of the window. + +:::note + +The **Replace in content** menu item is disabled if you work in a read-only database (e.g. in a .4dz file). + +::: + +When you select this command, a dialog box appears where you enter the character string that will replace all the occurrences found by the initial search: + +![](../assets/en/Project/replace-content.png) + +Replacing operations work as follows: + +- Replacing is always carried out among all items found in the list and not just for a selection. However, it is possible to narrow the replacing operation by first reducing the contents of the list using the **Remove from list** or **Remove all items from list except selection** commands in the [options menu](#options-menu) or the contextual menu. +- If the Results window includes elements from components, the replacing will be done in the component(s) also. +- Only the occurrences shown in the list will be replaced and only after checking the initial search criteria for cases where objects were modified between the initial search and the replacing operation. +- Replacing is done in the code, properties of form objects, contents of help messages, entry filters, menu items (item text and method calls), choice lists, comments. +- For each object modified, 4D checks whether it is already loaded by another machine or in another window. In the case of conflict, a standard dialog box appears indicating that the object is locked. You can close the object and then try again or cancel its replacement. The replacing operation will then continue with the other objects in the list. +- If a method or form concerned by a "replace in content" operation is currently being edited by the same 4D application, it will be modified directly in the open editor (no warning appears). Forms and methods modified in this way are not saved automatically: you will need to use the **Save** or **Save All** command explicitly to validate the changes. +- After a replacement is made in a list item, it will appear in italics. A count of replacements made in real time appears at the bottom of the window. +- Elements are never renamed themselves by the **Replace in content** feature, except for form objects. Hence it is possible that certain items in the list may not be affected by the replacing operation. This can occur when only the item name corresponds to the initial search criteria. In this case, the list items do not necessarily all appear in italics and the final replacement count may be less than the number of occurrences found by the initial search. + +## Renaming project methods and variables + +4D provides a dedicated renaming function with distribution throughout the entire project for project methods and variables. + +The **Rename...** command is available from the [Code editor] (for project methods and variables) and the Explorer context menu (for project methods). + +![](../assets/en/Project/rename.png) + +When you select this command, a dialog box appears where you enter the new name for the object: + +![](../assets/en/Project/rename-dial.png) + +The new name must comply with [naming rules](../Concepts/identifiers.md); otherwise a warning appears when you validate the dialog box. For example, you cannot rename a method with a command name such as "Alert". + +Depending on the type of object you are renaming (project method or variable), the renaming dialog box may also contain a distribution option: + +- Project method: The **Update callers in whole database** option renames the method in all the project code that references it. You can also uncheck this option in order, for example, to rename the method only in the Explorer itself. +- Process variable: The **Rename variable in whole database** option renames the variable in all the project code that references it. If you uncheck this option, the variable is only renamed in the current method. +- Local variable: No distribution option for this object; the variable is only renamed in the current method or class. + +## Searching for unused elements + +Two specific search commands allow you to detect variables and methods that are not used in the code of your host project. You can then remove them to free up memory. These commands are found in the **Edit** menu of the Design environment. + +### Find Unused Methods and Global Variables + +This command looks for project methods as well as "global" variables (process and interprocess variables) that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A project method is considered to be unused when: + +- it is not in the Trash, +- it is not called anywhere in the 4D code, +- it is not called by a menu command, +- it is not called as a string constant in the 4D code (4D detects a method name in a string even when it is followed by parameters in parentheses). + +A process or interprocess variable is considered to be unused when: + +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else in the 4D code, +- it is not used in any form object. + +Note that certain uses cannot be detected by the function - i.e. an element considered unused may in fact be used. This is the case in the following code: + +```4d +var v : Text :="method" +EXECUTE FORMULA("my"+v+String(42)) +``` + +This code builds a method name. The *mymethod42* project method is considered unused when in fact it is called. Therefore, it is advisable to check that the elements declared as unused are in fact unnecessary before you remove them. + +### Find Unused Local Variables + +This command looks for local variables that are declared but not used. The search results appear in a standard [Results window](#results-window). + +A local variable is considered to be unused when: + +- it is [declared](../Concepts/variables.md#declaring-variables) in the 4D code, +- it is not used anywhere else within the same method. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md new file mode 100644 index 00000000000000..d3ea7fa1b5df81 --- /dev/null +++ b/i18n/pt/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md @@ -0,0 +1,34 @@ +--- +id: openaifiledeleted +title: OpenAIFileDeleted +--- + +# OpenAIFileDeleted + +The `OpenAIFileDeleted` class represents the deletion status of a file in the OpenAI API. + +## Propriedades + +| Nome da propriedade | Tipo | Descrição | +| ------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------- | +| `id` | Text | The ID of the deleted file (e.g., "file-abc123"). | +| `deleted` | Parâmetros | Whether the file was successfully deleted. `True` if deletion succeeded. | +| `objeto` | Text | The object type, which is always "file". | + +## Example Response + +```json +{ + "id": "file-abc123", + "object": "file", + "deleted": true +} +``` + +## Used by + +- [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) + +## Veja também + +- [OpenAIFilesAPI](OpenAIFilesAPI.md) diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-components-results.png new file mode 100644 index 0000000000000000000000000000000000000000..96a5080c02477c29154f3aa239e64abafd26cccd GIT binary patch literal 99711 zcmZU)1yEc~v@Qxkf_rcs2KT|;-Ccq+KyY^r1h?Ss?(Xg$JV0=VV8I<8{O8nt_tmSZ zsolG~cgyPTCEr>drlcT=jDU{-0Re$5EhVM`0Rg%H{%3`Qeb3o7%u#)RKsu>Nia=ET zB0PG3fi@SG7lweSjX``if_Z<3x0lj(f`CBj{rE$+#9E!ce-L7!rsb?9FUMnIXTxX& zwlg+mbhoj8uMGjgC+Kc(WMXCNOloXuZehz$b>7}hMQQ=&r_yAXXO_1YHT`BG<>_du z>Zzb+;%Q~V4W<$lKt|wm=Xr0z#?;w})ZNC~)``cRAMjtpJn!j`Y$kvJpCj0eM@3BH ze`~zI@dLg&JKOUxF}b<9F}krb+Buptv2b&9GckjhKp=+q8VpVzw$4WG47N_>|J#6= zsgsGLg}t+doh|7{gGR=7F3$V_7Z(dKkC~AfyD=Ed&R}fB3T9wo0UI$GfmvA?z^trb zPIeY9kQs|H;D5V!wlMpD`?q!aUoyNCgz2M%iG`8*W5^$A9z{nB)Avz)bSc2X_h0${ zCy$TmV<7+6zy$s$=Y6j4ssBTn4>J89>YCcVlho~cK8##fBdxk^f*Vw#m9+tJyRP2C=cTJM2&31@vwrAOBZ4gPhba=QqTPQofu;6g9E#9}q96-9-p>50S=vVjDqRuf{X)D)VR~^&nNz7T@5?y9S z@K1AY^{C~)_F8#uR}wnw4qYK##d$J|8XFV$_swKvWgU1jo!#6_8g)ubONFZ!^QjR~ zLIR(ky{|p_%gVrar3j?{X(%ky>%IRnWb|)fe`~feLs&Y8uSdHMQ(1=N<~RrwUfT=QVBkU zm6g%c)1x85vZPN+#Wmn(V1z->&COAV2aJMs)|m059FJxxl9H0#cVi{B+Fcp?`}^Oi zR9jOcM2(e~pC8!UD?BznUaM1CzJd?{abyZRMQrp|EwDNL;OQBt{H)%Hm1@GKw={KZ z*FD&Z$PhWPGRjolW0#Bu{l&32Rqn@@thu|>+Y_O{V$Y#Fl9xEegIVgo6F!STym7Y*%L(f3e?~tloanU(yw;X-v&o zmKB$Wr2L_4`jw1lt?%m-f!6Km9%}a;7O#~L*VUyIa?`Z;BS_hg1~LX&T3s0nMjS>M z%eE4^Tspu+)8j^jDMAG@{c_SDJAwVb^&tD7^`H)?XJmBT9YJR_=#nEv%gM>{HyMt; zsLy^u@(&^Q3>6}UXx-OW#=3ZV!HtqgOHV&KJuNIM3LYl$BP?GS8;rn#hYj34IA8^V z`nI^{iYKf$y1zrGA=P!|*0$k$78It-A0!hmpjKqQyVMD|c zJ7%9Car&N-_>63)aIw{yxwnOK>^I^K~2De=H1J_&0MD8m6pZiin?%>1Q*qGxxY z(5%T#dl(JER!c{kAl%aB@5}2m8T!uie}1psuN#DR>7=D_V2p9-G|S z@!96(a=!QdZ{a@@R4FH|6JCB#tm}d+W4nDAx%LSovw-pX`X71H3CE7J|LsOw9UncJ z;<<~%{Fuufk~duGxTS7CLEGkZ!IwEf)2S@}R?0&wqW%$N>NqLj&pqqu2{5Sq*i@S` zew1_^R7amr%^A!qtfV}6?5PhAs9@ucKP3##0faA;RG;S-eF`9pshsi-6uciJ$0~T_ zy7^<3ah6!xaxU9(xjOFsMlf};l;(Z%U1S2L5OLE->j^5ZWaxSb8{g(^<#Q} z9nWeKm?_948*Mj3g+bDV#6H-xO%&yV;Zto6PAVNlu;i+(^#wVU(3Iq zY`hShF-6(8RDIt)5Ggs_tfp_ik(*Ttb^s=#?g_5r8V_vX$k=k$Be3y_pGc1! zKt?D_0}|pFSC)q)Rhj)_cZ*|AzM9TDP52sB5+>H9&7TCwRDdE4r%gRlh9%HRg&$IC zz^|8h7gD~G1=-K7~zN4wdU2oVvHjgu1-At-cs zXTX@HL!W6%@Qtsqu&{h`3l4xC0p;Z!8c&6KWwb^rvaF!*dyD>C6FO9}$!Y85u62nc z#-yK>@8y~}+E16zCOIml*P7x-eP<6$Pl!s;D|= zSLWxsWRwU?4*ImyBux|~f4OW{k2?qD$Injax5^z43QQ!jt0lNkZ+NzSh}D_r-|&{d zZJ^Gp=a!a6X7VMM>&;OWisPLQevyR(-dV3`@mwVevx>rv*huJ|*r zqr~ki*MwZc2wo()K%f_i6+oez%lV?ZaXCKrxw?^VH;rG0mpUHkPAPjyJ7l0x57I-qZfx|Ini8 zMdCYmrb2x~gBTz2XQArF9oKd{Tr%rH^GPVucwIAJnCEfcl!Ut7pP0wi6OE5Av#Y)6nKuae9P^{sTBujHj`vNodxoR-8$mzE z7%u3V?M+|olHaunPD1nB(YHpECpnF=<6v88k=w?`mBhWVx)pEi>}bywlh^B~|IQsr zw`OMde7eaTgPJ3zz?*{Z8#mAd9$Go1HzD)xagpSSXmz?$k1ReKZ8$)^x?S>Ytd5g> zvCG%e6(Y@Gg~;H2P_GVc2cPQ83gG3VF%^y-zTg-wBIXRF5R;gLm&HuQ(FLq*i^8UW z(f|yy3S6`=UzFLl9C6WX5qxBn zT81+tatTBR{zJ#lV?Xiw=Rmxs<1g=)PP7kF*`vnn#H25pNT{akGrFhG ze=XpB;Ko z_NShJDCFIZ(t0mElH!}Q86JL3<}aqHs;iUn^UB%vTj;c=9ww_p3VsD8gAJzBMN3YOb`M~8&+K$ zZO~c^Qw>X9d=xB2feDPmLlXxoi+!nM5s7tT)eXalBlXV!pInCMo}~_T9Z~3e-;&*0 zuL)%>1PEuZNhwsG$c6yTK5Hn?(Zq#8kIHfQDUSq`lDT!DnG_t;o*Sg(xnE%ud!CK+ zwX_DPRHFxynoS`JjlxtVI`#SU3JO`YqPB}?uVu%PrOL&{!Z^2`_+*mqzN)C#<-R@^ z9dThsWnQ}s()b!Oz$lQHARIZzfpsKikI?4fI){JR|LymUJeK*_J{j6N1xk|3C(Vs_ z#B|F489pps@C8~~45OOJjxv=rODYdx`T7$rEv+MuJS{nSD8{zlW7hkLpEP$_gmMC9 z?HAiQUv+!8^vnn+ZmnzI+BhpK8IDu_jF)q3WKFJ9YBR<3jevGcxwtU;g9A-C#z&q% zIj>iG(3gwKz1|f{QynVOjP7CaBiQ80<2*m#d8)u3TINElKsQG%^s`s%>hHnL4m??1 z%C3Z=&Zgi-_JxF2$NtbV3=KCHt3~X%i2*G%geA?d{%bWV0yNkXPc6EF(Z-IO4!Ama^IIMtV%26+bbEWDlV-atYgkF?%GwyZo*MJh}h<8P;-lu9i%0Q{-suyFrxxNqZwm=4<>TZBvWt+X7#(f>+m`Gw8Ka> z*x0x`8lS=aNNh*Kr+D5Wq_0e-AR1o#nBQ?be#fORI5H1r8kfP3D25PqPoO*R9`_>2 zEVNT5t8RgFGWLJmzslgzmprz|`syp-kz}x#Q1#AhyT7{eGZ)8Mpk$|RuExcS`9ek? zVi^3{%PSd3l_#Z2wX`$hF)9F4FjJYAmh(=&LK3MD(fmc}80#%!=7^sFyCII72@d*V zib~!&mE}fU>~RMZNNPuWQg7%+%3~;*;t9{^H!s!TROB`_WX$Fv^F8(TThrd;;ndl5 zm64Ll@La3>SkEOJ+V#F&z&7HnN>B_KJ)?}yOzlxt5fShD@)I5<<6zCn=f@RC{b;LL ze=k&nq;&!`-w#-wqrVn~jedADs67p%hVe+*xeKo<1>r*g0}`jEL=5(N#BTcMI7!OB$zIKe=f!i_0+1jWoU#<434J! zyI*NtP2Xn=F>S(<#ysKdbT&fqhmu~+u52*=X!|9eK@QH;Iw#EF<=I6+Yp50j3g*plwlJ(g77pJaSE8*)7;2aSM$$M2qjh)g8Mpg29(ETo0BnUuc#HuRYd z>4>JRGPkJ?u33AG-C`s2y!~DDc#!s;ORUCrz#hx?63MO@7YgrwDbjFVL{qvv*yQ-VaM=}>>HzOB)TAc4rb#2W z*)**~kLlvnPCzDgyau24x(On2PymD6hK;=$lkH1w(RBZ|6r%hEpzHBeaH~AVPFQel z@LCKmo?C833~i%{%HyI|59=vY%Z5<~F`W8Jhh>+i@`&DcjF!KIm0!0FG?rjp>=_uN zw!ybmipBUs{nG1ERN0tN=CF+^d|5U=LO%>&NK`?Sd}K*1T;Uxj_}VM0rX|95S3q4| zmbYXB0S)X#&hGx%DDHb{{iv%=nR-NM=!hV5d#`PMVy0WVOYrvm#HW60_HP21h0H#W zy=SD(@o$!dUsCx5;CF{=H^Wz0yh?+CBwwFXZ={uC1XP)jeLMN=eG@A)5kUk^!Ku*M zle&m9jUjD(cbr0?1EBe$q}(v^PcH4R>)*`<321wvjfqUFG&VOW@LR zZ4L95O`?AJ_To$S)-0$aX|dcmN>G2!fOv>RN&kD*$-EOqIbk~N6X`Z}d5)(jgFp2;{KRzu=B)w z*W#>vVi-%CvIv)X&n~B;04s)u00^!2F868k4ga0)A051gYPu$}E^|s*ZSaLJD+(WJ zl*wkMtO{ICl2T%{SY{tQ8F&RDm&$fL)OT+gx;W{kHQAKR||ZzIC29U6B_TCPV4W@X?PZb~0o*E-xE( zYjaqJa-Rjr&?eI1Kn5;|x;T&pG49CcDnh7Jk_Yyx_3f9j&ttXN>vUk5Lp!GeX`r2X z5IO4Ml@)S0J(gNLm{0{C02{CUBo~sXmBTrhVPEEzl#PcsN65RU1IKAei!lo_h%K8= z_hKcx2ku^XQ6Gv8)}^}CLptfRx5prESIsMez)=!T)$PaMwXtA+FM7HkJ>Yj;Ug{8g zhwsk zaWQF5t;Hj}ml>m>W*mq;o}<9itMEF+(|;I3z5l(~J-Vp>fU)sb>^G83vMk)C*Vd@n zT=r9;Sh`>@{gYEbX%^4A`zad(RPKUoXHK(HTXB+_Sw?;FKHP4is#%tKO=D&(3}RCU z1a|TF>oIO%JP?z{@#U9OBUe!BjD~{GHJyTir75ko_~m0QPbBU(`hNN`m)j=L9MyYd zhAc>K57rw6zI^mYiVQQ)AK9sUI80gL{eJk_v9X!LFa>9a+x+|vzp|iFDZ=XUpy9uH z-+TnZLE~VQE_r?lM*4AnYiU+n5(-a9kun1@pY3PQuaL)AK(Ki4 zNx5m|lpKI>Jnyf`&OXunc7E&lzM~{0dW2;X>l@g91)Xzv)8{k+8SpO$O*q zPuw?s$Dk-@$A$kMr+>puC6yQ8U98S`t<2Pt8vLpzCSDu3P@EMY)M1|gF}&%|F^HKnVC+9i+mHZOy_-#_K9vAo*_F#4jlx<2c-zPvVw4%orRL4g+WX))H5NK8V)6n(zVA5K; zwq^+x7lA~>V+lPw=GR}F)YN%J6A}O{U_zZrV-s}u9K^@~&hR(F7{hTo6QA$wZi~re zpk_G?0`c@K^gwuMN#ZZ*2s0GP+8I-5OASevBB`UjJG!Y~sF&~Ic%dBH(iI#pSHE~l z6tR4M< zV^#96%2{IWowa(c@N@RSl>o^RChb zCwzo<2sPN?1QL=R4{Y2L|M=)&uW`|1vT}iE#^rj=uYc@z85OmV;GV%1F-CKXH!5a^ zi%)FMVmhFy``s%yo(`F)=E{OtN7bLg?VBUdkhdRQrC#R55@)UX6pAGwfEwY#FqF-+ zLZ84ABn(XG-DNfcl??#kXK`y%)V6D}0@foZE66iLG35Q1Er&{`y3!J)2jPcUaU(Sd z&ESP$z9g!#Nq}G^LeRPKB{iJ2bj?P9VL@?+)~<3xzz9`QIq}I|9QB{(;mquyi6v{S z88Ah6LAY^Dsv0=@VwrT@DPNb{FAa6e}URHNK;x7Z-4t3TYMGgDCIP9yewoDy2b>Cju zM5~?WbeJJ3R?zj4RYoQ?)xF%nt6Q5UT6?;Grm(f*pf>QMhoBSI?!0i+-c5WtQbtMgF~s@sE>^4V9EGz(R{!I_0=- zTgm)DgS;IqzCY-@rEfky-FTF?E*HLOF-Kx{~ha}vFNBoJ&>V9u*xAlIRu0@rKj^Fi{#|N=*)$zxh1tauR zzv^qyexcYrqzk-hE}T?p>Jznjyx8?Jn7WOB_L{sg_1%ea%b$4fcz@k-%H>sM4~Qrl zNKbjatFF1t5=JVCOG22#`^{*r%`yC>b(BFM9(qRU=TB=16|mT7^puZHg{>5e;8Nd( z(@o?Qfp-0=FR`~fGNW{hY-g^j97oo+=GzOD1OsH&{cksSXIU7Hi}>y@4W1d6jMIpq z*ix1@9&Cqs4JEz5l$=NNc7v9$N8+BxF-}z$kxFAi!lxRy{4Fsm?LyWTaj&_!zXC*L zE;WPCq1lPdDjL(5e`JoGvb#@^xE0XxH#v3hAxO2jM!XY;&4A0TbEu+>7EhZjRVqHT zP^xfO*M?S;b8G;w)jJ%qn30ue61j+sxX_xLC14Efhtnwv6?y08xcyHWMHi1U4?JAg#hsn*_Xf0W7H4$J zi`OjW_3{s{B9j>Q!XwTmC!8vJ01D$d?)cK-VL$#kvN@*;{vj3Y4pabnTon*2N*7J?&SWkVlwVfF@|fosL>si~9LNj;UrMIZBrcJslAh^%mY?BlBLTA3P^jYmQX zp&o1At~n_BJ_f|KD>J9h%XdEBKk=RjATA%5)K(_8txrLoALWWIqySi;X9{PhW2lgI zbx7H>h+)77D#whBJx9S8dHuThJLNY@aGsslo*($`Wzb1>-c43hI$}4kSEPkY;%hqh z`Y}vWO35W4v{I5~lRj?0JM>j!7pXKdk~B2bxXCO{nqmYD7LyJkEuoePPM{~J!u*k( z1Q$dOMq|Of4lR@6A&(Ca36qE~i6ia=24sM*`yd%nVK2^KVGW*UcTU#Yuw#}(^*>wE zPV|ZVRN@LMV9i^Er!EtbQ62#%!NZ6GK>)LOVhRq$@en)vCR4&vZ)6w&lEJ-)U5`^- zAS64cse^zNb%xM10rR1lnz-;UYH%ESlE`=g2ty(tMcCh&uWz;wu%(4BY%Wy&70*kD zEPnK7tT2{l(&&V9=FUL~zVc$%NVfOESH8RZ7d5Xq=S*v=gp0U?sJZ3ZALJV`Q?X>R z8q6t?QgP_%Q;InQG5uwdYAQbh5TTQIr~@G5g(sSBi?@I5BZl>|&UUzwu3oM50E z5C;tsBk>$zZjAf~>Frj1-UssyPHp_%@e?H4d(Mb0{mxCiev(%+o%MksoLQSNnihd& z8JUZd50C8*whO|)rWRHo^A-Qn-`;-5j#jw>do^WRr$ju9(q%ty?5~Lqeg^o$wM79UA?QlzH=fpvoG9hUtin3HA#mDs?uJed zw!x)9)d3-E;<8p&wr&y9B(lAf!^zx+IZ2#lU%CgF-Xtk;|eT?J9Vfyp- z%^jCRUf@w=e4M3VpE2j>U;0I_v*-#WTq8lzrq=50DLCm|&vS2ME6Go(b&nT^s*!h7 zxmvnhgQPCQ8++#lej)Kx1S!!=G*z@>y7;>%wGp~DT%)m~A+7U`Kk7SRyV(@`XPWN^ znNaLYZQ!kh;Rk&Y0XYQ+-?~=iObkBx#p2ZK`|r~0-AH~5RliteovLr_30ODm-MNYX zdu+sk+pBg6ZZrRp8b7`f`49&@&1JqZPt+d7kn@#dEPl2EI7cT>M>+jQ3 z>ojOW#WS@kpNjkWw`mc^@~s?2yl_Ite8uv>?bB_I@11Rvt)Ksao2`+L?^zK9B-vdg z=u1}qg%s44D&T8#(w0^xg)k*XMq#yiz=IN~ITbDyO*6f%b+%oMvPPReN(p;M#IS*&^*qo7qRBi_XOED5aBjJtv)*45a7nZQ5wCpzCZIIPmod{X8iTx(8Ktd}YxgbeD3_aW zl$qcYK#^bT$AAFQ(<19*v&#tpwGnK{=R?K&<$ZZ(PTnYs@x_ODJAUy( z-;{Sy2sdi_qCDmsTq&-P>vp_sX!NJw=gXl}z@K3Xjt`pEmyhM=N*jyvQ$nbxf&B$h zDB1;~BEnj4 z(N(s98h03{CK&2gZmP$6X2umkTSpW_ZSg4?gB5z@pn1$9`}6VVUQJi@nnTh%ByICs zC1suH7A^?`Nkmplf4=+?Z#VwnsHv-v4e!(t*9Fq3CT7+)|6lNH=!m?;Zzz7(WASQ7 z2e_7hhZ`Mu3nkFq3>l_;Pw~7*rPDm)?mOU($JYkNvUc0wb}5M0I#Is<<9oT9qlU$q z!=ybXe!|~)`RjAoUyr1SPjfYxlBFYL&=TR})ug0O?))Qil45(C_3Dx@n@66zQ9CklZ zWZ_*AWcu0u)kH)68aAxDLuqv5`8evixw~Sk+OHw(60~>|rlkJm9s4eW4QaufzaNBW7k>%ck9ipsTDGw#(358vb9{8$r zK%SrfQ|~K1IEm5mFrTO3StVRocAm&13Z*c-xa--4SkK@G4K`WT-|5zJxLps;16gcn zCG}KyTJb-+y=PAbTdhP3^a_fz>=1@YDZ8|$WLy_D2iou zeOy;;F!o@u0@EKlzY@pesnZr(5wg%%*7d7$%wT3-?F9g*N`~)#iPidMQq}JSt#bU~ zz5{lsy;w>+V!38?zl$XKGI=U*w2*XII^Wf3|bD z>=Z+`NN{g_aL><-oUMQ4 z&Ims~6-%Xit5wkqTcFiXr6gmgBFkWDU@LF3m>Nt93l-N3eM4udPGj(LQ`)T;<`Gwv zq&l68NXb|@S!v7qt3&0eqv-2^P66Xuuu32lKnh^Gp7DM_3sH1qWzxKypi{hB+E+o) z<-mxSpI>aAWvx(Y+Huf#cg0K^AT{@tfRBl+WoDBH*%lo( z-4NaV;?k!&ztwihn4Fb1ro}ewfAl0ty6-lg?AxtOPSq>q|nY9^(72y80>KvM|n_Dy#!|oPe*u1B#zAc_+w`1vpNYuGQoyE>~ zaZ_#o#=~SxDNKz|)wHDOcTQ>~%Mj!9K;eod6RB%$!n0?3e08U6p`X*a1#&^Ilnb7{ zw{)#{(t}sAPodMq$4v>}X4D%_lOd6*NWCpZ3l6xM$L5*d$o!vmtvaiPl&FJ}7#W2d zmzDitLW3n8vT!tHHXBH4^ivJw2n)od%=FKY`KbmSNr@SkM#jfGE&`0EPj&F*b3dUJ z6EL&vA&@v#Qr=^mDI}HM;<6Bj1j?as5;te+MsU2lZ~=umocPnSpG3}rKdFl={0JjA zV%BDX`zbB1o${45Pilz)MHd^BhrA#T6i_gnV_;$YiztGSoQqRI@qkSWajBsaKV2DG zZFanVf?h(Z1pCq(Qnv}ZU!LS&cSb~=Nxu)D-sym$Q|!Sc@=`8P8vz!+_=f9L11ZnH zgwuFhn5U`dS~s-8xM%Nbs}@gr59{Jb0C?VH9=<@;0u&xvFr=-YMwO7j%=^4-J}Tl0 zW`hh;1IbH#VZlQVH9lKA)AcY1)XOpbkRHL{NXE&g@*>Zp#(R$zz4(VQqXnBe8Mt9Z z&b~4FRgibQ!-invrPpWo$Yers3NyTLCbgpF>X|DNaCDDR&l&+_*}Q)Iw-i;7??g{u z%(8T4{}nmZyANIaBdn9yF$TtLvKZ5>WQ+8zP+@OoSbulis)Cd1{?jP)f_M1c`g15{ zZTN8at9(}ncg*oH_ygD5`0UnvmAvm{)~DK#$aK0sptFecoUf(|RKZiTVnID!o6J9M z$a#+v^A)sU-}i&An;KcrEkDJ%c2ZLZbBpri8%`6T3)+TSe?Uf(a)=WKYJVrEChan& zw-CkEm8%Kv9@_?+=|8&iJ89_o2sgu@pX6>ZdFOZoEW9#zX!TpnG{C7@GvhWZCY?XBb@?+vJu8UAtnO9>$lX3y2(HupX65*V7J?2S5Va%&*;>Q7r zmFZU0F8Z8_n^g8MQfg@AAi?nfOK~+U;HbEfzANMYNsT^wu#SS`p&BOU1s}(`SAaQj z#bD{Ue4fLK$s6D9rDi@-mf!%>>#dJOrEk{j8LEfbxlYEc`Gi38%Dp$!0ZMj}g?(@& zFpm~g)|g;}$~R=vE~7~`*FvPOj;@v%nFoLa(3p^%!99GRy%0Yt-ClGJGdvQasmEj zXvD2jFNr%yj1;j8aN}Fl7h)Wf)u?057Plb_pr6+gyVGcTF6XmsAW;?Oyu~8{Gr6Ng zY#2yx7SWwT*FT^8-~#;Zhdch8Kzhq@yjH;+=yMF}6=(I$<;=3Q=VPE+(vkyr)G~A` zFuqb=ZU{NSdM#iB012Q>k9hXSDOM)SFA5DwPDxKO6ks%NNMVus^wY@0Ga+_H8c-HG zXekWPY*)pQbIaU4=zjjZ&Z8x1=k=KZdD2-NX*XG2Io=#rNW*0bik&#%)q80 ztB>QC_OdG$>1Bv)X{xZn*^;~;Kr<*yT6_SWA~}APRDc|1CTW^XY61|jH~)=dI!_hae_7o8CFl6} zMU+s$IVE}vu4x+qVT}@+l!tSqFj@n4UreU_9bXxW5e^Wu4~-}37@JzZ_rL0gw|+3? zI#6^x8F?b)nwxU|BO>jAjuQCp8j4kQIXIGipt&=R`HEI|C5;%%5-jN%i+FD0WI-HO zDiKZS9rGf|I9p2{f6fkCamvEXH2MUIC_8Ch+CDGtW=AI}z$Lagk91b%qL%!qor$9T z!2+|>+x;xm$>Nnqr6jQGgOC7a-t8R9H#&&57)HhwA#^YG^uH9RUH9QMgF$Mif8-mN zB)ug0*PzyPy|3hdH7drlg&}1Mj7wH$n({3YG8S(S1b|%g(}koVG%e7(@?@G4zNjXd zYmcJ)AIg!K>%Y(ldcCkAKC1jq^r)>!N)X}sVs1er0Z6p6#Gyc<{Jx&$pwoseB_Zm} zd0SgUy-7!tUpEmf4maai^<5PwSW6eb@MW9kF{wh$ZbhPWF~dd*#|6vUE1>w?AQ1Eq zMbPVtT>+IIU@me!PqZ`tb0F<0Yp+o9u4bKyWzH`#KDj;i%5u3a7b!$|v&4=0n0WRxI zTuw->t4tqdjUWxd!^bON+A{yD9~U%@(L`i$5W;ktFNL4ST16_heck007v1t>*@~(@ zqen$)s7R0CUmA465}T&JU*e)~WA^VYNLY!-L;Q3x4j!7)GKwicrK?%owZzFf#6u9a zndESaeuIj-y1z7)Kdq6=LA{wCH^qaiGY>i>eEgtDiBqV%J>F=S&|N?jyH%5_HGZL8 zNn-3WoGL$!b(Qh&Do$pel)US%gNHFz0tbS^g=oFFUIhzj_M$_+owZ6iYW)nAjIiHV zha4Rvf)9VdCXyU78MYH9eV0Dpxx z*9A>wWyfby#E_{)7v*;ELOllvuU>=8I>=cZ~3pIoYgrNJ&sVjhUZqsSc zOd&_Hdn{`6#%-A3Xv5Gb@w?S z&8%*Z{(wn8*Ty=$H&)qr6c{0kh*a!teKC-dolbhTI&k}m9I^kV0lISj_xz@LLf4Eq zV2ir9B%t@Gn0e~m27=2&DPId4R+ZQb)}f`7S*o#NI!5fob)h?`iqpj}cpXtz$Y>i0 zqMN)Ps+?bKPR?BD(*0cjKSpn$fOD6~*r%igvv2jXxs?|fnk#aA_XDiflLmP=Cp3Sl zZb&I{kJ7~tsEzt5S^G1caJ>gB%5U}q>LEttZuGY9zb|roRzydKAwAx-yE~u5UhZ1_ z$`+JW^}^|NqJgf5vZ%`1GKKnHwwAD@Ii^Ix?iveqpfJslTvs(6wbiy#eccD)^I`+M zx~u7G2%Wyh?N_Y_8Y=^oi5Nq&W|9IkPGgs!mRz4>ZDFx9u%N9c*fR55%L!_868iij z6z^u!-c8MK0%7gMDd+Te0&&!N1<9$Ina19p(SzUc%c~RW@&KQ@L@d2E=&?V0JnSX3 z$(1<5_UaD&aY-*>sHvTq_^t|&*eVJrM8IDJUty!q zqEoixf3rR|qBkxyTg3D}szr83raQt?x!{6d7O^me6evbF+H(Pp29PE8>Fe|lou>cu zBEr4l847{LL!lU@TkRp|$W>;ky6|pKHjMJ80r!cq6Qq$88n|8Po%g{=2k#GM~SJ`UJ!_<()QJ2mS zHPa0`E}^c>8L7e`v?wfeiVO-xQOttk#sp?|r%Docp>}5&ky#gjZN5Bg)6cPDmb~he z$v~x?dwNB@lkR!PZSgbiL!;UkaRu}Ui7+Y^>Hw7Zh2Z59Q6Vvm59jI^it9XofcXgZ zC!S6e^hB|5VfKJ9di+`~nGg9A5ic*n;~D)PnVEYGj&E7rmK* zjRqY>x-*KQ}JevH&VNGb(}P-NM_T*VkWLANj?(WBlZ#x(@csE= zvi;w84*q{xcUp#BE+9m9PNV~QM7#LQMb(94%AuCgG4Ef^yDpi$Qx6$VAv=%2r`HpW zv4j20^2N$`Gwa=NJ;;CGmhkR3%_k*2x(@x6GX}(TFvf!~A50*?zp7VJR{x?siGmL( zAw9C~5PY|~YxmH$+%dGx`^?-nnU4kc`L_uu$Yr6E0VS~HD9t$KuZ(MN)Og0d6vk!5 z<#WN>-5}WiZc=nnpLrT~IqA0=v49*Ts`Sn1ZSyRrY!NCjz#`YpjVglX=2KNSYAwi| zcF(o8BdW-l8EJ<4HTm)CVx2K{{wxGF=x8I%?_$esgG+Al8bf3mo7ndeMt?~qB~$sx zgNB+cab&ji`-d-M*=WQ;hEM&fyDD!2s zk;$dP4;zpvvRy5)Jxk~t_vq3g2Dxa&#Dti1apHn~u^GmMGsn#O^r$x=LS`(-GDmUc(|!quPx}$8=i?KAsYuHqcQg-xyctwJWsF8{up5Aiu7_LR+wYA zIyY7JAQThVpD`;9h~?#ziy+z41CP66l4-8uV#gH@%kV4ZWE?oE*?+Aa(cV_C<--i0 z@rWz(zp`x7(e;{Wr#i@d=za#k54W(h%>F49)N{4q`BrEBoU;p4P0{T4VVg0^k%E*D zr-VhG^SIeFHayx-IkOW+Dh0hbcUlp9-{6aNfgusYx@DGQ7^UqA6zAC)_8t+Pfo(@a ztPy1CRKvDoT)~&UYWFuW0&+e62F_*{(y!E2y8ZYDRj#QS<~7B!zYDT6zmn{R5v7;X zG?=H)LkcTN4+7|6cSw(z59_Xo%#Gu9m;91$xdo?QH&;3??|rN{+QI8=ujyO zClq`9%jI@28lBZGG%N&{-da2@lAW*+8K3@?q}~;mo8aVl z`={k1IN{O!&ok> zrN?l4DSpuA!@;qUz~E2q4=jPB4h?ub4h+dKG;)osdcP4V>x9InUnqEDbnZ0e`5f2xK5~v)~pb{k^98HhjTq*_mB$NMaIahBu zo?p{_ji#o`gcz(oq4;6^SCdW#kf{v`f7v#$qBr%}Nr#@%o`72{{lSzMPd-RUW>xiqEr^+$6 zFuind!g8prq<^2zd?(t6?`2HWqpAqQY6`2@{g#^rmqw>O!p`^Ds7a&MQCLgN+{Gki z3XM2}3cj_h45CELtT^Q)C8*%XAR}{a%>Y;`#BUAuHgwvMKBxNZz1Lcw^g~p$E=JThT3?r zGGvss75$Z)2Sg?CbjIZtQ}&6bo0;P1jeR`8@r@o?I(f3o{NPDV6JD={CV&VdqFQaaL07j2#++A5D19 z7AuQKIOVi{3-puhMNLs4;(eFCyJ$6=ASN&W8CxB23j%wRlWSZz(8oGm?`f{YU*cxa%M@Dqi|vmFO3cCwzAWh@6MAuEga;zS2*clUo>F{$v!c0JeqIm+a@`j&)#b42|B~!|n-F;n39k|4(bs z;{{!kEv{_sCj&*%Bo!sc5K+zVnc*F~Fw|pXRO8ddvsZmPw~C0Axjh!b^H??9k)@TI zzfHmsOl(sC+sFzuX{dFzXRteyVBTX_nJW=AMI_|EGpVhadb(34XQ&u}(R0R)4AfT)bCt?`uT;N{8R zw6vm3Z;SON)A{Em&LoqMvpl?^3Jo!Q^8AB7T8ql3%!z;uW9l@)_;rviqL^j|O6^=3 zA)xL$oNAS zNS!D*4tfAeAv;;2?Ki;X;Y*Dbsi9(Ns0pFYNX<5OQiJph2vSigLFD>j`;Vi75es86 z!P&D*Uy1)TVi4E+UqCQq_3Q|wiwlh2Eyn(CuDdMSX|G~v-|E1%`}NB4+VbJ|p7OtK zV_wVfkN;84tle7;Y6|~-!T-qA|7(}{|JqAB#&*&d=9R@s4M@@afT+ikQuq#VC+%~T z?mMY5SadjgiWU%mUk0YI^!u+SDebKbr`YnzJl%W|0% z$0{HxAVVX^ljilutPlotOq}ndMl#`%OW=e1QVgw2>a4zvWM?m2HR77sdZrf^e3us@ z(oK}%#FkiGv&Sx6gTwxB@#^Mr^O2n58P~yOae!a|7Bsp+7#Tp*CkBDKHh%8t2>&7zb1sg%lMXt%0}hhVs&!IzQgL`iWrI$5J<^tReF9^vV&a<6 zm6WqWZ`ku=H^R$c2%(^Yuu6CaPv%I{#%b(FVH<$%fgF$Bqy8we&eJ9Ck-taWun~Rx zuXD<%e=y&eCz)#t&7L6z%R8|+WNukjjQt|bH%%Bw?JrP)?vxX5@o=Bt>S@dY<{X_O z`QD6Y-)xSSPmuDexU)2HWFF3jNoyE0$gccCDplaYsKlE>#SXtSCc!t$9 z@_Q#eM#`+>t2|z=5p9Uyo!SpIXhcLYKK4*pzbusBuI%ABPhP{E36-rd#$mK_|6CuT zBz_U(`M9TTcHwgen!?=rxK9|e$59i7oW?lquK&1%Ut8| z`5AqX+K%*%`L0vD(>_K>8BNRb;Xcbf1A%^OTcbPl;%uDiTC;}xZq!NZ-&Y6%dfjl1 zjF}EBJRh?dnn#*TpC#eD3c*dW)LW@ZELkI`&~P}*#K|os6eptNxB$XR-AE0ub4qgz zJBqVr<{tvQjV#)wPmNqOP$TC70;`@wYKhXfR#1R0Sps2YuJZlBcv>2ydF~~V> zrir_XwSgH8vVAF1V{9P_ghzTs__?3)#c1Oi7WsvBJ@Oa9%SqELDV&WTW@ix;ecVId z)2MkTAE2UvQ_|7&ZI!)*cC=o=^=6 zLMY~N$)r{Q_~8(bg|($2Z&L5clM!*RvpUT~>e&e}jmX4xrwK4ZOV7l^IkEjrI5*BL zZ5^?>IL_)C#gyH!?YPEhjIN=HZD#2VtQw+6XEG#|H2Xl~4(c=y78H z$0`)5)vU8z83V>{JIqIi7hM|M1KX``CowJV=NSU~<4>t^X%>Y57*{n<$%zLR8R#?V zJI2ot4zd4sW*)6?{#;qRnIa?|ES9EyYJ#S=@x{&Ul=QB~C?iru+?oKXbjp=FDx9>r zde-^uoekaO9|i#-b9Q%|;UIJsM8z~BtmsIa)F$h%X~+=>^sT&lwt1o>MUy2ZwK>-R z4o{=?RH?_4m~m}NQBzcG@h|SaXIv|TsllpGlpGj>Y<1ix#v6Bni*^3z-kM=Q^xMOP zQ2i~6W%0jN_gBu{f%0iH;kR&og3zsQnI~ZUD%!**J-xqO?wed$_$&L>x5?PGhRa>%T7DLyo{@8TUh-lb z$*N!#aoS(w@$)(Xa*I5x=HUsG(F|f^9nLF%&ObyO(ovaRth%^Q{)jUzyCbgt+V!D# zY5ce87(6s&VPBbFrlS8oixq>%H8t2IM~;!1r2ZPlp1qU#^-6wJWEvOk!I`9(PLF%E zyu$uUet46lz8%rz z%k#1RF-jeeZN0xdqud}d>0Z95L`-N? zC5vIKEu!VhO)xQ2E4J5yg`xx4Kt}KGrCu}`$bIcelOq)C#}oy(FyY_lQB(>_F~!me zLyV+n+Fa_-s|_*hzT@j^AQ~KSXSv9v1NuJTO}Wwe&-Gd>|19Qj>G`Aboe%|<`Oj9b zpc8^JOFtZ#8K#ydDSiaeN!_&DccogakkGxbO^N46x38dTTSgRXUhyLt)+I`M!@71V z+Q*%SV|4^Y);~8#ZzI$7HJ;p~P()k;c(D%W*9LDz^j4@bvlbX)I< ze*N9gGwM{bPYQmItRMBTGPDw5g=h+iwDfe0SkehmlPt4alN}~B3|~70H~WuZE*l~P zKu|fttp>i|>srV2F~2n4692BTIdJn+iqa$M>SI*z);Ze$^S8u_9=mdf0ldkXH`F++ zGj5mQ(m&M5UMcb;mZU4sh+=|GX<0EkGBK;0FoUADUrx17X|4KUH(3S=pOqcg8yMH} z@Ut_Od%1Sr8O4`Qv+TTm`tm48zdDEF9|_6x{Z)>HEeP5#u|gVgg2kQGy#odFMN z(=4rS?^~czFKJhjcA&Vni^CQqGDcvk5?D_)^2WLSD{i3L*9Ca+d? z5GJ_uvwYfbUwUnS3RHyOOoo1d!8kP@th1PdT=>nuqiL|-+<4r9_<^Lvgu4|bCgc4G z^>)+0T&=4G8wLQl8Txq)!rF~HV>AYnRk9UpDX|(OnRyAub@{>N!}2W49>HC`YHa~1 zaB|bNz@+Mf*cjgI>`WfFo9!XG^R@WcajsrrS~2zk9B38Wok4~x6Cc3O?`W#3Ov}IB zuK}U%@1M*QG)_e2)F7W+PH=X`9x{Q}r0qC6+;r*ahr6XmOiPmCg$Tm+@*|t|dVMG# zP9kZ(j!dX195<|KJyMi-6gPB!Ne+xB?E%k1tXRVtkPU5pG>-8!eJ zW4p}*z%r7M`Cj(sz7IOSv>EWkoCuj%5i*od3*}SrS<1*J=YZg2G=>~C@YmH#7melj+PN1e^ z>pA&F#o0mEs=)MvpMBoCpy!HgOK+f!?Tm7IjtK+Tj1tg$K9yf$N`g>Po&!40UecO8 zEnZkxRv2DX(VhEP@+~goRz~whO^Gpi(zrht+Fb_8aFrzIfa_V_ITjYsKL;gp2t*nvMMTjS3ss90FNtu=N-Ij5)XDZ$-5RpAcfTWTJ&*lF)u?}4Sb<%69f0k)-Q{@cul5bL^V{R{ea83-xaztkMVqo3+`h(8 zYMB|kzx}2|lHcGW{zp1F;fQe`hNge^9#Ng%g^3$uoX-t?WZ=-;?l`B_E5?{TAaL_9 z7R%xbDYf{Ivxs=5P9UFi!qklzItB#*_oB#8kqkW^)8Zn>$Q~`DWz$0MJ zh;}M=jxUZF0EdXjJ+)Kb$=Td7(cFED%EnLP$SlQ8LO9|H_X<}#iq8LjOg%S6=l!v! zcd*mw>+Bey!W~=!87L(vMW)E?DHHHZQ7S>ENNSuqU^IZukIw3ecPjPky8Zno_KR%G z>-PJY3|30&5g;wg(3dN4aM$dvO^5g6*6sO|;0w#|C3L#3c;b6F95D=Zk6KrtS@#W` z72O{0*9j!Bn^T&VU1BXbvE%EJr=#9az^?o5m&6nYa|V079-clwr>uyVfDzwDR5N&~ zYx|9cYRUksLnxYvYrub@pH_xz)x^5Cm%235VxjC)l~+bcx+>ycE(M-m#B z({vg*X&`uLb5KBp((N5=2_?<285=Rol5TQBh3kD0=7lA=jYEJ4y)A9&J4_<3PfLdh^hR)E#z z9DY|!?~q%XHI*Z+xPUGVhs8~gzdJAptIfAH;oKInG0i(X#r$(zU0`=VxW2*7`5ysu zf_h_OCpea8k#L&N!a4N}3k$#CQeEQ38TC!bTZ`u_V<6Q}F*d7f?E1#R!qV@jQ;Tx~ z%c4$mXshCM6<*iiuBxV(cGh`~E@7X&(83Ns8=q|YGQ*I7s#Kfp=-FJolJa2RwST?xi2UMmPY8-bcf%oFt>&+%8xZ(F;PN0nwHcb1Fu!LGv!x~ zxn@xL%8Zc3-AfMWtfPpS}VQ-R-+6xp}wY^abO6OY;l^YI8R>;FP`*9Vp5FA7z# z@~Y|s?N87jtttER-deIg{yY3Utv~d5A9*{biYfM)vl%sLGNn%}Z|K5|S(Q{)6ctfs zGiPH|SBLGs3*T0V!;w>DbtqAfms2v(4T0D^1(o}$Z)9kNNnp6GJ#Zj(q5o>=Wq=RK_vmMYxlzs9V4H%H2v38DRY65m9HLKgrM zQWl>s(|`v|7Fe0+CguvxQp(DL3R5~VdKSPRumynpN(kTihJu)d$9FM&e-&KXOUFyE zSA)wnwSfLh!s%)e)t()#@hKnqS~DNCLR}nudH!T@UvKuG;`y2Hg8XRUzPB5u72;@t z%|WvXO6%lElC_L%a!X-R-T%aNbN;fmUmeX1b130b5>4xiE2`oao-IH9vu(02A)Vgq zRmbkpJ0G-kQ$DZPS27XRg3fs2o4Bkzqk8bPfBQX(khIO3QRBXjI*+>hu)>r9M16%R zp{FmZVEikAL6P#$pyrjbin6$);aloj6s^WJ>SCSOnkI}7gy9SrcOtl+0~s3GASya4 zA|*|)6-PYGG!t8G*eR|4+gxm&nHigHdE|c~p|>9X#|=M$H~i({CYJ^G3F5pNF^4Ry zKw#go)^Ha_wt*EOK6jj=wO|L7(JJDeFHC<8s4^#BbyB*8Qz88wdmCwi*t? zE4u`|ibcIo-TW7{;k8F5{@LGu!{D*zy`N;LEhK%?T-Hh8fg=6razk1Bc>u{u77yHkEGM57~M7^s7@| z`0SnwWZzqFens(Y(#hhSO;f*S`j>m#`n9!oqrUS$CvMYrS*dNWOT%wqQkUBFZhyQd zGm+QZ-WSQbMclZzrngxxPWEoUT3p=h@6gNAGxa_bUs0v5j^*B3=5DtNwPK_?FJ{+X zSr0syyiB(EtF0s|%3wwh5TP~t&YkrU!NHV*&@lk9XE!hFoNzx*;j25mJCb=-1r=C~ zXQ_}Qf^w*#0`TjlLgT!m#lgYIr0fe~dso2J{HRpXeD7EAHl8m*dG`4hB-jF|9*6r+-A9pK>mfcugF{EUqtxrxmDbmE4Z z5pUtxt*as1mKR^?$?$PF`QwNnVWskkn?+9P;){07%@ZJ0xQhS3IFTRVR!-AI{1N#`o59O#O#tlpSQ}O z`D|{%Y>6k1|13MHbmg!1P{U#ZMK0D60@Noqlb`%o&&@9V0L2#J)G~ z%xO`BDPJ&q@XL)a1VyT#nP998Gd#H-^n%HEnQ)Mw;t%03w+uys0!!))0hcFC z4Nh+Mx6c~~LeQ?!fcY2^)JMiV@^1hadM2Q_C1KSNgPRZqfk}Ws#LjKc1yHvYfVJr0uXo#$b7AvI}!Y+T&n( zz>bUBFST$K;JKN##(=7VRQz~SC6jN2)%(VO@?D(vFJ_MHf%7|1dDiyp*Ia8v(q9>8 z-?-cr&Y})!=?`|e>^$J*YaDQ$ondD++d1m9Uc%xs9fU=M50iqhq?Y#N$Pb707yb_P z4LXA5i=X`EM1~LCDL^B~oalIk0DbfD!65kVxi}gS8KL&Hjkfu6An$P%IM)zO!Gx}= zw97^U-ADJb{@ngI4w_}rIRZh`jOkUHs_884qP1rQHZ{DhjOyl(KK(_MbDTUYncSN7?2l>KmAfnJ9VIa=#rv>&Km%}N`s;OT^H5la zM5j{y7&~3eC21RhlM$M^Hy76X`f_^N@0iy`9R~|DTgVwhKMKL|G{4#7Y@;8@YacQW z4}U)q%5md^F~#JT`nDDdmKC@;&9L?U zSNW)Fc6Fn_Adh02o_WPPVQI@dJD&jWaJ>~)`vl)qEp_@eo!9V!;C5UOXgUQdL@R_4 zpCZ`JT-w~}DHXx(vhq(4KA~MDWZ=1 z%IS7wY~CS$&uf0$&jrB|@CWYqKf+fGxT}GtnvQ#uPPx;%+*kHQ?TsDkUFxMTy4cg5 zpo40xU>8B8yOl!M&4=}Op>P)OOFZ3=D}jUU1GRK59`nmA^1|_a#;s_LW=E!02Z?eC zA}GRXr-Pp9mzOj65)Z2q`Z^-&ahdx?2S>{Ajf_|c?VP)Lo{pO#-xxjfoYKP3LCTg5 zaZ{d{>&y15>rDwWE{|K{Xd4?^Xx9iDt7{EMl+bnO)gM$vnwxvxUIhCK$TgL4BTnrZ z>00CG>9HDa8LBJ0<5h@Y$@8~xKJdjJXN^Yl2%|}r41+ca3VU~~Spq`>9WVI9n&OHb z$<|aMDY2XTc3+oxQ+hT9r5ck|6SXW62UX^a1n6G5$<%{l795_H|6SL5*tS)GA6 zrnCel2J)N5>cz>W^7YwdEgl7A8TN}K!zZXbH#*-l7nC+_f&-^780ny$soxzNb$=Jo za{f7-xkEKmZEEQ>UyT?;hU&g`bN*uvE;UD4_)atXAoOB%$!_cCo1K*Y_H+m;wF=ax z2_Phd!b%D8EbV3uIDbUE*0k#wf?1J@p3PO9>U!GpxRb$wzQP7Mr>!1iPYW=6HgZ>0 zkfvh6x$!3H8O0}Odd3D+{{6On<|95tvrG`v*+pL5V!elSU=_$v#1M(_dReJ|*J5ti z6Tfe~JUa<#$RYvHclvUlUbcIPRv}+cPS0~}dIf!j_`iEy!lL8v?*iOffF--}p>9O7 zu`?`1Mw5rgxUX7Qn|7akNVo^LH^0FOy_@Vxd&y+xTpy6(mHFANHRQWwV+pbCpMO&} zoGOwR-Pn2o&9eQXWP^!6qC4S2wXHWaqiha%7{V|o*uA@Wf8gVU;2c(Wea5iy#5DI` zkuYrcdOJ;Owzvi+WZ4~hTe0-+Lb|{9RwnIhR8Nv*%6fk=ELG6TP0apV9XR-d#lZi@ zD}Pxjo_1MuxeoW3fc+x`X>;R?9e&g>%l%dif200;Hn-4tvTxpDO0pS9yWMZ< zYvhcos=JYm4(9`*xR=UQmD>G9#5{mjq&BV7Fn1a%x_i*^jo^u|Gw@zmfX*c}t-)4b z)`Y4l14qVjtN$!CQ*{mrbn{Ia%?-~|yZTVx*mq*!>>G1ajeV(-!R6}mJGRUV51_u8 z#1Fxmy$JTW&4mwKk(UA~? z#S&0Pwg~k;l}{C-<6b;D&ybNhXUO#FY_l1M(C!C+G?L| z`97`qO*d@ROrF~7go$`phelC`IXyga6IFUrLKhRv_q40&Xpc6WE5if^=a_|3H$BXvCb zVG+|~{DG<&RqaPQNLhOjNiRm;SG_1)cK8^4Si}*W$0XTs@n((7t*c0&wrl!0@Z_*_ z)G8lFEADOt++85!TzaMXXi?i&4g_e;Zk{JX9;|_PTXU`3el>q)byAIe(qct%cIbM) z*j6;diWdMb?GE-27{xLOwr4ueu8$5?T67=TKVET8tw8xPIWlA47d3{jmqvrlYQ3Uj zs~Eg9;ImKb3)TVYT&B%L5p9y~M${Iue>yQJr5gp^UNh0ROZmaa*PzQQzbA>C$b%3o z207{h0@C;QTWO+b$Co?5TZbek%GGjuhr1zUZyT;5*M@5hK~jXZ{Zv_)SIPuY9PsdS zi=OfNGke}Aqn*d5;#hi&bsiFE^od|2K}W^MING8!88sUUUb1zJt3An5@vC%i%et0i zT$^HUN0f_nv9;yw2>Ch0m=*3F-^aAcl~^Ld9{DGgy_WWx$xf~?&1{)us8>a_-YBsW zA-jiVc$;J-*>+gQWgZuujz_4l-vYy289aU&Rn`BMA;u-aN2~RW5*==Du|LK<(h8Bp z2D*1Xo(JIr5IZrp_9jstCRW&;zG7riHB(MH+*9%;1U^5BdVwruln~+RM}enFYCJ~*2NMn6Cq>uDK6RO{^>2EIY;Sitf; z)CQjr&=(Sd3ktk(J_SQjK`~4fU^vy3HJs%Rq#LB4HR6k!9CE0nBX-|G<-7ZZ|GwGm z;cZ1mR+v2hoERnNJd;SD(}!Mu?9ntVKYyG=Y*S~)^v_&+&nn=d<2Z6r#}D8u;oi?m(WpXDrwM1_umuMZIr@nm zz9|!t;WXcmKSaj6GA^!2&8l@*2N=t0s-v&e6tye#+=p~3YUHaM^2OwP;d7mXS)Har-&5mKO z&mz;QAKF)U#`<_!#`hTzzq0Xu-R94uax$Gb#zr9`#z99nJDiU&O*P9VqFNvC^2vzh ziJGE9Xs%&O0=;$Vzm==_lKov z=hT1FhEC1TFrg9GH$;I5#@ckrNqGB*WvQv9C*+h0_gf%lkhO`Fn4q1*F2m?>7f`5} zyR@qsJ(gZ_PvQtm3&z0pl<|ZXH6?j(Hu&T`O+v3OwYsAv19_a)<|oy=Nix{(9&6@_ z>8N3^hOV5Lhei{cy%@LXm%hLU6@k|hdM?40p|MnfyAj>%fo_{Hxik&C(#e>PS%R{5 zhvu|GQ5r+%JFC``s^WgL(M)8RW6(^~91xV@oC1KE+I?%5BF4kr9(zdy+MXN9HSRg_ zFjjeMB*FF8mPdsoh?*tbb2R@WNVtCO_yhMNe9$0$8vjV!heoJZsB3L()|o&ylAOI# z<99HdLBC8F6}dLCbDRSQG;D z>YTWb8$*2^TCA8s-3cnF8^)M0t?v|i`%mR1s6&rQSgHn~A{-C?3IT~}&f6bczBgjZ z;IT-Uis0P?Nil4%YHfUVX&DvIlrB%O`~2d$dSp_8Pk`^#gtqS*ZQdQ&13c{CGs4xZ zsZUdnvZWfS=K-Q(@YF-^lPcp?PLRqZS+69)PmF4uR)OqV-FPL3fVTeXx-S`mdJ;ZX zR_8e96a`R8*Xx*~TqeJ~j~nF1#oP$0g4$j`Wk6X(+PT^Uy+Bt4o^^F;VUaT|L&rVk zTG@Nrfc0F0K5Kjoq=j9Z@Y{lGh%v*$n`?b>U$h*UB;%?p;OQ5qHcy{+^H44OTuVDeUMnKeE`FLFt64el-L}$Sxr6XT?$aj!jK{$23CZNw1ez)fm}Y zh{TO^dXjwiM|sz{;seg^aezu%=HK%SPsbXkxQwH+rlPn*R`9ux7BIIymD9~0td>w_ z_yED>xZ9qV5)$b!^k9PAv9Q&TflD&6|Oy_TZV^DK-!Ln`)IPNU@b zn~lL8>#~g{90^%AhP>EAovt{G*Qh$F;*3?5IUVbnJfXB)O(W(<-=u}$#j3!?J<;ux zG4g3cHL`w&T1C8;$jlrne!&U-#gG_x`SYC&!x9==c7=Owvk z{{nAIb(D-@`i%MCRcQiKvc7pil+1DVvGGMkYgMRU&P+@=Lu#i+b$n52&EcW=Ra5*{ zV9w~tC#4<`X0%B>!n7lvFuyJJt0IX8g=)uTtjl5>szYWMdMc1{Tl?M!x~58B`N@Zh zjsfWudo;O=oZ~xBx_cPI)peZgl4}PL=;tq}M;XwujrG>{%nLK}ZrQ?P4#C+R-*^qou*hQPzt+uI4P!@|1Hl7&7bFR<`jE<$$Q+1vUHO4H|W|J5g(fEz48V; zNIbs?;1>8A#;lYIrB5{xLrPz-F+2OYN3md>nxCEJy72}Ns!Nw{C0M1P#@&Px*qW&FMU+(>8n7-UWCoWiQ?m9*?rYS_687a*69|K`pwh?HG-t0sr7R~TI3 zu$x{Y&yZCMTU#@F>%x{gu%oeH-Ec-ew$YArGc6OQ*A*nwIpkm*YDNihEa?_XDjf*` zN$RG4A5dGr?u0iQ4{sm}KSKIFZ63-#b~!yGuljPqwY3~@00FOla0F)j(nEnm8|??gZZ0&@rQ(`-2GKc;84E%4)J!K zl<#9sRLLO)1sa_^Gz|-0seTXq^EkU}WHX)j{&cJ!IoX+4juw@oiBV|lob)v04b+v} zHIBkVT@&7#wIoh}(bKRby07xVYYc@i=|}&NDFP%xqDVRsR8-X;s-+h0NZPmjb6fEgTxt8MzJ!5g69%zUMZq-)P{{5|0)iz?V5dr+e+nYYZPP->^m{EGcH>k*a;%DY zU#BgF{P`Hg+`OpBFs?->er8%F(T|dFve)S)maK~1-vX}$FR^|f(;l_rhTHZ(MNpi; zQja88o3Hy2KH0v`wH78O5ayV$g}%#VDJ^=^EeBjg(bF=n2neqlG$$5S%9NuUO_;T{F@Gnx(@hVgh&hDC(iK+ zu~JqYpot!T|3g|_T!m}`Lg!I9VO-pGLpQy91^mvov`F##-;~Xf4d^t+i7fGa) z0;Bu9M{qNpwH55ukl1_a8PgaWU*?_S_fh>t_jP-)@$5pC(k~QpI(2u+bA+itIuXOl zcU0|oa7w7i<@KjLI|WFdn4;*|_%=UFJcpt<(a3Ne*!>Lc_db9gG{yZogf1CQT)GXW z1AoLhi`$D%Sv*kHuU40w`nk}3K=E}VaNQ626YOo;!Noj$LK;hw{D(hr6Z-y6oDAj$ z8EO*7cFn0n%WdfdL$8HqtBI;mP5omp#>*oIei7k9{|SfQ!SaiNX;Ek?&oe|Z_EB6k ze%fi#!8$1P_HPZdoE3zB{d19L` zjvN9t)i}e~J+NKizufaeXBE`_1^1a{4jp z`PLA@`%3n0!MIRMV}^gOc$G~5D#Hhp--o~##pizTtGs)j zOzumi8`nltkfmGg`cnTvVk(x7E)`?44D;x%BhZ;z%Gn|$?$1D1^(UF%O<hkMIBJayChsQx7!*4KXZ%Uv-wlnbl!5?AU+(Z+lBqZ?8h{Lq(x z*B2h?sLPQ@0D&6<9Sbotv1&m|a&jRX3^t)4A}M9MaiaAGA0Nk>jSovbi&;HOvy%jm zNt3HhMKw@Du58mb$ED! zr9WHXV0vR~$xpsD-i)An*Y7zX)bFds-|zDPn>w(n9iR0ZQs7De-%^Dst3D$plk|@; zVzSA~b8gqPm_yHWEi1%xEH&Zrim6D<4YYZ7m+Rxytb_0)w{4cwVoE4P4LGKSHF;Xr zQB&hAmwG`~lEf4zw2-mBYZtjJK;G_i_Vvcqr$pCWivH;=&V7)f=OQag;erkC!vsF| zn2np5S`70Rhv0xgv8x{6FJpAmB7kN?ZFMVpH=P%b%^GuVdujTQDNoI{*xK&=;I<(( z>RLjH-I0W_?<`q(5?r4LN2T(zj-LmK+60=Ujmfaz6;YAI;I&R{vwU~SVv;N8Tuz69 z7uaO9W*HCQ(B&Kc!$-OEdjsU;QmK#@oQ`3ddQ>j$t5A!@fS3wI-;YHlAMn4Jjj8@I(-THA&GV92dpNL7PincB3JxpsHe%;Y(X5 zmPbWd2TIQgNMu1FV{s2YWLYFYz}m`VHJ!j8dKHHqfNN#znL4cqCXa`R%_=ll^OHr7 z?4oi^ukZHBcMa=(4EpUXG;i*T%TxT!C6y#LT-=?Im?0%Ck90iyVRgqRV+$$)Q{X_? z2oGXZZL$9&TXKRLQ5ux;b9(kN%;{hiEhGg66W(oHR+d7lLc^kLWqRh((i^Sv9C}fS zyLRH$6I6OJ=X(w9+Qg(F=&mR21auRBB1*m^W{V`Qt$;p^Qxn zbw`3ECiFOJ^UoeUGWct8ThAW zVwmex#dK}&oT`X0FOpU*mp7J$yj1Znc*-d2tLj^k$SkV%mes$KzOJvn;29Q*|6pI3 zk-Ap}b1?vMRx*nyp&(YzQmU8n&MoS$FXWn8X#PPeF}FPNVq^-jgTj$r9Yy+BINM#C-28Y z@v>VEOnI4q3NgN%QDMA@7lIPOwc=83;$aY$#H{d(0Zw2d$vu4extA+J^aGA|H&dv_ zjbqJ1v+82NOho>GNO&=7tSYf7_27nY*iW7@==sZ{*2=6w^QhKFQvWiTNBnguqvW3= zRk6B>ij}tS?f3`VpFbNGl4hFnlQQ45K>6#u#l7B4X+-&91sp94fsRNRd2l>0Y-%N!Pku*{x(8aXW*@1)&Z3{b7e28x%Qa&bCdIr_0*Tg=1;7z^JYI# zjlz`r%N(f6@MWW#UreV80EMQQC{xoYY3XxQqT=ZkLXcjG5sV{Pz9|jV&aQ>3v9AvB;_N_=9VEc zpm|GF`IMl!OH#D)-^|$PLJ9IKsVDyd+*+Lrv+W;c30UW4(m_7Fxbxh)YgGP&t}x%# z-Q@#)5qtAF`@D04IcuM(rWj*;?Nro^+aYfAusBxB?C5-0yk;{(dr5qR$;dv;_9f3Z zX~V>S_naakMo|b`+ZXD-0|#7`TMw9!tFF5`U6UZ7czbb#a?hv}=yxOmJcTx@TKU~W zOk|c&fNa5x_3&AywXh|l9L`BKBPsj#{a1VbdYgU9)F5Wl?XMWM5!y}fz@=$d7H*~~ z$)mUT=Z)WRg;wU&Zbpl!38SQSWeHLh%uHN8nyRpLHj`jJg$=mt65+UoZ`KS}QiyR< zCd~VrbF5@y%%C6oy5i81u&hZ@-R+v5H3K~)(e80|;MTgCkyBgvqga*1aYJB z+@}nB+>qjk9!>lZ82hfBPkPfV zD<6jZ3{P7`eN*(%n6&WG=H9@lR#Z$Z%c@UA^Ok$6g9x+<+jmhS5$a^(42mHGR1DE~&MGWSKayQE1HV@-W;?cY9p#13laC7Ly0t zin4TB=*(Zj{qwip9u9*~GzCwY19sh#Frosp1G(wYaTi~oMj?Wk^n^6W(Ttq2qSf=ru!_vn)JT4(A#!?%`#H z5F`2X+*N^bo}=MEzg1_BYxfrdnM>W1q9-w>dIJRN2Tm*JfSqg;BR#6GZ4xEU+$FbZ zlH@2O0M;=zA4qfRh%y0|y1WEAGD#XNR#lQjxr8VRNmz1PQ^>w;JX>J~XKGpQd?LW)vldAHXwRm|_K4qluB^U$XMrqfz-l_B6pNQ4n;WT<5m%L> z28C5l9$YkuNXCto9P;8RYYV;?lZaSH~} zP!fi{QXai0feV?~ypv;0XYP0(;n^a{#vxB&!b9v1F}uE?<<-i9UCFs7Yc0b?Gsj>5 zt2HBtzErjKwGVMJV{j<+i;pSqu9ixonm=8F3TA9Dq5$O0vp9z3Hdpj|w93-{ha*mZT4h}8_FF0lQscJwraI_8&V(Q7-IDnc#G@8Srw)FlZ z1Fgo2P}%pRdFunoZXHt$p55_znaNe^^OBQkZ%wYV|s>-F|_=|spHxma<}hCITMSE1kR1d zCEhVQ_T}OE=-vHB%T#80bDHd{`#lcB&9lEIFFnD*A!U6h#mja7Z|yE;|IZcFXnEiG zX})%pY^+_Y$cY%yYiCv^EvGBlGV=VOAqvU%@)8@X9+QXNq+Pg&hlH}@?fAWRi!vv| zP)IJX*Z(SNcBR!BGCuiuUxFFzbB2P`q-t2%g=RH`Gyu^D{z%%8y4!18pD^-xJYze7 zUN?4fbuB456|GoKh7kZ~=xCQpl@$Xg-++Ib={;3H8yea5=ZNpMIs03kFj}1}6MOBU z-w57_8F0&n5V6eMxuT2f0#lfIY-3?9e1obqO1SKSd<$f4oH#On@Tg2Z=^Y*iu;_Iz z47BO@M%1$o?7>0vIpSRBomzUs>zD?6%91s+@zgD2qWm~28y7f<`+?oQk?xaB{9lqZ zhl7e$T??`3a7t_2{ZLQ=eM9p$^g6u5ty8+T>uqAwMbRIzewhsTw)qwFlAQD7g>C}d z>xCKXKp6#xcd0DD26(%sOhsjO0N@WXQOfM5Zt(a?-T<0ug;h{cee`h5RdFNnUk{5o zD>H%Z^Mi8j)_IBf&7L{E7hK46Ud#o~JLSj<6YcYL)j&6^UxZNNkn|aW3SVTKU)MfW zzbbMy$F8wOtW7JDmadBXFwGoHg9_|0*a}UB1CLrg%Ck>e$&$uQU0K<7we^UVHAQTc z(SnLVPc22?XXtb~MbD|OF)xnx<8)1;u9DfBFDQve^?qRjGyaaA7ptWfH0d4s^1>k_ z@oJblmxL5jR?guf!{SE;l0te8Tf3;ys=1E4xybuU&*SGlSl-(Hso7=T3}NUCo^mRe z6#&+$F=u>lu8sZ0Lh8#+h8L z#cFtiV_>t_(ha0r4M~m`WJWMsn7SBtt|CCG4TL1jI5XWjdtK`xFj8{x7{M>r0wBPDgOmxXN6HW}* z$5}AURwCLSS8zwwy2V!9(arOb!Hh2`-pH|Cm1P85V2ufB- z8rjFhr#Ab?H~E~YkXU+AGxq0LkMnIv4=@-Fq%`%gwBi*F=T`ZXsRp;NVw=8Syy|wF zgvL;}>rT`4OBwpMw#bv+sYUu+T6;$gtUHAoAsn;~iyVq1Q!Jf`eSciSAgTe$pIAy+ zggmkAMwu5o`=yD%F6WruQm_Zet`U~d^7tchjec2^wO?a=>~OQhon{PY%37KO4d>{$b%h!JIr8bx%N6q&ilb9?3;XL7@?Ym*#sKxKGv9hcXMHpRJv( ztDdJ(%B59iR0werYeT)=moIh2{yAda84WG12_+T6wp+%(eMX<7Y9=Iynyc15uu2Eh zw`xbg?E}7p8>ESG+23K5mIic0s32Ud;g^@$oVkigx zOs3tGTFE@Do0`iGEj7h{T+k(@J2~wb=l!+{T4J;Af^$M?KEaAMgl=#$*P~g`om=eq z&Q{ykw+c~L8DJR;Pt+>V@I+~@XALhp_qnczKhh@TDl_Ne`af^CkqXex2i z#v*FY7h-M?I*!Ep;4Q3x(|%*??b}AHdYVL*!lANT9{v2;egnAYoQ-Gv|7d#W=(xV` zf4FIrG;C~ZVjE4G#%^p+Y}>YN+l|%Owr!h}{O0}rJkKAq)~q`->)wMoXYYMpkYYuV z#_;ysT>sK!IW6t~(CQX1inR&X-SsSCkaTmy%t61vwxF`j^vm5aQj^n~wF|lLkAmo$ zUxA}iTkIEQi3Vl?vEP6995q838OYqns2+IgQ+`vR;2M#9y}Z>JPZRkqfu^GiMVKJ! z$==2z?EkEEBBY;_)@ou z&&mr;@99;&QNF*NHQ)SvnR+guJYyPMOvQ`QV_+1#An|IwS?I$ZMLj(j*VkT3-MVH{Lv5FgxfD9WK|}j6Kq+3s%FZO%kDA-W z96I*p_7&a5dK2i%{9}=26$xL@q*JatTO)j7K)F|f>_D0SymeB<%YX`o#X_;Ub&ra!H~R$sEE`z3_`5gRhs%LNZnjW zE3dGmMy|zj4ZdQS0v8?}wPm28Ls%HA{^R>#irdZ#rUHE5ddup7C0kToeh|pRd2Y9P z^Dfg|BmH_DHACXtCXaw~Lg26Xf$X#Ob3_v5^WEV(j*dg}2v%D1T1DlP9&%%~bUYw~ zb)j(Jz>eUcDhIXI=7b;E@4FEuHY25qLM=PTgu}R~dNGEYZ=^R^Qo;!FaGrEe9|qE2 zX@3GMnlXBIZDHUzJ(6O2a3_EO@~5bH73-!`RP_zA-GW$OH3)xMF|2lWDhh8Sk}+UT zwXZtBqm0o3n8TU0ze=7LTU6X z(XyJ35jQDvDcpAbFdf21af3x@ttm;%9aG3^MP1Pn3_X4Ra=`OX1~2C@Xks)(MrJgO zo43*H`roEbP(8|GWiq6E1f)ie3Ob7Z_51@585`1c!c=9}23tKskXc{jR&Y3!ShK_7 z@J0WiN+D=>N?eVzNND2FUwEvv7vM+amS7>(G}IRF-la>JaHx-QmC-sF%GR*7rT3m* zZ&QexvIopvmCPHF*Rf4rSZGJu6f!M2+q!PamJ=xSynb_eiG;m#j)3t*-Ipo#p+b`K zc{5BeergU>MWsrI()}0yEB*P9$D*8|X3kG$9{%%^wOd9jy$gA|N#YZM|Mp?--mL(= zi_B7Bau3`7G3H?a%UQ0^5o-7dqgotHAB+|;%n@0 zw|^LIl){hRp0)@AluyFhBz&v`^ZTTDX zF^3|Rp?pvmh~V%)Fw}HEk_buE&YvHy)O7UUwU^gPAXSM)puZ$3q92lqcq2};A<9HI zG@+7)2h`twS`xbWdI_5E#Wlr}J6lwTfNROr7-L-aackfRSmr@o~vrWzLsM}H9; ze&nbtR&{@BCcvb=#o1NNVNfmW2#T` zLI&D_BhSReT63%O1+KQXwpN>C*u%ra?<-9{y2+fFbG{~@{Qc1zYaGw}+voji!T;UX zsJ3cAt0hOSi^|2t#o_JI3Ktjm+LiDA{$7tG!_3UA$CNF1 z5h}xUOS{4+v7Kp07Y%MG3&4qq-M%q3uYqo21y8`MSqH$v(H+}2;+%`6I9l8~_JpbUZv(WVYBwWv>~I zS6e*$D=WR6BYDEURFYA0fSp4~{Gdvd^}C+HrZMjfCe}Lowse7}bYjv74!iSE9Bhme zjou)Uwr}N#Wt)|28)}TyF~s%LA>gqsz*u70S>731RW5ocX0S)9LCN zCfB>{iyI5`%?o?T5NzlopB&Z1Fyf-Lo2%wD<$V2OHugIgbCoGdit2}h*MFE7LZi2~ zrMK7&F7%yOj$AJ$nvW$GZ)a7z2BfA4b2*NC^d03-oruG8sae9y{ira9lY`4kH80Ea zb4iIYi)+e;-9BzNFhm5`;1W!#%E5{F3DJEE-WO$+KWxYjIUHjI@)$}ojCc@1jb+w4 zFC)so%OjHAzf00ZRhbFI{B(j`+T|($(I);~G}LUF5Ed@@Yxe!4YGEq^om!!A*aYRI zeG7EyA|ekoGz?HIk+s|Dh5G9EB`GN>lgrM(8?@FvV99aUk0yr<1KIR7JU?{nYRJ5C zc41*)dK&rS;(`x!KbJaT%%IisiwhrsjljaqJ#uIbgaKyvubBe$zYRo6RDEHZhrq#ii@ z5w}5bGTz>vLwl8@&z1RGDyYSN*NMM{&kr0^1x*dUE^`$uy&V&F^lMV`15HKp{?@}a zs}mFA9`wrT9!#K7wsJT6&)^mIQq=N0M117wv`y+9%&$~L8sX0?B^jV#V7^t~^w8Sa zKOQpKHN>#wgk8TASU(_5J6w_zX`LHF5wUNwb(ZKHb%QoE5g4leD9njVY4XajCn+T+ zp%CF3m<#3|l#$J^E*|4Y={YXVD5Sml3jJ@6f)E$nCD{UV3?T2xdN*r(5uhA{Q>37;b)YGFay-Q9h;(E>~Nbv6a; z^!o7Nw7R-lyK-;CXhI4GmLlXsYF@+Ld0wmf42;xKmAQucU2?NjoBJ=aSA#Z;4lxjw zvkRLoGSzaE9yi*}V3*?vuLYqf*ryg)y#f`K9nYQWT<^Y8gN-5hyy@PI$i6_xC#GG# z`f}>}1gtf{qSh$`N6@v+}s#eVL#c37(-4oE%&eSIkU?u%c|$=M2@F2J~nY+|G&qU4Y*!?kwv! ztuCI>^V?aw>n~M}-jP&+L*QI#l_1{eJJ+Kct26uPcA8u5o2gaJKP4sb&IH~q#_Nq7 z;r#y<#PE;ifL3z!>(pHLqByVLK<_6xA15kvY;FPFkb=LIl@02!!}E#5Nz0Vr!1DQ! zAiRX|{MZrTeewGDNNCLIKP=R{X5ZMq^G|g@FMS5vI3~v9o)|GClP3)muT(6%?Q`qA zuS>np*mU(f@Pb}Vy6ayUgrz7$;b`nq&?0(5$wR5q(~n5r1R6$vEn(A+GITxqyvMw6 zeGd7I*jzd@+va6d??CNR!(93VZ@o4M?D{VJcHfvv`FNgs?yR{orpGsMc0%J$Afb3& z{yew26ZpvaK-}Ux*0VpxFR6B%ZPnAi;`~Vcyx#bv{d~+A`lA}+_Bly9V~RSXG&*DR zPV)IE*F8cuDIpr%*7~@EBb#|b4rDW617NqV2wiO>>9Jy}EtxQL&T^Zq+<;JsP4^f8w;gZtZ-wLiINtY)lhej!ba>=S1~? zJ8cf)efCDjiF^nW(V;G=!e^lS&E+#%;H^Qxa4P%f{`()|z=(*5j*r)~^$xd$n;SbF zw*!p9!9nnD>dHsh*53ZI`P4NOg~!R1CY>s+d00-E0-au*Z;)5smL~L;QASshTf8nA z=9Z9HNrD@NEe%axfRZp0++0Y$Mg&3@MnOSlfm12LlbaqnJ}2)qw0O0H0DW7VfvNjT zAZG?Y@leF&$qqRdP#VW(VUdwIuTuXM_rsjFg4%(7PG{zqwh=X94N=5OcyT$5e?Z%* z%8zr)fxQ|swIgB7MRhH?JlC^Qo9dw}>b$0=9}OG*y{CZu5y`PUXXi`H!nR&9H>+T9 zMUXztKOBzdk#NT$=M&fGeTea9{}Qg!8H?S+rJRRWS;5wM1kiG?bhK9rT_p46cIszVv~2Zz4Q6sdLnJB`;#8#>wi7_->D-DRlz>rZMA)f=z()j11#*9z9m4xgxlDj=#dBFf^8I%Xwnxt2^bBiyS zl4g*xbU`RYI-PCwbKq!Ni0@7Bhtt z$dSUzBlawE9J$zdWhKGiiTT1R?k!FibSaFP+r0-yT1^D!Hgp37Z6hl#TL zq&L{-Rd*z?W~gc8IR96i7N?MxR(U_rIsHaB`t^aW=>oWP^8?qPP})8n2#Cs5875aG zpTz<9*Ds-{aVBQhkew49Yi;iYyb9*RS%v($PRGX|b?CCBl$>f$>2Z?UsaH07|KDsS zX?jhC&j@TjlVbpSduNN2_hNNFi)d(QsOjh&K3=Q|lcIo~TfmXVFXDe#UDr@Fw6x9X zeGrNJ0E;|j>4m6gZBf)S=FF%I$WG(@y9V+~!mm9n^F`#7!S3lA=arG#2b~`jY(A{* z{uJ1R(?fJHs9`4%02L0VX2)qAMX{`H7@^C$f`i3RiI2YS#5FI}^^d zJIS-!pVw2m#^VSu)OK05cs;TmQfgR`F^^sEr8*p2g6~hcD#~MC4}U%fB4T1;GDF4K zTdMxlD9xEGVYEGYBoH-F@ju|N9OXe#jBRSe%}m2EUNmSaf1H&+AZK<9;tl8%Mr25Q z5QHuk#W}y&TWq9_?2iQNB9ck#6zOuzIq#!rNL3B==>A`1ietP6CCX0&4zxY5d%zGo zN0{cdiGc_#<}_)(kLNvX1Zbf8;DNooyu2Uz$y^~M1e?sS39xN4=by?SmC#W@^5Fg3 z-CA+-r6qAwRO5`ad-ty+JO2())pLl9Oqqk)^Ro}(u%KmHY$U7saU{rC-2J*e&e&#d zhhC0!y>WA7Ncgz_UEhDjOHZiRBdbF69`_e@)DNG@vrA^)DYGgn*o>h-)2Hw7(?i;3 zi4aa%l88{@^Ts<_hPI&o#@{SG6(f7y)2_(o>G56JTi_$y7}w%kDg;IAr0Xa0odtMy z5l>XnC#ox>?og1{LzJ|m!%L9vD5FOp<;+Psn#K3@z%Cj=SmY)zuCko>FDs2Fa%EvB zQCY-c`&XgYC=+Ai8rge)D=UOc!Pa*(OS9DyoDPNx*fN+l(hdZu6pMSgsOjeQQL^U?DB?rsijW)WaKl1f8c+j8-ka5%g z-;LJp>H@isbXCwf8YULgi@|Y;El-xFLlXQ<-w9>|F>uKR^Hx+M;YcTx_}}7aTHE)Z z*}r4BGjQhnp>GQPO&NQP=Tk7-&p?}wm)YIHqRw7_K;que&9{DEzRHU-IJ0sk=7EZY z*j@?T5z@22U1YmnU0@FT$WsH`nO=r2o!T{_pQNfK0VouiD79-@%Y_&3{{^_qM(_;AK#rhbm)7N-LXg33! zX=8OsTF*W6k97YpiS$;72`@Jri4@gXpx>TKt^D6Jk$!@aoAt#asJLbMOj!T-n55nI zfudzAA&HwvrNEE<3C=gw~SJWt7sa(AtU!03y zR#G#<<(dOSe)>eNAHMoF(0}8GSg;?u71fF`u%2WumE_Px5@+RH#V2XsFG`J4g;Jg) zWO9FB!j7uy@$xU##iIA<(p;jmNqqZhRBfhS;v)_9zlnq2&7$AsQm*g;fgI&-R0FKX z@KT|oKvCkRog^Y_;MT^Z@S<1HjujlKzM=-Q3$gjmrB?55ZlaTSK3N3qvX%f5}*NYV^U(u*Db@BBM!r zTd{ML)}~%KEFjA7q`%09D1kaWK{xwFdGY9-6eibrIW@zW)#@Kc<)9Tt91HWINpV`F zTA2-u!XaBO4Uu+cGaVPKw0XFxV}i^=U~YM6eimv8Gw+q!KPsSF2Eq2}1TS3>{rm;r z@Q08S7v!JBi}ZJPNcmsCj1AjjHrKqyD+l5%32`6sOFHxLGa$JO-V%Pt{`#t<>|^$P zf6CICDJ(%&$1-sJAS;@(I3mtauK84N;lgT-Rx0T%nw6V3sH&!=O=bwMaL`~l-qqsi z?$$Ndx%f^=Ii91$_qqJcMcTgcK&`N!gGyw#dqEiz+vqK#BrG$dnvV*}CNoX1PSSJU zh}7!-3MT~%HS#4Mkg%?1q;D3`Qb~gIPY<#HN4nTjvAj4#KORNec*A}n=g3mArI;iX zE^Pr;)F!*Q`4jV7fXi_PELjC^J~6TQFPg#kKUi5=s>faK(MX&8BPZ3|ySSkS&ib*H zP*gxHDHKFvbGu@O&b~0B&(sE0n^{h-VQ`efLX30Imo}ltbZkSWvACf(&nYo_iRb7O zU#R&AV8w1Yim$kZ5+vzbo?3PlurT{Mu9AlRkPO9)7qe2B!kPYYn=lqJ0vYeRG?7Wq zDnES%HxkR+{X1_)S2_|it#L_Vr%G`stB{y;)LndaqgSpCv?qAaMi7aMhWO zoi}-4r5}YRCg9sjksjQg$Yat47Fo*EyTfppiS@TX3n5;pB4TrFO3Gf_gJO|KL})Ju zZ@E>qnN4fAHBc+|cXjvt?-A|G|PWg6r0koEa?6%KK{E|?=grLRV^guH}>9pk|? zzQi`RcOE`6Q{fpxKG*H%Kd|NJXv(DH|I!(-WH6;c#j*lf%wp-V$pbd|X#7csV&~xU zNBn#AevfHbL$iy z)#V+;Y{vNcjzmOx94lTTh^*XM$p)ePEkNW~M2#)z>LWc{9QJ!RNO_e{6!{#R9)R#W zSc%0iUlN;M1;IZw-+XU=^0n`ggF%E`=?*J#{J~Fp$^1nO}1ws>>@# z*hJ5<@(sQh!>7>Y_Cra!G|jBf3nz_L!pHRZ_F)mL?ev&PPOk~{l-H#fc$C{=Ln0WY zCyfYJ>tqNvwqCo9yKlJwWJ_yOlm`SCCOJmw00_qL!NAmyG0NuX-J9D%;=d)zwl%;~B%t*fqo9z^%`C{wYi?Y$l~9RmmQI5x@{MHJAHr2WPo zTyLkk*Q+7l#!YB$RuC$;PWJ~F8XRS;@~P#E+ctMEnx`BbY!Q3ZMU9FO=~+e^n?L+i zb=@K^(`4{5qMnPKtTVkbRJWdEH&4*3^}g5{g>NDaiF;%%U(nPYuyc?y=V!?0&p=X( z^qK};ACt2dP=5`{D7#&*O+^qsvT=CrKkEQpI*AS?aQP>3sT&(O6ArXzxc}Djc>4bS zoF#Q%qgh&B-CIC6>v2ih@h}XUadKS-*DwQf0t{9>I&7&sAx5L> zBZR*@_hxK#vId&~DbPKx8&m5S+dnaUWq@@s2+QD{x|u9YbD#UFP3iqF?Sq^lc1w3v4xRkoX3qO=9QHdbrwexas)=B z)4v#4*Va<$vH7Qm+a8UJTq1~;azDbfTdarrN=Vi-El;dS-Emo1lvVsCgYZuVIKHu& z$aYP&W_-IxtTME36_4E7&3bBAjr?IY$G5ez^y7t}gF>?F!I z7(MULPA$G#lrcslg?5W-_2Z@51e~6J<%*1ru4Gzq@vCEpKOm5sKG!NbBhop1wTITV z_)afKS+)Qh{7RXMeMxFgO`@jWGa5zY@VdxF?LeK>1I}>bHrI}xw_jmK7Lf1e0s`q& z#?SPPC#UpIN`*Df4gx+wZygSgUze)2_E)3U0{<$U;?n4Mr9{+pj<)hHwYX6V|Grn0 zCquy{(yufL9a*vC=zN%OW38+lkE>PrH!-HgH78Wx7M)CRF~5pBzW)4u(m9H``|n8a z^cOrkGz@wf*9+2BF;fEX*e~d9M^~Tu817wEHhBl4j~1V7O}!4HHDZ@9pYkh%JRelO zZ?%RZ;qPs?;ISq@m09^FR3RNxZ4hBIy}jsq>WX26;jE1r4Ak>R1V8<-Fu&n1SZ! z*OTk7oZjzbIz9*NZDPSVx_2Lq9(6-cVHdHPy4QPPo!_GZWs zm!n9_i}TD;p)(>z+syry`7MLbk!`@zkyG@>i^}g8Z>HAfdBx;Cz56mMAUUuG$}_!= zdk4YXsPbUSkvu&`V6noyz>QPa%|Zao9_SuX68{afb-)>&-pY>OTYHxAJ|pE}SECE; z`6DM|_{|#+yV4mUOa$RThVNrxD}SN3|6h>0WX=b!?%S(;c@&LQ!q~X%WGyN#`8m~q zAq%UE-PfTV#=9zkcYxf5MbBU71XbNP63!tEnhVs79d*n=nnxn8!8{?vXWC9|B^=1G z_)$rkfFv+YSy6jQ*r_OMqE0`!E!ocT@AUklw3QGdMDs78Ui!faETDiy#ftu%HYL=O z0l5*n3=;NKb-bnX19)84y zv4as@dUM)SBzR96@uk9X+i4a3u=(r=`aHT?yfx`=PAES`RVZtBNMuJ84uGhb@RfmV zkpGPi<&_%?(5tB|Zfo`PT?;Ol|ArYVwo8?$(D1|+9YDLn*xCC-g#YuPbKVspRMJ_e zp2ncbqqOvXw;s3YluS8Jp6&aChrkf$=YYVGi_aai^P(Dxxc;5nO)^Xi0fXc^X+9=^ zL9_N*qpT7}FF}cIL8i7csY!!KB?Qeu2L59dj!%VEB?YHIgcwbxwhbMSK072T74JJh zLkz28nT(6;uk4DD;n?Mq&dP~4FYrhg!(We8B53U81v-KL_(?{gBW2RBw!A0{^jb3#82T>9|uc@`gQgbq9tKSKcy#E zw*$Fx!U=Pyw3U~a);1ml9uloNPqkve)W*^;Rc#R&jlE1IS0r<$GPro%)i~t+I?}zn z2y7RR)1~BB)>mN%L6}=H>f`n0^C@KdVgkYz2v z0oXt)&~6)Sda@a^o()5m+E5V6j!2P2jv*H>Neg6SS{}0trHIUOkMemAae1B@tFgbW z_Z{&{#Lbc9sgvM~6BHGkENsx9E1Z*12!lNN%m0r)Nisi-rsA7+=I2bt{S-OV>UpJX zl--UNry)EZ5bS`CgQFbHEFjQ(Z2+@kIwSCqx@ZeI3ai36?Q}cz-UqHUd_3qRFTj;| z$SgyNXGAV%Qp_*4gdw@yeE9J6OrNt%?a6!3r>W5JP}rKG+SNrB!Kh6COo=#^*+NCqVX(G%a?+ZjZ~}v*vywg& zb*Q)+9fqrx5!c0QN`ZsZx$|y@uEY`9q1SCfmW04$HVq17U)p)Qw z92Qb;ZT0j5600{W_ue#r91x$lq+NRkm1ZP+j3_Aod4Nc6wWvG@v$IBn)Taf}`#?SY zcc>ffSuV2zBw|pW!`h5B`jcpRKzn@WheF)NH);E6<^C#$o%JJ+>)o|OXS~`zUFxA# zXmJ)3SBk!nLp974V%3=_w@%CGb{DEzr&Dt39y-50JeY?O69pYdI03^%oucRf!&Q>@ zhMNGpWi5sphXh3(xNFRrfYuioi8$@z5!rH_S6md0nh`3P2+PR8)JTkGT3S47BQpIf zX|8{1aR%Re6z|MVoHX5ZXs0#~!O7ua6yx<3t8Rhl=maY#e-zV%o({RRf<(;>P=^XA zTZX-?8lWD46%qd01D(!?do$q#`T3(`*s{8E$I`rH(L~?CHZuDJp~zc+uz|qFf&E~C z-|`f?VvqCqgwRN_aod8o*ROBrxD-9L-95=dwVE}B?a#^w7lAVL@4h2$pAWb`vN>@- z^L0|oNnyLD1$p^{A-vN3Izud8mn-9=YVE%q?5Nkv!<8XnMbe2ESBoOGcTXs!(|6)xN-(f;j$aT* zUpdb2SM{6P`$ueATFx)0o>*TY@ipDvMzIWh!9H`?J~V1VX0|*y7^0omx8^T;gS?Gw zilW4>8C1ba_zJnvk;E9#fEh?0$-xT^$p%3#LD9%Ow7yG2y%5=43Ee&Qql~;x7XH1UQo|X0(7Qe|nw`hI2b9(^|1qLU3 zMc+SzWeJot~{)FG#vQBqUR|g=Mfw}9Oap7~Nd!xJX~41fgea&v-cLzGZq#&M zbvWK=BZkU9bMZ(!1L3vRWd0mAU;Ud9`oo}7@u!Jtn9I>$~^w_ak zslQIOsJsugM9IBpy7Vh*VS0H=ntxYEY4YNja_l7|t?~jER9s}PG3a3QUt-o%yXL}c-~YwKT~>iufXrtt&x!daIp^;?>y_i%O-zXO`P^&9;3Vk`AwT=km; zq+{9^vsd;NNwK-0!fU|Ha5YIf<+!F)+hz!ZFt^`_+eneO?y(ht&&xX4ch0%~rNtxL zWvOXO?2FP)H52?(me8VL2km%%>_ss0{TI?+l@0R!|~=Z8u##l{!?=`S^Nu3uXfmkc1Wg>wbg@X6a8Zc6B5~0gtgh%Zr|ZggX4M+o2u9` zv24xFyB4Qix0Ozhk$NKg5#Hj%NqORSZwnPV2iDrAK<*4Y!8KHKd1T}$=*W1Kf|)?7 zljMeED*_Y|6#4keRxvpG<6e()aFG|zC5ZcJ8;ongA>P8>jINS&)wFo2E~PCGFE2Gc zo+t<}MvbwK7w>0+!ObrwF{Me*^+`2s-?x_yx^2l~@~Pja-taR290TZ@HSDXWubEyq z?VG#^dIx#hfkT$U?9SfM^pCb&SX^Ava_Ib?$cdAFQx>Zr3=!CZ8P};_|JFfqK5|x1 zv#N!|HMn4O_g`B{vi9M9G52L~Tx&#{8)G|pu`#8+voTv$wdLkDZf-qa%il^_Fx;On z&k`ncj!D*q%IRDIl^{Q=Vg53~BtV&SFQk|nBd3`vP=4!;ie7F@0tHukbIu z+g%M{>{Z%vQc-o4#-_HbPf%H0l_|T|b}Yjg2OLd)X`FO1Ovutm;oS32 z>#yF7m<_F_)F6!lct;@X;QK5~S)~8QNxxYG84f~eygJc(uE)ftvMK+B zXmXLwE4rTCw|um+suDHKQepSukFtCia2RYyy}tytalLShpa&uh6Db&G&=-WSmyvWfN@!))pBAYy?^_a=Jf5g zVwcUy7tss#5g}CNl606RWcY)oY`aL1wQCn{pqZz;u``$X5}%EqTUt5JO=jL>IoX#1 z3EdVC2MJqS*`K@~=p>v7UYhsyV`4dzO4D%ftgWB;B$UPOgqI)Pc#^+}&Kr})7l&Uw zLb^^sGcH44Eww3S$o`@mcv%rtEQBu|_31Yo)$9bYpNEV*aqJ^C?`jyr!sckTR$5Py6kWgL-5~${hlpPL&Z_iLlQK~bjZg>C)t&?dtYO) zZ+YoT60C#Mq>#-kc96Ie1w_?#T~_Y{Db-;BP5TG zPVwYwOdI`sVKlyi=?k08M6hxbG}BM=72Vi#t#yw~ew~$ls&R`+b9bgzI0uWT?Aw;_ zf}aVz`DW@;%uDE5^oCyH3Ll-hAt?7!4$ZgYaEvSR>#eT#Dv8NXawT(L)aa6{I?U6- zTrfaF+?5B;%d=@|xPN@c^#{(8pxcDcOgt-?{&&Dip_opZ5O-jieR();PzQ$WfiYym z^`5HJ&Fxt5)5Duu>im+a;6|y7{|BGy9!qX{zg;nRZ$m;vo=!v`>jOzoRFNgS*5N?@ zF&K~jVe7@_zi`lN^zrigot@q$yD6Eti_m~Nn*=ikMGm`8v#5Q-Q!+Abv!UZ-FvHW< zD3FOlNjXt(w6k|T<;jvu#@OhZrDW4H%Z0z=m&qrUgoCf|R!|+&Fr{BI2qxf5Sfj{b zwH#{FIM;e|45%rI9hG$|J)6md-QA_Jkc&rduDd(>`cnTau8qWJp-Yx4_?}i%A zIKvYYGQ#rxdpBV8OPXouolW)9+9aFGwC7-ONIEGF8)JK zB|d&E1${SayEewG5(_$M^;-M}@>mVrz5TL?{z~srsY(}6`71F8i^aXp8Ku?Tb`#E> zVLK8a!e= z@y@(aSYzwVqtg|OK!cTo!awq})bS$-^-W&M@I<-o$GarCBqa%!()Y7&mp`o?b#_Ic z5UV5U(Im<=PiW0R4e?`AB*q~%cDM5uTKJlxBPTY3EShg=REkToc8?%dgmHSbO&Bz( zqNZlHCZ~7xefDZImW+nxW4vRaHrjBdv;&9|3kO?gN|Wc#gk5k;u6lB$@`uCG?$|oM zE_s#{TA<~Ds}0N-HtxywDzH(3SI~;-qXjvPueiB&>g1Cg3sZBnH~Uqyo_+GfhL8+m|t0OqJS~UeBfU#TcvcNIQ@;mfAbpg0enm1TbD+MRiHs z$c9@)<^J%xQn_q|WhROVZ{}GAhulDa(A~!V5;PW=kAsZJwNBB3&jBey0wz)th8a)c zO)EHdgK$3&7`umlQNjJYkg~b`eDV3D*hs+hmE^;vNRnl;e_*TWwvRs(ZFK;vTb1AAaMkb(hbxJZ`#E&`ptMZjIF#F6}AR-Gty*Aj3Ozt z4kwCi3@1Mh(V#5STRbkzMik~KNtLdC@^lceLZK^8X;2x$DL$%>MKNIvOo+^fzy3`^?0wQtZr-nbE~)C;qP1;xd0>BF9-#t5t*efK=Xjm$uTV>TS3&eHIR`dK)tr|| ziiN`^10~kXCM<9zlT+7Q-YmV}v5v5DwsMPS!^YCQ@KO}VH@XJ2#>H)~2uCeZVNg|? zQ}jfr2_t*~RE2xYy|iP(EU2OlumM!Z7;EmK)3Y?NUjbH56v@+oV=mnHGIKJJfR)@9-M(6l2<5%DeO>G8dOTBRvz2%*w92-tH zCCXN$HIn1TF(dOC%F2dmq~J+=+7+2Zr8H$S%Vy}U#pe|iT-a|i(JiKJSVNGIbeA~8f( zc#<1(!7JR+14%e(U6I+PqYN0tIUXG?nrUgfGm&#U`28phMkjL=0BROPk>SAn?vbXh zVRAa@wCVN)srm}AQ(7>Hk-461*W>$@#Gp;%Qq&RKOWJg}-;MS!2K3%f7g1L`Pwqyi2WRE%2kE zSLq4HtUYObln_k`7L>Gppm}R*st!bMUGeO*d+0nGpDX>r~1=$l3h@ z#e;iB?Sz}!<>g1z{f?U@be9NO0rRxA-^sak1c@j&k!w#8?=R8X*y%Y~HD5?^T8JkN=w^f%F%a3e z<7(QO%-F$gZ=g-J%H8aF3j)&tByP*#9cbcq-UJACrWlJ`>aEGx>iQKuq)ICtPYDyz z;Xyy?imK+%S492+1Oem2;z(FW{|e|?)?Kpaj;d{6`qw&qEKnSBliPfwzzV{un;>eN zOfHcvE&Pz~=z7#Sl?LB(I@Y=tQQ?aG+4Fy-EoR(pIocCWN?g*!zCb2DW;o%LWOW^U z6N<8(il5?QNq7Y?vBq}$93_*odE9)7ZjORtvh~YL1JY`PT8CodCb80({qroGa-BW8 zpzD%MeusosMB1dNg;dnJOt&+16aM$uyaAXS@xU8+RW6@1F!p_E;?y{DB2DW3UaZE! zm@2HhDcU{-7DAkEbEjYKBc3P=-$h7qk^P4g4Kbi|t-&EVaJ!!aS6uVw< zRXe@hp9BU66D(B9Z5dm8r-gN~m*bwoIB6T(>ihZef(nIsALpU(Dqxe1hgPK5U=qVC zgGHPL+!Gb32OnJcfk5xDnJ&U)L%{nifK1Vh=SQQV;+}NO1X(KGvUY7N%b2J}elN~H zqbb{yD$W)*E}`)+=BwgHZe(IaW_nE?$OCx)GBr%BowF9|AbwL*HbNu?oiGE2C{vNv zN~xbv)zt^IHDjiZ0NYQ7oYdp@a&dJ%N>4`6LI4^%oMJ2$@yg)TOqe`zj#HP*Ty{MG z3&l+RT+j6dH<+k3qjCW)ocN&ceY>^Ur!^D0g==i!9UZm?ikuwds)TL38sDvgt7l;e zqU&z~?O?D}B6GG`8(5uh>xuDZG{3E&Td}dL<`;s^_>#fs zTCObjta!Akw`7xvkIA|$JSe9<=LevCZiMHo zg)g;^c3Z6vQ$$-Hci!#;$!XHhkTKibE)Ejz2ejCrI9lE}8U71vM3=Z-Cv`kyu6%5>pX9U-UQ@$@y~LJvuLjKg8dsbElm>}xkT;bvERG*=dwF&Y z-ER!qiY!rLgeG#o^mk{^GI25~qj54Mh;eWa=Xq1G*QoTLE(su|nFm!8gbxrh?nr(& z=*OQpK~HrIY<*09vVM+zzINZ{e9V3J`h0xQY7xSdjWGkn7?~N=xE;^AJZRRj5#zhA zqbl=<;lj&LEwpGy7k}kQ1B7^ZaXBf+%ap>U0Sy%EtrkgKH8oKP2G%t0QS>hi&f(xPo3@cRPmhk69%Sn7iW!~|Nb>l zFpA_LnqWUzmUh?e&XkN7Cr2iy42ky1#)>{4s_PmzpbB46maHvLFFu8PCxpkL2pG96 z_)9LSdV~{PEL2%t!z$3+Z?2Z>_N3$7w2<4c607|EE&CZ?j?g0z;DR^=e(TX;yqL1c zf5txjoq;j<#r!A8@FT;WMwW>Ylx`>fqDk@gb-5{NPWpHyyU?_or zo=b$)ieSj~WQ8oTI05?tVm1Agnziz_hxdv(IWTWQe-hPP}6};#)f-jgQ(T` zVmA^=$b5SZNo z`v#B!CGlBe&O6O8!*x*A@7r(h+usFt7MF>I_WJH+q!XCA%ginF=8I`-zQE-B0&92f zan;pz$nafe{^0$igUyvt+we};uqZ3DH{=L+4+87Ew$Du%tV*02$~l-$F`Q~=jLSNs zRebVwe`+$?zfb>=m^*Py)SY3&R8?Lxw ztZz-@-+2N5zUe~f7nbmTq{@IY7`PRu&&{xnpoBc!4^siwOpiO9&~HU%rJd7oLtIOv6>q@BoDSEj*^qWlG-4s=NPtoQgazGHSj zt;?Sl$^2HNb>;nGcWsLo#T($Ng((gAUc`?0*U@o$b8~Vsi{S6Vi^OC1)RV4vh`a+- z(IC~gqc(Nsl`_k+UMrT|GWP+=rW2k|m+ISb7gh8iSH9>GVBz1t=9K5z_bgs1Jw&@C$qKIr)7DE&iX@uE>I!l68x}@>-4%fpv z`vb_2!5rlsG-G4>_!v$~-009D9?QrVYRd4+RgK~^OgM_v7wvraI?u7RLU?Qh@AyM& zQpa76@n_%qLIGGmLi+d3BY(NEQ>a88jJVmZGUx5yE^RkZ2cntbQ!wCHe_^pe-%6t`dit7 zJMDozl7SL$52V%Z5VFz|)i>4oZ&EVI0!v{3)HHKZXsFBuZrDFTFDYxG6=vaW&CX0d zc~Q}ocC@yF=7$ZGcemdHdr&RP5O<$tFZG3fE_CiV|o&ZHSzm05U8#OQ2(ScBjMjuuN`-|aJDxz~?K($IVqH^YFaM(mzLjZ=$n^Z4%JLqD!c zy4E8WsEBi8|w2V3;;QR4#s7TNMWuMV70+#v2KTvSK z32a3RX>PxMP2{{h3gw(!e@0YUCzwxuCa#wiMGuqKHY6oQUVnkf9%k8VCY>i(5pw8E zcvv$GJi_?;CaI=1U;C=b^|xFgj=%VA~)Z*lWRA4{5*`aK=g1Y8(VQM1c#7Luz}^DP`zRf)x77>!1}ULTSqVRn=d zY^oz*CPOqP)b4BpL8lR#DqjPeV%smB9cdfePxH>+ra(NCq?hU^Ue>WmMEO zu&<+y@=_P2!60=_^)xos;&EBAI0Lk_x6{}d#OJT2eRn$*0Uss)3Tm1fsBdVX)Z?bA zv5f=!cT-taNx)x1MO_PzJ^460nrf)5C?il}!zf9Vln1D)siL~Ek*Z)Rp0ZM^n(C=< zYM{2hmb#`O<>i%BR#uUWE-<_xv+v+hb~e`Hb-E}I*3;75L{m#0Zo8ZM9lP1LtCgzi z3d*be`23{=8>{jAN+_=h;uaG0T_3{Jx{qhS^bGrVHW3U~QR4Mb-msH{dv{SCtfZp4 zk`j-P^152;8yl#vt-xWm;0grUxqBB4O_jL3r34%5sco#GvZfq=c>}w5woz3UpuD`4 zm5DwUQ)Uhx+K1O>WOFmZ+Pc2Th|A?dlJw`ZP*8LA-F5<-FVZ>k!{z(W7wy7hMT&e} zK6POh1aLY{R8~3(2Hp5eZCj!YfSP8m>l{~Zb~CcH&g|SG$z+1%)exg8KYP7#mO?Yc zOLlXh!p!o-b-LE(+cGl~iPcuG1H|aw;i+lPe|VLFxoM_4Z*ikjCeZOHJ8KmNZZF}iuA{Bi#!_!T zBO@tl9&N#?OmV(%8Eaq%N4!xc1}?GU>Y!v}nZ7euNLDrBQzyB0y`O%>Ix!=Xy=rSo&DZ6)-VTo<9JUUBMGawoi1d|1y&q;b^p7G%U#ztmY zQ)+0g)JU!MvFYANYtTn@^dbZ68fDD~@r+;O>g6tm78e+}d6BuWfkTH6<6WC%Au3V6 za~JZRZaO==m<~^J{pxl4=QJ7*G!whnN%xIaN;+IDTsp~Hub<#*e?NUaJq#^`F$bF2 zxnmc5_8#Eyk=-=yF<$ezqiy4c}hRI~aXt7|invhIZ0_8z! zD$8&=t@_j`LBwRWVzpVZ+HIK4Mhqr1Hv8S<7P}pb*?=S&FqutAqJ-6M!(@;!TAWnY z)KObeip^@J#8-yjTY}wT#b_{KG+VG*Oo*b1(#mRTg5_8Z0${-FucW4`iW0X2yTd_= z(}qz`6q8k--)phiuvm;3OeSnL8&<0oi^Yh^;>7O{;Bva~l(?{2Oq7)PC@Jw$Q{O;M zr5~$NL^9f_tf`@@+=Ed9lg)XCLCJQ#38A&o?wc9X=5*DYIn)-Tz0Ur*B4YS3BWHe#5TQHi;lz7W1^Oxce zlv7(*PgR84(=4oRV)9l{SzeCETS2Seg3)NDq^yy8uLUI? zCu1sS$IgAURGL`0b&DIFcNktyVJ)qusm6;*(Bl`)7Tjg!cmn}E-ZDIP8`3?Wm=Pfn zX5!Wb&R^|hXi21I|I>W=`Ms1`axV`GiAb2WO#@Z+LCU=reG-nQkd7xYc*?1$tHxy% zLA2rVm0*aE&~@t$V>408_ddb%FFrzrIZZreqOzfyDxVoSocG$l=~1OrayCl(kADU?@MP~r7b)>=)O-%2K$L~?qlZ1rPMjd%lP z)CN7ceWiE}>)h_XN#~t@R%HXFWj;0sZ}7qCZsN8&o_XO}4z;)tR25rU2h~0|LMlqy zh57dakAsdukynFI?SmkvZI3Lefz0%tTWtyjn3&XLP-OU?AgK2 zoz+O2No0eQ%AK`TR94Zra}NiO9O1~}!yMeVi{`2_yrn)$D=Mg{2vS|<$7L*~`RFbh z>O4s442q^tsMfT*tFdioDd+Zc{fC)M2D90W-ERL3-0PoREOs|#elKQG*k<1PN5f!q z5^Sj_;CEuUZ!-5MiAagJoHDN)5eSDjSYBC1(=_aMJ2snbOL!k7%nx$UKc0WA@PEF) z?c9qL`8Wug&S&I?(m)eX(lIu|>uko-sFD$fy99^TgocDkQuTSIk_n3>pvWmwih#*t z#(+X}Da7h#0>xm(E3emo8{nj(`-DTpQ$CIhJH zG?|Qm!D>R%WD>H1C>gLwAg7Zkq6rBNRaOv8R*a&`W_X>Aq>97oz$%J}CId!EL`kKQ zRRPH?qGS{_!GOsmA_@X1ah8@=*^H+#+FX>loe0SYYwIyE+wqr`Vl!%Fl1Ws_g2^DF zDk(CuhQVaTAZohyi{LI|@MSdO%uUj&iWNd7V_4Rd}PA49Z2bar*$z(#)^lx#qjR5Bhw@}b5 zUFbg-Phr}H!e6AwFUn_5nDZB?|M}1>^KH={BFuR_xE!)Vfgaa`9?H9DS#8NatOZ94 z^O`jRw;}t|Q0V*+w$D#C#fKEp19@=fw$St?nX)Yh5AdItwjwKApFYmdZ~g!-P1QgY zkR%aRQIKU_d~>2(D9nN&+%pO{=bm$mMx#U`5zJ;YwY9ZdQ>TjjdZT5#D(2?q2!%oz zjYgbKCpMc6x7&@;sCP{i3UH1>_XqvXrBxK>BA*7IF<~z9>qt&4x4Vb(k7;@RzPbJU zaJl{5?|ioh?dJ<|p~b9br_JQtlgT8pSPV&$C@n3;>-A!>ShgzfBA*=!?}I{eQ{tl0 zD9g*sY;0^`u~@L%?fL*evl+MBy=5`y-q;zC$wZM>B9eoR&>5tClUz~iNv;X7v?2@zwrNq&bRPf$*Zup zi}OL`$Db3gPm4m~DRj&2Kdc;pt?5en=bH1MUrvPr31BoDv0AMd35r{N?Ap&~Gl?{K`F_{Is?s|M({%%pX-W zw7kJmx&8dKbJy-+=auu5FM9dp+;e`#tW}&7S+m)U!C=@D-kiu53UlsQE-(3cDoi{7 ze{Rb^kHY=JbIhGjVR?|fK85KODe`eC3UiTP80}LQW+6M!EC1MbqMUQj|DRi5J3m~$ zDCYz)KfN4#To8?|X@iCN%S52-G-mYx&kL4=k zyZd^jDCWMQyN!Q+6A&a3gCrto8mg+0PNz`Rd;RANFL`~<`NCUxJl`$1kte8nepP*n zeV%(R&D{CqDEuu5fT`Z9<2tk(5$&`>qKQV}%$qZRiaR>&k0#M5b1(TK%j z!(tMD&KboYA0-uMetedc(MEYq1$LA4DW&}J(0*=V&Q`vfrhn5bPYrZGdS$QW1QSp- z6*-wiRy0Jj8KcpFkejERC-~Yn)^MRP=lm85GkN{h`IRw(fI$$^G!;27uI(!4oO^Cx zCu@=l0%X4@of9@e%aD;Z5F`weK3D#3SOHPe1y5C!2Z|GcItYjc!`8R9b72dA=g7HO1 zlq95V#e4Vo{X(_fv7A6?Xo!LVQmagib~B+=vAeN}QX8nMhN`Kc38-j@k^yydo}No@ zaPry&D+z(}mV-R?%oo^MWkyXWk=1OhIg!;9)~!ZG1wlYlwX8*|3%{!B8>py?ilS<| zZYoMvNOfxxjV()F5QOY9GxrK_;W^$tR{>EFiLHzqj^1_J3ZmXi{t)w?No7(v_SB|rcnd){JBr~m{Bi6qM- z-Ar$Y1X}hJ^q3H~n&Go4=khP=3(@H31A-`GFlAUB9b#f&kqym;t*n||hZ-q0OK6I| z(2S601s4i*?l*ZNT`0JP``RaLG3W2+|1MJG1HXOn-XKdVs+wkSutm)Mg07zq~jaRbYAAnn?K>~+4nem@f4@-OtBQr z`yR9!W^&>-XC^n1JVELzOL3UCKF0jZMN`=rzeLx~i!8||Y&MNdGDRw>AO2N6?}DI_ z+!*7-t{yr=nfof9T*aqXV)q={s@S%41`&f~KomhVCYT?&#QDAvR?{M)WWZoFVltUA z8T5`_L6ndq^Ne+!U}!yw+3g_Gca=-;Twp4qVRkxj*d5qx77UVz!DzwmbmDfqaoDUF zB>_PYF<6Y4Y&M)u2X>nUqtT4j?!e`AU^VO0aSTQ)7ONeb%YobFz-hB$Hk&Xe7Pv7u z#O>t_Hj4#|*^J%k#_e`ux0*0)^?!;O%vNj;H*U8Jr`?LlY$UZd!ASpQ#zV_24)roT zFhMje6Ale=d32sgB1UL-hzqwDiDooRMgh@i#fZY{=y?Warb&xdEJh;+vjvCKh0Eo_ zW;J6p88Ij^rmmdfy%U`*q|JDIKE!m2$l3~N4U85$j$D52RxD;CYGj6?p>BE?BCJh! zGcf6K1O&r`wIwVZ&_HEmnikg5BY!#O=mzcVJQ?%#GimYhex9?7-!A<8V4K z83ZIz!eVpaDskg>IvLWX58(Vs|)jxm-AG7EER{T5N@}!A|;DVq~JT^!DH4 z_IwNs1|&&@t$XOfTOs)`PTL_oq&46d;ggQ9$UjX!^^aI&G74|KKf#~>{UC3jTVQZx zjiy=`CGM=%Dkqumz0G1m{~mL|CV?Pfah6aP@ZvVgq?IJm$T~~2vn<8HY_(yM04>e> z{3KJ;^F$N@tJ97lx2&a_V4?p*{@dUEJwH8hi}C&e?sVN|Fkz*#wwV^cRZl;)!q`wZ zz0~p46EE=P;|FN2up{Pd2th+mC5Xl{XrhE9f`Cdg8YUi3BABg6f^ znPFyOiG(U(bJ!47nOHPIWG%$%dKArQ#bT5|NilWhJ+4k|Qg-;;eEX&6IJUP5r$Ing zGei>!Hbaxl&aaUc%s6Z&P-J4!IFZ#wR>CQa4m$>UgPE~$rstPP8!R|%W<*6Hy_p~x zTV;BFg_vx{W=OC+J;7X9!Dw?}G00?6nmX8O&IX5|Y6{a&>~~sS*57{&)QGZ-0drxu1ctLA2`qlvyOAD>E!EN72ky zj9QHO@o~nd=835y7Ka^4l}Seuq~q(%E-bMT7cm?3du4h#2__p>qlTP`l1|52Usz;r zVV$Jpz++We8M(~&-oMUt)W*(gKW0OU(EJS3b1TF$B4(=@qe1U>Nk>;%T9{@o6ecd4 zu-a{;SBIHe&@E=i`XW&r_^V2Z4BlqVwS&i=JV;3@#903tfu2-)TqY%&ah2FfE{<^Ft=q)>J9+W9zryFAI7Umb45vlH>TqI| zHwn#6GQGG?QZeCjSWzPr3@)sqx*93ZOt74gD6Kz8O^L|n@+>nmbA*!$M!OxW$%2^P zV0nIunb0~3O+sEBQ`usE=p4XEi9 zN;=8L+6wcF%cLYTPN#v5kr4(4!c;u@6p!z5vM@Hwa?C|jgCDz5gzQ)Zp`h=Wf+~Zn^@iTR0OR0XXgYFgE7OVsv(u^q}5+RnY)f-&mU)RV--GIc3DO>$?8}q zS1(-R=GiVr<`cM@YAADK}$1#^Bvy5F+`%gof>nPv1{*f zd1iz3#tPTpd4~_qe8|9J5_eS#US*n-ue`xK@1CGz=hnP|vepLN$#LHO(QBOe;3UH#6^C17>e9RX z;QK%2FVhs zUeb<7U14;vkD<{iW@cuYnGUg;G~n_%P}X}n`Tf7)`#(IxjXM)8Zmc3!?_#GlL;t%! z;ICePmrK(ryp;_!l{qnp0?D;mrYHK*>YwC5bs5Q-n+&f%4n znNZhhUjD&PdH=#02B)LAE1K~cSGo1_dz`s;m6KPl)7?EoJT^tw*|&J(R1XnLCG}NS zmhZgE$#XZjdA6G~7cVoiDG)3-G0}a7pS*RE#U+`_ic(k^;N7?1HtA8($CmZ9B)++S7w3P#RXlM!z&~u6IPFv`J0QBRJYK+w;5|>hUNJ_ zQh`=#%geBmWMSYmC*FIHOG61%do9%-naL|3^7`v1xOnRt(<>sSo>Ee)JzQIJa`@@v z9H@1nq-9JN8+NA)Ext(C<=1)Z?e{o$rH{c-3R_hb0b!ZRg%wnHBjxfm>#`AlZ3nLS z6g}tO=k&#k^o_4!u-8%6%)a#5@Pe?+?jK*=ST+) zl`f)#1FUSs@inzjYBwOFk2j&9sXAW_^94HRFaLi&g+f~>st;=7&i7MTUp~maNRf}j zr!LHyw8EJy3tU?=pg0`(GaJ10h@Yxpo-p^`W-)2LE6nK?y1K4%YQaf|V};I>uXBB^ zlH*6)v8?p4fCHahqyHy=&$;0>GB%C*>!U2K*=ao7g2yDFq++bkF0iz`K}@n?Gn+6P zOW1p$oyO__rrfhAn6Nti)CFs)_9=`H3@{Zbp}jqb-5>xmtMilejm9afuc10%Ll87l z>m!`HGDFnfL`P|q8}DCc#aPSk9W@ARqfE_C&^r)8aW>HGUF5@`yvdka#iP$YO-Ez7 z-drw-*nDN!SgD=n`uMEE${a<F-slQ&J^P@6D>zS$FmI@J#W3j?F~PVy!2%r z?+9Yq=w)&>iKliSw&feV`RY%3@62`X^mNmCbAqTCpt;@2?1i`a;Q9h(N1x_MlZEBc zF%sT7$~Nb@_Es0_uE%)cxyRU5<-=|k5hRIBWS)`RXX%+&Sf8J!^YScm=>hgM%3OW( z9Y#}?JoeN+Z0miTzBrAu^&rQO)Wh^7b89lzk`#AdKf%qYo4p5XkteTlZC0ak&praF zVHUz^d^NRfcK?(USJ&|Ed7AwV0;}^QgvAPiE|K{dly@BGnH^51&b`O&kcEz?pX1Rz z4V1YoNP>VUN*J^_YfJ0QPfxQjKLUXk$}K6@mS+%rZP?bANvL3U85y6*;H<5qrOt;G zpJ!}!f^|z1Z55^1%pz(k&RS?3D);ipfp*0CZZ3AMP`>*Rhjy2fnVMl~IZi@dV%}Ls zdt)P27L8;^Mv#mcgf!E)PIB_j1kR>Mcw}dg)W$Ru%M#^|6lwN0_?7nF~W`jr-YEX=15=1*^kMl2v+=9`>~~5pOhf<3G>L!!ZlZ>YV>@Q6b zj&9;Q_)Y%kE00hqPBV~H5o2*iUp-4-+K9c(jgU}r1?%WIumhh(K#hgC`tlF>habMm zoyif#r$!l=TR<_pscvYY)TTF?Axc0?}wESlx;<6=7kdn~Aua+CYG0WR^+$UcU3q-{gsdt+?j~`{Wzv6~-~85d9NxK;fH=m@l||CH5vMhppZOBs{7N(H>+{UGkMT#} z_#CZup5~br3oA3jgi|F1 zt7{4Py;RigprLUWl_hp878|~*M%s7nW&i#I?BBnSy?g5@F|Bgr>@;e{lYHl&J^yOMGrQ{oIBhlzqJhlDIM&8vJh?MScyW|z?;(EUYcKJ+{cV_&BlIpW zl2A-+uA2!~*HBmPKtRM`F`;F`j9(fcRQ))0;@ih0dU(`$wGlh7j8N7_w)Z34(=+9`(eKeDU72?kza)S z+j)M;7)>Hyd7*(n|M&a&FaN`C{==W_rncIh=R-qNR8&PqQ43dT(g$^zJSBJnUQB2R zCKHMzB4@zruVL@gFYxu>{C)oH|NP(chkx)i)eikZksReT?|+2j2Os0bCy(>O=MMAI z@BJ<>K6{KxXJIkuZ^%kwlc=a6dK{Ryrc`NUk}=j+Hi;**BX|LWEx^8mE>f|Zy!%EM z&hi?9t|czN`(uWsy?ptbzr*wUsxhS#Bvld7UWUtNCpVN$08~{bvbo7x(n4MHV?4gE zo%sKsz5kAqBuNuHv7ft#))5&Q8L4$;Y2C7_T8n8hJ=3FiW@mR6yV%7p4_J_VJlx|W zkHaGe5b2E4Qd@aK8%nE2WY^n=0pe7=$Bot)Hg2`;g>*NCpGpu~u- z%ZRE8Nwnaw1S#`6Fl#EBvjA5xh*bks1JNuY0;<`B?6RO~psueHmy?*S5}KSM9*YuP zjiFkLdF0!F$~T{@W$eRW^7DTN;Oonm$&N=nwy zv^cUBMM(mYD632BM56-1T~F|hKmRs++(W$mzxf}ZtEYg2FMgMQ z`Y-+){^_5*!odbNqN0Me5Rc1_B&aB|hO)j+bUmWiJ(56BOqfLrR>@Csz>U=eip`57 zSb$AT*WHp{(`%AYomNbON@_hqER{gAO8R%A6LDhe>&PZQd%yPkeEsDetX(_Gn?L`E z_JLler@9#(Xy?Rj}VXQO8`@LGbTwyR22QqX*IKCOv36Zr0(Doy!`s_@n`??&-ue2 zJwv%eB(l6lEFLAEOdzM1Mj z;P>Ho+dvSpS~WzohzTpsxPm5VAj&9lGg8Wd)hr+g=*zFt*9is#X*7by-hfuIwQ$BIcZTwq#?skZZ6ymW=;p;3AVhKVI) zR@avql|$?f#F(3(B;nn~{;-w#;YM1QT{LXjLfAA)cmE7a3(L%}D_DJDN<&WFX@Mx= zbo(d>R#Us9ftu$jYcN(G@yBFGSUFBw{og>e_#NMJ6+Af~u`Y0sTbw>IZu?8yHvCGbI z=N#sOGPZ3gFc@cr>E0`R^v>UM^!PP8$2FY$9^;vVCCH=Ad~~jj<)Kcxu3Y2#f|vSd zj6iZzVRpl}rojr_G z#*tb-v5`ykMLd*MZbcbB$?2vE`no4+ymp>Z)yd<}KFwBNjOJ4p>FJ!u7jzJv=%uy2 zmA<)E9KJ9gPIK|rC|ymh zv~~28D&NVjLJLzjuXC%XgQZn36(yx;3-8c8DPyyFNzQd)+4d^W9@$H&&w->RiOi4C z)G~*;ppyk%L1X=L+q<}G2J+ZR$4|)jl^J2Fa60v9<3`z zn7U5Sf=aM_7pB?kTx}g@pnrl}H?GhZ6WD*~5Ie&feb;Z$(>{aUV$oPy?+T$O*N*4b}rr;V_pjrwk4Uob)6d>9dxu_p{qAaxb_JS zJ+hU6FhYB0Gp*e{^t86q+rNy}S4?5y8eJWiX}Z}(S4$f=Mpkg{Kfu9Kg{hfY67E{U z@&F4l3!&;g6j&x19-U!nX@$kL1frva@=}$t(MGOcZKk(xm|4|9q2J2dcsEzCOpuVx znB%joDGo}uHQ_K*yh<2PG~ z^u#FJQ%#9)jgBh=%**BM*tdlOyMU_R?w@jvkjXKc&5k#QWlv2T-_G7_6m68xMfNl9 zJb69~58N3Y9q|9prO~d3W zWoyGu>dO4A4Gl6lI>CIxj6YmKO_>jKI#bDJ$5#?2P#DBtP=e2H(OoR0vlam42-E$I z-0J9OCSJ&{N1o%=BU|yAG9}cIlSvfOMR|2GL9caVZL1_Yuxko|sx55Wvz1_h2fNkI z+~fpPaVV+U&C>_AQCaQBVsTSkQA}~rft0DeAR)zP80l}~M%yfkXBV%3>jfUEHZwfl z#m(6m!N?kM*-h=CXL#wUt@s2L)#ReAvWRfNi7!-$+Y(`DXqfqxBxMJl;`!$fQSKB_ zB^yNzp_;mDDP*}bg{zsrfg zzz@-72K%Ro2|;!oKFHpKJ1CMD>Al)S|B6cektccT$vp&22?S>;#f4#9b}O#JT7nKY zl9ohKG&EU76`hon7ZED-5(orv+v1Fl3^O&iO5wK0c=E+3sP;*ys+mA_3Bdw8nk?Z7 zgsBU8F$*%Hw~V5K0LsKQW>y6v35h6n>JB{1^ZV=ZyUa+-tHhULn1epV)d~9h#z+;` zvH!^@*;(R1G&?D%+)b@tCOSLD{JNR&mK|)}v5U%p1H03Mzp#n|hZSe2jIyvFWu=eK zs7Rq#V5+B|uH|wLK2%GAMFqQ`a77t@n}ylA2ytsM`}Z|a;!ZL=GRDGklH%Qu@%W*G zRD`?~mJ|~(N0=O*U}i3fx44QO`?gb6S&UbXF+V=W)T&59?ZZ6(#2zX3$$C-*~*aKzk*t?BVyUOzDFjMPEY=srnS62`)!}9nFIQ*2? zlu!^Vp|q-=iV`o$m03nc$BEmE*m3A39^YPuO_MSCLWIgoaGEqUEcmPI2w77s4)?R> z3*b(Safy zJT(<1l^~H)&_pvfs})H^pN2$tvH)7zd4m2sleebnOQ#S(CGAK7NG4*WRQ=ns=JdRr zre#W_r`Kz)A*9z^j}OnG+5%M86k?8#@!_#|`1NcJfBDj3c7*H*W-}%+U8;>)J0ZPZ zSRoNhAZr3L7V>$vs6j0{dIs4YXrPKEc&pr1wYFuD4oAtNa0n`+! zq=F`y5LB6ztRR>ySgd9wP1Ailr`=EHYHLkZ5kwJHNfD1FPz5tKyBR?MC7D7_CXqET z+iaM`wA;#z^A1fwOS|qAGX9)34NcI{(vLU+kmNg|ptTTDor?yN); z1Vj|%REnf3U^bhPHhfQ~9c~L68fL8K6ce3idG}H~E_)%V`2^~&C;0l|ItnC(q>^zg z0q1TN|I6qOlB)q zNp~x%8mEW_5CnZKww6kelw}l6L^4TOEc)?HrIN_1?({{HBqTvYNhzp8+T#}>in^Oo zRZfyj%6c1Ftw@5ZdvY_J8G;}pnJfsg5w4v+M(eN%w@GDD^0NQcmpD}6MM%l|wVO2p zHon*;8k~M)hwJ(1X|fHdQJ*o~NJdBYC_BSu;d%0W7QSGHIo)@C-bL9^nlY#u^sw6o z?H=SPoQ7^R45|!qckJe7Lr5=M&f^f9$hq#Y5@NI>JFGqN1UZaT6*anIr^F zK~XdiB_v5-6RvwU({DNi1VmAH$RP;2TU$B(3|SCOx}R|YG*w2H6*NRdF@2jU=r^yb zssJJ;vl&s)&n``o^?W50CX|@m& zCR|*G>pmTxWjZb6=)o8#2)YpwgtWoT@uG}A64uih<1;#Q{noNxy2*rPHgf2?T~_^u zK+|+Xq9r3NPV4KE3qoah%!)n=PNx;pQ=i#o$b~UHlP*`hZonioH2uXpMMhRLH)ywI z_4fPtm#lQ|aZ{OT55sZE)}!yS&hwek z48|~fM3ITl7?w;YnE9XS5RG9OV=AO)e~o%F@)>=`y!CKxW2!q_zcEcF4^7i2S5*x} zlNm|Vr|2^eE;eND@%hH=uuK}`zAREq?wrNB-Bz0!=Ing3$<)tin6u-_ z8VRcD&qNw!vJG?Qe|Ei%WzPK1Y}x6JX-Ip8(`Obm^ygD|=4DK0+|QIXJM3=xXX106 zuNm1~>5OH-(Ei!sdGdS~@`gFj=YnQ1g2r>n*l`=rGoyTVd?qdvZs!?IiswWHpm$A z%9Pbe_I?IqSu*<>a)o7+$uC!)n~^DJu94qnqiiF_c%z=|G8pBIdEQMX6PH~lqgyo}))jOECa=kwy@S96{`pOE|MlyY@m znNH8RWib9Wj)<~#kkxq_^D+LRy2fy$tWl3qM$3BEoC!0^X3DRs z8RMd&=#IP4wA-W5Y`w;C<9;@oIOG5OC0lQ1KiB9um)!lJ84T~;(%ntJv3{G$eq67h zzsY?MuUJx;* zJ7e7q>z#&1GZ?vzFjaRUDhMiaLQXHIy7T#SE`x5=nXNxNogj#aCVh#JsA;Im?WI>3 zjBkd!)!Eo4#=NsT{kw5T`=T%C*V4=DHq&7&133)S9q7ukLpOA1r!nSvXPlv2f`Caf zVUh%W{kR|^i0I48WH8xm`X@pG5tURjNm9-%@w)SQa`rT{amy}4MttL+3q)V~9bzU)lZgpH=jmffs<^5pp}d;tx!hLTL_P7*A-g9hDUMvSN|;c(b) zyU_fEXpmm7siJ5CLi$3NB;9!l#tuh~voya%M3!)Rym(#Kd(QhSsTk|4t3=`{kjywe zKHPRI8*a9L7s%0pZ)Svy++kQUBNIVH6jV~l2(hG;cEF+^r)-@Y>Ckka(Q0}*O?s`Y zKAQb_8e_iM`?+KVK>$raG)t)R5`A66tgJhz+ggU#W6>Sjr1LV?)2J`Azfn&h^Lmp2 zs5#mwJN>4JCM=?eMv9c2E6r^qf_8gJQg(hu1VO@N5%u-pin_6AJy$vn^!41?aT*{> zSS=Eos*sXZ{n)6GN~FLfAc-PE+E1P&fg&e~uE$8qGJ?g4$LGUs0XZe>*QepF?Ceo; z=67Z@h8g3~G~{HI6cQGT4U4q#Wp%xhf?gj{GU;o#RRv9vi6s&wG2^sZF-tk>o91?S zy4^JuMOM;|aRg9PsA!n14&7qfg!BQ}6b&VrL_t6@TXZKj z_ek+^G6(r~LOGs57ED+z8p&9kgkr+!(my1Va+Bz>+o^Ia^ALGj{bIe({sP<2N6jr>Ub4*;7GzX#i`^1Yc4F0Sy&7 znIs-p5F`mH>&_$BxpZfkrjJNPk>uh4m)`#k=LQvuswxQBrHv&|na1AeY|%YhY4Rdn zCmQMQi{P#a;ju{idZ&zbV<##YyTSCREz{WxX^(4}JcRTT9npkYTV?S2hx{-9^WXB` zi8f?+h_dPmeAet`IJ#z0&^!E%FikhZdOg$SPp8qHcYJ)rr*FC=5K+*VQi-BbMnq7P zBvJ`ds)Qtn`c0o`blP%TuaHS22x{Kr8nH-?Ed6fBO4SQgnmf!rEU;Of2PT#n~ zgg&PEd@`f-_Uwng7PNyK~xGLzK)&T7rqLGh82<#p)}k&}lIo zKRvA|fGQ`5CS;H-NbwnNwO*xh2ExG*F3asRC|3ud=cntFqf3n3Y@xS*h=I0Qmgc(Y zA8cbP5hN6JVmBiXS%A%c?Nkt0}tFVYnsOLYLe;6 zRTk$X#1aZNn;A(05YUoQ`c56CWoVVcU3(~U=w6f*86=CFqL2?~#`(2T@201XKEgpz zh^@>raQz%-P9CFUe4K&70eV*)6c+{X+C;sx)YcepI>(8Vqex}dY};N>ZAB@?K^LZU zuVl<;V`P+Aru)P@T<==Kzw01dYb&U(uBD{Fz2U3-Goz*dJfLH>83IYB2D-S?w1~SX zgvVwu1|Qq>6d2Ai{hx#=sLb^=bM7~-sI|K}xTgZAn07`Y>26phQA9GCFquq9CJ9jx zQDalweB%;5;{w%(w^HP==$^4u0h8H`)hwbY3Yuub?r`F;S+SY~6j?zN%-9@GTuuiT zNz|VsTg;e65lsaI5tBt@sk?<6r!LbMvr^y>)6h^uab+n!hwkRpVs&71*s+*El@$<7 zSgkf}HVam>h^B#Pw&QZSaXR#=R8>(?1rt`Y8H?41-Dbxsp_kL?!eKRms-U8~+q77$ z*lji(HY<_kcyygJ6!%L6Pb9;)jKQD!^2b?zi%LJ)gA#&ll`oy}836bFTsDLQ_6lNqUi zhC_P@Nox#tHZl`;P*Gih*JegC+i<#E*en)6K~=$Iw&Qf#v05zp7sV6}$zsE9vtl-z zF`EQ5B)$D45y@;qm6HfoAHhHfx81C}6U}U*h$w1Ar`mY8Z5rHRO1u&&S;J}%Q0#YO zHD#aE`ZRs!X6N>K4$0M7x=vo8t*4LPTPrxiR@T=i>FO3Kt1HLvxIL)2J*%Ri2qx^F z5J9gK(><TA;n2q?H0BaIuHPPafJ3WZ_}IdQn|1Sw#@(lg=0xX zK~#4)+Zw8=sV>1~$`}=mL}ZnP#Tc4o#%dBl5YQ6qOm+-nsX4@V|NQ$L+PR&wpl+0- zOCvPjYNcmj3fbhu=dq)u5-iRyGdn)O#M~+=)r7dd#`N?c?R|>~Ry$I3l#bSJCZbk6 zUMH6HHLYn1vBhX}YDLF=GODE%tCfq(ZRw2r2bcKca8AdwV=^Kk-_xW*3 z(_DD#Eq?w^BbwhwSy>_K(j*;C&Gd|}B3La*LWJc=3ejZ6B4u}M`lt{R%uh}-F&1Fo zp=x~AHKLjgyV-=ATxWVULS%iFh5l|jJ9-#hj$rcmaEVcdZVa+2`l#6-LXAX8$Y8NR zWMzfLl_VCY8>_m)NcSz8ItG}EneqC)IJ9+UdRw{G+RoT=43o`{vb4^6G=*e0V-_UL zmIUKBuXC$;68mE>^5T)_dEwD&oHmVEbdlxtRc42K=;|0?A!^1Oa3LydEUnHmJ~Yb6 zOcblzg*iG-OLG(L-BUzl8@_-YF%@HWHOkWL5JLk4Or+vuBJ!{qVc6jkDL z>qM4j=pX8$b8w2JJ%G<9Gtu$^zxwbr?Xy0r!XaG3Ed8C$wDpa#rrB^gY?wq5K{8_( zqD&2S(bU$*)T)TfVIj4?!1$7e&1J_Fn`d!hlCk~{PW|0++UBFUYm0CQGV}AZObm~* z7)z2^ooA@MgRY@5Rs}N-ryHkLBo&#Zr=^9C?g=7^6iXwGy!D&Y^ev_+ulBM!K0@1| z!1gB}rq(SIkH!!z9)cC6gn}^NE>r)NSNP5kU*(D2TM5K^=olIzRk)k2r9KkVJ+w77 z(Lc2S?f`zLjrhU@9k*`L)jLT{bm9xR5Y{K?Y;B=!aDr9Ef&+!r;uNFfBaF_+vActW zgFzf7jaX!sm6b(?+q&o;T|#vP@S9g?IsX>_^Sd`$PdceDDJ0%ywWh(zaDSzKVawTu4wD3Y%LkCbF}c9E3Dg2hru{o@Z)=}R%$*@IA4 zLyqcbXl?JHdt!>2 zfe~cML&bqT6xtMKd)sMg>1Qsc;R!gA7Z+HXk7IQ^Ai2QU{1WTY6!Az3B$NK_f%GJk zs%c18JGNK^Z$%ANJL)L*h)gZdFq{hUP+bMS->GT8FFp_4FehRue);|oKkqX$U=0zU zUgU-SUP?Vx43?_m#7e?rm_I5Nx#D!@3_W0NBa>2g_MQTpMBI4Om$qNxoeP# z^%TqVYnU7kSRUrYn{V*54^Pr`qm|J~kziE?_GBOL{OzwfarQEkF^$ChBsbnZ!I{n` z&Yf*ybZm;bu|`gOaEx=UbNDN3sR%js>DR;}ZSTC#yYHOle18+?&tGD2(nNJb8L9q8 z-uD8MbUvPF~Q9@-r$|1XSveZ%49^Mys8{^=o%+~^9Cnwc5?mvb-KsLnVP!A zxetzU_QnME>RQUJlbk>PE8aYDi|)(kIDN5;MQ@0(dyQ+qev_jY8cF*6R1{emzWf%y z`1LtjhBbmk4&w9YIoThhz+Z%UsgEny8|muqrLV7#fx#)_l7oQX&idjc17j)$1&efd zUZj1wgsqhxBK;?LvuS`;MPl{J8IGO&h)eAw#KbVQ1Acw%JWV%l(Rls}O(QW}^)>jT?HqgW zP2NA*%}i9pWslNx^(epj;1oBmcGEwt;jSzpnC$26qsKXY=>i?CH@Mb2$I9dgx6U5p zqpN)+0AE3%zP#1cm#B2T^C2I8bcxG-ja>ENT&XE=542Hj&zn0+qdQyrXd9L84QB07A5OSd{0 z>z|_e+(kN8*Km~$xe%AfxOw~-XKvnPU|OW8yozGS3Z2K^V|sic7!oU7a6)Sg}J(% zimgSsEN%)NGVS9tjH_X`*;nYlbd;kfPI0ZRpGY!HNgzr8wKw?LFHdr#Z4rBM6;)x4 zma}j3(_g*Ch0bZ@f-(x1d${!0&v?73kEtlg)0Y`sOkgsZ7`gnPdHbUlnl9Yp%+;$* zYIZ6DDH=~7<&9&FB$F;`OU#UqUgOrHjgURb;MrgCi(h}hnH#M%P0ry8S5hL*aO1>Z z^X`dOZe6&{iEEv#TT0osrIezw5=v@nsM}RbSw$g!X6c(9X3|`WcjgqgI(tY3wo~je zBLMNqMy_3YpE02n%X|}OkN%P~XS%p{?lkB6VuZ@-DUl{Q|LdRfU*0)Gl$W44s&R`ZkRWpmCW;b^S}*rDk*dB>J-<eTU(lAd{(2ls*I8XI|3kRNv2!Ra{A0gZVt{e zzoHQ;u(Hs7nR5d+9(nbvys*ELcwYxokrWR5Dp!wPAyM)euYL6}w$Yos_kI`NBQNmM zjwDyFG%^=_n3oS%V;;ZEyuFH=`U;#P2+2j7-+PZ^ohf#G>zjOadjV@5oh*92Fw?{3 zlfC$!ewF7B2IxO~n(pNwN51(jp4#qYd7za+Er@fumn)|lk+;9di~DTcx^#gF$39+t zY8TSVO@_>6)VgCdo%(?0=oVi4=BsQkTBEsb4o5*bWquP;p_b=fdyWRNgR`eju~zXC z-~8rRI9TH(u`TLolJ=yw(bkD+B;1D zm_YTmAahNp>6Cl^-dF&t@tZawA`4+QCi9NDv7?v zcG^ZH!tOyXoO_2$LuULYg{6^etO#~u3lp5`SZ2%Nuk(AaK2DieV4;5&+3BNfYZ$wz zp(-M-P?&%_LI0Jb+-w`g5^SKd#K~;?QQo^eNzvX{`T8?;Bo;;)p0iLOj&to&2Z@rW zc>RSfB)ZRVaYSVIQ(x!R$0~_V4>3Bg5VS9F_WVVr9ea57@di>|XX%QR@W``|5SU+L zcFIiUE*k?U&v1Uo#G~JSjc2MI%(Zp1=B=bAY$B#fR33VT=NjPF@k(6gu!+Vv>=>kE-bQxxw$ z%nL6z5beIg@z!;AJ^3Op9o|dWF0-;W#rVt&<1K4=OG8MhLC&8UBeef%UU~Hhd$v_j z=u((lvQmBUd0u!p%<9A~#w{Us*KeW3Z^!EN;0}241gym8Cg{B~iK()jiftk6iiQwd zq%>ojLBbg|^|AAaSitzjUvg!tltZt7i>K<=85|g5-C9Fk z$i$4fgvXwFnWyVi`uc7#sQ7VA^wQcgj{lKYdHK166vn#gnNYDw2?ox;#jT|pp8f7u zsZI)^}>7f9B;!dITEN9b)MAxI?GM!49#Ov4i|^V*}OtPb?EWDiqYVdLgc-sD`* zEY@O)>E2NWW<2cJ8)j{-lZ%(HGB_?#*|39#kcq`bflx&;B>|h>;idb1CAPp|V;k%4 z5~{b=;1*<-M+X>Rh*D5iNrm4=`Ynn~SDxp$$OAXb8Um}UNzAKjG}vQ2y3NJm$4c>g zt-3&ZDtk_GQL}$90V|-bGcr6#Up&PAV1m_n6z~3T@cn0Z;a7&~NPsz-VEDsp42Vwr zB?UN4c1pH2uzgoOeye~QpXb)QZ}HCC#~7TSVrF)n(Uk}mUlCRHbrjh37fd3PeGIfs zQT5!n`1Z5=sh0W}nC?ZZI!t}gj);WQS46|MN{S1en9?t5sHq4OZ5_nC4ZQFNKjN!T zKSZT{fsxU6)U7Y^?PvE=TV0MPa+!gJX=Ga^>nk31Joy~Y>?y#AwS*jZnQwtS0Q2@AG06Q*d0 zL*IRYokcOObgdHD{XE}#b{nNN#Y7fHI5Q(sqQtS|V(;tU;?Ncc13giSw!OeNUaTRt z+QYC?#TJjoVq^vP{@3~5Q+uc{axn4HAfhKoxYo%^w1mUYK0<9!V_`9ZtlDsj681n5 zmGyhrSzdzQVZr7JQPZ%K0|yTB(8CY$(80ZItt-P4ou%jU01C<(Z5x;zxs@1?#dfHj#!v8XDoe51 z%|yBf7+Xpr6_?;n3^V1}!jmt3m**d;#56g<=(QE>r72eIcD6qLI?vTQm~Fp`T=596 zeC;djX(+=o*UL=*BvOH!G1)`y!Pofq{z8pyyxhs&MJOg7Ocma)CaMnX&B-}@X-ZuO(i&$FVLkQ`>Lb`O4^7nj}4`sj5&I(L?l zH8+(ZA2x>*PsJXdd+HG?Qa$|QKYYNb?+8Eq(O21CkYN1g3c(!@arkf%v!es_nH%`# z%g?gc7onxIk+$h2;_C_Gi&6Z=UXsZfdM$N)_3K~b@UC(S3mll`WdAxJ8*`APb3%;MZq&$itaxFwl|z8iFn&f*G}AYZ#hOWz`< zsuJ8b2mWv=TX)yvwV9EVA}*^NvpLCl+gX-uTlmU1zsbR>LIN%;D}!B3FWY(KYhUN^ zmH^BB7a3E+loS@CEOcSr{R*$X`Z(LGyo|R`F&zoAv);^@6k^}QM>r6SGCbVFyfuJz zUPY1`c>bHuv!l9_a&wf%o9n1j0-I$X|K3-5<%Ppk3!RKE&S0%PNM(Wj&J`Sq1)6%t zn9{;Ld+14aHte9#WkpKAgqKU4iVskvOtO@M?XUch=l7RkS-QexEXG1oAztwa zUw`EYJF3E1XGTb1BM=a{cKR{{aR`&&ubq3X z0Q%gqSR`KiN;UuP|M(Dp_1_=lU;V{i%1hk_2@O?A5|6C1va(Dx7AF}`l2R39MMY6% z1iKZR(~h7hq|iueplBlQvI_P;`zk;9;h*xq{@?#g{^0kXq}-YAXk8`je(EJ&ed!x~ z|Lb4nd*AvBfB2Vw$q!zCjw;XX7cxA-Vv2XTSc*?EJUdJOaGcd-7@yOeZY+iM#Ywt4 zMwwlT-#$@Q1w|Hc1&Z0ab1PLP1^5emm{Ks)Kf>^Qgy_OFqmvqn=Evz2(M)#zd%7e@ z$`TH<6PH;-PHLz&7gmcI5=m012xeHHm}Kx)3zLy3m=g%8Mb?(1L?$Mgn~-st?O06~ zMAeE#6c7-x#pYNX9$;)KN@Ql7#knQ?b}LrNjKyrlY1c?9Dx&1YX|W(A6QpEuI#pJ!@jl-XDm%nsb)?HqXK zYy9A!{yG2rU;MXx@0r6KeE2DT@a^ZRPqy)kH-63AtwT)qj50aAKtj~luZm)d)x~i} zN0-1^NA1>nByWP5wFsIjl8UETUtMB(ew@jb6%qj_c8iF~CLvlt)Ib$9=B6eY8Czs! zc8ZCGC=rVryG=r{yRh2qNNNhfEZ}lk5HuAzrGH{l5J40pXo)pemlm0vnqqNI!)3N% z5@llR>nu($5Ya+B`t@(}og*Q}Zye>P?_Hz4y_?>~n~bl>xIFdjdH4ms`A2`sU;c~# zE&uXsk5i~DFtrq=WLE_tca*7_S=Qq+N-E0g>N0E5IEpACI9%97k){6gd~oRs>m^U{ z`@i>19%~37Dl%e9#=Jbs)Wj4^tLsD}2~x5`G8$oZd69TZ1(TDtn1GVfkc8XI+Vq#F zR8ol;u}Fk?be)-j8+>r$9Ahgsc9aD120Rq+dyJRA{RjNTU;YdJ*+2glk394+PrmX4 zUfmyJ_|#AM^@krZv}z~56k&Q|nzdM*gd9g!1niO-n+U3wLQbVnH5EY+NeQr=jIq2F zV`*%N#bgAB*N&vhM3^QPR!{N|hGIV%t zNPwayP)sTPyWbhoKebdGNr~XHTd>%i>1A661E;E}atc*Z(NqPS+k(w5p{0^2rZ}=0 z)To9$F~|JOI??4xhR0`^SyNCgX8c7(96bCI-~GX#^DqC^Kj)wQ!DEE9d4`rucF>6t5s;bbxWxH$=eX9{OMCASQCTCNj54DYu_usVacP#6e>Z!> zHkKw@>0I@&ZO2Z^tfMqvZ=>Lh!0Rigw5E!Z(lB+k+bH)r z^yNP3g?c8Z6HF^K-#o>oQGDnbW{cSUYgy>AIm@iq@rlDOn$>mv;?FvFVQW$WQ8%){3>bMXQ< zI$LQQm_zk6@bnYAF|SY3+IXFwo&iQiS8@6M2y4B3_|X}fT9(iPHPmeL5siD8x#0D=lqJbWS#N^-2p-VFyQ^e4P5iBz=udT)i}nBr42LwsGlVGc$`4 z;hL?4nPQ-+1EG8;Aya~Z&SpCMdl(&?LNnV~=)K0J{s?=%@+_6g5FMQ>_)060W*WKL z)y#s)iJFWsBm3CDrG_GLlJ=Xo=ghqN}v#PN@ZkHqprS+ihvb4rJxBSW~+p}Hc9)bb6n|YqjjK(E0?Y_qLuT| zGq3UVjuPyaS^9gr>1^(yXLyXcl$W48#^}utIew{w{)9^Dt^+)}vyP?yOPoD(hHJf( zEJ|)X>+>uwMDgz2ONCEluJ;m?LMi3Nr9=i#a;asS&gLF2-?&M%u#Oj=JxrxzmDUsI z=Mo9D+?nXME!f&T3teF>?VEl zDFQW*Qk@wwr@OV4p?11DCn#z-K$S4Z?CcaNM*x>uztvAJ4Kg$~1Vsl4X*0|$tl+7B zoC-&rsorZWICrqUyq-wYN1V8Rk(*sTw0BHmDQ@85BYP-{4AS1*Nn2k(y>m+_b{nzw zE1c?-+4l5T*dh+mF*?rr$^tj9&SDK0Q(fdpcev@P?D#UHtzAUD<<#t~!L817tABto zsgkF6R_C8FKVTlbVcs;K^kEl8B(s2mMoQ5TtPTpxYN@TPrn)3dO~{YWUqne!Ibp9A zli7~jUq*fHR%*+O5SA91UtJ?%_EKC?Nma2oy}it$U~rcyN0QvBu-9##Q{) zJ9+%@UbfVf<8!+ys3@kax}2hrm1t~@xags7=VKh&yPX}|>ZvSrAx37HUrK?+M|pJ_ zPFCn294BTj<&npp5Wg$Yvp7h8-LQ+yhm&WLyT0->i<<(bT=J6UE3uCwF zUXyTJytteJw(Ng`7apm_XER}O7Eu-|BH(u63xp|hriiSp64MIV`S1~*e_|^En;Em+ zM|E+Ckkf)>^AHGEQ{;1FGutSrDyA?bGIe8?H3jS?Hk`gn4nFrH`y0ZzY!=Ll3E~3Y zkOxUwWo|x6LFI0qdiEjei@n$!e!}%T*;W_CrYEh?RZVqqn2MkqpD&2V;vlsiA!#pS=l(tH-@l8x`dW$$&8)00 zlSo(yl~q%-rHmp+3RRYIly0ZeD-a)QWYrp`sH7ODNk!G)$k3N5Sv6!)K~^%wfZ;4G-5w4@xr z&6IYdBA_N`X})lszPTU=AFn6c-@?FTj9^VQUURxn5lvX!VTy`t3HiKu3n~Z~m*cZp zkgRS3#k<(LwT6&C#=_zXNmnHY9(s(Y4sN5ex|;IxV#MSc3rkC+tR4!B!uZTKf<<*a z`p9l-LMkbfje=kWRVBrgmlxo3>SubUKNdt0lfz4>s+w@ngFMsCnVZcl*{XSBdnF!A zwp)}uzfHc7p1&Zywog{|JyAkRyY9Ouno3HR(GU^S&M)pO9o)V-06;~NRfM!hppAK{ zPoV9#It?Wyqaa{0r{6NW3&v99x=U5oM>+m)-eZ_*Uj0|kQ)V;ijvzKgLrJAj1qqW$ z`k21Wi1&ZM-<`Qeq~VAB@nf~PrL;@M4OCQFMH2;mI!*<_WKKVK2hhDA-K}UVy;phj zZ{A?M_Bp=)o#&}_>xng0MN>62Nz&ISE1K@iL;yurz@&R_Q)LZAeND8YYI-|p`ubKu zln@0CMbmYunhGkqM=C*|%F|R8O%&169-H)QLDU_CNO9)oR!GKel#~@>OHOj_Gl-`{aK-=UoQwEnyTnGxoIz5 z`lccX5~3*RQ@iMXxKvd`lT1j0hN|f9LPbGCmQ~$ls$@by)o)5A0aaE}A?>zOgS4Ab zRnw3p6CwhFWJX)-m0s_D9=y#i|DZKpYz>ra!Dq%;A^l<`J*n~z_kw?iT$=lSrx3#?VX#;Z>h(0;X@ zn5B}Z4{yPdc5v|V^qYlhC~^t~33K{7zU`4qMNY}6=#G0t;kMs#{W{dp1o6&imxli7 zj=ayor-B*6dA3eDR=cn`Ol;>0Oz@IVSowPF$(A@-@&6v$*O!sA!GYLh^ zW(yXx2~)->r(F}?8>0(F-Lb{(S#|+UGsf#=@25l47eb~~0+QKmFv{6F?%2JfuDR;1 z2_~FD5B`uFtJ!QY%2|rEOpxxnFLN<}OwPdV7!AxWyuKg-hYgGQwox{=k!Ug@i4u~@ zjM-u|${AF>gUqpM8n`POc=G#S<%vC&xFy}NXqx_6Mhy*3RS*PGcQzuV;{MS7W@!+uPowtVWY(qys&-BNsx=|1$GbXbHXeg?t-wg-?q&-F5aeOsZf6gda za2NXU`kk0fdc9Fq-2n>v`)RuI5fLR(cfKO&$3@e0J){kuihwEY^ILa`nQlW>)5|SN z`r7jJGgwo`M|ApGuz;4XhY3ka-+*cQvrtvh5XIZNMM2cvP)Z`GDMV)p4Ud1FXCK=} z$ezAg+NiPa@I(|OOeS;MK;lsefLKatNJDg%viFJSc;Qej1x_!uJ9e^bM+LUDUj))_T0c&%Pyxwg!D6_%zAYtU%Jh5E zZEtfKDdA&AS?`~6_63@Nw{kz<_}X`PeSZ~BDW_DP-y&bY5p$k-gA6VKXwFmSFfgRQCC`A(J*1dZ7NnfJ~Zq~bs>2p}`kZ((BYQ|r*-iwLp4^?D$GZ<7mV#5dvdQJ2jymY&y>yRGkBZvZ;8fR%@1=(cB8+Kz!3uW|X-wf*enUQna zI1BoWf?oIAW!OLvbT_7%y8}(XIoX)nOuG#gH$EPs@86*!UG|KAG5xMax~cWiw%LM7 zQjwD~ilQM(w_TbVk2C3;A~rc!L{T46Z`3b+?ude3rp$*-gtQYI<8M7b5jC~O>f$sB zYY_pj7hBqss~}{xXWdD>%;sByX6% zbYx#Pxk5f0xz7i^L;QI7$1!$t8y#AXbhizLpx44Mv!SJpZMJ--qc#3E#$~6?PLr)K zgKm62J|mJrH%ua;WX3G0$Z`@{)$3(UliiVTt}kOSvW}&y>CgMDW&};qzn*o6#O7%? zBfG7PlD9dJb$oRd^mJ{wUwzq$0%V>tLM{Vd# zkGw%cQxueqSquFp!RV7aqbEal9@)S1se*vSrA~r45B1e|yAlB)fihnJL&%^RYBW zGI}${K9@|MJf9bN!<^^0hOv{p*OYd4hng$g7?!OwJ1#rDk?gqayfb0Ow726ly;C>H z8GmQj?|#TG$GynZ?|$>jZj)SObltB`Hqk3&8S4z$vf26N(y^JmvF^sajB%UE-AkV_ z&WKTOo;<&8KDA-~G->ku*GHx!%`CJ(D%5EQHT{qL8k;x^Ss~*O@a>W~`sD-T2vQaj> z%-MP8Do=J^88W&zD^s34pC_N$Fl(B|;NT#utE)6LG~jSJ@+WSdJJ8Zb&)B(T$CK_9 zvq!Pg{oUI^|-s zJhJ7p<&14)49}J|wxMx9SK3UNaoRaodSjXl+52SGA(LmGJikpom0>o@_xJa6=FAzE zmzR0?;fHzbvB$7jEZIp67Xlw&+p4AC2Hbf2Py6^AjT-5ljUTtUop57c6YhM2^seCs za<+w*UZQemsIG65i}_292AYul4z7XwXvYlM9dFL|O=FZHtMks)!DfuBG0kSbg-u4w znYg>$ya$T)==~y!1ilWfp-_MO3H?Z67IGs+Wr>7|| zFQ>k~9!b(yq&plAyk4(|z3UQ4v9(Rli_2By*59!dfCiEV7Pb3*d2> zfjDzxqf9L(u{sJUE)U_ciTC}c@)wC*$2M0Oa+KAj1SYQstB_=6F@f3P#O*fcx;?rp zMkBfznKERLnzQ4L|Fb*Z%)U{^7@onnpRFqsmMv!tC&#GOm?md?8pzg@F=Y44-E?n8 zc3rp+Lz63wk?e99kH=WJO*Vj3J{yYl{3%u~c3+&sskI~Ulu3o*$ z)YKHSv$M3fw=*_2MrCCsHk&Qolk2196Ru_#^gdLCw}=ee*M8P=CVp^%DlSYYy%p` zQMrC+Adq6X?KB^qzCzSfLy0|3?~SAU^37lK-iMcI?pnfJP(*pLAM>YOLwrZZ_sgeB z^fB~KD#iNh8f!5Hi^aU*=?HYc-?QUATzdCcoIKxxSh<4`^IUlIIBoL^#dRe(#mzh3 zTo^mV&C+Feo|!P?mMv%0YfO^~%at}e%vh$(G96KQ$ zPeZm2cfBoJqgvuj)_xHZeQ-{hiCnCh6N|v@yz+JEJ%{t4wCi+BZsd*YN zT;%xug9@EU3i?cG<7x8GQ9Swrtt4aKDz_V7|mQV znRsCngPQqmG`zX=8q*ueE=wl8aWlpn$qu`ljxWPzY~Rhu#AT;7ZbrFWX^a?;ZLZ^$ zeO!%3HWQvfxQ7AHg)zT-$>z!Pc_RJz$3OnDAP5W(5A*9^|C*MT7OJbO35Ua6yLOGg z`m4WUYHEsyAAXq9(o#sDuqKm5My>od$wjna1O7OjI*;4j9Ln&QUMzu{!x8U+u(!sA;*NDJLu zzI>j`HwIaWSqT*R^v|yecTR6F4|LOdW027Pr`YM5;Ox~#)+@fkpM3ij_HV0a`?e~= zejiSU1$k|f?(65cc%zk``4monAzn+8)%gJ?rYGsS*+T#1B7$9Fy7vYbulEuaoCJez zl=W3+`zM&0>f`#YMmooqvG{`c?PgHoOmsAI_54Lzh9`;H0))JFw8#uIb0dro4AXM0 znVuB|PoMyoSs=AOL-&;{T)o-NLc)Z<&Wi>^!r6jsgGmkp zW(+g_&rX}`f3}WnJ;vX;;xl2n;&PEKzu9J#|1y$YpL=b_blGIWHcMla$sWxb({2_f z9|JfD>f!yF2Q5JizomoCxU+soYC9B;n)CTnYJ{NM*a;PJ;F z$7Iqcf`#;Rz>IO8o}OlXeVyl@f1Xe%#KOV?*REZorly8hUU`LhJkH|cB3rj^#o^FD zHs-4vjaXDiscDXDe}9GX=n4zd*EoCTCPSt$ z<=bi~SR7|fbrP!dGW_A+^TvrAwDxpz?Me$XsWPexR%tu;D?Ye7O~SvG3db7FXW!-R zGdJjM@1t*Ijbx~ds}H#iWsrJK!!#cC$C zI>gmuzu>L+PIIHZmzLgMV$MQp3as>;_z(Qun-^$n?54e=k1zfRb`>$GK<(L z+tz^3a`$P#Y>b_xasPhEbgH>J)Le17I^er?%tjsAGRE}TVVjZB!6wGz%d+J%Zudh* zE|)GLM_U`y8S}_4k1%YdlGX^u;zgIY~SoXYbym=NyImc2ePrU@oZPi6@@N zGkTgU(>5M{^$+>sOM5Ua57O4VKv7){VW-*fe0zr#lr@`1&$XM(iuJtuM}NrkyL~M5-J&ZI zCZvwic>XH!y4U#Lw;!coqLq0W)Wkf;|MLfQCl%ZUGQ(XntjK-n|8)3byjc`1ZG-q9NqbePM4jgvRQ4D_z55SSufAYpD;b8fA9mG$X2) z%KE*89G}cElRjs18LeCx&og6(YwR@1GQ!#CXJ+3RmMc74_hw}4xu4CL?#oJcUG8_g z7e?94@!TvgvSwW}@kX-cjq!Jj%fW&&U~jFDfHY4e1(MZ*&F;eEEuyHfj4jnw6gwS==`RS$ ziip!&!DEj<%%l5uad1Z!RqkbystH#?i1LasMP3h;%b~{)vunpr4n6!ZzPO2@u5nbi zm;KKk;?Uv8*jm1mZT_ts+_RJIySGx{_mE5`NvT$Xp&dMZ_y~u0?&I*|Tk#hz&^0*9 zq^W}1L(lNkfqHg6{20~MMfA?hvJ^>Cv9p24pFhmw5AEaNK09XfEEAKnj3we|9v{V3 zTY2Qshj?gv2#4K4Xy-m2dEyWUA3eyHZAGlhDKv|dK)8hBiUz7n!|2~^HyWjnKidTm zB@IEyZn00s{d9Q7^DMJ(j5F>V4Rj`5MlRR0$jp`r&&V2eik5&Wwx^qg*zbeC{TbC(mz_4a1x{iETC; zufF;!|J{H0-|^gY&uth};|ZQQVJ9XgxP19Cfk1%WyLZ#o)y1Vtmq?{j?AWnmsi$vCQ-LQzx_u_$Y6Ya|5$(Izs`)6I>}ai%8+Xdhl=)>VSXW6%2b zr3I^C!nL%DCTsYrc2Xc|G`{-|7g|S{nVzJtw}Ym>S!86iL>Em>%?ytX)85g>s#zvn z8o(+ks3r|nNfJ-U2%3bbCP>9&#FGlLCLxM4iag28_z=C5!!$P!vA*b~x-?8MG0yPK zYc%#vGTPb3#MnG#J|7N?fQ*7@5>b;fNjXMR&@kB@loS`S@6qS^#`pdSfA-IRz}H^b zM$n{^%&ZHKCyA>HDNROIWaQW?ixb04%q)^pA-n%ll@zID0$I^t+Dj!+(t<%hqtK&7MF?Qs}PCT1jX@yOuRZPc5sFGF^GMvqZ%HpaM2`aF3aGoDoAG+RNRsri3&2P!m7=h) zkk?;-o$r0`d+gY;gT}^2jvYJ3{QNu?i-mAF%*!vo%)x^Pu~;k{oxdQNu(+JqtQJfb zGZu$E{ZVuc$?Cvrb6_!9u(@qm%vQX?0_^q~jvjxXqg|8WaN~A6FiR%P4hLqFKB^Zi zHmpuJ7PExO?7(KRVE6c`*nI%cax=gB_x~sUZ~w#pn-AMklplVAy29Hx3pzFe9w!B+ zd1jZ_k-R&3>A9EKLl{=?5s(L1YAy>ka!D^uL~*vLncP=W+hszy2Ti*Z=Vs3@9bM{LnT^18zi<9SH#y0ny~ZYAv94`(7U3?P28n zTl|0j&A;W}{p?+?4y|IgyYbqsm;@D&uvwhAZB{Jy0HpzyNYC4R@X-avBI$L;hCWL) z*|9r4*sNwGAhJHqz;Y0qr<$PclTTxR8nQdp%$D70XLrIznaqB+AvVV6GAf^B%aE%a zzw2A3&UdT3@i^RV%kFQow_I(U%a~@%7}IC|XJb4cGXIUb^W=F@NI(AZkAF6CW_)Yem1rN6Z-x{IjUx{t^9ZKWbyN^waU0h<|{zmS@JPxJiY zN2w{aV{;WzQnrO~z=zB2rnt78l8PV>yPHs98QUuh5Ef?WzPf~GTN$<6>S)+^geRYU zgfgFtU|9u)g+A<7D@8TCdHng8dAPn1hs}wnsFsS-a=dmcR!<>CB@NV8*HKwhjNL3C zT5Wg=OR1`=qN2E%;*u&Viwg1BY&bkcRFqUw8VpkCa}WqP@fX)nURH|x_J@A~Fxg!A z!}U~_SK<{`>Ad_Amltj9Jp2SZiyfbO@s_cZ%ns)+Bb7VOpRDsWJFRg)TQ0lP&Xu1r z{(iSix_ezqjf5&*Izys<)g_z=3!-qxPv#nCiUA`QP+W^ul2d zKU$?5=Jd_M7YYrMv1O)5S26nogo|A83D22a7|%N`$Fs=$Mboqmm!H|`vwvrY8Fd)R z?yz%lulT!REazv@^I7=3^UiM5yODiNGGV#eBqN*a*xpO#e#q#_Hu`z;{A2N%4D)8( zEB=d(KB6}kKXc)JUUkyj2jqB^wWTbsHMaowC*avct1=XUpdzTi$p)?fte7e={kJsCcUzAp=#)%9K&+v;xZVKlVaMmM`X@1@I#vD`*|nYjDalPAxE zByX7We4)uU2$^&B)10%$wAtYqa_RgudF8o(vJG*DPkWrX%XyM3EKi;<8ee$BtZ7+q z1nYsH>RIgF>UsM@Cg;0XcT4+up^>#DD@S2AD@P8|Pt4}4y>;%)TT2&s6Zv};NCSkd z96#OwX*IVyQ_b+Q)~6w31jsT3nQ&wLr{&X@?Tg6g(H{3g$Xe!>{r`U1tgIOwpGIe% zJpUMc;S95;%EVWei765ezYnVjkYZ(ip4ph0aHs%}RrpkfSw|+7NRZGZP&EX>gu`ym z_|~{>Pt+(2^RvWF0g8McB;mK;Mw+G~M;2L2$XMKkIL#mT|EwP?h)j(#GCGeGuB5U& zh*kfr^k-tjE~;_n2D<2Rls&t+vx#y2H0N+ek1^e5o%_A`wCTPqeA2f4Bp8oj zX8&Ht(-?0&FLD`S6H8Z>#V{vJTg@l{1&w?oE`3r)~>g))&PQSs=kDa19 zUc#R0VjQO5{!%7EOEKH_9_JeyiTbxu=CggQo`N8tCdat)?l1VoZ*CF`R8U`EjQumZ zuFh0Vi7(K7@hC^%eut0FU*pE$46>(~s?tKe4KfJ&oq)2^&#|jFXqvZD#V~JO?O;+X zWLuF7F}v_a1YL)qC0SivU@`)3hlS*P4;S0}SP~1V3c8Sl+vjGclg(`U@w&a-<&%;t z?VbAX|GLQd+9pRizwDdQJJ+X0xJ%m@WsGw7LdY`U*=5ajO!DOUGVs~2xKD_pLhs-* z$4(6L{?R@zU7uuiJ(=#Q0aambW|FD#S)$4G3qPWh^7=hI|42P0Zu1@bHrRB)lD0T% zlI4kZj{oLo{Pq9uZ+P<`{)S)w>Zknb^i|rXVz=`r#nMD4w{AAlGP=&dVv3ZKR&KcS z&Y~YQMMkHlm|RYv-ESY5TA;J_ zJb!zki}6(rdvFVf_CLzOG9SkKfLs{+SwToIH_KVUPe*pAez#4#$Hy1G%-iQtFJpUt z7BcOe!I($>P3t_rD?IQKb22XTlV5f7um53;w;Ln$bk6Y5Ha|rnr!Jr*nCfh2E@h`; z?`}d43DhJ@Ys<`~thlvR=I4j$>29a#>=~{O#IP3>5p+oqo1^pMagLw9z`%-(CscyR zBI+hrOR_k6m3L2^a-vr!Htumr%m)2~k}YA|+_7TFN-Qr8xb8 z2M`2>)!A{nd*{(C4%`kis3{hQS{WRhLGu>jlHx2)_cO4t%KGdCji=6V=E^lDBO3m2 zF;-=b!R`S%8ZXn)KLfr(0!|Bprm#BR%-~{*!rDhEHZ9OUI!MorE1bXB%vi!tsV_mt zxnJo{%;n=&JxYEKRZVC$vut|WX zvNk!y=vH2)1vXYdO2sSSsOM;1}GaUWkC}&!SSvD6?5ptoe3@|d$ zLtk?j7fxNGWknzuD#W8d_xRYf<%8&~jRxp}^HrLfZ_qXp!CcrtnK;Nh|K)EvcBL2DQA}lh zHANmPf~K%C+Qh(Of})!Jn1(;(uYdMFZ3FX6546!evPhsb$m+;-PF?9G?yO~diIvH# zCpmVyg|X!+riMpYU3ODcsBq)b2fT5-k%%l&P+mt>c@cIAAjRahlUzREhFY_YGQR^6 zg}LD_E?rWndgurbZ}Dx+Aqb*Ga<-FW@4v&*8+|O!&M`VT!;HyKWl&{gVwz=B3H$x) zG*2aP`-`cKU*p_`Q(S2up}%K{)wr3miU1RrFYxAjXX#vsV73P+u&&V3+(_G~OhZjA zW!53ix3@Ddg>j5t;@Aft(mcGt^voE;i;H-}RanPQ@tdFiJr_D+%ue)ht9b%fsG7P; zA0|WRe6P{-gF5H)d~$Lb;|!T8YU2%9{#fSuUE+ZoW?50W)-+2?&kABZMx`~*SDz}T zxY(@=C<&(8TbPbpZyV;+GQE9WG_M8O>tAEAqnVZP3;fd`zD%9iLw^j+a)jo;|2Y?D zR4gGki!B2zM%`>Zw3|YkfV@6K`>_u>cJwT5V`Gd=jxjVbi_Kd=SyeS2n{emLO0j8L z`-T};OE}z6vN2)?4OIb?!$)ORn1I^?f`my*(%CdgOm@4KO#ogw+E*y`xyR ze1$*$gRk-Afh|-PyHQ1zXw}pF=?K-16=k<3>8 zZD|0D3CSd3mIMSr!dFwz_D2q|rKW<)x-tZZ%);yfD+?Cfp$h7^?B>YVzrr)G?4Tes z1uaR$mX??s7)D#4MNyVW`s~P}fP9Zn{N35jnDLj^ap>@Ns)`)xFaby579OoKVH!Wn z*~{07glefOu`+z^9a@$&O1JK&-s3=8SR{fOd+A=b?bt;{(2jJ+QP6W!Wd+gUq-_6w z_U_qARb3UKaz7DSLo(a(1$_9NHmq6#rL2nDy}Kw56jHan3Rl58(*$_piI;e7hd|rK zU-9Po7A7K@XXO&U>K*KQ>>NT5t|Jg|-Ed5I-4TZntV`qx{a_)PwK0*>xI zl6>u~Zy&yIyGQYV9{ctp>U#Q1+C{gNDF4R+Fb|F!2{8#4N z5pQ0evwsbb3ZtrMkdgn|$0@4hg7@bE8iyJd=%uX~E-0xgL9V#rE|r^Cj6$j;0UT{p zQKT#_t%sNegVrD~8zDtiSW;C}m$OK<)&&UZY;bvJM}HCE)HE`(U*$6?3p`$BU6ez| z;aTrpj#oL;7S6p=PPpjo-_4>vOjp?@_F`A-kLyx&woKh#)oDFEJx|E?vkL zi$QWYJ>htFZfXM=EiG8w_Qh8x?JSs(CXXmS(-$ZhJpGnBP1CJlJAO$}EptS#Cr2H&l`L$89Ee>^P0|cga-O0oE-Ox4@2gHygo= z^3%}zwEtiG;jG%=t`89-i^8yR%xR~*x}fB%UwipKD+UEOa171-L|JeI04qb)#JJ~9 zKO@OOFE*V1a(y$k$Yvk+6`iv@O&7FEmX_TZNgNy0bKV3|Q3e%pTS5EXD4h3iCY|LwcIwwLC+Q2^5^3x1f^+5gg^N zb#|VtXUedcvOYblPAw-Hjl9v zQNNNE1)6#55xYA^q8jX+F8XNSj;oYys(zJD&A)EB7pt-O53&*0hv~n9JSCN2wK^v6 z4^KNb+r*0B+Uk1lGD;>vldGYDE&@AH(v19DfN37#w`LzyPDY43hd`;u79mtQvf@R2xjQ+H6I?$j4k3#FxIlhLxRggK1;(-LD0; zvL`(aKu+LETtShpA!T$IO5{Q}ZMU79WAAkw6KS=Cd`D2-k(`=c+yGLY;5i{%iN-Gil$c=8%P=TqYtxa*0T_U>Y-?2+XhuX1#e_Xv6nkZVipxq*-Ha>~0 zy&?Sap+ajLl)iBzY!7+|aR#o~-?#7KJnlX%ub|kbGs~+-4DmVWwCnu~It*BpLOY^u z_3LA;IlS`oSN((%jEtLZ~mPV%1SxUh%GPg876Lj@to;qriGdia&j- z!Bhf;TsDvU*ZGlO_eawIw(kyBGl8t)|J%{^`#z z*}3VaImG`h9;=*|ZYUQ26Vb;p2};R$L{5RN(W0n=O@6XsZ|JVKk!BVz43HFVBBF-L zH}2nOI5$B8`)%N28at$wHBqfzw%Q!B*&b1M7XCGhXHQutf`NG~pJ{^jCo6S62nV9w}qN>cE6hu&on^vTrl~L#`T2xw@sF-slAoHI3 zj{4Jr-Ub)+dA}FP)CE3&#ys|Vs~&8t?$9m$isuj6UO5?A%&nF!^7<*iqZk-x#Ku#l zYdM5}f0y3iAF#drF0Pmsrj41~ULBd4S!+aQa}0Vt>O* zj}}s3JPe|fwzyU&eEtxL=CYBc^UTl4oaD_J9I~^2+{l1SJ1Yf1>yHYPE~nwx=DB(J z4aTwA>hev`#?U!j8R8l>%!hUJ zr&=8(EY*|xORHQx01TuNOUY<{qT0Nb$CdOm)~jRVe}6l&Ltt7UGHY&|vp;ZZV9O@Q z%!vOBt9HM(M69F4M^@;#)YeN< zDg+t>5fw+-tmT?Rn}*l|i$cCrHQQX0T51%NEt=-K49L_}B^xCf|CD(oh)s%pwn^}O zI?@Mke{oUJUTkSZ1I>I3aMMoL;oZ{9i*eBlW<`aRR1Oj&0W?HVr}f4Az^QcASumiv zH=HPN+MHa1irSy@7ffvCWp3vu*KB@B8SR~sBDk=`Zy+eR!yvprNm-S3rnU-#iY~Y9 z`QFp_Mkbr96}($TSV@^hKoI2@*Q&IZ8FSg5SShSK601?0GLY_{Sb1`YG6?UK_T(C- zkF{($3r&~#1~2x`Lf~=w?sZ-qE*kqMwo16bFVy#*4K zh=1L)cVF!KdRYYy2-am$@}88b3O%W=P6S_?p^>I z<*$?G69`dVqmwm@tyzZruKVt$K8dzf1@p*BoOQnF%vyKoOIcC27*sYs#jvV*abG^!Q=b=v~;uXmsoZk zzTs8{G%EpvfjSsVVs^Jr8Qr^C%r*d08A>Poj{E2CJ!vEMqdh}v8c7GAdJ5eCJyJoy zw|!F8C=5*nlhYJY#9-0{87a!_gquJ6uO?x&cQPM$qrbOxwsc*edM_c*)eJ1mLeqzC z9KHoPby6<&#fiRDbkB^qu z`IMYJ{UA3I8U+-Fv>%*9GlLkWL#WoPD$!;}Z#<(P>V(JB&5SJgiveI!1BQeY^xB7e zGhCWpaaZ>x7M6s+s>2FZ&9E-pM#aRY9jhIHYyzLDu3NVb_Yd-UWTe7}6Zr^c$9pU> zU+>85GOVy9iM8pj(bpqn)!I6~&fo8k1jQK1X=mKyqY-8n_-O_wN9)?=md4aD<`O_h zuv_6wVM$SyJz-T0tW(Rqz1tkeI?q&>-l?+{IGrf(iK=R*Etg7Zo)9oep+py?W}BMJ8zjYfNE-4#od$ znHU=S?u6OJ`2Y1JJt>ff;JTknQt%2DJg^fS_R~y0z$45$e!)lQa7%3W0J+kgBTY+; zONvy+A~^;~EGji6fPw?Pec*aLeT{|aH2|ofZdp4%z0w)L(I{9VyT4N^3XI4Eq8Ihc zJA={!qr!RHsTw1QY8V)1q|8_bx_&3#_VOt{>h0%z?v7hCKF*^m#i1Z;et*H!O^>C* z-~pbckqZ9W#9Zgkkmm{)x4j}x?6iiHvxGOa_S1(j7oozX`_lLJ(v@{*wy8DWEhtXNz{DXTe0x-?;F z8f@UArWt0Chxh2rtg@u1s~EjJyT=f_z5$Cq-Z(n4kq*0t%=<^1Uf=XS1Lty=16^yw zWsD#>D&&l7GUZoRA2&HZ86`Ns&iSjQ8Z>QbaCWIsO_tW=0mjrj>q8>tJXHn(gm? z{{1GQMPbi%4NVC{*TNIsdwClj)0+$5qt9ki+l-$sK7U_HDQ`JNm+|r5-mdRM^gQEv zwInIw)I%$^pjmjP-E=(znU;sQ*+>2tPcZ}UtaV)~u%nvv!T&7*{yl$6hvg7=h;gxjF?sW_{gF+42rh?Wwx_G*GeXCas-mQmE9da^68T zKKG20Ja4#C{}Kb+b5k$5si9sUPwjqW)TE19(K0ysC79I^htQN!Dq8Tr(`YX7UU+>- zJYl@Ysj7vVV_5I%EGRF^pD=huX-L%4x!bE+=hct+jiMIUl8#ssPpxUfX;J>3{Nkea zmW7EJcQ7QW#}h#(n;^H?*SAa$T_x>1BRbydmb`CF>6GIcs(w>c97UT|M-g-Qwdi>c z&5a)zF2x`s60gW9_c8kX$Dlh1*RFeXdb@MbT6r-k+;k(4t65D&;UIDDrv*Ld&>X2+#CM#^X5zu0&C7r{%Y1{zr3 zFADA!$kk3}VVx$#_RA+BK>-PdE$29`O`%G0Rg^eZplrtowZK_K@PaCoftg!!pgkl& z1j7`vX139|q@FU8giV%3eS8Xky_A~1q_ravGzA(NN!s-TT)@9e(v`0xM2Gv_{pHo} zW}{1!M|HCh`nPps*8I19BuKA}P*uibm_)LXzFYg8l=ohw+t$uzL8ti^5gEAaCmF+N zWPi)h{M zFlicR)<-6Er-n|Rp;x74tVBspF9u=9{0#SLSywQ02rW4$qp2vJsF~S6;a`P8I*N1CbBpH;F-1a2}6lJO5i3x%+?xtc;oviSA>7 zWu=VEtn)t3vL=@WA(mL(>y5_-)D*ER1es!ZByDTbrHHHHxYERkfa?{nxHl!xM2k6- z&(p7>6Snlq@T?qE{Qr1IkXnUFagKzs#(6n8XXB3OU7Co~)?Tod7E3A9P9j3(=N*WGDKan;wv-s!6yyV60dtC^S*9%tm^a*wlOhY;r)Uwxes=(q);%X$xm zl_9CjkXmUjK(RCa8+~qujq1MuG+i0Sx%^)qS%2SyAGv|QsbXa49zGkVV5(+ViUFAy z?+DY0VBG7!Tp24qqyXRpb&V5t4oeDzj@b^8iDH;toxJ&gk+AwZH)dHb)tP!-&!_J8 z)7>*IK3?6(^iN<|n+Z_r84Rwcz{$Eu)(Qa4jSH=As4w5S`RA}!xPD%U9&|E?HeQbH zCIHm}R+ohR_7dNU3T%6{g1#y6sl-?01bV~v81n!27Y8MW38CI_-A1=a=Zq+0MXZP6423LG{3twcEfBvfg@cg)wJMOCd_+Iy%-r=ZW7I=Q;I{uN1yZHkrN*rlI zps-Xw${*c&d}&2ftKsPnP?yim%-ybXzPY+q)w%5Uyp>+A<>G5yxvDw6W)#C4k1j1S zk%s03D(+9j6pGhA%jxr3^j-iGo-Zzu%-cM4Q4$`scY2@YHRUsPO3KDNbs!Bk z{6uTLvY?1Dmg6BsndD`io`DLSLR(+$^5Jz^O2QA|{!}fM&+GdXGa3Ad!9ZtBAkM;M zZ0%^RGIj1AZ13Rb!wF9%OPeCW)mCn=!m>?E@J)pm41z(Y-XK&4yXO}i^VsArTDeO| z&bjmWsBLyNi>6jCmEZL#Bu=FPZsZ9D$swcTJNVkFXbx(^kx9%XUI2r`K*bE?+da%Yf&R zZ%Fmmr~Z$vs!ks?!rRF#_ij%D)z)Wvx8tc+-&I$y@o|DE(oPb zMs~(g`?;Xl;ays1xiYxARzf-uy;H2{4Vw=bZ$HcQz9i{Ta_}gqv~HVN_L#Q3nFS}Ooo@R~Aogrsc|LwvosHF4 zdNXY3p~JVO>KpR-nN}2+%?8}sBAYX{t&r|hm6qA`q~q z6>vo|^G~(G>cGhi&r0j!EL$JP+0eGSfZMue?e{Gj#Ft~+?Thl=--rql2)U!%PaA3D z1g-Eyz)DQ?Y6cd;t@``ztU+8@h6lw}MAG^R@XH`0{ z^FC;fOOBcGY>KGvl8}UeoYW#b%xju#y;_7T!h==n1cbi&QnBhwm>5=)4Wd_-W#sxiDga`ke>PY1+lVo{K++(4Y!pSa{$ zZ>UL<9>0Z+A(WqMmTGqCeUWHLWMrDyG78WskRe$Lu{18}cag=|UPC`) zq|$UHet`0t(c8QHfe@16#U*&-U1C#J@Ts}{qFHZ6DIM7gE>myU4O5v}#S z=<9_RuVf@GXYAloo!@JAoZ@|4nHbG5@0%bl5Mp{i-&LHAbG)gjyX&*h?yJTIT3((v zLLHv(uNv)1<|8x4;@^OP{mKt72nO3R1$U0A8pNGlPY6PK2 zAPv@N81EO*-o_N)(^;I5-j1NnRA(jTZuac(2D9kw+BmmE8#8h(^%^31>iPZB1q}u2 z_(Tr5)iy90nYEbZbJd}!`4gojdh8GneYIp+J>w_|eAi*~)4Wp`n`P%PTX z)f_^{1vdE9?X{-n;_%EI4Gq6IouQ(ijW{I+nEVg7^5Or=3S(w&>v@P5b)oznwHaF5 z5#`llz{X~ub}u#+S9OcT?U}V@MRnHPlrN`yoFycNl@`g!%p@^^N~C>Fdt9K6?go8X zfF%BywYQK5i*~kVe$&q9_&bSM?dA5|uCB!sl!~)|!5$@pUYg^C684dsRELjgAkSM2 zdpv;Hq}8!5q@sW%a#WW~MyccJY5k&;Cn7U~p^YKz2nGc~nST59i?OW}8}N-@zn|%K z>3gI16#a{(#>gt*XI`qw!v){lKKMqI%^$eKC(r9IM?^^~(W#GA<^+umnT)c|$J(_q z=clQE>aH3NfJvt#ZT3waHBSBpVO3>=+K2>LE-zXG%Zc$%Nu|&zc*d60UiHJl%63m2 z@Z47Wfc=j zRGu-2N09PTfG9mv@)AQAcX^DGRGb)t2gp)KEk2Ikb}OQBb9d9XXor_gzI-W%p<%mt zdq@kIRz{y4O5>pSD8$AhUvpB8{e@SJukP-yF}=^0ijS8^0gQszXC8B$BCl+(uD|sk zdqiBgkC(VF7tsi3m!RdvL=oUjw^*an(C!)>{-RVF##AU|Ni>RIUPb+w8hD(OG2c&i zFLvMODqA13i0+4Wz9SWo(T?t1pSohPilk0d>hIWH55vB_&t0!5IqOIOw~a&W&T?w; zc>nw@zSgqDaL&6y(D-t{;`}iYrctmkX9R3{Cn-2L_}muO+dZ{xeWwUm}IkQVoH{t4)I-lf24M3&l}NsW6sPZRk2>I_R?4Ul?I1 zaz~U@YmU*Z%2aaIu_emXd76O42@z9UyaG3t@L+;0YDF~I5wf_ zT;1BoxzsrE>O={Wib&|ci(;ivr3Ta`50RWWja7sYOAV9%IESed$K)rC3oA*A8~SOp zi7+LQ>CKNSZGZB8pVEIvLPoMxV>%w7I^@q{l?lda(VOSTPLqZXpcLMb zDQk#oO?4|ypu_->gdokan^%R}AI2c)d8Cn&1r^(iR>uKiky6&7S9@Y9!;w6$rv5ui&>A4EB#SYie0z zMp3R7?Qg|QT*ztrUCHc6y$|y5EB-Hvug9D(MsCdthI|m1LFY(uQb}TpJP;27K|mo@ zq9mnaoFQKTWyQ&lrbH5C9pdbXH1Va$|ssdOtHdhx6NtJy6N3cgA^GAQ(2d~s*v{kY zb!5awpP5|jL8eZ-T3@mWFcXLmaSLinE#-b2kMr99ywVCF5gjk?7~*S?&GJJ&`QM>K zAPZ90n`acRNgYk-`QKl0@i?5L%37iIJb&7nWLFDuyFVsV!v!ElHVK)OGh5_GTo zYgbBjF_b<@WC>)%xg3cCb;eH&TuKP z!%m#Qa|B}aLUzgAu75+22<0x7B=R;c4mH}z;>2!emrGd@Ono1 z75cr&BU!lu(b*!_msKan@o382y{v4-vIzQ>nv(@Fc7thph8>=0RvgkJ*TN+VTYgxb z6ZAf}T-__)iCev76HPJ;Z6=~My1OfRLfU5ph58SMV~BP4$NXl;X|@m)#HH~;M>dG^ z*NG?mbvaqwh>oYCct*L%-4Q` zW$?;I$j7H#?peJV4FhJuxu)nD%{GNgrbGKxd2K+4A^TWM_qb{ieE4&Mqq=75ffX>b z6u`nclQiC1|JDBWT)X;!E-LZK95NxtU`5SWX3Mm;(asTI^_2r?V-XUY_dEcy<#SGy z@}7`-*8c*~I7-Io!RX0~WVCyj!z&lfKBKTL8#-@9IlUtH&nl;ez3rlbgOej!jRIt! z@2(X!T<|*uOQ{t=t)Z~Xe)zLL>5*Ahmarb=b2$0=rI9MBm2fy6a4hdr_u7-_!Wx&* zJMHacT=03Mg=I#0bZ1x}0N1(f{PPKPjBqwVo6AZV_8BxwV;3prU+sd$*F4Z6F~Q9c z)}Vz$Q+3ZJ{0CL{LKEDYC*}_%QCYiYHCra|u!+a3BCWC%Ight_=pqiPZDu{#lnsqfc?F0M z^GuwuN(6oDpPLSjtv@Q7F!8nal{ zr0xPLZ|KvQl5kA?N9b1{2sdc1g!_?44Jz}(%#3l#_aou$(jggMFHT__cJWcv0(+W7 z)B`iU+H9RSNwYXRq})?1%d3U+Sz1mM((DDtJdodd!+|OYiQ8hUFH;a!R!1N^nZBZJ zXYh0e;`7qb!r^knb3C1OY`G13q>me=8%8s{b#N&K%W>ZKXOUC%h}5#r;397Gf}1n& zY`gCWzQP>g-9Gg(SEA6=v#pDCW@aXwmA&^-Fcxw>eMD}1r+BY$G0xyu!A|*kA=mtL zHt&0z{Tole(mm-T=$>F$$IQ^v@S1&%_3k+3f3 z#?OXU+>G0dh>7jY!MQcKd5ODt5Ix9^6WQDv3!_gQ!lMf~r~TuRx8)hMJ0lEb7$>#W z$06u{1zczSx(^XR&%p8pmJ=+lFO2pWgx%8(@d&kpvst&(wB=G*6$Q;yLvka7#UoWi zcDjb+-|V-*2rn%|8@2Q0(jpk)JGS$u2M#xTL$PY{^&C|+9?zKmG%M5ACC`&5uDlq% z{nr6c?_<`=z78IrOE%{sgpo+)qQTlStKy+ODjbA4)B?(bdK`*T<{35xEzT`EWb3Rq zypBFI_nIZ;B-{))<3v<7l&Mx|@fu5r-g^I`1{AAG9DbXqn_lFaiVNUT*YJCnW}x2T zsATwLY886^; zb5Pad{yqkJ1YAyLr7{Uq`wyOSMIq93CwA@5h53D>-Q;8x>zftNC7GGIg{M{{^{|iU zW^;O!w1O1ziNv{e8UHeu}cnkZuj;qU2I7 zh&E{mjRBZEno__ArG}$z0tXlouCGl6U1rc260#yuWGqwR<{!dQx|$H{iflDvX=~<; zgv?gD&wsE-5cv06hTr;_I*FE7ir&TX)n`9~MM~sLHJn&36S?XgKIAn>W1vh(Pcd-W zkz@VM@D}4-OX)ke$}eh5(rlNuzT=V_GF`IS4mWd++(K>OP~{GV%iO=IQvmDE!IAPC z(MQWGhoE%~%KG*s{Dh!?yuu?9lA>(ZERSly%ZV$q(dtjn{rQWt??M{U(4Kdfi=N!i z^K6;smOoS9k~EwKIAGD#)6lIZSJiC|rh+lCtU;-1zR^mMBZDXzUKf@D zhxuV$O;^jn9$>Jk_IkYiC)#x$>!&;Tuaw=P3eVO|q}sR4gOX%$6n~7l0qPuu2x@@6Yg9otESviI-<3gi% zGk0ezZoU@m&L2=rWoh;L2tjML=;WN;AmETAy#Hs`zcjI2~ zu-(JKzvIe!Q3tA24lo-=wyHkneV;(1B^_;G9z^g(pI_$8G7ECqMvvr9^_OU+kVEN8Low)dA5NL)5kR@8x&}GQkh-}eWUVi*AIMrkiPXmT-*{I75<3v+LwC`n6?|p*4h~g4QzH!k`j|;$b8;s zu{a=xU9rMt$Urk~M56C_VC8G?N=8i88L=QY3&y5~IJLGJwnJxV-#Cfa*x0S|x_zZh zHItYcW|AX8lKHrSDDVQbfgvY-jxsIfSW0o62fI^c^j>~SSDh4%cZ1&@Y5a@rz zH(tC1arU{0b(he(#5?6Q%^U1w8ebPj+^d2@BBfAxGY=eP**+e%xuk^Ec{m`0a}PQw z9DBp;?j6_L3|?#b&6c+VV|*%mYHod|Uo{<>d13U&6{^S;_wtc7_1XfUvFo!lRegsT zJ!-r&INfryysb5f_$9);{e9oW!tQSSS#5FXOWpt;Vzf%yZ~nUmbB1=BI4e)I@6vz= z1J$$!cal1G976$KK$ZW4bh`Tm{%i01gJApfDuHEfTw_6NLwPv}N(FLdVX0>b_zS&?3>=3Fma@cX@s6E?0eZ746jc^1v4Etk2Q7o>4_hEJBuXmRyu$e2h;180cm%Y3kNcW!4>Gc-{SCH+ zBoBaYUzbxdLfst_?b~J84JOjfAfU?0Q)g1dzuCp;*|RrVv@-Xg$ddC)Nzr@5YsS64 zneYBWJ{CI)HN78DBo6m@uTBf5jwlVbt@&+5VLCJ*R)!x9glx^-YFVgBX2Vx7b>cK3L=Qz!1i(im9jD=`%-)lebL* zZ<*4qpezrU-xNP?rug$DrFU$l=N;A*4RuZ66P1ug6yy6P#dB{Dl|d&%oHlT9i(FX) z63LN;pso7T9}v&JX0g#2FztOx_H{7*4e$Gy1r#OQ37|wI4iJ<3Qg9Qj{&pzKC^&|c zi13&Y1zD8OEnGI}{hLd9Aca$J+GA;BEW{z)IUm}KUszuCGiN@$w{-Y`DQ_OcgExAK z>kP-{1kUxs6xULrFm^ewMssjznr9N|)0gJ^>ifan^)Z3LBMZ9}%)m;w?s-@{*GqLi z01mXzl#floW}3yzCncew=IRX{EES@lRNs`{ko~FObGnen9G1!x^+Mt>H0{Rdlo1x5 z8Wu-oj#ag&>^^qOl}QIz{+D$0kZYDw3n4#`iis>D=pX#L`_XI7?WXT7{p<7h*?pz! z$%t%)vL~;)8t5{bv4mg=(4_u!=G^(j1+)|-J#HT-SBL`4K2TXL^mC(v^95B$2kEa zwRZ;cHZQy`;iCa$47>}nmy$R^#LS<^?uXaW4kn}yTF(j!2PpA{xt7%R>V@)@ii)|U z$w*R;oR@>dui6Lzgv>9?U^=|LlA4aut`wraC&#W0UsST#*V zXgNVvt~@0g(x3?m-b7%Fb#a-*@N0|SaZ(F{{mBlU&z)O)D~F+hkQr{YG&^SWS0Hmh z0i2v{T%>WGet+TFEE>9uLaZcld48@qaeiqYGe;?v$*kENL_m`Vof|F!19bZyPYfqE ztP3O^A0b0l0OUb~mMiNYcwn|~^GsZ2)i_w|r>;HHR<3VI$P~aPf|kR1bRwqA2Mg#C zt5Fgqt4gnqmC%n3IT9VgpdFcscYjX8DVldyMza7isiq9+I8KL zdp=zlA9qp3^Yo=Z0waYCTwp}Q@A=5Owc4K3=^5=<#~!>1sd&d>_wjJO+Udz&L&zDW zeVkv_2H{=ymvX$+GEA{7)bep|OHpKooaj)+H~>MYDJR**=8xquN9%dX$48cT=07$; zQdrXhzu7HXA|BLtz5QXk3&UmH8mFu9Xtr%?f4V5?>fd#wAWVb) z;tI_AES^vR$rBWj-(+cjt=WW=CVkFJ)kIjfyFZ3n>aS%q7+^p{M=c;AJ=&J|`&Kqk zxKapxW#AFqVi#FO!8$=oYO<>Y7|N*ypO;L$QEB{ zHVx1UDo}1^b-M&sTE{)ctoz4ql#(3#a&34kV7QHgSfPE_q3dM>ZcwZB95 zNEWWKuq9ItHs+CJLa=gt-zM3s$}x#Xagr4AgVL>yq14B zGzH^NclQWosh}yj!_g7iRDo=$u(md8RO@gKzRrqB9ueVkbFH-Q3oM0L4-Eg~@VbLr z4jHCw?F;;*i!2Z2tj#W7qXt-J2hD=KwYOvA9LGE_mw*tH5a^Od@9M+dM9O^Oxi|wcm{9nI>1apq+4x5l?QIEkCp#M zXDh(Z!B^yj_q;bH*q8}c(<}V$L#IQWAkpxu-2NBMngxF{PaXY6lxK=*$QNN=ZsM&( zD@!Jz>a+t})mtM+QmhE~80Fydhv2+?`le3_v7wytuTV6j$1Z8fl#bCK$-!-;o=eu; zlM0P>wA`WQj&|qs)Z~FaVW6g!I*{Eae^!&YD;H&BMzlxE_)lrb`KcwFtw*fuINWB6 z?7WK$-r#2MzMfaIjEt_A4E%!n+=ENj;m08eF%|wKE}{PU5C+~L6uWHp{@xB$MD!xh z=Ys8K-7lXtTJfvaAIew|%Jnn2w1HpQQFsBiqvwSH&{B!?@VT z8yHyru!+010yl8n%MJiqx@c4?vb*WMZhCOkL~*F|LmCG6aWtGhEZvyeY3DLDOOr4;+qfW$jDr0xA{){TR!TzgFDRUP%6R(nR2x<4@ngYRWyx1i zCJ#7M63e{5mJ9}UsWXxy1M&V_mIATD#v(n&O$IXonQ3O0bdt@+Mdi)e5Z&-(-2)pJ zc(?J$W;P^w)ZF5n_3;EDlYKhT=3ODg@tHZMbQ(Pez>bPiz$TodtzVFMWadsW*NS+S zQm*_2i3Pc}M_4{6c>;EpA~8k4pmlHMGVr1d$wgFA?Eht+G!knl^jJ6RGbXx}(3ogR z(=jnOh^w;hlvbD2O+`si5{giXGkIjd3bFO}J%Cb8h7Vu&?7J8!f*aQbPFaIWh^j`d z;MLB!h34R&_n+R84D5}Z=j>X^RTpVe%Tq$D^Rhii1`oDzV(gPu5)i^ifmHen{!$Yj z`a5Y!E!TB`#?0(A01J_sZTW$~jM0wYDNEMCGW_5Lr(xE2SyQrPBNAIb0>KUR4(QY* z#*e6NP0Y>3v481jd9%h^K!MfqbidqTwT|)5u;bf`L{C~7vC#EB#(SG8alcK2ENzof z$sZwe6v57#jhrkLYuUJ2Fbobl3Es$ z8d-}CT9^Ygw9M&<%@~O!h)8lVvl+R+YsiZzmf?kOMK7C(#=-z+((4nKYuh$nIuHOD zB#O;o5F{8Geu`zk1=x0KQ)j5$VdBHLjQewskexIzjHsCE{my=$EOB}bz{Ry;W6Ys= zB&7WIhIg$9R-ZF!N>o8=k-}kRof>U%bs$}wQq%QFr)8ynt@K|t>8C^sr2`om5YmVU;#DQhow$_Q7-_81Cow)xijS zQt;o9lRdb%D7~GE7?&N^N`MkIkf}Nb=HxE=X_Z6mGok8ZXE)9@(+>44m$@PLvD-QS zx?VAi*p_#yCZ3R(Wwx`23}KpA$XfTP(4YDu!*axer)a4QgL%fq* zm^~ODH}gb)0~u4DKjxT%$QRyjdZ2c=5B_h@>aeDjWvFR?nJRF(&cqY9ItF3S+e^G| zlUd@~{tN!LccmdhNSog!YcLaJP+>fH+Pbi_*=uZ{Zi{9^%!6VuZdYlp;dkr7@%Awz%QBH`LiC{mlEw>Q}ak=4Z| zH?7QfpGWoDJ(Xcuf$yFRJZ>4k6Cw`xC$_?h46fH1^=@?Wv`RskktEKC@!yJccQ-pE zwA)mDaZx~?K&SqQPgMJd6Hc554FUIdhx0`ju_rg;c`l_9FAt1~OZv@Ol44pvWf8WL z$cR5QaTS7m2b6)=EJx+$jwAQSPU@v)P4k-VkL95!o|>x9p^8G9+)@jluzXeEXIS5- zO~akxg5+m11<{7-@ooEbmPze|WBXTZdX0UK{C}taPvX^A5*pK3Q1+kJ3#jt?I4XrY z`k&fMepg9YghB0pA~2X7VrMVI{lx#mBi6|NT4_y2!6 C4wrQR literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-components.png new file mode 100644 index 0000000000000000000000000000000000000000..0b42697051581c10db4727c3d274276a3fb5c775 GIT binary patch literal 12825 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 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/find-in-design.png new file mode 100644 index 0000000000000000000000000000000000000000..daf7ed8279c6d7345433adbe631f9ca461acf146 GIT binary patch literal 9894 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 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/rename-dial.png new file mode 100644 index 0000000000000000000000000000000000000000..441f7c8c38a0b15866a19f621ae24eaedacf6060 GIT binary patch literal 14946 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 P`sC{;C7H^P#)1C}3M4?D literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..7c62a1652553136c4f3e3e86296a596ccfad74b8 GIT binary patch literal 11403 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 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/replace-content.png new file mode 100644 index 0000000000000000000000000000000000000000..cf973c42e8bce22ff1c77b686b57970b75d75fc5 GIT binary patch literal 6356 zcma)hWmJ@1+xE~c3_0ZBD2*aWGl1wIB}ggVAYIZ8B1qSbfYO}`LkTx9bcfO)4bnN( zATaP=`mFVR&sy)F_s2DJ>}%~j&vPI9*yk0guBJdi%0vnRfhd#|5t<+nP6UAShzWsT z13di>;19=5Q{gG->j=v>P{6mAQKW&}W)#6?lh4FtN=`RBpubuO_4fgrX@ z2sv$U}98HhE zm%MBwqETiADXOZ{MH3GHKG_tspQ^~&^j#mIdyy&mil38didG&Ry*id9?RWIWdcb8f z>)KE9;XMM7Y0Yex>a(7m#W;u{uC1*tMA}za=<(yk&!0)thY961YIQ6u@^{eQIc2;~ z^9>;>DfBawO=-feEJZKV-z6u5S7mU12Sf_a65Q#Jg!GLl_3Xf(1;~!7AJ;Eg+E#{o zw1fxBA-6cYv>r`?zv*dw**!l!UG>~#b@%jG+cD7>bX`TfNPC16m1h&Odb~bZR#s+X zW7AebD|PHvBWRaQkMp4a;r$Iu9r62I=Il~jjI%!Bm&SRy^f@1Lagxp`a1XyQl!sp? zzNbFaURLv>l(D~NX<;L1Y;4p|I2vJjUO0mm3pz`HiZk8=c>1l777l6zYn0y8NDw2y%))J)oWje>syw{B@(T+Iem80jIVYU; zt|}2qZRHTVQzv@%txR#jq7e77S}|M2X!Q|%!`47nuY>uJ{qy~~G#M-S^H`=?6Ag0w z=d1M%4Wbt85yIRNT><^Z2-=`7HM^3?dyb!;V52Jd-y7+ZoXP}n3VMu%HhApPJDB*R z3C0eg4_-&Rg?vqjNJ^LgAo&Zn{jGW0+*LJkk6LcA7-TV~S;vS#;B=$~lDg-lF;(Ny zfWzAJ+)}BpM9@prceMqPpGzPyN-FX?It&giEiE_k)r3Be!QimYIX(rUvO6o%t2svJ zq|cNGi07NUD1Vx~?enBQVK*CU?7lWdAVL-Q)a9!ktA$2EmoLf}43f*s%A_}#ps;2e zSYCt0WOn~Rc*3`vL1a!EqkU)Xwgm;&S2x(*C6?#PzV+K@01$2I&7KUYaN-AR zz#xiHh5`jBaeo0<9%C2tEz*d;qm@61%}eUDf8{3X#OT^|LB+i85yBTQG9o-*{i^xs z$^p7&@WnHqi1gJfj>i$~f!Op;?yN(qXzcvHO~-f7{qDj+iq#@+lCw9|V2-Mg7m5X! zUYwLvNu}Y_@uH4Bl+*q?{3)0E{kVori~RJ=x-4B>Wjd+|+D+Kj$vcmHGc=n?`|!B4 z9zHSIOYEAg#dMG(P4ok4;d?}?s?*)8kMtI*N*3v0dE#c1n*>y9UJz52o(U-6yOra7mqc%k3JK*uIf07Rx)9K1GC!7^0t)V2wPgtLFAS%;nWDp!y)QaWC*- zqzmyuJlnHLB82(W(%jPgXg4;N3W+`l{kf;z=QJjVgJ+p2)hj9c5X^wGO zOr=7*f8Sn#zWeW{n~SW#zC6`gw$N*hkBE5Znfn}P>VERG4|hsU1W33jgdwao7zd&? zT?C>tRz9AMPQTS}{%q6b4HW`G3vJd*Rwo?IoeDK+5vQQaH74h{6S#pG6{|XYl|e{M ze$ipm5V@ZGi90b&GM%`dHE^ku7#F{_4}n1Q=u!bMieBv|K;1Z^veXse2-<+$01WIh z{tOHrb)n)X#-C&JjN+;7dq&GNVjP(#kP#^9VkF&dnQ_d_XYi4R0ukIgbT(Le zxQ17dcFjklQE_xdZ#0U^9-W_7KO+2KD%X)MAIuJ8I>?(vD!7?E<4CrDG_A21fH6AT zF3uLEqXuidy}}*_eP_f6gZl-aP=OO^@c^iV7ATF3==(nWIop*`4uN<}4y^ZnHwb{5 z{{{V{A|oQM;YX8n8FD~VmcLE^)5|n_L`2`qU?@408WVE2@h#kVl-ntS`5+2UJxdDb z+s$EF?7F&W7TAu!jnJNK5IMz@LPL;W$6DyZjpBOR^hGwLmyFU>r$zn2PVE|D(_$Yg zy8qrAoDL&bP}Cy#m5G8n$LoT-I&~Ts88Ielmo(nHb{dt3z(G32icM$p1+8O9N!uT@>D&s{b<_z_?I_PhOaAIh^B6+ zBdGq%^tpAG5`HVgMzTijNlWZZT`^DXY^XQ15F_8fhV~6RU%~P(&=Fl%8Vxy1#oP3r z9&{!Q0G38C6yJz)`NtJ`j?3bTESM8j-}uPMSNO4Aw1msJAb@cE>I3QNhHhh?o@Vo0Oqr~o+dr@T=ROkxW@cu<&5jd zdqtz71kX?^PWiC>H&g7saBW=-LL}m)posZ&5t+-!4SNc(FPqq8%!@&SN9cLF zY4zpu%HlCgRt0Wl`l}J^;Wv&!Jp#k^XW@QGS!mnD1lfzC5 z9TAhrJK|XxA%?Cr9cj|y@lSY~f?-&uiJu=Y+$SCRg+17!>`-X#d&4)aHWfg`$E#b!=|^be+J+ z)YTK)?>sau&21rsZ<;y|`gF}d#BApGeX|a_+1Fjl#$;fBCb8jnEC-RVG-=MXqH+TQ zF&6Tl#7h_(%oRk{eZI7=eQkX&?eQp8qSB1{K;f%*tj`G=CGdb(FS@j%T@yYPL}@K% zW)^(tR~>=Xdf~zFXq@5WS=_Lgi>GS1P;3L(V|7Bzy|MS&k|bs%n(+K&i1!`JMA;}HpfbbUA-3k482O^*l%`X` z@x}(eho*CT{{D87OWl`#Bg^<_|y&RXw`SnJzLy>mFbx=i2rJj~0AdPqRa6SvO68mnXT!C7(hz4x`Fz z`{rj;_3{zIyo8>VE1BA@LII z47QiC5JHz8lP~Cq9!h_XM!h-MdbE$LsL-yRYqJ9pe^+4z83z>w7;nF~Kfg~Kolg#W za&MmDsyG)leaVT;gO1aRyuVB&ZJ6;cq3d!(KXBJQ3Csb4XE;eZSv(_B*R!~pAAHzm zRe}eKv!x{EAjJ7D;XOBC^f_MSGKY7Ic)pBvbGVJHM#|+NN}Y|Q+yaE!)muBFM0LmQ z-Qeg=z$0)wm-CRhc=jyO8u~jA#^0c-Pe_z)$R-5paXPq&1~Ind=KW(q&8CJi%Y#K9>=Th1ep&ea5B1g{A01G(*{lud_}dq*d*J) zmeUEjY2GF};k&MV!5%V~BC7uii0kM7-Xss5ws#{{T-L~W`Rbk+?)6O#>%zWii zq)4F|9PBKKa%}O!>4U?F6>{Q~=Qs-<#1zGmJR#%e>@z$Q$Dec`Qjqoo`gTz=8*%JyC|aFBL&e$meqU-rBrkhM`h; zj$QuV_TAW&L6ObH!qd23S;zbN>#jypai0(Jn^u!;13FVR!CB3ti)*av5QaKtq79q({=)tMGSW zAL(~x@IH#+2@E-PbeyS%YmbF;{}{wAx;+ivP<0M}=#y=3haLagPC^`vs?& z;wx|p49{-VC045?>$3_t%kaLKcA+T5QxiP%s#+;zd|Tz8eKV1A_d9k+cvs%a_P{9U zQ=A{LRm%NQF~4N&Y{kvm$FHRA?@~#plmFR)s=-4J&k)xp&@F=DG*Tu%H4y z@BjzzQZ{AU6!F6x_My0k%MvOFk&TWEq5%x_d3}e8TK8@}{b~KO3~7&~SB_=FSDIi= z*1I8V8ft@Q<4|$IFDKrE?$LL{=an4U&!O!imm_GvY#3WHYCym2n;$ZoKd`M*=G=l^s=+oA&BW=HCdXH|2!!y3Q^4uT1<4`xvkUDOqXBEMM5qQ|j6+@aW_6CbXf0MaYWoQGgS?k4#VhIF=&l5Ow7Q_yd7RhWxd16b{gR!T*9mN~#D%pePn&HS#CUR)a8q zRdUyoOz$5}O)YrU4ulocqT2N1KN`HtP-a6JklH?fwRZ9KacZk}D>~LWVjUQ$YXfU9 zVGTI;*WuEQljNUy{I_!dFA@KLgV_ewyniP=QdCx^`y7E#QVS!sT0#Zb+1i#i#73+l zEc~Fx{)e0+fq|6!3v8|@RcG3ZHqB^D&bLB)t3@R{`}^`LDrCOCzRT$QBUlv`mChNY zh3irPCNe#5wQWO)kT}nKYG(06Z_o`xg)2M)3KymSR2rE`=d^pCvzjm3>{&r@D3A`R zVIQ5Fi!LhSjA0hLqo=1=HA}sA;{#^{_CsD{BjfDstRM+Bk!Wgr5qFfX8p3sz!V9+Sy^mI zab7lWOCCIYjb@dCPodn8C*#hWkVXtua~A)gqKG`3q>FZW|8pVo*VOrYq5AD-^ZX9b z;B8rtWD~3Bl09pgYWj3LYD8VL<&NhSe9x1akK^l(N4Vc(XEDP4>h3FY9dp! zDj;j<<>jeP0FJ0G0SMzX#D|j+z=h=3nNPE+ZEMWULESE1{gtUL79cz>Ud#c-pBhRQ_lJzat@>Ti)IfMCbyIkK z!Bb&SEW*_yTQ2cn9^-M^%hJIW|Ho_t1ai{Wc@pRhYOS4zFS(a9?e6WW8?}sl8&2jB zO2!nI&(BC#2AQ}fzY+pyQJGiAW#mA%RL2&ff%K2tidK zgJ#=e87@+tn~5r?8di>vg+E0%?HrbJh;U7O)qGWOFXV4g>aYr&ZW17N z3WVqg;`AG=>?uIY+-=&2w(83K$ruc%aT_7IkSo;CN<{~Cpn(i zyCG9XMmWhqFBQKVwM(Ru@trh3CU!MJhvK~BF8u}j_9HCHPRUu@C~`ln@zI?e28U7w zAIHeMnMr-P^UTuXzcS}a;xBhK4yf!en%<6tJ>5>W^ti3atE3EYy##>(pC;)YwY)X8 z$_mPAE}&lz{9RzkFSU)x)s>agTS)hq)VDt5{;{cZV5i+c?!nK`Z4|p7xSe0h?c&fI zZbs$K2zXibKqzC+4VNR_8jB~>^DoFCqa4|CKafEy|GB3#uL{yiF6gLgZoew%iiPx9 znw)7n{Y2_?URSN+0@NMLP`O5S>$Ze&AJd2xFmk&9ucX>tQOwWK`%DGW|s?W<+wK)C!sZlo|0W>=el>b2Fp)n@_RAU-cQ3E#KO|f5Z&Q<5&8(@4l9HT(L3%@GL`0Id zfdR9orlu*g#M}En=jOWi|I`D3;M-q{Gh<_8F6dQxcMp$958yoR2f)f|ceJ94%J>^9 zV4mWB=M}m@hAC;N7a9~36GQGun9EHnBqa1>bToug_L?d)Gt)c(22*x1GBUb2>ZBZ9 zT#N&%aYx~3?ELeq5qRjKRrENK3eHirzMb=mp>w;M5m_7++Mo@j60&u zNxekFm&?MHEcqj-)06$FbllMTV5(rir8{!w``PZapjih#(p!=ImoJYD`4n{Urvvh~ zro6o&WeI!Wb@6j4h;^amxISC-DPMd~BfYXATM literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/result-window-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..efc22783c719a5a024b7f3baac16e9bc5b2eeab4 GIT binary patch literal 5548 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 b|81a8bRVOjju&Zg00000NkvXXu0mjf$ExU6 literal 0 HcmV?d00001 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/Project/result-window.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6aab5bbe6c632b40f926cefb77471c0689b6f2 GIT binary patch literal 50640 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 W; Date: Thu, 4 Dec 2025 14:46:20 +0100 Subject: [PATCH 73/75] Update search-replace.md --- docs/Project/search-replace.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Project/search-replace.md b/docs/Project/search-replace.md index a97ec9b9962695..39ed2c07a896e2 100644 --- a/docs/Project/search-replace.md +++ b/docs/Project/search-replace.md @@ -236,7 +236,7 @@ Replacing operations work as follows: - Elements are never renamed themselves by the **Replace in content** feature, except for form objects. Hence it is possible that certain items in the list may not be affected by the replacing operation. This can occur when only the item name corresponds to the initial search criteria. In this case, the list items do not necessarily all appear in italics and the final replacement count may be less than the number of occurrences found by the initial search. -## Renaming project methods and variables +## Renaming project methods and variables {#renaming-project-methods-and-variables} 4D provides a dedicated renaming function with distribution throughout the entire project for project methods and variables. From 4431828cabb3914d398a7d90a6310edbd3d39d2e Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 4 Dec 2025 16:44:00 +0100 Subject: [PATCH 74/75] fix bug ACI0106075 --- docs/commands/string.md | 2 -- versioned_docs/version-21/commands/string.md | 2 -- 2 files changed, 4 deletions(-) diff --git a/docs/commands/string.md b/docs/commands/string.md index 39dde66bd5e2d7..b8afcaa54c3b78 100644 --- a/docs/commands/string.md +++ b/docs/commands/string.md @@ -105,8 +105,6 @@ If you pass 0 in *base*, the command determines the radix depending on the *expr | String(254;16) | "fe" | hexadecimal string | | String(-16523461; 16)| "-fc20c5" | hexadecimal string (negative) | | String(Log(-1); 10)| "NaN" | Not a number | -| String(1/0; 10) | "NaN" | Not a number | -| String(-1/0; 10) | "NaN" | Not a number | :::note diff --git a/versioned_docs/version-21/commands/string.md b/versioned_docs/version-21/commands/string.md index 39dde66bd5e2d7..b8afcaa54c3b78 100644 --- a/versioned_docs/version-21/commands/string.md +++ b/versioned_docs/version-21/commands/string.md @@ -105,8 +105,6 @@ If you pass 0 in *base*, the command determines the radix depending on the *expr | String(254;16) | "fe" | hexadecimal string | | String(-16523461; 16)| "-fc20c5" | hexadecimal string (negative) | | String(Log(-1); 10)| "NaN" | Not a number | -| String(1/0; 10) | "NaN" | Not a number | -| String(-1/0; 10) | "NaN" | Not a number | :::note From 5585f2c6715429ed68c5741ce1b22ed807aeb934 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 5 Dec 2025 09:49:39 +0100 Subject: [PATCH 75/75] New Crowdin updates (#3021) * New translations dt_number.md (French) * New translations dt_number.md (French) * New translations webformclass.md (French) * New translations webformitemclass.md (French) * New translations write-class-method.md (French) * New translations dt_number.md (French) * New translations license-info.md (French) * New translations openaimessage.md (French) * New translations dt_number.md (French) * New translations license-info.md (French) * New translations webformclass.md (French) * New translations webformitemclass.md (French) * New translations dt_number.md (French) * New translations license-info.md (French) * New translations openaifileresult.md (French) * New translations openaifilesapi.md (French) * New translations dt_number.md (Spanish) * New translations dt_number.md (Spanish) * New translations dt_number.md (Spanish) * New translations dt_number.md (Spanish) * New translations dt_number.md (Spanish) * New translations dt_number.md (Japanese) * New translations dt_number.md (Japanese) * New translations dt_number.md (Japanese) * New translations dt_number.md (Japanese) * New translations dt_number.md (Japanese) * New translations dt_number.md (Portuguese, Brazilian) * New translations dt_number.md (Portuguese, Brazilian) * New translations dt_number.md (Portuguese, Brazilian) * New translations dt_number.md (Portuguese, Brazilian) * New translations dt_number.md (Portuguese, Brazilian) * New translations web-event.md (French) * New translations web-form.md (French) * New translations web-event.md (French) * New translations web-form.md (French) * New translations openaifiledeleted.md (French) * New translations webformitemclass.md (French) --- .../current/Concepts/dt_number.md | 2 +- .../version-19/Concepts/dt_number.md | 2 +- .../version-20-R10/Concepts/dt_number.md | 2 +- .../version-20/Concepts/dt_number.md | 2 +- .../version-21/Concepts/dt_number.md | 2 +- .../current/API/WebFormClass.md | 76 ++++++------- .../current/API/WebFormItemClass.md | 20 ++-- .../current/Concepts/dt_number.md | 2 +- .../aikit/Classes/OpenAIFileDeleted.md | 10 +- .../current/aikit/Classes/OpenAIFileResult.md | 12 +- .../current/aikit/Classes/OpenAIFilesAPI.md | 104 +++++++++--------- .../current/aikit/Classes/OpenAIMessage.md | 32 +++--- .../current/code-editor/write-class-method.md | 2 +- .../current/commands/license-info.md | 2 +- .../current/commands/web-event.md | 52 ++++----- .../current/commands/web-form.md | 14 +-- .../version-19/Concepts/dt_number.md | 2 +- .../version-20-R10/Concepts/dt_number.md | 2 +- .../version-20-R10/commands/license-info.md | 2 +- .../version-20/Concepts/dt_number.md | 2 +- .../version-21/API/WebFormClass.md | 76 ++++++------- .../version-21/API/WebFormItemClass.md | 20 ++-- .../version-21/Concepts/dt_number.md | 2 +- .../version-21/commands/license-info.md | 2 +- .../version-21/commands/web-event.md | 52 ++++----- .../version-21/commands/web-form.md | 14 +-- .../current/Concepts/dt_number.md | 2 +- .../version-19/Concepts/dt_number.md | 2 +- .../version-20-R10/Concepts/dt_number.md | 2 +- .../version-20/Concepts/dt_number.md | 2 +- .../version-21/Concepts/dt_number.md | 2 +- .../current/Concepts/dt_number.md | 2 +- .../version-19/Concepts/dt_number.md | 2 +- .../version-20-R10/Concepts/dt_number.md | 2 +- .../version-20/Concepts/dt_number.md | 2 +- .../version-21/Concepts/dt_number.md | 2 +- 36 files changed, 265 insertions(+), 265 deletions(-) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_number.md index 14c4d9fa5b530b..7f520f49a90370 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/Concepts/dt_number.md @@ -81,7 +81,7 @@ El operador modulo % devuelve valores significativos con números que están en ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparación real diff --git a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md index a42395d3999eb1..55cd922364f13f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md @@ -75,7 +75,7 @@ El operador modulo % devuelve valores significativos con números que están en ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparación real diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md index 38bdee2e314f1f..b29e4c072e0de2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md @@ -81,7 +81,7 @@ El operador modulo % devuelve valores significativos con números que están en ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparación real diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md index a42395d3999eb1..55cd922364f13f 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md @@ -75,7 +75,7 @@ El operador modulo % devuelve valores significativos con números que están en ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparación real diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md index 38bdee2e314f1f..b29e4c072e0de2 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md @@ -81,7 +81,7 @@ El operador modulo % devuelve valores significativos con números que están en ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparación real diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormClass.md index 42234f2c5de742..404e64bc1bcbb8 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command. +La classe `WebForm` contient des fonctions et des propriétés permettant de gérer vos composants de pages Qodly. Les objets `4D.WebForm` sont instanciés avec la commande [`webForm`](../commands/web-form.md).
    Historique @@ -31,9 +31,9 @@ The `WebForm` class contains functions and properties allowing to handle your Qo #### Description -The components of web pages are objects that are available directly as properties of these web pages. +Les composants des pages web sont des objets qui sont disponibles directement en tant que propriétés de ces pages web. -The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. +Les objets retournés sont de la classe [`4D.WebFormItem`](WebFormItemClass.md). Ces objets possèdent des fonctions que vous pouvez utiliser pour gérer vos composants de manière dynamique. #### Exemple @@ -43,14 +43,14 @@ shared singleton Class constructor() var myForm : 4D.WebForm var component : 4D.WebFormItem - myForm:=webForm //returns the web page as an object, each property is a component - component:=myForm.myImage //returns the myImage component of the web page + myForm:=webForm //renvoie la page web en tant qu'objet, chaque propriété est un composant + component:=myForm.myImage //renvoie le composant myImage de la page web ``` :::info -While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. +Bien que `myForm` n'affiche pas les propriétés typiques de l'objet lorsqu'il est examiné dans le débogueur, il se comporte comme s'il s'agissait de l'objet `webForm` réel. Vous pouvez interagir avec les propriétés et les fonctions de l'objet sous-jacent `webForm` à travers `myForm`. Par exemple, vous pouvez manipuler dynamiquement des composants de page ou transmettre des messages à des pages web en utilisant des fonctions spécialisées comme `myForm.setMessage()`. ::: @@ -60,24 +60,24 @@ While `myForm` may not display typical object properties when examined in the de -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------ | -| state | string | -> | Name of state to disable from the web page | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------- | +| state | string | -> | Nom de l'état à désactiver dans la page web | #### Description -The `.disableState()` function disables the rendering of the *state* in the current web page. +La fonction `.disableState()` désactive le rendu de l'état *state* dans la page web courante. Cette fonction ne fait rien si : -- the *state* is currently not enabled in the web page, -- the *state* does not exist for the web page. +- le *state* n'est actuellement pas activé dans la page web, +- le *state* n'existe pas pour la page web. Si vous [activez](#enablestate) ou désactivez plusieurs états dans la même fonction utilisateur, toutes les modifications sont envoyées en même temps au client une fois que la fonction se termine. -For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +Pour plus d'informations sur les états des pages web, veuillez vous référer à la [section States dans la documentation de Qodly](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -85,24 +85,24 @@ For more information on web pages states, please refer to the [States section in -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ---------------------------------------- | -| state | string | -> | Name of state to enable on the web pages | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ----------------------------------------- | +| state | string | -> | Nom de l'état à activer sur les pages web | #### Description -The `.enableState()` function enables the rendering of the *state* in the current web page. +La fonction `.enableState()` active le rendu de l'état *state* dans la page web courante. Cette fonction ne fait rien si : -- the *state* has already been enabled on the web page, -- the *state* does not exist for the web page. +- le *state* a déjà été activé sur la page web, +- le *state* n'existe pas pour la page web. Si vous activez ou [désactivez](#disablestate) plusieurs états dans la même fonction utilisateur, toutes les modifications sont envoyées en même temps au client une fois que la fonction se termine. -For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +Pour plus d'informations sur les états des pages web, veuillez vous référer à la [section States dans la documentation de Qodly](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Exemple @@ -121,17 +121,17 @@ Function authenticationError() -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ---------------------------------------- | -| msg | string | -> | Error message to display in the web page | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | -------------------------------------------- | +| msg | string | -> | Message d'erreur à afficher dans la page web | #### Description -The `.setError()` function sends *msg* as an error message to the web page. +La fonction `.setError()` envoie *msg* comme message d'erreur à la page web. -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". +La fonction renvoie une réponse avec un statut `200 OK` et un objet `__WEBFORM` dans le corps avec une propriété `__NOTIFICATION.message` fixée à *msg* et un `__NOTIFICATION.type` fixé à "error". #### Exemple @@ -146,7 +146,7 @@ myForm.setError("My error message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: +Si la fonctionnalité [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) est activée pour l'événement, le message *msg* s'affiche en *toast* rouge au bas de la page web et disparaît automatiquement après 5 secondes : ![](../assets/en/API/webformClass-pic1.png) @@ -156,17 +156,17 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ---------------------------------------------- | -| msg | string | -> | Information message to display in the web page | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------------- | +| msg | string | -> | Message d'information à afficher dans la page web | #### Description -The `.setMessage()` function sends *msg* as an information message to the web page. +La fonction `.setMessage()` envoie *msg* comme message d'information à la page web. -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". +La fonction renvoie une réponse avec un statut `200 OK` et un objet `__WEBFORM` dans le corps avec une propriété `__NOTIFICATION.message` fixée à *msg* et un `__NOTIFICATION.type` fixé à "message". #### Exemple @@ -181,7 +181,7 @@ myForm.setMessage("My information message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: +Si la fonctionnalité [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) est activée pour l'événement, le message *msg* s'affiche en *toast* vert au bas de la page web et disparaît automatiquement après 5 secondes : ![](../assets/en/API/webformClass-pic2.png) @@ -191,17 +191,17 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------ | -| msg | string | -> | Warning message to display in the web page | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | --------------------------------------------------- | +| msg | string | -> | Message d'avertissement à afficher dans la page web | #### Description -The `.setWarning()` function sends *msg* as a warning message to the web page. +La fonction `.setWarning()` envoie *msg* comme message d'avertissement à la page web. -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". +La fonction renvoie une réponse avec un statut `200 OK` et un objet `__WEBFORM` dans le corps avec une propriété `__NOTIFICATION.message` fixée à *msg* et un `__NOTIFICATION.type` fixé à "warning". #### Exemple @@ -216,7 +216,7 @@ myForm.setWarning("My warning message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: +Si la fonctionnalité [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) est activée pour l'événement, le message *msg* s'affiche en *toast* jaune au bas de la page web et disparaît automatiquement après 5 secondes : ![](../assets/en/API/webformClass-pic3.png) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md index 37bd57c2dadc7b..a35d30e6be8215 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebFormItemClass.md @@ -3,13 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. +La classe `4D.WebFormItem` vous permet de gérer le comportement de vos composants dans les pages web Qodly. Les objets `4D.WebFormItem` sont des propriétés de l'objet [`4D.WebForm`](WebFormClass.md) renvoyé par la commande [`Web Form`](../commands/web-form.md). -When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. +Lorsque vous appelez la commande [`Web Form`](../commands/web-form.md), l'objet proxy `4D.WebForm` retourné contient autant de `4D.WebFormItems` qu'il y a de composants avec [**références serveur**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) dans votre page Qodly. -For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference. +Par exemple, `WebFormObject.myImage` fait référence au composant image avec `myImage` comme référence serveur.
    Historique @@ -62,9 +62,9 @@ La fonction `.hide()` masque le com #### Exemple -To call a function that hides an image when the user clicks a button: +Pour appeler une fonction qui masque une image lorsque l'utilisateur clique sur un bouton : -1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: +1. Créez une fonction [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) à l'intérieur d'une classe singleton partagée nommée `isHidden` qui contient le code suivant : ```4d @@ -73,12 +73,12 @@ exposed Function isHidden() var myComponent : 4D.WebFormItem myComponent:=Web Form.myImage - myComponent.hide() // Hide the component that has "myImage" as server reference + myComponent.hide() // Cache le composant qui a "myImage" comme référence serveur ``` -2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". -3. Select the Button component and add an `onclick` event to it. -4. Attach the `isHidden` function to the event. +2. Dans Qodly Studio : Sélectionnez le composant image dans la page et entrez une référence côté serveur dans le panneau Properties > Server Side, par exemple "myImage". +3. Sélectionnez le composant Button et ajoutez-lui un événement `onclick`. +4. Attachez la fonction `isHidden` à l'événement. ### .removeCSSClass() @@ -110,7 +110,7 @@ La fonction `.removeCSSClass()` makes the component visible.If the component was already visible, the function does nothing. +La fonction `.show()` rend le composant visible. Si le composant était déjà visible, la fonction ne fait rien. ## Voir également diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_number.md b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_number.md index f21ff81f71c6af..d4892d4922001f 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_number.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/Concepts/dt_number.md @@ -81,7 +81,7 @@ L'opérateur modulo % retourne des valeurs significatives avec des nombres appar ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparaison des réels diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md index 19d01361c3a938..628d66b953eefa 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileDeleted.md @@ -5,17 +5,17 @@ title: OpenAIFileDeleted # OpenAIFileDeleted -The `OpenAIFileDeleted` class represents the deletion status of a file in the OpenAI API. +La classe `OpenAIFileDeleted` représente le statut de suppression d'un fichier dans l'API OpenAI. ## Propriétés | Nom de propriété | Type | Description | | ---------------- | ------- | -------------------------------------------------------------------------------------------------------------------- | -| `id` | Text | The ID of the deleted file (e.g., "file-abc123"). | -| `deleted` | Boolean | Whether the file was successfully deleted. `True` if deletion succeeded. | +| `id` | Text | L'identifiant du fichier supprimé (par exemple, "file-abc123"). | +| `deleted` | Boolean | Indique si le fichier a été supprimé avec succès. `True` si la suppression a réussi. | | `object` | Text | Le type d'objet, qui est toujours "file". | -## Example Response +## Exemple de réponse ```json { @@ -25,7 +25,7 @@ The `OpenAIFileDeleted` class represents the deletion status of a file in the Op } ``` -## Used by +## Utilisé par - [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md index 71429a97e450ba..7b2ddaf5519d5b 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFileResult.md @@ -5,7 +5,7 @@ title: OpenAIFileResult # OpenAIFileResult -The `OpenAIFileResult` class contains the result of a single file operation (upload or retrieve). +La classe `OpenAIFileResult` contient le résultat d'une opération de fichier (upload ou retrieve). ## Hérite de @@ -13,20 +13,20 @@ The `OpenAIFileResult` class contains the result of a single file operation (upl ## Propriétés calculées -| Propriété | Type | Description | -| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -| `file` | [OpenAIFile](OpenAIFile.md) | Returns the file object from the API response. Returns `Null` if the response doesn't contain a valid file. | +| Propriété | Type | Description | +| --------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `file` | [OpenAIFile](OpenAIFile.md) | Renvoie l'objet fichier à partir de la réponse de l'API. Renvoie `Null` si la réponse ne contient pas de fichier valide. | ## Exemple d'utilisation ```4d -// Upload a file +// Téléversement d'un fichier var $file:=File("/RESOURCES/training-data.jsonl") var $result:=$client.files.create($file; "user_data") var $uploadedFile:=$result.file -// Retrieve file information +// Récupération des informations du fichier var $retrieveResult:=$client.files.retrieve($uploadedFile.id) ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md index fa8da50898e17a..9867c6fd6556e4 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIFilesAPI.md @@ -5,16 +5,16 @@ title: OpenAIFilesAPI # OpenAIFilesAPI -The `OpenAIFilesAPI` class provides functionalities to manage files using OpenAI's API. Files can be uploaded and used across various endpoints including [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning), [Batch](https://platform.openai.com/docs/api-reference/batch) processing, and Vision. +La classe `OpenAIFilesAPI` fournit des fonctionnalités pour gérer les fichiers en utilisant l'API d'OpenAI. Les fichiers peuvent être téléversés et utilisés à partir de différents points de terminaison, y compris [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning), traitement [Batch](https://platform.openai.com/docs/api-reference/batch) et Vision. -> **Note:** This API is only compatible with OpenAI. Other providers listed in the [compatible providers](../compatible-openai.md) documentation do not support file management operations. +> **Note:** Cette API est uniquement compatible avec OpenAI. Les autres fournisseurs listés dans la page [fournisseurs compatibles](../compatible-openai.md) ne prennent pas en charge les opérations de gestion de fichiers. -API Reference: +Référence API : -## File Size Limits +## Limites de taille des fichiers -- **Individual files:** up to 512 MB per file -- **Organization total:** up to 1 TB (cumulative size of all files uploaded by your [organization](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization)) +- **Fichiers individuels :** jusqu'à 512 Mo par fichier +- **Total de l'organisation :** jusqu'à 1 To (taille cumulée de tous les fichiers téléversés par votre [organization](https://platform.openai.com/docs/guides/production-best-practices/setting-up-your-organization)) ## Fonctions @@ -22,36 +22,36 @@ API Reference: **create**(*file* : 4D.File | 4D.Blob; *purpose* : Text; *parameters* : cs.OpenAIFileParameters) : cs.OpenAIFileResult -Upload a file that can be used across various endpoints. +Téléverser un fichier qui peut être utilisé par différents points de terminaison (*endpoints*). **Endpoint:** `POST https://api.openai.com/v1/files` -| Paramètres | Type | Description | -| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `file` | [4D.File](https://developer.4d.com/docs/API/FileClass) or [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | The File or Blob object (not file name) to be uploaded. | -| `purpose` | Text | **Required.** The intended purpose of the uploaded file. | -| `parameters` | [OpenAIFileParameters](OpenAIFileParameters.md) | Optional parameters including expiration policy. | -| Résultat | [OpenAIFileResult](OpenAIFileResult.md) | The file result | +| Paramètres | Type | Description | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `file` | [4D.File](https://developer.4d.com/docs/API/FileClass) ou [4D.Blob](https://developer.4d.com/docs/API/BlobClass) | L'objet Fichier ou Blob (et non nom du fichier) à téléverser. | +| `purpose` | Text | **Obligatoire.** L'objectif visé du fichier téléversé. | +| `parameters` | [OpenAIFileParameters](OpenAIFileParameters.md) | Paramètres optionnels incluant la politique d'expiration. | +| Résultat | [OpenAIFileResult](OpenAIFileResult.md) | Le résultat du fichier | -**Throws:** An error if `file` is not a 4D.File or 4D.Blob, or if `purpose` is empty. +**Erreur:** Génère une erreur si `file` n'est pas un 4D.File ou un 4D.Blob, ou si `purpose` est vide. -#### Supported Purposes +#### Objectifs pris en charge -- `assistants`: Used in the Assistants API (⚠️ [deprecated by OpenAI](https://platform.openai.com/docs/assistants/whats-new)) -- `batch`: Used in the [Batch API](https://platform.openai.com/docs/api-reference/batch) (expires after 30 days by default) -- `fine-tune`: Used for [fine-tuning](https://platform.openai.com/docs/api-reference/fine-tuning) -- `vision`: Images used for vision fine-tuning -- `user_data`: Flexible file type for any purpose -- `evals`: Used for eval data sets +- `assistants` : Utilisé dans l'API Assistants (⚠️ [déprécié by OpenAI](https://platform.openai.com/docs/assistants/whats-new)) +- `batch` : Utilisé dans l'[API Batch](https://platform.openai.com/docs/api-reference/batch) (expire après 30 jours par défaut) +- `fine-tune` : Utilisé pour le [réglage fin](https://platform.openai.com/docs/api-reference/fine-tuning) +- `vision` : Images utilisées pour le réglage fin de vision +- `user_data` : Type de fichier flexible pour n'importe quel usage +- `evals` : Utilisé pour les ensembles de données d'évaluation -#### File Format Requirements +#### Formats de fichiers requis -- **Fine-tuning API:** Only supports `.jsonl` files with specific required formats -- **Batch API:** Only supports `.jsonl` files up to 200 MB with specific required format -- **Assistants API:** Supports specific file types (see Assistants Tools guide) -- **Chat Completions API:** PDFs are only supported +- **API Fine-tuning API :** Ne prend en charge que les fichiers `.jsonl` avec des formats spécifiques requis +- **API Batch :** Ne prend en charge que les fichiers `.jsonl` jusqu'à 200 Mo avec un format spécifique requis +- **API Assistants :** Prend en charge des types de fichiers spécifiques (voir le guide Assistants Tools) +- **API de complétions de Chat :** Seuls les PDF sont pris en charge -#### Sychronous example +#### Exemple synchrone ```4d var $file:=File("/RESOURCES/training-data.jsonl") @@ -59,7 +59,7 @@ var $file:=File("/RESOURCES/training-data.jsonl") var $params:=cs.AIKit.OpenAIFileParameters.new() $params.expires_after:={} $params.expires_after.anchor:="created_at" -$params.expires_after.seconds:=2592000 // 30 days +$params.expires_after.seconds:=2592000 // 30 jours var $result:=$client.files.create($file; "fine-tune"; $params) @@ -73,7 +73,7 @@ End if #### Exemple asynchrone -Since file uploads can be long operations (especially for large files up to 512 MB), it's recommended to use asynchronous calls to avoid blocking your application. See [Asynchronous Call](../asynchronous-call.md) for more details. +Étant donné que les téléversements de fichiers peuvent être des opérations longues (en particulier pour les fichiers volumineux jusqu'à 512 Mo), il est recommandé d'utiliser des appels asynchrones pour éviter de bloquer votre application. Voir [Appels asynchrones](../asynchronous-call.md) pour plus de détails. ```4d var $file:=File("/RESOURCES/large-training-data.jsonl") @@ -81,11 +81,11 @@ var $file:=File("/RESOURCES/large-training-data.jsonl") var $params:=cs.AIKit.OpenAIFileParameters.new() $params.onTerminate:=Formula(MyFileUploadCallback($1)) -// This call returns immediately without blocking -$client.files.create($file; "fine-tune"; $params) +// Cet appel retourne immédiatement sans blocage +$client.files.create($file; "fine-tune" ; $params) ``` -The callback function receives an [OpenAIFileResult](OpenAIFileResult.md): +La fonction de rappel reçoit un [OpenAIFileResult](OpenAIFileResult.md) : ```4d // MyFileUploadCallback @@ -94,11 +94,11 @@ The callback function receives an [OpenAIFileResult](OpenAIFileResult.md): If ($result.success) var $uploadedFile:=$result.file - ALERT("File uploaded successfully: "+$uploadedFile.filename) - // Store the file ID for later use + ALERT("File uploaded successfully : "+$uploadedFile.filename) + // Stocker l'ID du fichier pour une utilisation ultérieure Form.uploadedFileId:=$uploadedFile.id Else - ALERT("Upload failed: "+Formula(JSON Stringify($result.errors))) + ALERT("Upload failed : "+Formula(JSON Stringify($result.errors))) End if ``` @@ -106,17 +106,17 @@ End if **retrieve**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileResult -Returns information about a specific file. +Retourne des informations sur un fichier spécifique. **Endpoint:** `GET https://api.openai.com/v1/files/{file_id}` | Paramètres | Type | Description | | ------------ | --------------------------------------- | ----------------------------------------------------------------------------- | -| `fileId` | Text | **Required.** The ID of the file to retrieve. | -| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | -| Résultat | [OpenAIFileResult](OpenAIFileResult.md) | The file result | +| `fileId` | Text | **Obligatoire.** L'ID du fichier à récupérer. | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Paramètres optionnels pour la requête. | +| Résultat | [OpenAIFileResult](OpenAIFileResult.md) | Le résultat du fichier | -**Throws:** An error if `fileId` is empty. +**Erreur:** Génère une erreur si `fileId` est vide. #### Exemple @@ -135,14 +135,14 @@ End if **list**(*parameters* : cs.OpenAIFileListParameters) : cs.OpenAIFileListResult -Returns a list of files that belong to the user's organization. +Renvoie une liste de fichiers appartenant à l'organisation de l'utilisateur. **Endpoint:** `GET https://api.openai.com/v1/files` -| Paramètres | Type | Description | -| ------------ | ------------------------------------------------------- | ----------------------------------------------------------------- | -| `parameters` | [OpenAIFileListParameters](OpenAIFileListParameters.md) | Optional parameters for filtering and pagination. | -| Résultat | [OpenAIFileListResult](OpenAIFileListResult.md) | The file list result | +| Paramètres | Type | Description | +| ------------ | ------------------------------------------------------- | ------------------------------------------------------------------------ | +| `parameters` | [OpenAIFileListParameters](OpenAIFileListParameters.md) | Paramètres optionnels pour le filtrage et la pagination. | +| Résultat | [OpenAIFileListResult](OpenAIFileListResult.md) | Liste des fichiers | #### Exemple @@ -168,17 +168,17 @@ End if **delete**(*fileId* : Text; *parameters* : cs.OpenAIParameters) : cs.OpenAIFileDeletedResult -Delete a file. +Supprime un fichier. **Endpoint:** `DELETE https://api.openai.com/v1/files/{file_id}` -| Paramètres | Type | Description | -| ------------ | ----------------------------------------------------- | --------------------------------------------------------------------------- | -| `fileId` | Text | **Required.** The ID of the file to delete. | -| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Optional parameters for the request. | -| Résultat | [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) | The file deletion result | +| Paramètres | Type | Description | +| ------------ | ----------------------------------------------------- | ----------------------------------------------------------------------------- | +| `fileId` | Text | **Obligatoire.** L'ID du fichier à supprimer. | +| `parameters` | [OpenAIParameters](OpenAIParameters.md) | Paramètres optionnels pour la requête. | +| Résultat | [OpenAIFileDeletedResult](OpenAIFileDeletedResult.md) | Le résultat de la suppression du fichier | -**Throws:** An error if `fileId` is empty. +**Erreur:** Génère une erreur si `fileId` est vide. #### Exemple diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md index 1af7df45fbcd98..97361744d394d7 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIMessage.md @@ -40,45 +40,45 @@ Ajoute une URL d'image au contenu du message. **addFileId**(*fileId* : Text) -| Paramètres | Type | Description | -| ---------- | ---- | -------------------------------------------------- | -| *fileId* | Text | The file ID to add to the message. | +| Paramètres | Type | Description | +| ---------- | ---- | ----------------------------------------------------- | +| *fileId* | Text | L'ID du fichier à ajouter au message. | -Adds a file reference to the content of the message. If the content is currently text, it will be converted to a collection format. +Ajoute une référence de fichier au contenu du message. Si le contenu est actuellement du texte, il sera converti en un format de collection. ## Exemple d'utilisation -### Basic Text Message +### Message texte de base ```4d -// Create an instance of OpenAIMessage -var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Hello!"}) +// Créer une instance d'OpenAIMessage +var $message:=cs.AIKit.OpenAIMessage.new({role : "user" ; content : "Hello !"}) ``` -### Adding Images +### Ajout d'images ```4d -var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this image:"}) +var $message:=cs.AIKit.OpenAIMessage.new({role : "user" ; content : "Please analyze this image :"}) -// Add an image URL with details -$message.addImageURL("http://example.com/image.jpg"; "high") +// Ajouter une URL d'image avec des détails +$message.addImageURL("http://example.com/image.jpg" ; "high") ``` -### Adding File +### Ajout de fichier ```4d -// Upload a file with user_data purpose +// Téléverser un fichier avec l'objectif user_data var $file:=File("/RESOURCES/document.pdf") var $uploadResult:=$client.files.create($file; "user_data") If ($uploadResult.success) var $uploadedFile:=$uploadResult.file - // Create message and attach the file using its ID - var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Please analyze this document:"}) + // Créer un message et joindre le fichier en utilisant son ID + var $message:=cs.AIKit.OpenAIMessage.new({role : "user" ; content : "Please analyze this document :"}) $message.addFileId($uploadedFile.id) - // $message.content -> [{type: "text"; text: "Please analyze this document:"}; {type: "file"; file_id: "file-abc123"}] + // $message.content -> [{type : "text" ; text : "Please analyze this document :"} ; {type : "file" ; file_id : "file-abc123"}] End if ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/code-editor/write-class-method.md b/i18n/fr/docusaurus-plugin-content-docs/current/code-editor/write-class-method.md index 63c54f012531bf..df45206ff31dcc 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/code-editor/write-class-method.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/code-editor/write-class-method.md @@ -682,7 +682,7 @@ Cette commande affiche ses résultats dans une nouvelle fenêtre. ## Rename -A global renaming feature can be used with **variables** and **project methods**, allowing you to rename them safely throughout the whole project. To do this, highlight the variable or project method name in the editor and select **Rename...** from the **Method** menu or the context menu. A dialog box is then displayed, allowing you to write the new name. For more information, refer to [Renaming project methods and variables](../Project/search-replace.md#renaming-project-methods-and-variables) section. +Une fonction de renommage global peut être utilisée avec les **variables** et les **méthodes projet**, ce qui vous permet de les renommer en toute sécurité dans l'ensemble du projet. Pour cela, surlignez le nom de la variable ou de la méthode du projet dans l'éditeur et sélectionnez **Renommer...** dans le menu **Méthode** ou dans le menu contextuel. Une boîte de dialogue s'affiche alors, vous permettant de saisir le nouveau nom. Pour plus d'informations, reportez-vous à la section [Renommer les méthodes projet et les variables](../Project/search-replace.md#renaming-project-methods-and-variables). ## Liste des macros diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands/license-info.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands/license-info.md index 8765ced21a1c9f..d57f0133be1575 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands/license-info.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands/license-info.md @@ -22,7 +22,7 @@ Si la commande est exécutée sur une application 4D qui n'utilise pas de licenc :::note -This command reloads the license files from the disk and updates the associated rights if they have been modified. +Cette commande recharge les fichiers de licence à partir du disque et met à jour les droits associés s'ils ont été modifiés. ::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-event.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-event.md index 2c5ef697595328..9baae253729677 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-event.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-event.md @@ -8,48 +8,48 @@ displayed_sidebar: docs -| Paramètres | Type | | Description | -| ---------- | ------ | :-------------------------: | ---------------------------------- | -| Résultat | Object | ← | Information on the triggered event | +| Paramètres | Type | | Description | +| ---------- | ------ | :-------------------------: | -------------------------------------- | +| Résultat | Object | ← | Informations sur l'événement déclenché | ## Description -`Web Event` returns an object with information on a triggered event linked to a web page component. +La commande `Web Event` renvoie un objet contenant des informations sur un événement déclenché lié à un composant de formulaire web Qodly. -The command must be called in the context of a web page handled by the 4D web server. +La commande doit être appelée dans le contexte d'une page web gérée par le serveur web 4D. **Résultat** L'objet retourné contient les propriétés suivantes : -| Propriété | | Type | Description | -| --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | -| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | -| data | | object | Additional information depending on the involved component | -| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | -| | row | number | Data Table component: row number | -| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | +| Propriété | | Type | Description | +| --------- | ----- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Référence serveur](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) du composant qui déclenche l'événement | +| eventType | | string | Type d'événement :
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - déclenché au chargement de la `Page`
  • | +| data | | object | Informations supplémentaires dépendantes du composant concerné | +| | index | number |
  • Composant Tabs : indice de l'onglet (les indices commencent à 0)
  • Composant Data Table : numéro de colonne
  • | +| | row | number | Composant Data Table : numéro de ligne | +| | name | string | Composant Data Table : nom qodlysource de la colonne (par exemple "firstname", "address.city") | #### Exemple -The objective is to display/hide a help text when the user hovers over the component: +L'objectif est d'afficher/masquer un texte d'aide lorsque l'utilisateur survole le composant : ![](../assets/en/commands/web-event1.png) -This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). +Pour ce faire, les événements `onmouseenter` et `onmouseleave` sont attachés à un composant **Text input** qui affiche les informations stockées dans un composant **Text** (en affichant "This is the help text"). ![](../assets/en/commands/web-event2.png) -In this scenario: +Pour ce scénario : -- The Text input component has `orderNumber` as Server side reference. +- Le composant Text input a pour référence serveur `orderNumber`. ![](../assets/en/commands/web-event3.png) -- The Text component has `helpOn_orderNumber` as Server side reference. +- Le composant Text a pour référence serveur `helpOn_orderNumber`. ![](../assets/en/commands/web-event4.png) -- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: +- La fonction [exposée](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) `help()` est attachée aux événements `onmouseenter` et `onmouseleave` et contient le code suivant : ```4d shared singleton Class constructor() @@ -63,18 +63,18 @@ exposed Function help() event:=web Event componentRef:=event.caller - Case of - : (event.eventType="onmouseenter") // event is onmouseenter - myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing - // the text component with reference "helpOn_orderNumber" - : (event.eventType="onmouseleave") // event is onmouseleave - myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + Au cas ou + : (event.eventType="onmouseenter") // l'événement est onmouseenter + myForm["helpOn_"+componentRef].show() // montre l'aide sur "orderNumber" en affichant + // le composant texte avec la référence "helpOn_orderNumber" + : (event.eventType="onmouseleave") // l'événement est onmouseleave + myForm["helpOn_"+componentRef].hide() // masquel'aide sur orderNumber End case ``` -To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: +Pour ouvrir la page web avec l'aide de `orderNumber` masqué, vous pouvez associer cette fonction à l'événement `onload` de la page web : ```4d exposed function hideOnLoad() diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-form.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-form.md index 87fc3b065a1053..4b003a0fb14f55 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-form.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands/web-form.md @@ -8,25 +8,25 @@ displayed_sidebar: docs -| Paramètres | Type | | Description | -| ---------- | -------------------------- | :-------------------------: | --------------------------- | -| Résultat | 4D.WebForm | ← | New `Web Form` proxy object | +| Paramètres | Type | | Description | +| ---------- | -------------------------- | :-------------------------: | ---------------------------- | +| Résultat | 4D.WebForm | ← | Nouvel objet proxy `WebForm` | ## Description -The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. +La commande `Web Form` renvoie un objet proxy `4D.WebForm`, qui permet de travailler avec les propriétés et les fonctions de la page et de les émuler efficacement. :::info -Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. +Gardez à l'esprit qu'un objet `4D.WebForm` est un **objet proxy**, et non une référence directe à l'objet page web lui-même. En conséquence, par exemple, l'objet `4D.WebForm` n'expose pas toutes les propriétés de la page dans le débogueur. ::: -Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. +Chaque propriété de l'objet renvoyé est un objet de la classe [4D.WebFormItem](../API/WebFormItemClass.md). -The command returns `null` if it is called in a request that does not originate from Qodly Studio. +La commande renvoie `null` si elle est appelée dans une requête qui ne provient pas de Qodly Studio. ## Voir également diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md b/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md index b03cfac9fa4c59..f2b473e17d67e4 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md @@ -75,7 +75,7 @@ L'opérateur modulo % retourne des valeurs significatives avec des nombres appar ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparaison des réels diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md index 76f999287378d8..e8de0b63b25b94 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md @@ -81,7 +81,7 @@ L'opérateur modulo % retourne des valeurs significatives avec des nombres appar ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparaison des réels diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md index f85ef8794fd123..5202784c21cfaa 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/commands/license-info.md @@ -22,7 +22,7 @@ Si la commande est exécutée sur une application 4D qui n'utilise pas de licenc :::note -This command reloads the license files from the disk and updates the associated rights if they have been modified. +Cette commande recharge les fichiers de licence à partir du disque et met à jour les droits associés s'ils ont été modifiés. ::: The returned object contains the following properties: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md index b03cfac9fa4c59..f2b473e17d67e4 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md @@ -75,7 +75,7 @@ L'opérateur modulo % retourne des valeurs significatives avec des nombres appar ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparaison des réels diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md index 42234f2c5de742..404e64bc1bcbb8 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormClass.md @@ -3,7 +3,7 @@ id: WebFormClass title: WebForm --- -The `WebForm` class contains functions and properties allowing to handle your Qodly web page components. `4D.WebForm` objects are instantiated with the [`webForm`](../commands/web-form.md) command. +La classe `WebForm` contient des fonctions et des propriétés permettant de gérer vos composants de pages Qodly. Les objets `4D.WebForm` sont instanciés avec la commande [`webForm`](../commands/web-form.md).
    Historique @@ -31,9 +31,9 @@ The `WebForm` class contains functions and properties allowing to handle your Qo #### Description -The components of web pages are objects that are available directly as properties of these web pages. +Les composants des pages web sont des objets qui sont disponibles directement en tant que propriétés de ces pages web. -The returned objects are of the [`4D.WebFormItem`](WebFormItemClass.md) class. These objects have functions that you can use to manage your components dynamically. +Les objets retournés sont de la classe [`4D.WebFormItem`](WebFormItemClass.md). Ces objets possèdent des fonctions que vous pouvez utiliser pour gérer vos composants de manière dynamique. #### Exemple @@ -43,14 +43,14 @@ shared singleton Class constructor() var myForm : 4D.WebForm var component : 4D.WebFormItem - myForm:=webForm //returns the web page as an object, each property is a component - component:=myForm.myImage //returns the myImage component of the web page + myForm:=webForm //renvoie la page web en tant qu'objet, chaque propriété est un composant + component:=myForm.myImage //renvoie le composant myImage de la page web ``` :::info -While `myForm` may not display typical object properties when examined in the debugger, it behaves as if it were the actual `webForm` object. You can interact with the underlying `webForm` object's properties and functions through `myForm`. For example, you can dynamically manipulate page components or transmit messages to web pages using specialized functions like `myForm.setMessage()`. +Bien que `myForm` n'affiche pas les propriétés typiques de l'objet lorsqu'il est examiné dans le débogueur, il se comporte comme s'il s'agissait de l'objet `webForm` réel. Vous pouvez interagir avec les propriétés et les fonctions de l'objet sous-jacent `webForm` à travers `myForm`. Par exemple, vous pouvez manipuler dynamiquement des composants de page ou transmettre des messages à des pages web en utilisant des fonctions spécialisées comme `myForm.setMessage()`. ::: @@ -60,24 +60,24 @@ While `myForm` may not display typical object properties when examined in the de -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------ | -| state | string | -> | Name of state to disable from the web page | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------- | +| state | string | -> | Nom de l'état à désactiver dans la page web | #### Description -The `.disableState()` function disables the rendering of the *state* in the current web page. +La fonction `.disableState()` désactive le rendu de l'état *state* dans la page web courante. Cette fonction ne fait rien si : -- the *state* is currently not enabled in the web page, -- the *state* does not exist for the web page. +- le *state* n'est actuellement pas activé dans la page web, +- le *state* n'existe pas pour la page web. Si vous [activez](#enablestate) ou désactivez plusieurs états dans la même fonction utilisateur, toutes les modifications sont envoyées en même temps au client une fois que la fonction se termine. -For more information on web pages states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +Pour plus d'informations sur les états des pages web, veuillez vous référer à la [section States dans la documentation de Qodly](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). ### .enableState() @@ -85,24 +85,24 @@ For more information on web pages states, please refer to the [States section in -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ---------------------------------------- | -| state | string | -> | Name of state to enable on the web pages | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ----------------------------------------- | +| state | string | -> | Nom de l'état à activer sur les pages web | #### Description -The `.enableState()` function enables the rendering of the *state* in the current web page. +La fonction `.enableState()` active le rendu de l'état *state* dans la page web courante. Cette fonction ne fait rien si : -- the *state* has already been enabled on the web page, -- the *state* does not exist for the web page. +- le *state* a déjà été activé sur la page web, +- le *state* n'existe pas pour la page web. Si vous activez ou [désactivez](#disablestate) plusieurs états dans la même fonction utilisateur, toutes les modifications sont envoyées en même temps au client une fois que la fonction se termine. -For more information on web page states, please refer to the [States section in the Qodly documentation](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). +Pour plus d'informations sur les états des pages web, veuillez vous référer à la [section States dans la documentation de Qodly](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/states/stateOverview). #### Exemple @@ -121,17 +121,17 @@ Function authenticationError() -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ---------------------------------------- | -| msg | string | -> | Error message to display in the web page | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | -------------------------------------------- | +| msg | string | -> | Message d'erreur à afficher dans la page web | #### Description -The `.setError()` function sends *msg* as an error message to the web page. +La fonction `.setError()` envoie *msg* comme message d'erreur à la page web. -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "error". +La fonction renvoie une réponse avec un statut `200 OK` et un objet `__WEBFORM` dans le corps avec une propriété `__NOTIFICATION.message` fixée à *msg* et un `__NOTIFICATION.type` fixé à "error". #### Exemple @@ -146,7 +146,7 @@ myForm.setError("My error message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a red *toast* at the bottom of the Page and disappears automatically after 5 seconds: +Si la fonctionnalité [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) est activée pour l'événement, le message *msg* s'affiche en *toast* rouge au bas de la page web et disparaît automatiquement après 5 secondes : ![](../assets/en/API/webformClass-pic1.png) @@ -156,17 +156,17 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ---------------------------------------------- | -| msg | string | -> | Information message to display in the web page | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | ------------------------------------------------- | +| msg | string | -> | Message d'information à afficher dans la page web | #### Description -The `.setMessage()` function sends *msg* as an information message to the web page. +La fonction `.setMessage()` envoie *msg* comme message d'information à la page web. -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "message". +La fonction renvoie une réponse avec un statut `200 OK` et un objet `__WEBFORM` dans le corps avec une propriété `__NOTIFICATION.message` fixée à *msg* et un `__NOTIFICATION.type` fixé à "message". #### Exemple @@ -181,7 +181,7 @@ myForm.setMessage("My information message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a green *toast* at the bottom of the Page and disappears automatically after 5 seconds: +Si la fonctionnalité [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) est activée pour l'événement, le message *msg* s'affiche en *toast* vert au bas de la page web et disparaît automatiquement après 5 secondes : ![](../assets/en/API/webformClass-pic2.png) @@ -191,17 +191,17 @@ If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoad -| Paramètres | Type | | Description | -| ---------- | ------ | :-: | ------------------------------------------ | -| msg | string | -> | Warning message to display in the web page | +| Paramètres | Type | | Description | +| ---------- | ------ | :-: | --------------------------------------------------- | +| msg | string | -> | Message d'avertissement à afficher dans la page web | #### Description -The `.setWarning()` function sends *msg* as a warning message to the web page. +La fonction `.setWarning()` envoie *msg* comme message d'avertissement à la page web. -The function returns a response with a `200 OK` status and a `__WEBFORM` object in the body with a `__NOTIFICATION.message` property set to *msg* and a `__NOTIFICATION.type` set to "warning". +La fonction renvoie une réponse avec un statut `200 OK` et un objet `__WEBFORM` dans le corps avec une propriété `__NOTIFICATION.message` fixée à *msg* et un `__NOTIFICATION.type` fixé à "warning". #### Exemple @@ -216,7 +216,7 @@ myForm.setWarning("My warning message") ``` -If the [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) feature is enabled for the event, the *message* is automatically displayed as a yellow *toast* at the bottom of the web page and disappears automatically after 5 seconds: +Si la fonctionnalité [**Provide feedback**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/events/bindingActionToEvents#providing-feedback) est activée pour l'événement, le message *msg* s'affiche en *toast* jaune au bas de la page web et disparaît automatiquement après 5 secondes : ![](../assets/en/API/webformClass-pic3.png) diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md index 37bd57c2dadc7b..a35d30e6be8215 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/API/WebFormItemClass.md @@ -3,13 +3,13 @@ id: WebFormItemClass title: WebFormItem --- -The `4D.WebFormItem` class allows you to handle the behavior of your Qodly webform components. +La classe `4D.WebFormItem` vous permet de gérer le comportement de vos composants dans les pages web Qodly. Les objets `4D.WebFormItem` sont des propriétés de l'objet [`4D.WebForm`](WebFormClass.md) renvoyé par la commande [`Web Form`](../commands/web-form.md). -When you call the [`Web Form`](../commands/web-form.md) command, the returned `4D.WebForm` proxy object holds as many `4D.WebFormItems` as there are components with [**server-side references**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) in your webform. +Lorsque vous appelez la commande [`Web Form`](../commands/web-form.md), l'objet proxy `4D.WebForm` retourné contient autant de `4D.WebFormItems` qu'il y a de composants avec [**références serveur**](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#server-side) dans votre page Qodly. -For example, `WebFormObject.myImage` refers to the image component with `myImage` as server reference. +Par exemple, `WebFormObject.myImage` fait référence au composant image avec `myImage` comme référence serveur.
    Historique @@ -62,9 +62,9 @@ La fonction `.hide()` masque le com #### Exemple -To call a function that hides an image when the user clicks a button: +Pour appeler une fonction qui masque une image lorsque l'utilisateur clique sur un bouton : -1. Create an [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function inside a shared singleton class named `isHidden` that contains the following code: +1. Créez une fonction [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) à l'intérieur d'une classe singleton partagée nommée `isHidden` qui contient le code suivant : ```4d @@ -73,12 +73,12 @@ exposed Function isHidden() var myComponent : 4D.WebFormItem myComponent:=Web Form.myImage - myComponent.hide() // Hide the component that has "myImage" as server reference + myComponent.hide() // Cache le composant qui a "myImage" comme référence serveur ``` -2. In Qodly Studio: Select the image component on the canvas, and enter a server-side reference in the Properties Panel > Server Side, for example "myImage". -3. Select the Button component and add an `onclick` event to it. -4. Attach the `isHidden` function to the event. +2. Dans Qodly Studio : Sélectionnez le composant image dans la page et entrez une référence côté serveur dans le panneau Properties > Server Side, par exemple "myImage". +3. Sélectionnez le composant Button et ajoutez-lui un événement `onclick`. +4. Attachez la fonction `isHidden` à l'événement. ### .removeCSSClass() @@ -110,7 +110,7 @@ La fonction `.removeCSSClass()` makes the component visible.If the component was already visible, the function does nothing. +La fonction `.show()` rend le composant visible. Si le composant était déjà visible, la fonction ne fait rien. ## Voir également diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md index 76f999287378d8..e8de0b63b25b94 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md @@ -81,7 +81,7 @@ L'opérateur modulo % retourne des valeurs significatives avec des nombres appar ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparaison des réels diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/license-info.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/license-info.md index f85ef8794fd123..5202784c21cfaa 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/license-info.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/license-info.md @@ -22,7 +22,7 @@ Si la commande est exécutée sur une application 4D qui n'utilise pas de licenc :::note -This command reloads the license files from the disk and updates the associated rights if they have been modified. +Cette commande recharge les fichiers de licence à partir du disque et met à jour les droits associés s'ils ont été modifiés. ::: The returned object contains the following properties: diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-event.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-event.md index 2c5ef697595328..9baae253729677 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-event.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-event.md @@ -8,48 +8,48 @@ displayed_sidebar: docs -| Paramètres | Type | | Description | -| ---------- | ------ | :-------------------------: | ---------------------------------- | -| Résultat | Object | ← | Information on the triggered event | +| Paramètres | Type | | Description | +| ---------- | ------ | :-------------------------: | -------------------------------------- | +| Résultat | Object | ← | Informations sur l'événement déclenché | ## Description -`Web Event` returns an object with information on a triggered event linked to a web page component. +La commande `Web Event` renvoie un objet contenant des informations sur un événement déclenché lié à un composant de formulaire web Qodly. -The command must be called in the context of a web page handled by the 4D web server. +La commande doit être appelée dans le contexte d'une page web gérée par le serveur web 4D. **Résultat** L'objet retourné contient les propriétés suivantes : -| Propriété | | Type | Description | -| --------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| caller | | string | [Server-side reference](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) of the component triggering the event | -| eventType | | string | Type of event:
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - triggered when the `Page` loads
  • | -| data | | object | Additional information depending on the involved component | -| | index | number |
  • Tabs component: index of the tab (indexing starts at 0)
  • Data Table component: column number
  • | -| | row | number | Data Table component: row number | -| | name | string | Data Table component: qodlysource name of the column (e.g. "firstname", "address.city") | +| Propriété | | Type | Description | +| --------- | ----- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| caller | | string | [Référence serveur](https://developer.4d.com/qodly/4DQodlyPro/pageLoaders/pageLoaderOverview#data-access-category) du composant qui déclenche l'événement | +| eventType | | string | Type d'événement :
  • onblur
  • onfocus
  • onclick
  • onauxclick
  • onmouseenter
  • onmouseleave
  • onkeyup
  • onkeydown
  • onchange
  • unload
  • onload - déclenché au chargement de la `Page`
  • | +| data | | object | Informations supplémentaires dépendantes du composant concerné | +| | index | number |
  • Composant Tabs : indice de l'onglet (les indices commencent à 0)
  • Composant Data Table : numéro de colonne
  • | +| | row | number | Composant Data Table : numéro de ligne | +| | name | string | Composant Data Table : nom qodlysource de la colonne (par exemple "firstname", "address.city") | #### Exemple -The objective is to display/hide a help text when the user hovers over the component: +L'objectif est d'afficher/masquer un texte d'aide lorsque l'utilisateur survole le composant : ![](../assets/en/commands/web-event1.png) -This is done by attaching `onmouseenter` and `onmouseleave` events to a **Text input** component that displays the information stored in a **Text** component (displaying "This is the help text"). +Pour ce faire, les événements `onmouseenter` et `onmouseleave` sont attachés à un composant **Text input** qui affiche les informations stockées dans un composant **Text** (en affichant "This is the help text"). ![](../assets/en/commands/web-event2.png) -In this scenario: +Pour ce scénario : -- The Text input component has `orderNumber` as Server side reference. +- Le composant Text input a pour référence serveur `orderNumber`. ![](../assets/en/commands/web-event3.png) -- The Text component has `helpOn_orderNumber` as Server side reference. +- Le composant Text a pour référence serveur `helpOn_orderNumber`. ![](../assets/en/commands/web-event4.png) -- The [exposed](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) function `help()` is attached to both the `onmouseenter` and `onmouseleave` events and contains the following code: +- La fonction [exposée](../ORDA/ordaClasses.md#exposed-vs-non-exposed-functions) `help()` est attachée aux événements `onmouseenter` et `onmouseleave` et contient le code suivant : ```4d shared singleton Class constructor() @@ -63,18 +63,18 @@ exposed Function help() event:=web Event componentRef:=event.caller - Case of - : (event.eventType="onmouseenter") // event is onmouseenter - myForm["helpOn_"+componentRef].show() // show the help on "orderNumber" by showing - // the text component with reference "helpOn_orderNumber" - : (event.eventType="onmouseleave") // event is onmouseleave - myForm["helpOn_"+componentRef].hide() // hide the help on orderNumber + Au cas ou + : (event.eventType="onmouseenter") // l'événement est onmouseenter + myForm["helpOn_"+componentRef].show() // montre l'aide sur "orderNumber" en affichant + // le composant texte avec la référence "helpOn_orderNumber" + : (event.eventType="onmouseleave") // l'événement est onmouseleave + myForm["helpOn_"+componentRef].hide() // masquel'aide sur orderNumber End case ``` -To open the web page with the help on `orderNumber` hidden, you can associate this function to the `onload` event of the web page: +Pour ouvrir la page web avec l'aide de `orderNumber` masqué, vous pouvez associer cette fonction à l'événement `onload` de la page web : ```4d exposed function hideOnLoad() diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-form.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-form.md index 87fc3b065a1053..4b003a0fb14f55 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-form.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands/web-form.md @@ -8,25 +8,25 @@ displayed_sidebar: docs -| Paramètres | Type | | Description | -| ---------- | -------------------------- | :-------------------------: | --------------------------- | -| Résultat | 4D.WebForm | ← | New `Web Form` proxy object | +| Paramètres | Type | | Description | +| ---------- | -------------------------- | :-------------------------: | ---------------------------- | +| Résultat | 4D.WebForm | ← | Nouvel objet proxy `WebForm` | ## Description -The `Web Form` command returns a `4D.WebForm` proxy object, providing a means to work with and effectively emulates the Page's properties and functions. +La commande `Web Form` renvoie un objet proxy `4D.WebForm`, qui permet de travailler avec les propriétés et les fonctions de la page et de les émuler efficacement. :::info -Keep in mind that a `4D.WebForm` object is a **proxy object**, and not a direct reference to the web form object itself. As a consequence for example, the `4D.WebForm` object does not expose all Page properties in the Debugger. +Gardez à l'esprit qu'un objet `4D.WebForm` est un **objet proxy**, et non une référence directe à l'objet page web lui-même. En conséquence, par exemple, l'objet `4D.WebForm` n'expose pas toutes les propriétés de la page dans le débogueur. ::: -Each property of the returned object is an object of the [4D.WebFormItem](../API/WebFormItemClass.md) class. +Chaque propriété de l'objet renvoyé est un objet de la classe [4D.WebFormItem](../API/WebFormItemClass.md). -The command returns `null` if it is called in a request that does not originate from Qodly Studio. +La commande renvoie `null` si elle est appelée dans une requête qui ne provient pas de Qodly Studio. ## Voir également diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_number.md b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_number.md index 9bc4bc4c4b1fd7..b084846582dd1d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_number.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/Concepts/dt_number.md @@ -81,7 +81,7 @@ title: 数値(実数、整数) ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### 実数の比較 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md b/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md index cb0850cb3b1ffb..92393a3eaddeaf 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md @@ -75,7 +75,7 @@ title: 数値 (実数、倍長整数、整数) ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### 実数の比較 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md index bf9e1fc4602d32..74bfdc0677c899 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md @@ -81,7 +81,7 @@ title: 数値(実数、整数) ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### 実数の比較 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md index cb0850cb3b1ffb..92393a3eaddeaf 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md @@ -75,7 +75,7 @@ title: 数値 (実数、倍長整数、整数) ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### 実数の比較 diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md index bf9e1fc4602d32..74bfdc0677c899 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md @@ -81,7 +81,7 @@ title: 数値(実数、整数) ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### 実数の比較 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_number.md b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_number.md index 183009835aff38..f577186fa9843a 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_number.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/Concepts/dt_number.md @@ -81,7 +81,7 @@ O operador do módulo % devolve valores significativos com números que se encon ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparação real diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md b/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md index d7e2d664f4fe08..6c83823c66aee8 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-19/Concepts/dt_number.md @@ -75,7 +75,7 @@ O operador do módulo % devolve valores significativos com números que se encon ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparação real diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md index c223689b695108..5b74e9eab803dd 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Concepts/dt_number.md @@ -81,7 +81,7 @@ O operador do módulo % devolve valores significativos com números que se encon ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparação real diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md index d7e2d664f4fe08..6c83823c66aee8 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-20/Concepts/dt_number.md @@ -75,7 +75,7 @@ O operador do módulo % devolve valores significativos com números que se encon ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparação real diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md index c223689b695108..5b74e9eab803dd 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/Concepts/dt_number.md @@ -81,7 +81,7 @@ O operador do módulo % devolve valores significativos com números que se encon ### Integer division -The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is the equivalent to `Int(a/b)`. It returns significant values with integer numbers only. +The integer division operator divides one number by another and returns the whole number part of the result, discarding any remainder. `a\b` is equivalent to `Int(a/b)`. This operator returns significant values with integer numbers only. ### Comparação real